2012-11-30 52 views
3

有沒有辦法獲得真正的麥克風流輸入?[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); 
    } 
} 

希望你能幫助!

回答

2

要使用聲學回聲消除,請調用Microphone.getEnhancedMicrophone()以獲取對增強型麥克風對象的引用。將Microphone.enhancedOptions屬性設置爲MicrophoneEnhancedOptions類的實例。這是一篇討論這一切的文章。 Article about enhanced microphone options at Adobe

編輯:我說得太快了。我之前使用過增強型麥克風很多次,但是我決定自己閱讀這篇文章,看看是否有任何有趣的事情可以從中學習...並且我發現它接近尾聲

AEC在計算上很昂貴。目前,只有桌面平臺支持Flash Player和AIR

儘管我只是看了日期......去年,所以也許試試看,現在支持?!?

+0

道歉爲愚蠢,但這將如何幫助我? (讓我們只是說它適用於Android) –

+0

你說你試圖破解糟糕的反饋問題。這就是增強型麥克風的聲學回聲消除解決方案。 –

+1

這裏...這個應用程序做你正在做的事情(也記錄音頻)...它有fxp,你可以下載[示例應用程序](http://coenraets.org/blog/air-for- android-samples/voice-notes-for-android /) –