2011-03-02 171 views
3

使用我想編寫播放音樂節目(音頻或MIDI,甚至純音會確定)音樂庫與線程

但我想用線程使用它,一個線程播放聲音時其他線程播放其他聲音。

  • 線程1 *可發揮不同強度和frecuency 純音(以形成更復雜的包絡,從而在聲音的「音色」))
  • 線程2 * A組線程1的能發揮在給定的音色 (以形成從樂器聲音的和絃)
  • 線程3不同的音符* A組線程2的可以在不同的音符演奏和絃 (代表一個音樂家)線程
  • 線程4 * A組3可以成爲一個管絃樂隊! =)

在這裏,我覺得最困難的部分是,我想在同一時間輸出不同的聲音,預處理這將是典型的方式,但如果聲音的組合,可以實時完成,它變得很有趣。

任何想法,經驗,圖書館或信息將提供幫助,提前謝謝!

+1

我很猶豫要發佈這個作爲一個實際的答案,但你可能能夠收集一個想法或兩個如何實現@泰勒的答案從我的相關codegolf答案:http://codegolf.stackexchange.com/questions/272/twinkle-twinkle-little-star/395#395 – 2011-03-18 17:12:32

+1

由於你沒有提到特定的操作系統,我建議看看fmod(http://www.fmod.org/index.php/download)。 – yms 2011-03-18 17:56:16

+0

@mootinator感謝您的參考,@ yms.cu我會檢查它 – 2011-03-21 01:52:20

回答

5

我不認爲線程是你想要的。同步會太困難。你可能想要做的事情(以及我幾年前爲類似應用程序所做的工作)是維護活動筆記的數據結構(可以使用類實例或閉包或任何工作來實現),並且對於每個示例,調用每個在結構中的項目,總結輸出(我建議在這一點上使用有符號16位數學,所以你的值在-32767到+32768範圍內)。混合只是總結各種信號。

類似以下內容:

#ts = A clock, in eg, seconds, passed in to your calls for generation purposes. 
sample = sum([notefunc(ts) for notefunc in notes]) 
#Now convert the sample to whatever format needed for your media lib 
#Update notes array 

...和重複循環44100次/秒。可能需要某種緩衝。實際時間非常棘手。當我玩弄這些東西時(在233mhz G3 Powerbook上〜2000),我可以通過一兩個簡單的筆記來實時獲取,但不是更多。

+0

你用什麼語言/庫來聲音輸出? – 2011-03-02 19:17:23

+0

這是某種MacAudio模塊。保持在我的OS8.6下是Python 1.5.2,所以與現代情況根本沒有關係。現在我可能會看到OpenAL或SDL之類的東西。 – 2011-03-02 19:55:34

2

你可能想看看GStreamer framework。它允許你將音頻流作爲由元素組成的「流水線」進行建模。並行元素將在不同的線程中自動處理。元素可以使用「時鐘」保持同步。

看看manual。前10章將給你一個很好的概述的可能性。 (而且讀起來很快。)

看着list of plugin s似乎有一些支持midi。

1

jMusic似乎有一個全面的庫。其網站上的links頁面也有更多資源。 [n.b.我沒有用過這種憤怒;我看着它。幾年前,去了一個商業包裝,而不是...]

心連心,R

1

這裏有一個有趣blog是加入音樂和軟件一起。博客的This page致力於在音樂軟件中對線程進行線程化和鎖定免費算法,並且有一個庫列表。另外here是另一個列表,你會感興趣。

1

想想使用Juce庫(http://www.rawmaterialsoftware.com/juce.php)。

這是一個C++跨平臺庫。 它除了具有音頻功能的許多不同特性(http://www.rawmaterialsoftware.com/jucefeatures.php):

  1. 線程同步化功能
  2. 桂建設和圖形功能
  3. 支持VST插件
  4. 支持MIDI
  5. 雙重許可( GPL 2.0或專有許可證)允許您重新分配您的工作或編寫閉源應用程序。

很多專業音頻應用程序被寫入與此庫,像Max/MSP(http://en.wikipedia.org/wiki/Max_%28software%29

1

我會建議JFugue。 我已經使用這個庫自己使用多線程編程音樂。

作爲一個實驗,我調整了現有的使用JFugue的Piano module