Подтвердить что ты не робот

PCM Raw Bytes [] для аудио на Android

В настоящее время у меня есть аудио PCM в виде массива байтов. Формат подписан 16-битным малым значком. Я хотел бы преобразовать это в какой-нибудь воспроизводимый формат на Android, желательно версии 3.2 или выше. Кто-нибудь имеет предложения о том, как это можно сделать? Я провел некоторое исследование и попробовал следующее ниже, но ни один из них не был успешным. Было бы очень признательно, если кто-нибудь может предложить лучший способ или указать, где я поступил неправильно.

Я попытался создать AudioFormat с правильными настройками звука, однако Android не поддерживает библиотеку javax.sound.sampled.

Я также пробовал записывать данные PCM в волновой файл, но я столкнулся с проблемой получения всей необходимой информации заголовка wav.

Я также попытался использовать класс AudioTrack, предлагаемый Android, для воспроизведения данных PCM. Однако я не могу слышать звук. Вот мой метод:

    public void playback(){
         try{
              AudioTrack audioTrack = new  AudioTrack(AudioManager.STREAM_VOICE_CALL, 8000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 500000, AudioTrack.MODE_STATIC);
              audioTrack.write(audio, 0, 500000);

      } catch(Throwable t){
        Log.d("Audio","Playback Failed");
    }
}

Любые предложения будут оценены.

4b9b3361

Ответ 1

http://developer.android.com/reference/android/media/AudioTrack.html

Этот класс выглядит так, как будто он вам нужен!

write(byte[] audioData, int offsetInBytes, int sizeInBytes)

Записывает аудиоданные в аудиооборудование для воспроизведения.

ИЗМЕНИТЬ

Измените свой поток на AudioManager.STREAM_MUSIC

Ответ 2

Вопрос заключается в том, хотите ли вы воспроизводить образцы PCM, которые вы получаете из какого-либо источника непосредственно в приложении Android, или если у вас есть внешние файлы, которые вам нужно преобразовать. В первом случае перейдите к описанию Jack57. Это очень просто, и вы даже можете добавить маркеры для точного времени.

int bufferSize = AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);

AudioTrack mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);

mAudioTrack.play();

затем вызовите метод write в цикле:

mAudioTrack.write(buffer, 0, buffer.length);

Во втором случае просто используйте бесплатный аудиоредактор: http://audacity.sourceforge.net/download/. Вы можете хранить образцы PCM в виде TXT файла, открывать его в редакторе и сохранять в нужном формате...