我正在尝试播放从麦克风捕获的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和此处的新手。任何帮助都将受到高度赞赏。谢谢。
最佳答案
有些麦克风非常敏感。您需要调整适度的设置,如下所示。另外,如果扬声器离麦克风更近,声音也会循环播放。
var myMic:Microphone = Microphone.getMicrophone(); // detect microphone
myMic.gain = 50;
myMic.setUseEchoSuppression(true);
myMic.setLoopBack(true);
myMic.setSilenceLevel(50, 1000);
要进一步了解声音捕捉,请尝试以下操作:
Capturing microphone sound data
关于actionscript-3 - 如何从AS3中的麦克风字节数组播放声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14929872/