Я работаю над аудиорекордером и использую 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 секунды).
Помогите, если кто реализовал подобное. Спасибо.