Don*_*rty 5 audio android codec pcm amr
我目前在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);
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何将编码从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);
Run Code Online (Sandbox Code Playgroud)
代码运行正常,但我想知道它实际上将音频编码为AMR_NB,如果这不是一个正确的方法吗?
我在使用原始PCM时遇到了缓冲区溢出,但由于使用MediaRecorder.AudioEncoder.AMR_NB而不是AudioFormat.PCM使用新代码,因此没有出现
AudioRecord正如和 的文档所述AudioTrack:
audioFormat the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT
Run Code Online (Sandbox Code Playgroud)
您只能使用 8 位和 16 位 PCM。如果您想要其他格式的音频,要么不要使用AudioRecordand AudioTrack(尝试MediaRecorderand MediaPlayer),要么您必须使用您自己的代码(可能利用 NDK)对其进行转码。
AudioRecord专AudioTrack为 OpenCORE 多媒体引擎不支持相关音频的情况而设计,因为它不是受支持的编解码器或不受支持的流协议(例如,SIP)。