AS3:ByteArray声音数据循环平滑问题

时间:2011-11-29 08:37:19

标签: actionscript-3 audio bytearray

我制作了一个SoundEnvelope类来保持分裂攻击/维持样本对。该类还预处理维持循环以与最后选择的攻击块的立体声样本量交叉淡入淡出,并且30 ms MP3编码器偏移量被修剪以便正确播放。

修剪和循环都是我项目的必要条件。

现在,攻击建立得很好,顺利进入维持循环,但循环似乎在最后跳过一些数据,而且似乎主要与交叉淡化效应相关,这可能是一个时间问题但我似乎无法找到问题。

对于那些不熟悉动态处理声音的人,这里是function,我正在使用带有if-else fork的循环来判断块是否进入攻击或者是我的维持变量SoundEnvelope实例。

[更新]

@A Shelly: 专业合成器中的声音信封由攻击 - 衰减 - 维持释放序列组成。在我的情况下,攻击和衰减是相同的部分,并且释放正在淡化维持的音量,这需要顺利地循环回来。

让我们说,我们有一个原始的小号样本,就像 tfweeeewweeeewweeeewweeeep ,我的摘录包含_a = [tfweeeew] 和{{1} } = [weeeewweeeewwe] 部分。现在,这可能是任何样本,我在这里使用均匀的0.5秒攻击和1.0秒维持循环。所以,为了使它听起来连续,我需要淡出循环的结束,因为它与它自己的开头不匹配,并且同时淡入攻击部分的末端部分,这将使样本平铺无缝。当然,这会在样本的端点产生轻微的气息,但它仍然比在循环时弹出更好,如 ... deewdeewdeewdeewdeew ... ...

[代码]

这是循环功能,我真的希望有人可以帮助我,提前谢谢:

_s

2 个答案:

答案 0 :(得分:0)

只是一个猜测:fade永远不等于1问题的根源?你可能写fade = i / (fadeStereoSamples - 1)

答案 1 :(得分:0)

你不是想淡出_a并淡出_s吗?看起来你正在做相反的事情 - _a越来越响亮。

另外,为什么你从_s结束而不是从头开始?你不应该把_a的结尾和_s的开头混在一起吗?

而且我不确定你为什么要将该部分描述为循环。每次攻击应该只有一次转换,对吧?如果你多次调用,_s会因为你覆盖它而变得更安静和更安静。