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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top