1

マイクからキャプチャされた ByteArray からサウンドを再生しようとしています。マイクからサウンドが聞こえることを期待していますが、ランダムで歪んだサウンドしか得られません。これは私が今使っているコードです:

var playBa:ByteArray;

var player:Sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, playMic);
sound.play();

var mic:Microphone = Microphone.getMicrophone();
mic.gain = 100;
mic.rate = 44;
mic.setSilenceLevel(0, 4000);
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, onMicSample);

function playMic(e:SampleDataEvent):void
{
    if (playBa != null) e.data.writeBytes(playBa, 0, playBa.length);
}

function onMicSample(e:SampleDataEvent):void
{
    playBa = e.data;
    playBa.position = 0;
    player.play();
}

そして、数秒間歪んだ音の後、これが出力ウィンドウに表示されたものです。

RangeError: Error #2004: One of the parameters is invalid.
at flash.media::Sound/play()
at vclass_fla::MainTimeline/onMicSample()

私を助けてください。私はAS3とここにまったく新しいです。どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

0

問題は、サンプル データ イベントが 2048 ~ 8192 サンプルのブロックを必要とすることです。サンプルが「playMic」の呼び出しでマイクによって録音された場合、ランタイムは「RangeError: Error #2004...」をスローします。

function playMic(event:SampleDataEvent):void
{
    trace("sample event");
    for (var ii:uint = 0; ii < 8192 && playBa.bytesAvailable > 0 ; ii++)
    {
        var n1:Number = playBa.readFloat();
        //trace(n1);
        event.data.writeFloat(n1);
        event.data.writeFloat(n1);
        if(playBa.bytesAvailable == 0)
        {
            trace("data_finished");
            break;
        }
    }

}
于 2016-02-24T20:57:43.750 に答える
0

一部のマイクは非常に敏感です。以下に示すように、適度な設定を調整する必要があります。また、スピーカーがマイクに近づくと、音がループします。

var myMic:Microphone = Microphone.getMicrophone(); // detect microphone
myMic.gain = 50;
myMic.setUseEchoSuppression(true);
myMic.setLoopBack(true);
myMic.setSilenceLevel(50, 1000);

サウンド キャプチャの詳細については、マイク サウンド データのキャプチャを試してください。

于 2013-02-18T05:27:25.850 に答える