2

我今天有一个有趣的问题。

我需要将一些口袋妖怪音频文件转换为 8 位样本列表(0-255 值)。我正在 MC6800 芯片组上编写需要播放这些声音的汇编程序。我计划包含一个包含 8 位样本的数组,当调用函数时程序将循环该数组。

有谁知道将音频文件(wav/mp3)转换为逗号分隔的 8 位文本样本值列表的方法?或者这种相对方法的任何东西?

非常感谢您!

4

4 回答 4

4

您可以使用命令行“sox”工具或 Audacity 音频编辑器将文件转换为原始的、未签名的 8 位单声道音频文件。

在 Audacity 1.3 或更高版本中,打开音频然后选择导出,选择“Wave、AIFF 和其他未压缩类型”作为格式,然后单击选项... - 然后选择“其他...”作为格式,“RAW”标头,签名的 8 位 PCM 作为编码。(抱歉,未签名的不可用。)

在命令行中,尝试使用 -c 1 表示 1 个通道、-t raw 表示无标题、-u 表示无符号线性以及 -1 表示每个样本 1 个字节的 sox。

然后,您可以使用“hexdump”之类的工具将文件的字节转储为数字并将它们粘贴到您的代码中。

于 2009-12-07T21:41:21.927 回答
0

如果sox没有它,您将不得不使用它来生成原始(无头)文件并将原始文件转换为逗号分隔的自己。

编辑:sox 将“原始文本数据”作为其格式之一,来自网页。您可以让它在第一遍中将您的声音文件转换为无符号的 8 位线性样本,然后使用此选项进行输出可能会得到您想要的输出。

于 2009-12-07T21:38:24.713 回答
0

对于.wav,这是一个非常简单的过程。您可以通过 google 搜索轻松找到 .wav 规范。它包含一个标题,然后是简单的原始样本。您应该先阅读标题,然后遍历所有示例。通常它们是 16 位样本,因此您希望将它们从 -32768 到 32767 范围标准化到 0-255 范围。我建议首先进行简单的缩放。如果这不成功,可能会在样本中找到实际的最小值和最大值,并相应地调整您的比例。

于 2009-12-07T21:39:13.177 回答
0

那么很大程度上取决于您的音频格式。例如,波形格式由未压缩的交错 PCM 数据组成。

即对于 8 位立体声文件,每个样本将按如下方式排列。

[左样本 1][右样本 1][左样本 2][右样本 2]...[左样本 n][右样本 n]。

即每个 8 位立体声样本存储在 2 个字节中。1 代表左声道,1 代表右声道。这是您的声音硬件最可能需要的数据格式。

一个 16 位或 24 位的音频文件将以每种方式工作,但左右样本将分别为 2 或 3 个字节。

显然,wave 文件中包含大量的 extyra 信息。它遵循 RIFF 格式。您可以在 www.wotsit.org 等地方找到有关它的信息和使用的“块”波形文件。

解压 MP3 比较复杂。你最好得到一个解压缩器并在 MP3 编码的音频上运行它。IT 将从另一侧吐出如上所示的 PCM 数据。

于 2009-12-07T21:41:13.660 回答