> >

如果您的应用使用rec时已经开启了麦克风,那么使用常规的方式rec将无法录制有声音的视频。为了解决这个问题,您需要在标准流程中作如下修改:
1、在启动录制前,调用下面的方法:

Recorder.prepareSoundCopying(int channelCount, int sampleRate, int maxBufferSizeInBytes)

此方法须传入您所使用的录音数据的声道数、采样率和每次发送给rec的数据的最大字节数。这些如果您使用AudioRecorder来录音,这些参数都可以简单获取。方法调用后会得到一个ByteBuffer,用于充当数据缓存。

2、如果您使用AudioRecorder来获取PCM数据,并且您设置的缓存是short数组,此时您可能需要这样子处理:

ByteBuffer bb = recorder.prepareSoundCopying(1, 44100, bufferSizeInBytes);
ShortBuffer sb = bb.asShortBuffer();

将字节缓存设置为short缓存。

3、启动rec的录制程序。

4、每当您从audiorecorder那里读取到一份PCM数据时,调用下面的代码,将数据复制给rec:

sb.position(0);
sb.put(pcm, 0, sampleCount);
bb.position(0);
recorder.offerSample(bb.array(), 0, sampleCount * 2);

上面的代码假定您使用了short数组作为audiorecorder的输出缓存,如果您使用byte数组,则完整流程如下:

recorder.prepareSoundCopying(1, 44100, bufferSizeInBytes);

// 启动rec开始录制

while(录音标志) {
    // 读取audiorecorder的输出PCM到byte数组audioBuffer
    recorder.offerSample(audioBuffer, 0, audioBuffer.length);
}