2012-06-29 28 views
17

Attualmente ho un audio PCM sotto forma di un array di byte. Il formato è firmato a 16 bit little endian. Vorrei convertirlo in un formato riproducibile su Android, preferibilmente nella versione 3.2 o successiva. Qualcuno ha suggerimenti su come questo può essere fatto? Ho fatto qualche ricerca e ho provato quanto segue, ma nessuno ha avuto successo. Sarebbe molto apprezzato se qualcuno potesse suggerire un modo migliore o indicare dove ho sbagliato.Byte PCM non elaborati [] Per l'audio su Android

Ho provato a generare un Formato audio con le impostazioni audio corretti, ma Android non supporta la libreria javax.sound.sampled.

Ho anche provato a scrivere i dati PCM in un file wave, ma io sono in esecuzione in difficoltà a raggiungere tutte le necessarie informazioni di intestazione wav.

ho anche provato ad utilizzare la classe AudioTrack offerta dal Android, per riprodurre i dati PCM. Tuttavia, non riesco a sentire alcun suono. Ecco il mio metodo:

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"); 
    } 
} 

Qualsiasi suggerimento sarebbe apprezzato.

+0

aggiornato la mia risposta –

risposta

19

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

Questa classe sembra che è esattamente ciò che serve!

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

Scrive i dati audio sull'hardware audio per la riproduzione.

EDIT

Cambia il tuo stream per AudioManager.STREAM_MUSIC

+0

Grazie per me dirigere per risolvere il flusso. Ciò ha contribuito a correggere l'errore. – ShannonS

+6

Seleziona una risposta corretta, ti aiuterà a ricevere più risposte in futuro. –

17

la questione è se si vuole giocare campioni PCM ricevuti da qualche fonte direttamente in app Android o se si dispone di alcuni file esterni è necessario convertire. Nel primo caso descrivete come descritto da jack57. È davvero facile e puoi persino aggiungere marcatori per avere un tempismo preciso.

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(); 

quindi chiamare il metodo di scrittura in un ciclo:

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

Nel secondo caso basta usare un po 'di editor audio gratuito: http://audacity.sourceforge.net/download/. È possibile memorizzare campioni PCM in un file .txt, aprirlo nell'editor e salvare in un formato che vi serve ...

+0

Grazie per l'elaborazione. Questo mi ha aiutato a correggere l'errore. – ShannonS