我目前在Android中使用Audiotrack和Audiorecord课程。

我使用纯PCM数据,但我想知道其他编解码器的选择是什么?

这一页 看来我只能使用AMR窄带编码和解码?

我目前设置了音频类,如下所示:

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

该代码运行正常,但我想知道它实际上是否将音频编码为AMR_NB,如果这不是正确的方法?

使用RAW PCM时,我正在获得缓冲区溢出,但是自从使用Mediarecorder.audioencoder.amr_nb而不是AudioFormat.pcm使用新代码以来,没有出现。

有帮助吗?

解决方案

作为文件所述 AudioRecordAudioTrack:

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

您只能使用8位和16位PCM工作。如果您想要其他格式的音频,则请勿使用 AudioRecordAudioTrack (尝试 MediaRecorderMediaPlayer),否则您将必须使用自己的代码转码,并可能利用NDK。

AudioRecordAudioTrack 专为Opencore多媒体引擎不支持所讨论音频的情况而设计,要么是因为它不是支持的编解码器,要么是受支持的流协议(例如SIP)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top