2012-03-19 23 views
5

我需要爲haskell找到一個聲音庫。我遵循haskell wiki http://www.haskell.org/haskellwiki/Sound_data_structures中介紹的一些說明,但無法正常工作。我需要的只是播放音頻文件,而不管其格式。 我正在開發一款FunGen遊戲,以及它的音樂時間。我可能有somo問題使他們工作,但我甚至不能發揮一個簡單的聲音的例子。 我的大部分問題都是由於cabal的安裝,或者我無法找到任何依賴。我正在使用Windows。Sound lib haskell

+0

你試過了哪些,有什麼問題?你能給錯誤信息嗎? – luqui 2012-03-19 04:38:58

+0

請檢查這[問題](https://stackoverflow.com/questions/14005592/play-a-wav-file-with-haskell) 希望有些東西適合你:) – biinui 2014-11-15 08:04:36

回答

7

在Windows上是Haskell音頻的主要限制。大多數軟件包都綁定到C代碼,它們往往是以Linux爲中心的(JACK,Alsa),或者最好是名義上跨平臺的,但實際上很難在Windows上構建和使用。在安裝Haskell綁定之前,您需要先構建或安裝C庫。您是否嘗試過OpenAL?這可能是最適合你想要做的事情。如果你安裝了C OpenAL libraries,Haskell綁定應該是一個相當簡單的下一步。有幾個附加軟件包旨在簡化一些常見任務,如ALUT和Alure。

否則,大多數其他解決方案實際上會涉及幾個可能無法很好地協同工作的軟件包。 hsndfilehsndfile-vector適合閱讀音頻文件(您需要安裝libsndfile),但它們不會播放聲音。 portaudio將播放音頻(再次,您將需要C portaudio library),但它並沒有在一段時間內更新(和一些更新是急需的)。您還需要熟悉C編譯器鏈(例如MinGW或Cygwin)以首先安裝必要的C庫。

另一種方式可能是綁定到專用音頻語言,如Supercollider或Csound。這將是一個相當重量級的解決方案,但綁定通常會得到更好的維護,並且至少應該在Windows上安裝Csound(披露:我寫了hCsound包)。 SoxC library/executable)也可能適合你(我從來沒有在Windows上試過,但它聲稱工作)。

+0

好的清單,並非常全面。我唯一要補充的是ALUT已被棄用。 http://connect.creativelabs.com/openal/Lists/OpenAL%20Development/Flat.aspx?RootFolder =%2Fopenal%2FLists%2FOpenAL%20Development%2FDeprecated%20Alut%20Wav%20Loading%20Functions&FolderCTID = 0x01200200BB72FB7EEB38514F8CD1A9372A031174 – rtperson 2012-03-19 15:52:41

+0

@rtperson - thanks for that;我從來沒有使用ALUT,基本上認爲它是GLUT的一種音頻模擬(儘管這種模式大部分被棄用,但仍然相當常見)。 – 2012-03-20 10:33:24

+0

當我嘗試安裝hsndfile或hCsound時,caball呼喊缺少sndfile lib。我意識到我不知道如何安裝它,因爲複製一個dll dindt工作 – Illiax 2012-05-28 04:27:35

1

我只需要播放音頻文件,而不管其格式如何。

最好的選擇是hsndfile,在上面John L.的優秀答案中提到。但是你最初可能想讓你的生活更輕鬆。 WAV文件格式爲a very simple format - 基本上由原始PCM數據組成,並預先添加了最少的標題。嘗試獲取WAV文件播放,然後從那裏開闊視野。

對於缺少示例代碼,您將會奮力拼搏 - 並且您可能會發現自己需要外國記憶指針和其他不那麼直接的技巧 - 但是有一個體面的樣本用於打開和閱讀WAV文件here

此外,在Windows上開發時,學會喜歡-fno-ghci-sandbox標誌。它告訴ghci你連接到一個使用自己線程本地存儲的庫。它通常是獲得某些外部庫在GHCi中工作的唯一方法。