2009-08-10 57 views

回答

9

下面是FM(調頻)一個完整的圖書館/工具包合成:

link1 link2

如果你有空閒時間...從頭開始創建簡單的聲音合成實際上是一個有趣的嘗試。如果您創建256個16位樣本的小緩衝區,代表正弦。鋸齒,塊或脈衝,你可以將它們複製到一個不斷循環的現場audiobuffer(例如一個小緩衝區(比如16kb))。通過保持領先位置,並不斷用新值填充緩衝區,您可以創建聲音輸出。 您可以使用小緩衝區以有趣的方式組合這些緩衝區(最簡單的就是將它們加在一起(加法合成))。

音調的頻率可以通過在較小的緩衝區中使用更大或更小的採樣步驟來操縱。幅度可以通過在將樣本放入輸出緩衝區之前縮放樣本來操縱。

很好玩的嘗試這個!

如果你這一步釘,你可以添加像過濾器的更多複雜的效果(低通,高通等)和效果(混響,回聲等)

[R

-1

你看CSound?這是一個令人難以置信的靈活的音頻生成平臺,可以處理從簡單的波形生成到FM合成以及各種濾波器的各種應用。它還提供了MIDI支持,您可以通過編寫自定義操作碼來擴展它。還有一個full C API和幾個C++ API。

2

在C/obj-C中編寫音頻合成算法在我看來是相當困難的。我建議您使用PureData來編寫信號處理算法,然後使用ZenGardenlibpd在您的應用中嵌入和解釋pd補丁。

4

你看過綜合工具包(STK)嗎?它採用C++語言(我不認爲ObjC是用於音頻合成的正確語言,實際上音頻單元,Apple自己的做音頻內容的方式,包括生成器/過濾器/效果......都是C++)。

STK將在Mac OS X上運行,並且iOS沒有問題(CoreAudio支持),但也可以在Linux和Windows(Direct sound和ASIO)上使用RtAudio運行。它做得非常好,很輕便,這些人花了很多時間考慮它,它肯定會給你一個很好的開始。它可以處理不同音頻文件格式+ MIDI的負載(希望OSC很快......)。

還有Create和CLAM這是巨大的,這些包括GUI組件和許多其他你可能會或可能不想要的東西。如果你只對做合成聲音感興趣,我真的推薦STK。

+0

有沒有一種方法可以創建一個具有tick()的工具,該工具可以處理原始的wav數據/樣本? – paulm 2015-10-06 13:00:48

+1

@paulm我認爲這是一個完整的SO問題,STK有一個wav文件閱讀器https://ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html – jbat100 2015-10-06 13:05:00

+0

謝謝,它看起來可能只是一個填充來自原始音頻數據的STK幀:) – paulm 2015-10-06 13:25:48

4

PortAudio也是一個很棒的C API,我們在上一學期在音頻編程課程中使用。它提供了一個音頻回調...你還需要什麼!?

我還沒有嘗試將它與Objective-C中的任何東西結合起來,但是當我這樣做時會報告回來。

1

另一C++庫是nsound:

http://nsound.sourceforge.net

人們可以使用發電機類或使用所提供的正弦類生成任何種類的調製信號的。每個時間步可以有它自己的瞬時頻率和相位偏移。

您也可以嘗試使用Python模塊快速爲您的算法建立原型,然後用C++實現。它可以從Python甚至從C++生成漂亮的matplotlib圖。