【问题标题】:[AS3][Air for Android] Get streaming mic input?[AS3][Air for Android] 获取流式麦克风输入?
【发布时间】:2012-11-30 17:52:18
【问题描述】:

有没有办法获得真正的麦克风流输入?

我目前的示例代码看起来是获取麦克风输入数据,并将其保存到声音对象并立即播放。

有没有办法正确流式传输?

如果没有,在我的示例中,有没有办法获取麦克风输入数据,但静音音频,因为它会导致反馈循环(尽管 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 actionscript-3 flash air


    【解决方案1】:

    要使用回声消除,请调用 Microphone.getEnhancedMicrophone() 以获取对增强型麦克风对象的引用。将 Microphone.enhancedOptions 属性设置为 MicrophoneEnhancedOptions 类的实例。这是一篇讨论这一切的文章。 Article about enhanced microphone options at Adobe

    编辑:我说得太早了。我以前用过很多次增强型麦克风,但我决定自己阅读这篇文章,看看是否有什么有趣的东西我可以从中学到新的东西……我在接近尾声时发现了这个

    AEC 的计算成本很高。目前,Flash Player 和 AIR 仅支持桌面平台

    虽然我只是看了日期...去年,所以也许试一试现在支持它?!?

    【讨论】:

    • 为我的愚蠢道歉,但这对我有什么帮助? (让我们说它适用于 Android)
    • 您说您试图解决不良反馈问题。这就是增强型麦克风的声学回声消除所解决的问题。
    • 这里...这个应用程序执行您正在尝试做的事情(也记录音频)...它具有您也可以下载的 fxp Sample App
    • 示例应用程序是一个巨大的洞察力,谢谢!结果我不需要使用声谱,而是可以直接在示例数据处理程序中与麦克风活动级别进行交互。我现在的问题是试图让我的所有数字在麦克风增益、采样率和动画速度等方面都匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多