android提供一套完整的audio机制,对上层用户而言,概括起来就是两个方面:录音(record)和播放(track).
了解了这两个简单的接口,对开发普通的audio应用基本上就足够了。总结如下:
录音(record):
min = AudioRecord.getMinBufferSize(Freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
这是在查询系统对特定的采样频率和模式下需要的最小数据包大小。Freq 可以设8000, 16000,32000, 44100, 48000.但是得参考具体的硬件平台参数, 某些平台是只支持固定的采样频率的。
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, Freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
min);
这就是实际的record对象了。可以看到这个例子里的设置是MIC采样,单声道,PCM 16B的。这就已经配置了用户需要的audio参数。
recorder.startRecording();
while(true)
{
recorder.read(buf_id, 0, min);
}
了解了这两个简单的接口,对开发普通的audio应用基本上就足够了。总结如下:
录音(record):
min = AudioRecord.getMinBufferSize(Freq,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
这是在查询系统对特定的采样频率和模式下需要的最小数据包大小。Freq 可以设8000, 16000,32000, 44100, 48000.但是得参考具体的硬件平台参数, 某些平台是只支持固定的采样频率的。
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, Freq, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
min);
这就是实际的record对象了。可以看到这个例子里的设置是MIC采样,单声道,PCM 16B的。这就已经配置了用户需要的audio参数。
recorder.startRecording();
while(true)
{
recorder.read(buf_id, 0, min);
这就是真正干活的部分了,值得注意的是read的最后一个参数min并不一定是上文求出的数值,使用者完全可以根据实际情况,自己推算出合适的数值。
最后别忘了关门:)
recorder.stop();
recorder.release();
播放(playback/track):
接口与recorder非常类似。
int iMinBufSize = AudioTrack.getMinBufferSize(sampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT);
这是在询问系统固定模式下的最小buffer size。
track = new AudioTrack(AudioManager.STREAM_VOICE_CALL, sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT,
iMinBufSize, AudioTrack.MODE_STREAM);
得到对象了。具体解释参见上文。
while(true)
{
track.write(buf_id, 0, chunkSize);
}
干活!同样,这个写 的数目需要使用者自己测算。
收工:
track.flush();
track.release();