将 pcm 样本链接在一起时避免静态和失真

Posted

技术标签:

【中文标题】将 pcm 样本链接在一起时避免静态和失真【英文标题】:avoid static and distortion when chaining together pcm samples 【发布时间】:2012-06-15 14:18:42 【问题描述】:

我遇到了将来自录音不同部分的 pcm 音频样本拼接在一起的问题。这个想法是,它是来自用户通过各种进度条上的记录寻找的音频反馈。它们可以是任意长度(例如 0.1 到 0.5 秒)。我的主要问题是,当我回放这些样本时,它们会导致大量的噪声伪影、失真等。

我想这是样本之间幅度跳跃的结果。我还没有想出解决这个问题的好方法。我做的最后一件事是尝试在它们穿过原点的点截断样本(从正到负,反之亦然),但这并没有太大帮助。有人有什么想法吗?

谢谢

【问题讨论】:

【参考方案1】:

“过零”技巧通常效果很好,短的线性或余弦渐变(约 1/30 秒)也是如此。如果您使用淡入淡出,淡入淡出必须足够长以避免爆音,但仍比您正在处理的音频片段短得多。如果您使用过零,您必须确保您正在处理的音频实际上过零(这对于低频和已经偏移的信号可能是一个问题。为了避免偏移,这两个问题,您可以高先通过过滤信号)。

如果您的片段经常处于 0.1 到 0.5 毫秒范围的短端,则各种心理声学现象可能会妨碍您。您应该首先将自己限制在更长的部分,看看它是否有效,然后看看你能做多短。这样您就可以知道问题出在您的代码上,还是只是缩短了代码。

【讨论】:

以上是关于将 pcm 样本链接在一起时避免静态和失真的主要内容,如果未能解决你的问题,请参考以下文章

使用 AudioConverter 将 PCM 转换为 AAC 并使用 AVAssetWriter 写入 .mp4 文件时音频失真

如何避免 DirectSound 中的失真和卡顿?

Linux学习——动态链接库和静态链接库

NAudio Asio 和 ieeefloat 格式

dll从静态链接库导出函数符号

如何将 cuda-gdb 与使用 nvcc 编译的静态库的 g++ 链接程序一起使用?