Android音频播放之AudioTrack

来源:互联网 发布:js表单提交方式 编辑:程序博客网 时间:2024/05/16 18:35

Android音频播放之AudioTrack


文章摘自:http://blog.sina.com.cn/s/blog_74b752870100qxrv.html


在Android系统中有一个AudioTrack类,该类可是实现将音频数据输出到音频设备中。

 
  该类的SDK文档是如下描述的:

android.media.AudioTrack.AudioTrack(intstreamType, int sampleRateInHz, int channelConfig, int audioFormat,int bufferSizeInBytes, int mode) throwsIllegalArgumentException

 

public AudioTrack (intstreamType, int sampleRateInHz, int channelConfig, int audioFormat,int bufferSizeInBytes, int mode)

Since: API Level3

Class constructor.

Parameters
streamTypethe type of the audio stream. See STREAM_VOICE_CALL,STREAM_SYSTEM,STREAM_RING,STREAM_MUSICandSTREAM_ALARMsampleRateInHzthe sample rate expressed in Hertz. Examples of rates are (butnot limited to) 44100, 22050 and 11025.channelConfigdescribes the configuration of the audio channels. SeeCHANNEL_OUT_MONO andCHANNEL_OUT_STEREOaudioFormatthe format in which the audio data is represented. SeeENCODING_PCM_16BIT andENCODING_PCM_8BITbufferSizeInBytesthe total size (in bytes) of the buffer where audio data isread from for playback. If using the AudioTrack in streaming mode,you can write data into this buffer in smaller chunks than thissize. If using the AudioTrack in static mode, this is the maximumsize of the sound that will be played for this instance. SeegetMinBufferSize(int, int, int) to determine the minimumrequired buffer size for the successful creation of an AudioTrackinstance in streaming mode. Using values smaller thangetMinBufferSize() will result in an initialization failure.modestreaming or static buffer. See MODE_STATICandMODE_STREAM
Throws
IllegalArgumentException 

   使用这个类可以很强轻松地将音频数据在Android系统上播放出来,下面贴出我自己写的源码:
    AudioTrackaudio = new AudioTrack(
                          AudioManager.STREAM_MUSIC, // 指定在流的类型
                          32000, // 设置音频数据的采样率 32k,如果是44.1k就是44100
                          AudioFormat.CHANNEL_OUT_STEREO, //设置输出声道为双声道立体声,而CHANNEL_OUT_MONO类型是单声道
                          AudioFormat.ENCODING_PCM_16BIT, //设置音频数据块是8位还是16位,这里设置为16位。好像现在绝大多数的音频都是16位的了
                          AudioTrack.MODE_STREAM //设置模式类型,在这里设置为流类型,另外一种MODE_STATIC貌似没有什么效果
                      );
   audio.play(); // 启动音频设备,下面就可以真正开始音频数据的播放了
    //打开mp3文件,读取数据,解码等操作省略 ...
    byte[] buffer = newbuffer[4096];
    intcount;
   while(true)
    {
       // 最关键的是将解码后的数据,从缓冲区写入到AudioTrack对象中
       audio.write(buffer, 0, 4096);
       if(文件结束) break;
    }
    //最后别忘了关闭并释放资源
   audio.stop();
   audio.release();
0 0