Android AudioreCord und Audiotrack -Codec -Optionen?
Frage
Derzeit verwende ich die Audiotrack- und AudioreCord -Kurse in Android.
Ich verwende die reinen PCM -Daten, aber ich habe mich gefragt, welche Optionen für andere Codecs sind?
Aus diese Seite Es scheint, dass ich nur mit AMR -Schmalband codieren und dekodieren kann?
Ich habe derzeit die Audiokassen wie folgt eingerichtet:
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);
Meine Frage ist also, wie ich die Codierung von PCM zu einem der anderen unterstützten Codecs ändere?
Wenn ich versuche, coding_pcm_16bit bei audioFormat zu ändern, erhalte ich nur die Optionen für Standard- oder ungültige Codierung zusammen mit den PCM -Optionen.
Alle Links zu Tutorials zur Codierung und Dekodierung von Audio auf Android wären großartig, wenn jemand von irgendeiner Hilfe von einer oder einer sehr geschätzten Hilfe weiß.
Vielen Dank
BEARBEITEN: Ich habe meinen Code in Folgendes geändert:
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 ordnungsgemäß, aber ich frage mich, ob er das Audio tatsächlich als AMR_NB codiert und wenn dies keine richtige Möglichkeit ist, dies zu tun?
Ich habe einen Pufferüberlauf erhalten, als ich RAW PCM verwendet habe, aber seit der Verwendung des neuen Codes mit dem Mediarecorder.audioEncoder.amr_nb verwendet anstelle der audioformat.pcm
Lösung
Wie die Dokumentation für sagt 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 nicht AudioRecord
und AudioTrack
(Versuchen MediaRecorder
und MediaPlayer
) oder Sie müssen es mit Ihrem eigenen Code transkodieren und möglicherweise den NDK nutzen.
AudioRecord
und AudioTrack
werden speziell für Fälle entwickelt, in denen das fragliche Audio nicht von der OpenCore -Multimedia -Engine unterstützt wird, weder weil es sich nicht um ein unterstütztes Codec noch um ein unterstütztes Streaming -Protokoll (z. B. SIP) handelt.