Я работаю над аудио-рекордером и использую AQRecorder из примера кода SpeakHere.Я хочу добавить ползунок в пользовательском интерфейсе для отображения продолжительности записи.Я сделал это с помощью простого таймера, инициализированного в начале записи.Но иногда запись отстает на 1 секунду.Например, Slider отображает 10 секунд, но фактическая продолжительность аудио при сохранении составляет 9 секунд.
Есть ли способ, чтобы я мог получить точную продолжительность во время записи для обновления слайдера вместо использования таймера.
Я также попробовал следующие методы
NSTimeInterval AQRecorder::GetTotalDuration()
{
UInt64 nPackets;
UInt32 propsize = sizeof(nPackets);
XThrowIfError (AudioFileGetProperty(mRecordFile, kAudioFilePropertyAudioDataPacketCount, &propsize, &nPackets), "kAudioFilePropertyAudioDataPacketCount");
Float64 fileDuration = (nPackets * mRecordFormat.mFramesPerPacket) / mRecordFormat.mSampleRate;
return fileDuration;
}
NSTimeInterval AQRecorder::GetCurrentTime() {
double timeInterval = 0;
AudioQueueTimelineRef timeLine;
OSStatus status = AudioQueueCreateTimeline(mQueue, &timeLine);
if(status == noErr) {
AudioTimeStamp timeStamp;
AudioQueueGetCurrentTime(mQueue, timeLine, &timeStamp, NULL);
timeInterval = timeStamp.mSampleTime * 1.0 / mRecordFormat.mSampleRate; // modified
}
return timeInterval;
}
Но первый дает длину записанных пакетов в файл, которая всегда меньше, чем фактическая продолжительность записи.Второй также не дает точной продолжительности (увеличено на 1-2 секунды).
Пожалуйста, помогите, если кто-то реализовал то же самое.Благодаря.