关于使用AudioTrack播放音频PCM数据

2019-08-16  本文已影响0人  阑珊处等你

AudioTrack的用法:

1.创建AudioTrack的对象。

参数一 streamType 表示使用哪种音频管理策略

            STREAM_VOCIE_CALL 电话声音

            STREAM_SYSTEM                系统声音

            STREAM_RING                      铃声

            STREAM_MUSCI                  音乐声

            STREAM_ALARM                  警告声

            STREAM_NOTIFICATION    通知声

参数二 sampleRateInHz 采样率  前文提过

参数三 channelConfig     

            常用的有单声道和双声道。注意区分是录制还是播放。

参数四 audioFormat        位宽     前文提过

参数五 bufferSizeInBytes  缓存大小 前文提过

参数六 mode  播放方式

      方式一  static方式

      需要一次性将所有的数据都写入播放缓冲区,适合播放铃声,较短的音频片段。

      方式二  streaming方式

      按照一定的时间间隔不间断的写入音频数据。(常用方式)

//采样率

private int mSampleRate =44100;

//位宽

private int mAudioFormat = AudioFormat.ENCODING_PCM_16BIT;

private int mMinBufferSize;

private int streamType = AudioManager.STREAM_MUSIC;

private int mode = AudioTrack.MODE_STREAM;

private int mChannelCountOut = AudioFormat.CHANNEL_OUT_MONO;

private AudioTrackaudioTrack;

audioTrack =new AudioTrack(streamType, mSampleRate, mChannelCountOut, mAudioFormat, mMinBufferSize, mode);

2.开启一个子线程写入AudioTrack的缓冲区中

private void play()throws FileNotFoundException {

file =new File(rootFile, "test.pcm");

    if (!file.exists()) {

return;

    }

audioTrack.play();  //开始

    fileInputStream =new FileInputStream(file);

    outBys =new byte[mMinBufferSize];

    new Thread(new Runnable() {

@Override

        public void run() {

int len = -1;

            try {

while ((len =fileInputStream.read(outBys)) != -1) {

audioTrack.write(outBys, 0, len);

                }

}catch (Exception e) {

}finally {

if (audioTrack !=null) {

audioTrack.stop();

                    audioTrack.release();

                }

}

}

}).start();

}

上一篇下一篇

猜你喜欢

热点阅读