gpt4 book ai didi

Flash 10.1 AS3 - 将实时效果应用于麦克风 - 卡顿问题

转载 作者:行者123 更新时间:2023-12-01 08:18:35 24 4
gpt4 key购买 nike

我正在尝试编写一个 Flash 应用程序,它接收麦克风流并应用实时效果并将其输出回扬声器。

我发现我在从麦克风获取输出时遇到卡顿问题,将其复制到 ByteArray amd,然后使用单独的

sound = new Sound();

sound.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);

sound.play();

从这个 ByteArray 中读取并播放声音。

我注意到来自麦克风 bytesAvailable 的输入发生了变化,而且这两个事件(麦克风的 SAMPLE_DATA 和声音的 SAMPLE_DATA)没有像需要的那样触发 A B A B A B A B,而是更加随机。

我是否正确地认为 mic.SAMPLE_DATA 事件以不同的时间间隔触发,具有不同的数据量,并且有效的实现需要读取可用数据并缓冲输入,以便 Sound SampleDataEvent 始终可以播放返回以避免填充?

最佳答案

我找到了一个解决方案,所以我想我会把它贴在这里,以防其他人遇到类似的问题(许多谷歌搜索对我来说都没有结果)。

似乎麦克风的输入不一致,并且需要通过发送的所有字节才能正确处理声音。让它工作的关键是使用数组来缓冲输入。

private var mic:Microphone;
private var micBuffer:Array;
private var playBackSound:Sound;
//the effect I was applying needed to be applied to
private var _leftChannel:Vector.<Number> = new Vector.<Number>(8192/2);

private function init() {
micBuffer = new Array();
mic = Microphone.getMicrophone();
mic.rate = 22;
mic.addEventListener(SampleDataEvent.SAMPLE_DATA, micSampleData);
}

private function micSampleData(e:SampleDataEvent) {

//store everything sent from the microphone into the array - this will vary in length
while (e.data.bytesAvailable > 0) micBuffer.push(e.data.readFloat());

//can wait here for the array to reach a certain size if needed
if (!playBackSound) {
playBackSound = new Sound();
playBackSound.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound);
playBackSound.play();
}
}

private function playBackSoundSampleData(e:SampleDataEvent) {

//this number will change depending on the sample rate of microphone
var numberOfFloats = 8192/8;
for (var i = 0; i<numberOfFloats && micBuffer.length > 0; i++)
{
_leftChannel[i] = micBuffer.shift();
count++;
}

//apply effect

//sample rate here is half of 44 so write twice + twice again to make stereo
for(var i = 0 ; i < count ; ++i )
{
e.data.writeFloat( _leftChannel[i] );
e.data.writeFloat( _leftChannel[i] );
e.data.writeFloat( _leftChannel[i] );
e.data.writeFloat( _leftChannel[i] );
}
}

关于Flash 10.1 AS3 - 将实时效果应用于麦克风 - 卡顿问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4944351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com