将音频样本转换为可听文件格式

时间:2013-04-02 17:53:17

标签: c++ audio wav sampling pcm

我已经尝试将大量数据(大约900 MB)转换为可听文件格式几天了。我已经获得了一个.dat文件,其中包含9亿个浮点样本(每行一个),代表90 MHz的10 MHz音乐。

我下采样到40 KHz,但现在我不知道怎么可能听到那些字节中隐藏的音频。我在Linux环境中编写C ++程序,但如果有人知道如何使用Matlab,Octave,Python,Audacity,MPlayer或任何其他工具完成此任务,请出来发言:)任何数量的贡献都是非常感谢。

    head -n 5 ~/input.dat
    -2.4167
    -7.5322e-016
    -0.2283
     0.13581
    -0.51926

4 个答案:

答案 0 :(得分:1)

wav file format是一个相当简单的。

您只需要编写该链接中定义的44字节标题块,然后将数据转换为整数。

答案 1 :(得分:1)

将您的采样率定位到44100赫兹(或48000,22050,11025或8000赫兹)

将音频样本转换为16位有符号整数(-32768到+32767)。

按照WAV文件合成的说明操作: WAV File Synthesis From Scratch - C

答案 2 :(得分:1)

如果您有一个字节序列并想将其转换为音频,那么您需要做的就是为它写一个标题。既然您提到可以使用MatLAB,我建议使用wavwrite命令。它简单,经过试验和测试,非常适合原型设计。以下是文档的链接:
http://www.mathworks.in/help/matlab/ref/wavwrite.html

以下是您使用wavwrite时可能需要采取的一些步骤 - 由于输入数据是浮点数,因此请将文件中的数据缩放到[-1,1]范围内 - 一旦数据被缩放插入并突然进入函数调用 - 使用wavplay命令播放wav文件。

答案 3 :(得分:1)

WAV允许浮点采样数据和各种采样率(1Hz至4.2GHz,以1Hz为增量,如果存储器可用)。

您不需要为转换为整数值而烦恼。只需适当设置WAV文件的标题,并在数据部分中将32位浮点数写为二进制数据。

从存储角度来看,10MHz采样率对于WAV文件来说没有问题。但是,播放需要转换为硬件可以处理的内容。这些天的上限通常为96或192 kHz。