2011-06-24 19 views
1

我想編寫一個從麥克風捕獲音頻流的程序,同時將此流與播放的音頻文件混合。我應該使用線程編程來混合2音頻流嗎?

我很喜歡圖書館,API等..但是我關心的是實施,我應該使用線程編程嗎?我不知道如何使用線程。

操作系統是windows,語言是C++或python。

感謝

+1

使用插孔;或者使用arec + sox – sehe

+0

考慮使用OpenAL或SDL。兩者都應該能夠做你想做的。他們都使用線程,但你不必在你的圖層。 –

回答

1

我想你會需要某種線程的,爲了使拍攝和播放流暢運行並排側。

請注意,Python中的多線程受限於GIL。在C++中,你可以使用類似Boost.Thread的東西。

一般來說,獲得多線程的權利很難,你應該花點時間去熟悉它。你最好的選擇可能是尋找一本好書。

0

py2.6帶有處理基於線程的,所以你不必待辦事項只是綠色線程

0

您可以使用SDL mixer。它啓動一個線程,所以你不必這樣做。 有很好的教程和參考頁面。

0

你可以看看使用portmixer的audacity source AudioIO.cpp(也值得一看)。

您可以在portmixer中查看如何在Windows中啓動音頻io流。在線上也有很多很好的教程,如this one

儘管windows wave API爲您啓動音頻線程,但最佳做法是讓另一個線程讀取/解析/解碼您要混合的音頻文件,並填充音頻線程回調可訪問的緩衝區。 Portaudio/SDL/Open AL只是Windows聲音主機(MME/Direct Sound)之上的一層,所以如果使用其中的一個,它仍然是真實的。

但是,如果你感覺真的很懶,或者只想快速驗證一下概念,就可以在主線程中從音頻文件中填充緩衝區。

關於麥克風輸入,當您指定流的詳細信息時,您可以說您需要哪種設備輸入,並將這些輸入作爲ints/float的數組提供給您,您可以將其直接發送到輸出數組。在你的情況下,你想混合(添加)音頻文件。