андроид java аудио dsp сайты или андроид звуковая библиотека? - PullRequest
1 голос
/ 06 декабря 2011

Кто-нибудь знает какие-либо полезные ссылки для изучения аудио DSP для Android? или звуковая библиотека?

Я пытаюсь создать простой микшер для воспроизведения wav-файлов, но понял, что недостаточно разбираюсь в dsp, и ничего не могу найти для Android.

У меня есть wav-файл, загруженный в байтовый массив, и AudioTrack по короткому циклу. Как я могу кормить данные в?

Я ожидаю, что это сообщение будет проигнорировано, но его стоит попробовать.

    FileInputStream is = new FileInputStream(filePath);
                BufferedInputStream bis = new BufferedInputStream(is);
            DataInputStream dis = new DataInputStream(bis);

            int i = 0;

                while (dis.available() > 0) {
                    byteData[i] = dis.readByte(); //byteData

                  i++;
                }

 final int minSize = AudioTrack.getMinBufferSize( 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT ); 
           track = new AudioTrack( AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_STEREO, AudioFormat.ENCODING_PCM_16BIT, 
             minSize, AudioTrack.MODE_STREAM);
           track.play();
           bRun=true;

        new Thread(new Runnable() {

            public void run() { 

                  track.write(byteData, 0, minSize);


            }

            }).start();

1 Ответ

0 голосов
/ 17 марта 2012

Я сделаю это только потому, что несколько месяцев назад я был на вашем месте ...

Если у вас уже есть аудиофрагменты файла wav в байтовом массиве, вам просто нужно передатьсэмплы к объекту звуковой дорожки (ищите методы write ()).

Чтобы смешать аудио вместе, вы просто добавляете одинаковые элементы из каждой дорожки.Например, добавьте первый семпл с дорожки 1 на дорожку 2, добавьте второй семпл с дорожки 1 на дорожку 2 и так далее.Конечным результатом в идеале должен быть третий массив, содержащий добавленные сэмплы, которые вы передаете методу write вашего экземпляра звуковой дорожки.

Вы должны помнить об отсечении.Если ваш тип данных «короткий», то максимально допустимое значение равно 32768. Простой способ убедиться, что добавленные выборки не превышают этот предел, - выполнить сложение и сохранить результат в переменной, тип данных которой больше, чем короткий (например, int) и оцените результат.Если оно больше 32768, тогда установите его равным 32768 и приведите его обратно к короткому.

int result = track1[i] + track2[i];

if(result > 32768) {
   result = 32768;
}
else if(result < -32768) {
    result = -32768;
}

mixedAudio[i] = (short)result;

Обратите внимание, что приведенный выше фрагмент также проверяет минимальный диапазон короткого замыкания.

Аппологиииз-за отсутствия форматирования я нахожусь на своем мобильном телефоне в поезде: -)

Удачи.

...