1

我目前正在尝试为学校完成一个项目,该项目涉及读取音频“wav”文件,使用 golomb 编码器对样本进行编码,将结果写入二进制文件,在另一个脚本上读取该二进制文件并使用 golomb 对其进行解码解码器。作业指南建议我开发一个 BitStream 类,它可以读取和写入单个位并读取和写入 n 位。我已经完成了 golomb 编码器和解码器,它似乎运行良好。但是,我在使用 BitStream 部分时遇到了问题。我曾尝试在线搜索现有课程,但由于我对编程还很陌生,所以它们似乎都超级复杂。我的 golomb 编码器返回一个 1 和 0 的字符串,解码器使用类似的字符串作为输入。我的另一个问题是:当我写完二进制文件时,我如何知道每个示例代码的开始和结束位置?如何将采样频率传递给解码器?我如何知道音频样本的左右声道开始和结束的位置?如何编码每个单独样本的哥伦布编码器的 M 参数?顺便说一句,我应该在 Python 中做到这一点。

提前致谢!

4

1 回答 1

1

一旦你有了二进制文件,你就不必担心音频从哪里开始等等,图书馆应该为你做这些。要使用位串保存字符串,您可以一次完成所有操作,保存到字符串然后运行 ​​BitStream,如下所示:

BitStream(bin='101010101').tofile(filename)  

您的问题有几个移动部分,但如果您的一个零字符串正在使用 golomb,那么您从 BitString 读回的二进制文件应该按原样工作。

我有一个提示,我也将它用于霍夫曼编码器。如果您使用编码生成的二进制字符串以“0000”开头,那么在写入之前总是在二进制字符串前面加上一个“1”,并在读取时去掉前面的“1”。这使您不必存储有关二进制缓冲区保存的外部数据,因为二进制必须以前导 1 存储

于 2019-11-17T18:43:50.330 回答