Визуализация Android AudioTrack из ByteStream - PullRequest
4 голосов
/ 27 января 2011

В настоящее время я использую AudioTrack для воспроизведения записанной музыки. Это включает запись данных трека в аудиобуфер. Как мне использовать поток аудиоданных для рисования формы волны на экране, представляющей звук, воспроизводимый в реальном времени? Я не использовал продвинутую графику на Android, прежде чем я не уверен, как начать. Должен ли я использовать openGL или я могу реализовать View? а также как мне преобразовать данные во что-нибудь полезное для рисования.

Ответы [ 2 ]

3 голосов
/ 27 января 2011

Ваш первый шаг - позвонить setPositionNotificationPeriod(periodInFrames). Это определяет, как часто ваше приложение будет получать вызов onPeriodicNotification. Таким образом, если вы выполняете визуализацию типа осциллографа и хотите в любой момент отображать на экране аудиоданные на 50 миллисекунд, вы должны использовать значение periodInFrames 2205 (при условии, что ваш файл WAV моно, 16 бит за образец и частоту дискретизации 44100 Гц).

Внутри вашего события уведомления вы можете определить, где в данный момент воспроизводится ваш объект AudioTrack, а затем получить соответствующий фрагмент данных из исходного файла или массива. Затем вы используете, а затем рисуете этот фрагмент данных на своем экране, используя обычные методы 2D-графики (здесь нет необходимости в openGL). Этот ответ имеет образец C # для рисования фрагмента аудиоданных - его легко перевести на Java.

Итак, ваш код будет выглядеть примерно так:

audioTrack.setPositionNotificationPeriod(2205);
audioTrack.setPlaybackPositionUpdateListener(this);

...

public void onPeriodicNotification(AudioTrack track) {
    int pos = track.getNotificationMarkerPosition();
    short[] slice = Array.copy(_data, pos, _sliceSize) // pseudo-code
    // render the slice to the view
}
2 голосов
/ 12 марта 2012

Что касается этой точки, я бы предложил вам использовать класс android.media.audiofx.Visualizer, который обрабатывает генерацию массивов сигналов или частотных массивов. Поэтому единственное, о чем вам нужно позаботиться, - это рисование графики.

Вы можете использовать этот класс с момента выпуска API 9.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...