声音库 Haskell

5
我需要为Haskell寻找一个音频库。我已经按照Haskell Wiki上提供的一些指导操作http://www.haskell.org/haskellwiki/Sound_data_structures,但是没有任何结果。我的需求很简单,即播放音频文件,无论其格式如何。
我正在使用FunGen开发游戏,并且需要添加背景音乐。我可能会在使它们协同工作方面遇到一些问题,但是我甚至不能播放一个简单的音频示例。
我的大部分问题都源于Cabal安装或依赖关系,我找不到任何地方可以解决这些问题。我使用的是Windows系统。

你尝试过哪些方法?有什么问题吗?能提供错误信息吗? - luqui
请查看此问题希望对您有所帮助 :) - biinui
2个回答

7
在Haskell音频方面,使用Windows是一个主要的限制。大多数软件包都是对C代码的绑定,它们往往要么是以Linux为中心(JACK、Alsa),要么在最好的情况下只是名义上跨平台,但实际上在Windows上难以构建和使用。在安装Haskell绑定之前,您需要首先构建或安装C库。
您尝试过OpenAL吗?这可能是最适合您想要做的事情的选择。如果您安装了C OpenAL库,那么安装Haskell绑定应该是一个相当简单的下一步。还有一些附加软件包,旨在简化一些常见任务,例如ALUT和Alure。
否则,大多数其他解决方案实际上涉及几个可能无法很好地协同工作的软件包。hsndfilehsndfile-vector非常适合读取音频文件(您需要安装libsndfile),但它们不会播放声音。portaudio将播放音频(同样,您需要C portaudio库),但它已经有一段时间没有更新了(并且 dringend 更新)。您还需要对C编译器链(例如MinGW或Cygwin)有适度的了解,以先安装必要的C库。
另一种方法可能是绑定到专用音频语言,如Supercollider或Csound。这将是一个相当重量级的解决方案,但绑定往往更易于维护,并且至少Csound应该可以轻松安装在Windows上(声明:我编写了hCsound软件包)。SoxC库/可执行文件)也可能适合您(我从未在Windows上尝试过,但它声称可以工作)。

@rtperson - 谢谢你的回复;我从未使用过ALUT,基本上认为它是GLUT的音频模拟(虽然大部分已经被弃用,但仍然相当常见)。 - John L
当我尝试安装hsndfile或hCsound时,cabal会提示缺少sndfile lib。 我意识到我不知道如何安装它,因为复制dll无法解决问题。 - Illiax
@Illiax - 这是libsndfile(C库)的依赖项。我认为在http://www.mega-nerd.com/libsndfile/项目页面上有一个Windows安装程序,但您可能需要确保它安装到的位置在您的路径上,这又取决于您的编译器链如何设置。很抱歉我无法真正帮助您解决这个问题,但如果您搜索“Haskell C依赖项”或类似内容,您可能会找到一些有用的信息。 - John L

1
我所需的只是播放音频文件,无论其格式如何。
你最好的选择是John L.在上面出色回答中提到的hsndfile。但是一开始你可能想要让自己的生活更轻松。WAV文件格式非常简单--基本上由原始PCM数据和最少的前缀标头组成。尝试播放一个WAV文件,然后从那里扩展你的视野。
你将会遇到一些困难,因为缺乏示例代码--你可能需要使用外部内存指针和其他不太直观的技术--但是这里有一个打开和读取WAV文件的很好的示例here
此外,在Windows上开发时,要学会喜欢使用-fno-ghci-sandbox标志。它告诉ghci您正在连接到一个使用自己的线程本地存储的库。这通常是在GHCi中使某些外部库正常工作的唯一方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接