我正在做一个项目,用户必须录制他/她的声音,并将其提交到服务器。但在提交之前,用户可能需要播放录制的声音。
该应用程序具有SPEEX 编解码器的录制和播放功能。但我发现奇怪和困难的是,当我用户播放录制的音频时,播放速度比正常快或慢,无法理解。好像它的快进。
这是示例代码:
private var mic:Microphone;
private var rec:ByteArray;
private var snd:Sound;
private var channel:SoundChannel;
protected function recBtn_clickHandler(event:MouseEvent):void
{
rec = new ByteArray();
mic = Microphone.getMicrophone();
mic.setLoopBack(false);
mic.setUseEchoSuppression(true);
mic.gain = 50;
mic.setSilenceLevel(5, 1000);
mic.codec = SoundCodec.SPEEX;
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, getMicAudio);
}
protected function plyBtn_clickHandler(event:MouseEvent):void
{
snd.addEventListener(SampleDataEvent.SAMPLE_DATA, playRecorded);
channel = snd.play();
}
private function getMicAudio(e:SampleDataEvent): void
{
rec.writeBytes(e.data);
}
private function playRecorded(e:SampleDataEvent): void
{
if (!rec.bytesAvailable > 0) return;
for (var i:int = 0; i < 2048; i++){
var sample:Number = 0;
if (rec.bytesAvailable > 0) sample = rec.readFloat();
for (var j:uint = 0; j < 6; j++) {
e.data.writeFloat(sample);
}
}
}
这种情况仅在以下情况下发生:
- mic.codec = SoundCodec.SPEEX;
- 麦克风速率 = 16
我浏览了很多论坛,但找不到任何使用 SPEEX 编解码器或mic.rate = 16 进行麦克风播放的解决方案;