ios - AVAudioEngine 跟踪音频进度

标签 ios objective-c avfoundation core-audio

我已经设置了音频引擎并连接了一些节点,以便制作如下所示的音频图:

//
//AVAudioPlayerNode --> AVAudioMixerNode --> AVAudioUnitVarispeed ---> AvAudioOutputNode
//       |                                                         |
// AVAudioPCMBuffer                                             AudioTap
//

一切正常,音频引擎正在运行。现在我想获取 AVAudioPlayerNode/AVAudioPCMBuffer 的framePosition(进度、消耗的帧、%),以便更新用户界面中的当前位置。像这样的东西:

[timeEffectNode installTapOnBus:0 bufferSize:4096 format:[timeEffectNode outputFormatForBus:0] block:^(AVAudioPCMBuffer *buffer, AVAudioTime *when) {
    //calculate the current node progress here. ???
}];

我确信必须有一种方法可以做到这一点,但我似乎找不到任何有关如何实现这一目标的文档?

任何想法将不胜感激。

最佳答案

我最近创建了一个与 AVAudioEngine 和 AVPCMBufferNode 配合使用的播放器。玩家保存玩家已玩游戏的总时间的内部时间。要访问它,您必须获取播放器的lastRenderTime,然后使用(sampleTime/sampleRate)。这应该返回玩家玩游戏的总时间(以秒为单位)。

如果您想重置播放器计时器(例如当您搜索文件或切换到新歌曲时),您必须使用播放器的 playAtTime 方法进行设置。 playAtTime 不执行任何文件查找,它只是修改播放器内部计时器,然后开始播放。

我希望这会有所帮助。

如果您想了解我如何使用它,请查看我的项目:https://github.com/danielmj/AEAudioPlayer

关于ios - AVAudioEngine 跟踪音频进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26928309/

相关文章:

ios - 如何为iPad应用程序创建个性化的用户界面?

iOS 音频单元混响流格式问题 -10868 kAudioUnitErr_FormatNotSupported

ios - 匹配 AVAudioEngine 的输入和输出硬件设置

ios - 如何将设备 token 从 AppDelegate 传递到 UIViewController

iphone - IOS 5 - XCode 4 - 应用程序启动时的 SIGABRT

ios - 适用于 iOS 的自定义粒子系统

ios - 没有事件和启用的视频连接

iphone - 整数常量

ios - 如何将类对象转换为 JSON 以供请求?

ios - 当 block 从 swift 转移到 Objective-C 时出现内存问题