iOS音频单元获取当前时间戳

iOS音频单元获取当前时间戳,ios,timestamp,audio-streaming,Ios,Timestamp,Audio Streaming,我正在使用音频单元(iOS)播放文件中的音乐。如何获取正在播放的音乐的当前时间戳 我发现在playbackCallback函数中有一个AudioTimeStamp类型的变量调用“inTimeStamp”。这是我查找当前时间戳的正确位置吗?给您: AudioTimeStamp ts; UInt32 size = sizeof(ts); AudioUnitGetProperty(THIS->audioPlayerUnit, kAudioUnitPro

我正在使用音频单元(iOS)播放文件中的音乐。如何获取正在播放的音乐的当前时间戳

我发现在playbackCallback函数中有一个AudioTimeStamp类型的变量调用“inTimeStamp”。这是我查找当前时间戳的正确位置吗?

给您:

AudioTimeStamp ts;
UInt32 size = sizeof(ts);

AudioUnitGetProperty(THIS->audioPlayerUnit,
                     kAudioUnitProperty_CurrentPlayTime, 
                     kAudioUnitScope_Global, 
                     0, &ts, &size);

NSLog(@"TS%f", ts.mSampleTime);
获得秒数的更好方法是添加

THIS->currentTime = ts.mSampleTime / THIS.streamFormatDescription.mSampleRate;
给你:

AudioTimeStamp ts;
UInt32 size = sizeof(ts);

AudioUnitGetProperty(THIS->audioPlayerUnit,
                     kAudioUnitProperty_CurrentPlayTime, 
                     kAudioUnitScope_Global, 
                     0, &ts, &size);

NSLog(@"TS%f", ts.mSampleTime);
获得秒数的更好方法是添加

THIS->currentTime = ts.mSampleTime / THIS.streamFormatDescription.mSampleRate;

洛雷托帕里斯的回答并不适用于所有场景。如果您使用的是kAudioUnitSubType_AudioFilePlayer,请尝试他的答案;但是,如果使用其他音频单元类型(如RemoteIO unit),则需要设置一个全局变量来存储音频单元已渲染的帧计数,并在每个渲染周期中更新该值

player.progress += inNumberFrames/player.canonicalFormat.mSampleRate;

洛雷托帕里斯的回答并不适用于所有场景。如果您使用的是kAudioUnitSubType_AudioFilePlayer,请尝试他的答案;但是,如果使用其他音频单元类型(如RemoteIO unit),则需要设置一个全局变量来存储音频单元已渲染的帧计数,并在每个渲染周期中更新该值

player.progress += inNumberFrames/player.canonicalFormat.mSampleRate;

我尝试使用此方法获取试图使用audio unit播放的音频文件的当前时间戳,但它返回空的“ts”结构。它根本不会更改以前的值。(音频播放正在工作)我得到-10879,即kAudioUnitErr_InvalidProperty作为返回值此方法仅适用于kAudioUnitSubType_AudioFilePlayer AudioUnit type,因为kAudioUnitProperty\u CurrentPlayTime仅对该单元类型有用。我尝试使用此方法获取试图使用音频单元播放的音频文件的当前时间戳,但它返回空的“ts”结构。它根本不会更改以前的值。(音频播放正在工作)我得到-10879,也就是说,kAudioUnitErr\u InvalidProperty作为返回值此方法仅适用于kAudioUnitSubType\u AudioFilePlayer AudioUnit类型,因为kAudioUnitProperty\u CurrentPlayTime仅适用于此单元类型。