3

真のマイク ストリーミング入力を取得する方法はありますか?

私が今持っているサンプル コードは、マイク入力データを取得し、それをサウンド オブジェクトに保存して、すぐに再生しているように見えます。

それを正しくストリーミングする方法はありますか?

そうでない場合、私の例では、マイク入力データを取得する方法がありますが、フィードバックループを引き起こしているため、オーディオをミュートします(setLoopBackがfalseに設定されているにもかかわらず..)

以下のコード:

import flash.display.*;
import flash.events.*;
import flash.media.*;
import flash.media.SoundTransform;
import flash.utils.*;

var _soundBytes:ByteArray = new ByteArray();
var _micBytes:ByteArray;
var son:Sound;
var sc:SoundChannel;
var pow:int = 0;
var myBar:Sprite;

stage.quality = "LOW";

// this code ended up muting the mic input oddly?
//SoundMixer.soundTransform = new SoundTransform(0);

init();

function init()
{
    myBar = new Sprite;
    micInit();
    soundInit();

    addEventListener(Event.ENTER_FRAME, visualise);
}

function micInit()
{
    var mic:Microphone = Microphone.getMicrophone();

    if(mic != null) {
        //mic.setUseEchoSuppression(true);
        mic.setLoopBack(false);
        mic.setSilenceLevel(0);
        mic.rate = 44;
        mic.gain = 60;
        mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleDataHandler);
    }
}

function micSampleDataHandler(event:SampleDataEvent):void
{
    _micBytes = event.data;
    sc = son.play();
}

function soundInit():void {
    son = new Sound();
    son.addEventListener(SampleDataEvent.SAMPLE_DATA, soundSampleDataHandler);
}

function soundSampleDataHandler(event:SampleDataEvent):void {
    for (var i:int = 0; i < 8192 && _micBytes.bytesAvailable > 0; i++) {
        var sample:Number = _micBytes.readFloat();
        event.data.writeFloat(sample);
        event.data.writeFloat(sample);
    }
}

function drawLines(e:Event):void{

    SoundMixer.computeSpectrum(_soundBytes, true);
    myBar.graphics.clear();
    myBar.graphics.lineStyle(2,0xabc241);
    for (var i=0; i < 256; i++) {
        pow = _soundBytes.readFloat()*200;
        pow = Math.abs(pow);
        myBar.graphics.drawRect(i*2, 0, 2, pow);
        addChild(myBar);
    }
}

あなたが助けてくれることを願っています!

4

1 に答える 1

2

アコースティック エコー キャンセレーションを使用するには、Microphone.getEnhancedMicrophone() を呼び出して、拡張された Microphone オブジェクトへの参照を取得します。Microphone.enhancedOptions プロパティを MicrophoneEnhancedOptions クラスのインスタンスに設定します。ここにすべてを説明する記事があります。 アドビの拡張マイク オプションに関する記事

編集: 話すのが早すぎました。これまで何度も拡張マイクを使用してきましたが、この記事から新たに学べる興味深いことがあるかどうかを自分で読んでみることにしました...そして、これは終わり近くにありました

AEC は計算コストが高くなります。現在、Flash Player および AIR でサポートされているのはデスクトップ プラットフォームのみです。

日付だけ見たけど…去年だったので、試してみて、今はサポートされていますか?!?

于 2012-11-30T19:38:01.597 に答える