Реализовываете представление аудио-формы волны и аудио-шкалы времени в iOS?

Я работаю над приложением, которое позволит пользователям записывать с микрофона, и я использую аудиоустройства для этой цели. У меня есть аудио-бэкэнд, он работает и работает с представлениями / элементами управления и т. Д. Мне еще предстоит реализовать две вещи:

1) Я буду использовать OpenGL ES для рисования формы аудиовхода, кажется, нет более простого способа сделать это для рисования в реальном времени. Я буду рисовать внутри GLKView. После того, как что-то записано, пользователь должен иметь возможность прокручивать назад и вперед и видеть форму волны без сбоев. Я знаю, что это выполнимо, но мне трудно понять, как это можно реализовать. Предположим, пользователь прокручивает, нужно ли мне каждый раз перечитывать записанное аудио и перерисовывать все заново? Я, очевидно, не хочу хранить всю запись в памяти, и чтение с диска идет медленно.

2) Для прокрутки и т. Д. Пользователь должен видеть временную шкалу, и, если у меня есть представление о 1 вопросе, я не знаю, как реализовать временную шкалу.

Все функциональные возможности, которые я описываю, выполнимы, так как их можно увидеть в приложении Voice Memos. Любая помощь всегда ценится.

Вот изображение, которое отображает вопрос лучше

1 ответ

Решение

Я сделал только это. То, как я это сделал, было создать структуру данных, которая содержит различные данные "уровней масштабирования" для аудио. Если вы не воспроизводите звук в разрешении, которое будет отображать 1 сэмпл на 1 пиксель, вам не нужно будет читать каждый сэмпл с диска, поэтому вы просто уменьшаете сэмплы до гораздо меньшего массива, который может храниться в памяти досрочно. Наивный пример, если ваша форма сигнала отображать аудио в соотношении 64 выборок на пиксель. Допустим, у вас есть массив из 65536 стерео сэмплов, вы должны усреднить каждую пару L/R сэмплов в положительное значение моно, а затем усреднить 64 из положительных значений моно в одно число с плавающей запятой. Затем ваш массив из 65536 аудиосэмплов может быть визуализирован с помощью массива из 512 "визуальных сэмплов". Реализация в реальном мире стала намного сложнее, чем эта, поскольку у меня есть способы отобразить все уровни масштабирования, живую ресэмплинг и тому подобное, но это основная идея. По сути, это Mip-карта для аудио.

Другие вопросы по тегам