Android Audiorecord和Audiotrack编解码器选项?
题
我目前在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使用新代码以来,没有出现。
解决方案
作为文件所述 AudioRecord
和 AudioTrack
:
audioFormat the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT
您只能使用8位和16位PCM工作。如果您想要其他格式的音频,则请勿使用 AudioRecord
和 AudioTrack
(尝试 MediaRecorder
和 MediaPlayer
),否则您将必须使用自己的代码转码,并可能利用NDK。
AudioRecord
和 AudioTrack
专为Opencore多媒体引擎不支持所讨论音频的情况而设计,要么是因为它不是支持的编解码器,要么是受支持的流协议(例如SIP)。
不隶属于 StackOverflow