有沒有辦法獲得真正的麥克風流輸入?[AS3] [Air for Android]獲取流式麥克風輸入?
我目前看到的示例代碼是獲取麥克風輸入數據,並將其保存到聲音對象並立即播放。
有沒有一種方法可以正確流式傳輸?下面
如果沒有,在我的例子,有沒有辦法讓麥克風輸入數據,但使音頻靜音,因爲它是造成反饋迴路(儘管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);
}
}
希望你能幫助!
道歉爲愚蠢,但這將如何幫助我? (讓我們只是說它適用於Android) –
你說你試圖破解糟糕的反饋問題。這就是增強型麥克風的聲學回聲消除解決方案。 –
這裏...這個應用程序做你正在做的事情(也記錄音頻)...它有fxp,你可以下載[示例應用程序](http://coenraets.org/blog/air-for- android-samples/voice-notes-for-android /) –