2010-02-03 15 views
5

Ich verwende derzeit die AudioTrack und AudioRecord Klassen in Android.Android AudioRecord und AudioTrack Codec-Optionen?

Ich verwende die reinen PCM-Daten, aber ich fragte mich, was meine Optionen für andere Codecs sind?

Von this page scheint es, dass ich nur mit AMR Schmalband codieren und decodieren kann?

ich derzeit die Audio-Klassen setzen sich wie folgt zusammen:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 
        buffersize); 

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 
        buffersize, 
        AudioTrack.MODE_STREAM); 

Also meine Frage ist, wie kann ich die Codierung von PCM zu einem der anderen unterstützten Codecs ändern?

Wenn ich versuche, ENCODING_PCM_16BIT auf AudioFormat zu ändern, bekomme ich nur die Optionen von Standard oder ungültiger Kodierung zusammen mit den PCM-Optionen.

Alle Links zu Tutorials zum Encodieren und Decodieren von Audio auf Android wäre großartig, wenn jemand von irgendeiner oder jeder Hilfe weiß hier sehr geschätzt.

Dank

EDIT:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        **MediaRecorder.AudioEncoder.AMR_NB**, 
        buffersize); 

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        **MediaRecorder.AudioEncoder.AMR_NB**, 
        buffersize, 
        AudioTrack.MODE_STREAM); 

Der Code läuft richtig, aber ich frage mich, das Audio als AMR_NB ist es zu kodieren tatsächlich und wenn dies: Ich habe meinen Code wie folgt geändert nicht ein richtiger Weg, es zu tun?

Ich war immer einen Pufferüberlauf beim rohen PCM aber keine Verwendung erscheint seit dem neuen Code mit mit dem MediaRecorder.AudioEncoder.AMR_NB anstelle dem AudioFormat.PCM verwendet

+4

Es ist lange her, seit Sie Ihre Frage gepostet haben, aber vielleicht ist es immer noch interessant für jemanden ... Sie kodieren nicht zu AMR_NB. Die Flags sind nur int-Felder. MediaRecorder.AudioEncoder.AMR_NB ist 0x01 ... wie AudioFormat.ENCODING_DEFAULT. Sie verwenden also nur die Standardcodierung. – hacksteak25

Antwort

2

Da die Dokumentation wird für AudioRecord und AudioTrack:

audioFormat  the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT 

Sie können nur mit 8-Bit und 16-Bit-PCM arbeiten. Wenn Sie Audio in anderen Formaten wünschen, verwenden Sie entweder AudioRecord und AudioTrack (versuchen Sie MediaRecorder und MediaPlayer) oder Sie müssen es mit Ihrem eigenen Code umcodieren, möglicherweise unter Nutzung des NDK.

und AudioTrack wurden speziell für Fälle entwickelt, in denen das betreffende Audio nicht von der OpenCORE-Multimediamaschine unterstützt wird, entweder weil es kein unterstützter Codec ist oder kein unterstütztes Streamingprotokoll (z. B. SIP).

Verwandte Themen