【问题标题】:Looped Audio samples in the iPhoneiPhone 中的循环音频样本
【发布时间】:2009-11-10 22:51:46
【问题描述】:

我正在尝试制作一个音乐 iPhone 应用程序,但在播放循环样本时遇到了一些问题。

我读过这个问题: audio-on-the-iphone

以及网络上有关“RemoteIO”/AudioUnits 框架的其他几篇文章和博客,但均未成功。

我已经能够制作一个示例应用程序,它可以播放具有预定义持续时间的有限声音(我正在使用回放回调),但我需要声音在用户触摸屏幕时开始播放并在用户抬起时停止播放手指。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 循环样本有多长?
  • 只要用户触摸屏幕,所以可能是不定式。无论如何,我已经能够循环它......只是在缓冲区结束时回到缓冲区的开头。现在的问题是每次循环重新开始时都会发出奇怪的“咔哒”声。

标签: iphone audio


【解决方案1】:

假设您的代码是正确的,您可能会省略其中一个(或多个)步骤:

  1. 在错误的时间停止读取/写入(因为您可能会在每次渲染调用中写入“2 的幂”样本)
  2. 不提供淡入/淡出(从 10 毫秒开始淡出并根据需要进行调整)
  3. 过零时不停止写入
  4. 当用户抬起手指时不会将读取位置重置为 0 - 在样本中间恢复
  5. 您的样本在开始、结束和/或循环位置未正确修剪到零交叉
  6. 不重置内部效果、滤镜或转换器

您不需要所有这些来避免点击。

【讨论】:

  • 我不知道这是否相关,但为了避免长时间的启动延迟,我总是“播放声音”,只是缓冲区充满了零。当我想播放一些东西时,我只需将采样的声音输入缓冲区,当我想停止时,我只需输入零。对吗?
  • 是的,这很好(尽管当你长时间停顿时你会想停下来,因为这很浪费)。
  • 只打零就可以了,而且我认为它不会占用太多 CPU 时间,但它确实可以防止设备进入睡眠状态,这意味着即使屏幕被锁定,你也可以即使没有声音,仍然在播放“声音”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多