2009-10-27 187 views
5

我正在尋找可能被用來操縱音頻文件庫。基本上就是我想要做的是:C++聲音處理

  1. 加載的MP3/WAV文件

  2. 獲取文件

  3. 覆蓋另一個MP3/WAV文件ontop的它

    的15秒剪輯
  4. 呈現爲一個新的MP3/WAV文件

回答

0

您可以使用任何常見的MP3編解碼器API來解碼流,使用它並再次保存。例如,你可以使用libLAME這個部分。

至於混合,你既可以自己做的(例如,天真,由兩個增加兩個樣品和鴻溝 - 這可能不是聽起來好得),或者爲它找到一個合適的庫。

您可能也有興趣在一個相關的堆棧溢出問題在best c audio library linux

1

圖書館libsox從SOX(而不是http://libsox.sourceforge.net/這是完全不同的東西),似乎有一個簡單的API,它可以使用。該文檔給出了下面的示例用於立體聲到單聲道混合:

爲整數可以在處理 音頻時 造成問題代表樣本。例如,如果到 效果縮混左和右聲道成 一個單聲道信道分別使用 線可能發生

*obuf++ = (*ibuf++ + *ibuf++)/2; 

失真由於 中間除了可以溢出32 位。該生產線

*obuf++ = *ibuf++/2 + *ibuf++/2; 

將得到全面的溢出問題 (至少 顯著位的代價)。

3

由於專利原因,它不支持MP3,但libsndfile是一個非常不錯的開源(LGPL)庫,用於以各種其他音頻格式(包括WAV)加載和保存音頻。

至於覆蓋部分,這很簡單,一旦你得到加載到內存中的樣本......你剛纔總結每個樣品在文件中的與其對應的樣本文件B(以及可能的規模所產生的採樣值向下如果你擔心剪輯的話,通過乘以一個常數來實現)。

+0

+1爲libsndfile。 – 2009-10-27 23:15:11

0

一個很好的C++音頻/合成器庫STK。它負載很多東西,並且是BSD/MIT類型的許可證,也就是說你可以用它來開發商業產品。 Wav支持,但不支持MP3。對於MP3,您可以使用irrklang,例如,這是免費的非商業用途(也是由underbit,由許多人使用的MAD)。