我正在開發一個項目,用戶必須錄製他/她的聲音並將其提交給服務器。但在提交之前,用戶可能需要播放錄製的聲音。在Flex中使用SPEEX編解碼器播放麥克風
應用程序有一個記錄,並與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將;
- mic.rate = 16
我經歷了很多的論壇去了,但找不到與Speex編解碼器或microphone.rate = 16麥克風播放任何解決方案;