Я ищу реализацию, которая использует кольцевой буфер в remoteio для вывода очень большого аудиофайла.
Я столкнулся с CARingBuffer от Apple, но мне приснился кошмар, пытающийся реализовать его в моем проекте ios.
В качестве альтернативы я наткнулся на этот кольцевой буфер, который я использую (безуспешно).
Кольцевой буфер
Как я пытался реализовать это следующим образом.
Откройте аудиофайл, который идеально вырезан с помощью extaudiofileref.
Полностью заполнить чтение моего кольцевого буфера из файла (номер кадра% inTimeSamples = readpoint)
В моем обратном вызове, если кольцевой буфер заполнен менее чем на 50%, я вызываю executeselector в фоновом режиме, чтобы добавить больше выборок.
Если сэмплов достаточно, я просто читаю из буфера.
Кажется, все это работает нормально, пока я не подойду близко к концу файла и не захочу зациклить его. Когда повторное назначение + количество выборок, необходимых для заполнения кольцевого буфера, превышает общее количество кадров, я извлекаю часть аудио из оставшейся части файла, ищу кадр 0, затем читаю остальные.
Это всегда звучит странно. Я думаю, что это может иметь какое-то отношение к тому факту, что обратный вызов remoteio выполняется намного быстрее, чем фоновый поток, поэтому к моменту завершения фонового потока не только изменилась вычисленная точка чтения, но и заголовок и хвост буфера не являются они должны быть.
Если пример кода слишком велик для публикации, я бы принял псевдокод в качестве ответа. Моя методология для решения этой проблемы отсутствует.