首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩PCM数据

压缩PCM数据
EN

Stack Overflow用户
提问于 2014-02-16 21:40:13
回答 3查看 2.1K关注 0票数 1

我正在使用WinAPI - Wave函数来创建一个记录麦克风X秒的录音程序。我在网上搜索了一下,发现PCM数据太大了,把它通过套接字发送是个问题.

我怎样才能把它压缩成更小的东西呢?有没有简单的/“便宜”的方式?

我还注意到,当我使用Wave API函数声明格式时,我使用了以下代码:

代码语言:javascript
复制
WAVEFORMATEX pFormat;
pFormat.wFormatTag= WAVE_FORMAT_PCM;     // simple, uncompressed format
pFormat.nChannels=1;                    //  1=mono, 2=stereo
pFormat.nSamplesPerSec=sampleRate;      // 44100
pFormat.nAvgBytesPerSec=sampleRate*2;   // = nSamplesPerSec * n.Channels * wBitsPerSample/8
pFormat.nBlockAlign=2;                  // = n.Channels * wBitsPerSample/8
pFormat.wBitsPerSample=16;              //  16 for high quality, 8 for telephone-grade
pFormat.cbSize=0;

正如您所看到的,pFormat.wFormatTag= WAVE_FORMAT_PCM;也许我可以插入而不是WAVE_FORMAT_PCM其他的东西,所以它会立即被压缩吗?我已经检查了MSDN的其他值,尽管它们在我的Visual中都不适合我.

那我能做什么呢?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-17 07:38:43

最简单的方法是简单地将样本率从44100降到22050、16000、11025甚至8000。大多数语音编解码器都不会超过16000赫兹。而老的则是为8khz而优化的。

下一步是找到一个编解码器。Windows音频压缩管理器中有一些编解码器可供使用,但几乎所有的编解码器都可以追溯到Windows 95,按现代标准来看,解压缩后听起来糟透了。

您可以使用SDK格式或使用Media实时转换为WMA。或者,只需获得一个开源的MP3库,比如跛脚

票数 3
EN

Stack Overflow用户

发布于 2014-02-16 21:50:25

对于电话质量的语音,您可以更改为8位每样本和样本率为8000。这将大大减少数据量。

票数 1
EN

Stack Overflow用户

发布于 2014-02-16 22:11:35

GSM具有良好的压缩性能。您可以使用acmStreamConvert()将一块PCM数据转换为GSM (或已安装的任何其他编解码器)。有关更多详细信息,请参阅MSDN:

将数据从一种格式转换为另一种格式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21817052

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档