Haskell 如何使用Hcodecs编写wav文件

Haskell 如何使用Hcodecs编写wav文件,haskell,audio,Haskell,Audio,我正在尝试开始在haskell中播放一些声音 我想我会得到一个代表声波的列表。我的问题是获取此列表,并将其从Hcodecs库转换为音频类型,以便我可以使用该库创建一个wave文件 所以问题是:如何从一个列表转到一个音频?关键是键入SampleData a=UArray Int a。因此,只需使用Data.Array.unbox.UArray的IArray实例即可。然后,剩下要做的就是使用音频采样器channelNumber sampleData,您就都准备好了。什么列表?有几种表示声音或音乐的方

我正在尝试开始在haskell中播放一些声音

我想我会得到一个代表声波的列表。我的问题是获取此列表,并将其从Hcodecs库转换为
音频
类型,以便我可以使用该库创建一个wave文件


所以问题是:如何从一个列表转到一个
音频

关键是
键入SampleData a=UArray Int a
。因此,只需使用
Data.Array.unbox.UArray
IArray
实例即可。然后,剩下要做的就是使用
音频采样器channelNumber sampleData
,您就都准备好了。

什么列表?有几种表示声音或音乐的方法。
Word8
Int16
Int32
Int64
列表
Audio
和list一样,也是一种容器类型,因此我猜想将列表转换为
Audio
的函数不必考虑元素的类型,因为它们可以是任何类型。但是,如果我想将
音频
作为wav文件写入,则内容的类型必须满足类型约束,这意味着它必须是上述类型之一。那么我是否正确理解Haskell可以创建64位wav文件?Haskell可以将任意数据写入文件,但我想你是在问关于Hcodecs库的问题吧?粗略地看一下源代码,当给定
Int64
音频样本时,它似乎确实将64位样本写入WAV文件。但它仍然是一个具有32位长度字段的普通WAV文件(这意味着它的数据限制为4GB)。有时64位WAV指的是使用64位长度字段的扩展。Hcodecs似乎不支持这一点。谢谢!我现在已经成功地创建了一个5秒长的a音:)