音频到 8 位文本样本转换

Posted

技术标签:

【中文标题】音频到 8 位文本样本转换【英文标题】:audio to 8-bit text sample conversion 【发布时间】:2009-12-07 21:33:01 【问题描述】:

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

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

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

非常感谢您!

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

很大程度上取决于您的音频格式。例如,波形格式由未压缩的交错 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 数据。

【讨论】:

以上是关于音频到 8 位文本样本转换的主要内容,如果未能解决你的问题,请参考以下文章

8 位音频样本到 16 位

从幅度样本创建音频文件

混合 PCM 音频样本

处理 16 位样本音频

音频处理 音频文件

将音频转换为 8 位签名 PCM