ZyXEL ADPCM编解码器

时间:2010-01-20 17:46:44

标签: modem voice codec

我有一个ZyXEL USB Omni56K Duo调制解调器,想要在其上发送和接收语音流,但为了达到足够的质量,我可能需要实现一些“ZyXEL ADPCM”编码,因为普通的PCM提供的采样率太小而无法传输高质量的语音,它也无法通过USB工作(可能是因为即使这个比特率对于USB-Serial转换器来说也太高了。)

这个神秘的编解码器在所有Microsoft WAV相关库中都是理论上支持它的众多编解码器之一,但我没有发现任何实现。

有人可以提供任何语言或某些文档的实现吗?编写自定义mu-law解码算法对我来说不是问题。

感谢。

2 个答案:

答案 0 :(得分:2)

我不确定ZyXEL ADPCM与其他版本的ADPCM有何不同,但是在一些谷歌搜索中可以找到各种ADPCM实现。

然而,我发帖的真正原因是为什么选择ADPCM。 ADPCM是自适应差分脉冲编码调制。这意味着传递的数据是样本中的差异,而不是当前值(这也是您看到如此强大压缩的原因)。在没有位丢失的清洁环境(即磁盘驱动器)中,这很好。但是,在流式传输环境中,通常假设可能会周期性地损坏比特。对数据造成任何损害,您将非常快速地听到静态或其他音频伪像,而且通常非常糟糕。

ADPCM的复位机制不是基于帧的,这意味着音频问题可能会持续很长一段时间,具体取决于编码器。重置代码通常是一组0(考虑到16,但是自从我编写自己的端口以来已经过了几年)。

电话环境中的ADPCM通常将12位PCM样本转换为4位ADPCM样本(不错)。至于音频质量......对于电话交谈和口语而言并不坏,但大多数人在盲目测试中都能轻松检测到质量下降。

在你的最后一句话中,你将一个曲线球投入到问题中。你开始提到muLaw。 muLaw是一种PCM实现,它采用12位采样并使用对数标度将其转换为8位采样。这是北美TDM(电话)网络的典型压缩机制(世界上大多数人使用类似的ALaw算法)。

所以,我很困惑你实际上想要找到的东西。

您还提到了Microsft和WAV实现。您可能知道,但为了以防万一,WAV只是提供格式,采样信息,通道,大小和其他有用信息的音频数据的包装器。如果没有涉及WAV,AU或其他包装器,muLaw和ADPCM通常会显示为原始数据。

如果您正在实施ADPCM,请另外提示。正如我所指出的,它们使用4位来表示12位样本。双方都有乘数表,他们逃脱了这一点。您在表中的位置会根据4位值进行更改(换句话说,该值与步长相比都是多倍,并用于计算新的步长)。我已经看到各种算法使用略有不同的表(不知道为什么,但你通常会看到发送和接收的信号慢慢偏离偏差)。其中一个较旧的流行声音包与我通常从电话硬件供应商处看到的不同。

而且,对于更无用的琐事,ADPCM有多种口味。差异涉及表格,源样本大小和目标样本大小,但我从未需要使用它们。刚刚记录了我在互联网上搜索电话中使用的各种音频格式规范时发现的风味。

答案 1 :(得分:0)

通过ffmpeg -f u16le -i - -f wav -acodec adpcm_ms -管道你的pcm可能会有效。

http://ffmpeg.org/