2009-11-29 160 views
12

我一直對音頻轉換軟件感到好奇,但是從初學者的角度來看,我從來沒有看到過如何編寫一個簡單的程序,例如將mp3文件轉換爲wav的簡單程序。我不是在問任何涉及的複雜算法,只是一個使用簡單庫的小例子。因此搜索,我想出了幾個名字,包括:在C/C++中使用音頻的絕對初學者指南?

  • 拉梅
  • 合成工具包
  • OpenAL的
  • DirectSound的

但我無法找到一個簡單的例子任何這些庫。通常我不介意在代碼中涉水,但在這裏我完全沒有關於這個主題的知識,所以我總是覺得我在黑暗中拍攝。

這裏的任何人都有一個簡單的示例/教程轉換聲音文件使用任何這些庫?我的問題是針對C/C++,因爲這些是我目前正在學習的兩種語言,所以我想繼續關注它們。

編輯:我忘了提及的一件事:我在* NIX系統上。

+0

這是一個非常困難的問題,因爲你通常不抽象地處理音頻,你想要播放它 - 這將取決於操作系統API。必須編寫API來處理廚房水槽。 – 2009-11-29 04:44:43

回答

3

謝謝大家的回覆!我把它們拼湊在一起,成功地製作了一個將AIFF/WAV/etc文件轉換爲mp3文件的小工具。人們似乎在這個問題上一定的興趣,所以在這裏我做什麼,一步一步:

步驟1: 下載並安裝libsndfile庫由詹姆斯·莫里斯的建議。這個庫很容易使用 - 它唯一的缺點是它不能用於mp3文件。

第2步: 查看libsndfile附帶的'examples'文件夾並查找generate.c。這給出了一個很好的工作示例,可以將任何非mp3文件轉換爲各種文件格式。它還讓我們看到了libsndfile背後的力量。

第3步: 從generate.c借用代碼,我創建了一個只是將音頻文件轉換爲.wav文件的c文件。這裏是我的代碼:http://pastie.org/719546

第4步: 下載並安裝LAME encoder。這將安裝libmp3lame庫和lame命令行實用程序。

第5步: 現在你可以仔細閱讀LAME的API或者只是叉& EXEC一個過程瘸子你的WAV文件轉換爲MP3文件。

第6步:帶出香檳和魚子醬!

如果有更好的方法(我確定有這樣做),請讓我知道。我個人從來沒有見過這樣的循序漸進的路線圖,所以我想我會把它放在那裏。

0

檢查libmad http://mad.sourceforge.net「M」釘「A」音頻「D」ecoder庫「,應該提供一個很好的例子。 對於輕鬆跨平臺的音頻處理,請檢查SDL http://www.libsdl.org/。 希望有所幫助。

+0

我得到了這一個工作,但例子創建.PCM文件,我不知道如何發揮。在superuser.com的相關問題在這裏:http://superuser.com/questions/76665/playing-a-pcm-file-on-a-unix-system – 2009-11-29 18:44:21

+0

更新:我可以通過轉到項目導入Audacity中的PCM文件>導入原始數據。 – 2009-11-29 21:55:22

1

如果您對DSP和計算機感興趣,請查看綜合工具包。好可愛。它專爲學習而設計。他們在網站上的示例和教程非常簡單明瞭。請記住,編寫它的人寫了它,以便他們可以創建真實樂器的聲學模型。因此,他們已經包含了一些簡單古怪但樂趣的樂器。它會給你一個處理PCM聲音的核心理解。而你可能會在你的時候一起闖入一些有趣的小噪音製造者。

https://ccrma.stanford.edu/software/stk/

2

對於各種格式之間的轉換(除MP3)檢查libsndfile http://mega-nerd.com/libsndfile/

Libsndfile是被設計爲 允許的許多 不同採樣聲音的文件格式 讀取和寫入的文庫(例如如MS Windows WAV和Apple/SGI AIFF格式)通過一個 標準庫接口。

在讀取和寫入操作, 格式被無縫應用程序 已請求或提供的格式和 文件的數據格式之間轉換 。該 應用程序員可以保持 一無所知,如 文件字節序和數據格式問題

這也是簡單的按照標準C庫函數名稱的風格來使用,與API:

http://mega-nerd.com/libsndfile/api.html

並且示例包含在源代碼發佈中。

對於實際的音頻輸出,需要另一個庫,如已經提到的SDL可能是一個很好的開始。雖然SDL也可以讀取/寫入音頻文件,但libsndfile要優越得多。