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