Мне удалось решить эту проблему путем поиска позиции на 1024 кадра перед позицией запрошенных кадров, чтения 1024 + requestedLength
кадров, а затем извлечения последних requestedLength
кадров из буфера.
ДонНе знаю наверняка, почему это решение работает, но у меня есть теория (на случай, если кто-то читает это)
В сжатом формате аудиофайл разбивается на пакеты.Кадры в среднем пакете требуют, чтобы любые предыдущие кадры (из того же пакета) были декодированы, чтобы их можно было понять.
Следующее предположение
Возможно когда вы ищете средний пакет с ExtAudioFileSeek
, это декодирование не происходит, и нули будут возвращаться, пока вы не достигнете границы следующего пакета.
Мое решение может работать, потому что я возвращаюсь достаточно далеко, чтобы прочитать все кадры до тех, которые мне нужны из одного пакета, поэтому декодирование действительно происходит.