今天我有一个有趣的问题。音频转换为8位文本样本
我需要将一些口袋妖怪音频文件转换为8位样本列表(0-255值)。我正在MC6800芯片组上编写程序集,这将需要播放这些声音。我计划在一个包含8位样本的数组中,当函数被调用时程序将循环访问这些样本。
有谁知道一种方法将音频文件(WAV/MP3)转换为逗号分隔的8位文本样本值列表?或者这个相关方法的任何东西?
非常感谢你提前!
今天我有一个有趣的问题。音频转换为8位文本样本
我需要将一些口袋妖怪音频文件转换为8位样本列表(0-255值)。我正在MC6800芯片组上编写程序集,这将需要播放这些声音。我计划在一个包含8位样本的数组中,当函数被调用时程序将循环访问这些样本。
有谁知道一种方法将音频文件(WAV/MP3)转换为逗号分隔的8位文本样本值列表?或者这个相关方法的任何东西?
非常感谢你提前!
您可以使用命令行“sox”工具或Audacity音频编辑器将文件转换为原始的,未签名的8位单声道音频文件。
在Audacity 1.3或更高版本中,打开音频,然后选择导出,选择“Wave,AIFF和其他未压缩类型”作为格式,然后单击选项... - 然后选择“其他...” ,用于标题的“RAW”以及用签名的8位PCM作为编码。 (对不起,无符号不可用。)
从命令行尝试sox,其中-c 1代表1个通道,-t raw代表无标头,-u代表无符号线性,-1代表每个样本1个字节。
然后,您可以使用像“hexdump”这样的工具将文件的字节转储为数字并粘贴到您的代码中。
如果sox没有它,您将不得不使用它来生成原始(无头文件)文件并将原始文件转换为逗号分隔。
编辑:sox将“Raw textual data”作为其网页格式之一。您可以在第一遍中将您的声音文件转换为无符号的8位线性样本,然后使用该选项输出您可能完全想要的输出。
对于.wav这是一个非常简单的过程。您可以通过Google搜索轻松找到.wav规范。它包含一个标题,然后是简单的原始样本您应该先阅读标题,然后遍历所有示例。通常它们是16位样本,因此您想要将它们从-32768到32767范围归一化到0-255范围。我首先建议简单缩放。如果不成功,可以在样本中找到实际的最小值和最大值,并相应地调整您的比例。
好了很多,这取决于你的音频格式。例如,波形格式由未压缩的交错PCM数据组成。
即,对于8位立体声文件,每个样本将按如下排列。
[左样品1] [右样品1] [左样品2] [右样品2] ... [左样品n] [右样品n]。
即每个8位立体声样本存储在2个字节中。 1为左声道,1为右声道。这是您的声音硬件最可能需要的数据格式。
16位或24位音频文件将在每种方式下工作,但左右采样分别为2或3个字节。
很明显,一个wave文件中有一个extyra信息的负载。它遵循RIFF格式。你可以在www.wotsit.org等地找到关于它的信息和“chunk”wave文件。
解压缩MP3比较复杂。您最好先解压缩并在MP3编码音频上运行它。 IT将从另一侧吐出上述的PCM数据。