7.5 使用AudioTrack播放原始音频
AudioTrack是Android中的一个类,它允许播放原始音频样本。利用该类能够播放使用AudioRecord捕获的音频,而他们并不能使用mediaPlayer对象来播放。
为了构造一个AudioTrack对象,需要传入一系列的配置变量来描述待播放的音频。
第一个参数是流类型。可能的值定义为AudioManager类中的常量。在示例中将使用AudioManager.STREAM_MUSIC,这是用于正常播放音乐的音频流。
第二个参数是将要播放的音频数据的采样率,以赫兹为单位。在示例中,采用11025Hz的采样率来捕获音频,因此咋播放时需要指定相同的值。
第三个参数是通道配置。可能的值与构造AudioRecord对象时使用的值相同,他们定义为AudioFormat类中的常量。他们的名称解释了其作用。
AudioFormat.CHANNEL_CONFIGURATION_MONO 单通道
AudioFormat.CHANNEL_CONFIGURATION_STEREO 双通道
AudioFormat.CHANNEL_CONFIGURATION_INVALID 错误的音频通道掩码
AudioFormat.CHANNEL_CONFIGURATION_DEFAULT 默认通道
第四个参数是音频格式,可能的值与构造AudioRecord对象时使用的值相同,他们定义为AudioFormat类中的常量。使用的值应匹配待传入的音频的值。
AudioFormat.ENCODING_DEFAULT
AudioFormat.ENCODING_INVALID
AudioFormat.ENCODING_PCM_16BIT
AudioFormat.ENCODING_PCM_8BIT
第五个参数是将对象中用于存储音频的缓冲区大小。为了确定使用最小的缓冲区大小,可以调用getMinBufferSize方法,同时传入采样率、通道配置和音频格式。
1 private int frequency=11025; 2 private int channelConfiguration=AudioFormat.CHANNEL_CONFIGURATION_MONO; 3 private int audioEncoding=AudioFormat.ENCODING_PCM_16BIT;
4 private int bufferSize=AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding)
最后一个参数是模式。可能的值定义为AudioTrack类中的常量。
AudioTrack.MODE_STATIC:在播放发生之前将所有的音频数据转移到AudioTrack对象。
AudioTrack.MODE_STREAM:在播放的同时将音频数据持续的转移到AudioTrack对象。
下面是AudioTrack配置:
1 AudioTrack audioRtack=new AudioTrack(AudioManager.STREAM_MUSIC, frequency, channelConfiguration, audioEncoding, bufferSize, AudioTrack.MODE_STREAM);
一旦构造了AudioTrack,就需要打开音频源,将音频数据读取到缓存中,并将它传递给AudioTrack对象。
根据一个包含了正确格式(11025Hz、16位、单声道)的原始PCM数据的文件,可以构造DataInputStream。
1 DataInputStream dis=new DataInputStream(new FileInputStream(recordingFile));
然后可以调用AudioTrack对象上的play方法,并开始从DataInputStream写入音频。
1 audioRtack.play(); 2 try { 3 while(isPlaying&&dis.available()>0){ 4 int i=0; 5 while(dis.available()>0&&i<audiodata.length){ 6 audiodata[i]=dis.readShort(); 7 i++; 8 } 9 audioRtack.write(audiodata, 0, audiodata.length); 10 } 11 } catch (IOException e) { 12 e.printStackTrace(); 13 } 14 try { 15 dis.close(); 16 } catch (IOException e) { 17 e.printStackTrace(); 18 }
以上内容涵盖了使用AudioTrack播放由AudioRecord录制的音频文件的基本知识。
posted on 2014-09-01 16:02 宁静致远,一览众山小 阅读(4847) 评论(0) 编辑 收藏 举报