1

今、私はこのようなコードを持っています:

soundData = new ByteArray();
microphone = Microphone.getMicrophone();
microphone.codec = SoundCodec.SPEEX;
microphone.rate = 8;
microphone.gain = 100;
microphone.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);

function micSampleDataHandler(event:SampleDataEvent):void {
  while (event.data.bytesAvailable) {
    var sample:Number = event.data.readFloat();
    soundData.writeFloat(sample);
  }
}

生データはマイクから録音されます。SPEEXコーデック圧縮を使用した後にByteArrayにキャストするにはどうすればよいですか?変換されたデータは再生する必要があることに注意してください。

4

1 に答える 1

2

このコードを参照してください。

soundData.position=0;

var soundOutput:Sound = new Sound();
soundOutput.addEventListener(SampleDataEvent.SAMPLE_DATA, playSound);
soundOutput.play();

function playSound(soundOutput:SampleDataEvent):void {
    if (! soundData.bytesAvailable>0)
    {
        return;
    }
    for (var i:int = 0; i < 8192; i++) 
    {
        var sample:Number=0;
        if (soundData.bytesAvailable>0) 
        {
            sample=soundData.readFloat();
        }
        soundOutput.data.writeFloat(sample);
        soundOutput.data.writeFloat(sample);
    }
}

上記のコード playrateを使用するSoundCodec.SPEEX場合は、1x ではなく、playSound 関数を修正する必要があります。多分あなたはテストしました。削除する場合はmicrophone.codec = SoundCodec.SPEEX;知っています。

詳細: Adob​​e 公式 サウンド入力のキャプチャ

Speex での録音時に問題があります。

次の記事を参照してください。

http://forums.adobe.com/message/3571251#3571251

http://forums.adobe.com/message/3584747

SoundFormat が Speex を示している場合、オーディオは 16 kHz でサンプリングされた圧縮モノラルです。フラッシュでは、サウンド オブジェクトが 44khz で再生されます。16khz (Speex) でサンプリングしているので、SampleDataEvent イベント ハンドラーを介してデータを 2.75 高速で送信し、そのデータを取得しています。したがって、playSound の for(または while) ループを変更する必要があります。

以下のサイトをお勧めします。この記事は「プレイレートの調整方法」です。素晴らしいチュートリアル。

http://www.kelvinluck.com/2008/11/first-steps-with-flash-10-audio-programming/

于 2013-02-07T00:04:32.177 に答える