【问题标题】:core audio: is zero equivalent to silence only for PCM audio?核心音频:仅对于 PCM 音频,零等于静音吗?
【发布时间】:2012-11-26 13:32:55
【问题描述】:

我正在尝试创建一种基本算法,用于对核心音频进行丢包隐藏。我只是想用静音替换丢失的数据。在学习核心音频的书中,作者说在无损PCM中,零表示静音。我想知道我是否正在播放 VBR(即压缩数据),是否也可以将零用于静音?

在我现有的代码中......当我将零插入音频队列时......它突然卡住了(即它不再释放音频队列回调中消耗的数据......)我想知道为什么

【问题讨论】:

  • 对于最流行的压缩格式,替换丢失的数据,比如在解压缩后用斜坡变为静音,并不是唯一的问题。 (重新)在 drop-out 之后与压缩数据流同步也是一个巨大的问题。您不能只是从任何地方开始解码,然后让数据有意义。

标签: objective-c ios core-audio audio-streaming packet-loss


【解决方案1】:

PCM 是原始编码样本。全 0(当对样本使用有符号数据时)确实是沉默。 (事实上​​,所有的值都是静音,但如果不过滤掉这种直流偏移,可能会损坏您的放大器和/或扬声器。)

当您使用有损编解码器进行压缩时,您会输入一种数字格式,其中添加静音并非易事。考虑将数据添加到 ZIP 文件以将空字节添加到文件末尾。可不是随便插入ZIP文件那么简单。

如果您想为压缩文件添加静音,您必须使用适当的编解码器。然后,您必须将其放入比特流中,这也不是微不足道的。通常流被帧分解,但你甚至不能以某些格式分割这些帧。 MP3 和 AAC 使用一个位存储库,其中先前帧中未使用的数据可用于稍后对更复杂的帧进行编码,从而使文件分割变得非常困难。

【讨论】:

  • 如果我将压缩数据格式(即 MP3 或 AAC)转换为 PCM 会怎样。然后以零的形式添加静音。这应该是一个简单的操作对吗?
  • 没错。请记住,如果您想重新压缩,您将失去额外的音频质量。
  • 不需要重新压缩.. b/c 我会在解压缩后立即播放音乐并插入静音部分.. 话虽如此.. 我唯一担心是延迟..我的应用程序是实时的:一部手机向其他手机广播音乐,这些手机应该获取音频数据包并同步播放它们..如果解压缩时间是恒定的..那只会增加一个恒定的缓冲时间开始..但如果它是可变的..那我就有麻烦了
  • 那么就没有问题了。无论如何,您必须将其转至 PCM 才能播放。
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
相关资源
最近更新 更多