Android音频播放AudioTrack

在Android中说到音频播放,通常都会想到使用MediaPlayer,今天要介绍的确是AudioTrack。

       1、创建AudioTrack对象               

AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)

   参数1:音频流类型 可取的值有:

    AudioManager.STREAM_ALARM;//警告声
    AudioManager.STREAM_DTMF;//双音多频
    AudioManager.STREAM_MUSIC;//音乐声
    AudioManager.STREAM_NOTIFICATION;//通知声
    AudioManager.STREAM_RING;//响铃声
    AudioManager.STREAM_SYSTEM;//系统声
    AudioManager.STREAM_VOICE_CALL;//电话声

   参数2:采样率 取值范围>4000<48000

   参数3:声道数  可取的值有:

    AudioFormat.CHANNEL_OUT_MONO;//单声道

    AudioFormat.CHANNEL_OUT_STEREO;//双声道

   参数4:采样精度:一个采样点16比特,相当于2个字节 可取的值有:

    AudioFormat.ENCODING_PCM_16BIT;//16采样点

    AudioFormat.ENCODING_PCM_8BIT;//8采样点

   参数5:播放音频的最长样品

   参数6:模式:可取的值  

    AudioTrack.MODE_STREAM;//流模式

    AudioTrack.MODE_STATIC;//静态模式 

  2、在流模式下,如果不确定最小缓冲区大小时,可以调用AudioTrack的静态方法

int getMinBufferSize (int sampleRateInHz, 
                int channelConfig, 
                int audioFormat)
   来获取最小缓冲区大小。

   参数1:采样率  取值范围>4000<48000

   参数2:通道数 可取的值有:

    AudioFormat.CHANNEL_OUT_MONO;//单声道

    AudioFormat.CHANNEL_OUT_STEREO;//双声道

   参数3:采样精度 一个采样点16比特,相当于2个字节可取的值有:

    AudioFormat.ENCODING_PCM_16BIT;//16采样点

    AudioFormat.ENCODING_PCM_8BIT;//8采样点

  3、向AudioTrack中写入流数据。

int write (byte[] audioData, 
                int offsetInBytes, 
                int sizeInBytes)
   在流模式下,可以边写边播放。

   在静态模式下,只能写一次数据,一次将全部数据写进去。

  4、播放

   audiotrack.play();

  5、暂停,释放资源。

   if(audiotrack != null){
       audiotrack.stop();
       audiotrack.release();
   }


猜你喜欢

转载自blog.csdn.net/yangshuangyue/article/details/60572456