ユーザーが自分の声を録音してサーバーに送信する必要があるプロジェクトに取り組んでいます。ただし、送信する前に、ユーザーは録音したサウンドを再生する必要がある場合があります。
このアプリケーションには、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 コーデックまたはマイクでマイクを再生するための解決策を見つけることができませんでした。rate = 16;