5

現在、Android で AudioTrack および AudioRecord クラスを使用しています。

純粋な PCM データを使用していますが、他のコーデックにはどのようなオプションがあるのか​​疑問に思っていました。

このページから、 AMR ナローバンドを使用してのみエンコードおよびデコードできるようです?

現在、Audio クラスを次のように設定しています。

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

私の質問は、エンコーディングを PCM からサポートされている他のコーデックのいずれかに変更するにはどうすればよいですか?

AudioFormat で ENCODING_PCM_16BIT を変更しようとすると、PCM オプションと一緒にデフォルトまたは無効なエンコーディングのオプションしか取得できません。

Android でのオーディオのエンコードとデコードに関するチュートリアルへのリンクは、ここでの助けを知っている人がいれば素晴らしいでしょう。

ありがとう

編集:コードを次のように変更しました。

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

コードは適切に実行されますが、実際に Audio を AMR_NB としてエンコードするのでしょうか?これが適切な方法ではないのでしょうか?

生の PCM を使用するとバッファ オーバーフローが発生しましたが、AudioFormat.PCM の代わりに MediaRecorder.AudioEncoder.AMR_NB を使用して新しいコードを使用して以来、何も発生していません。

4

1 に答える 1

3

ドキュメンテーションが と について述べているようAudioRecordAudioTrack

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

8 ビットおよび 16 ビットの PCM でのみ作業できます。AudioRecord他の形式のオーディオが必要な場合は、 and を使用しない( andをAudioTrack試す) か、NDK を利用して、独自のコードを使用してトランスコードする必要があります。MediaRecorderMediaPlayer

AudioRecordサポートされてAudioTrackいるコーデックまたはサポートされているストリーミング プロトコル (SIP など) ではないために、問題のオーディオが OpenCORE マルチメディア エンジンでサポートされていない場合のために特別に設計されています。

于 2010-02-03T13:57:37.960 に答える