代码之家  ›  专栏  ›  技术社区  ›  Donal Rafferty

Android音频记录和音频轨编解码器选项?

  •  5
  • Donal Rafferty  · 技术社区  · 15 年前

    我目前在Android上使用audioTrack和audioRecord类。

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

    this page 似乎我只能用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更改为其他受支持的编解码器之一?

    当我尝试改变音频格式上的编码_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,如果这不是一种正确的方式?

    在使用原始PCM时,我得到了一个缓冲区溢出,但自从使用mediarecorder.audioencoder.amr_nb而不是audioformat.pcm的新代码后,没有出现过缓冲区溢出。

    1 回复  |  直到 15 年前
        1
  •  2
  •   CommonsWare    15 年前

    文件规定 AudioRecord AudioTrack :

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

    您只能使用8位和16位PCM。如果您想要其他格式的音频,请不要使用 录音磁带 音轨 (试一试 MediaRecorder MediaPlayer )或者,您必须使用自己的代码来转换它,可能需要利用ndk。

    录音磁带 音轨 专为OpenCore多媒体引擎不支持相关音频的情况而设计,原因可能是它不是受支持的编解码器,也可能是不受支持的流协议(如SIP)。