Re: [問題] 新手想詢問關於處理聲音(音樂)的工具書
看板C_and_CPP (C/C++)作者StubbornLin (Victor)時間16年前 (2009/02/05 15:44)推噓0(0推 0噓 0→)留言0則, 0人參與討論串3/3 (看更多)
※ 引述《sp012336 (^^)》之銘言:
: 因為那太過於進階(Maybe未來會用到)
: 而我只需要能夠處理
: 將一首mp3/wav/midi檔格式的音樂透過程式讀取進陣列中
: 以做後續的處理
: 但在市面上看到的都找不到相關的工具書
: 所以想在此詢問大大是否有哪間書商或是作者有出過類似的工具書
: 懇請大大們幫忙
: 小弟我對您感激不盡
我最近剛好在寫相關的程式 不過我還沒做什麼進階的處理
這方面的東西資料相對比較難找 例如我想做軟體混音
網路上找得到的混音 都是直接輸出到音效卡的 沒有能讓你取得混合後音訊的
所以我找了半天沒找到現成的可以用 就自己寫一個軟體混音的引擎
像讀取音樂等等,因為實在太耗時間 格式太多種 想每種都自己寫
會先發瘋 於是我決定使用現成的函式庫
最初我找到GStreamer,它是Open Source的類似DirectShow的串流處理程式庫
可以跨平臺,可是試了一陣子 發現編譯等等麻煩問題會讓我很頭大
所以想說反正我的程式只在Windows下跑 跨平台沒有必要
就改用DirectShow 所以它能播的音樂我都能抓
除此之外還有很多東西要寫 讓我最頭大的是各種格式之間的轉換
DirectShow的格式都是這樣
121212121212.... 左聲道右聲道 也有單一聲道的可能
每聲道樣本的長度好像也有可能會有8bits和16bits兩種可能
而在混音時為了減少誤差用的是float
我花了不少時間在想要怎樣解決
最後我用樣版 寫了能夠自動轉換的iterator
想要存取某段audio使用float的話只要這樣寫
ConvertedAudio<float> audio(data);
就可以使用float存取 單聲道也會被自動轉換成雙聲道
其實除此之外我還發現另一個頭痛的問題
就是取樣的頻率 44100是最常見的瀕率
可是以Mp3而言 有44100和48000兩種可能 我就有遇過48000的mp3
播起來速度會變很慢 因為我是用44100的速度來處理 = ="
這部份我還沒去處理它 但其實不難 在ConvertedAudio裡多加針對這部份的處理就可以
總而言之 音訊不好處理 很多格式令人覺得很煩= = 要先想辦法統一
而效率又是另一個要處理的問題 我的應用需要即時性
所以效率很重要
--
哇咧咧 創意投票系統 http://walele.com
易記學 程式設計教學 http://ez2learn.com/
易記學 程式設計討論區 http://forum.ez2learn.com
VICTOR's 個人Blog http://blog.ez2learn.com/
財報分析王 http://victorlin.serveftp.org/stock/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.113.156.83
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章