AS3添加剂色调合成。播放多个生成的声音

时间:2010-09-06 16:20:37

标签: actionscript-3 audio synthesis

受到安德烈·米歇尔的启发,我正在AS3中建立一个音调矩阵。 我设法创建矩阵并生成不同的声音。他们听起来不那么好,但我到了那里 我遇到的一个大问题是,当设置多个点播放时,听起来很可怕。我google了很多,发现了添加剂合成方法,但没有一个线索如何将它应用于as3。 那里的任何人都知道如何一起演奏多种声音?任何提示?

我的演示在www.inklink.co.at/tonematrix

2 个答案:

答案 0 :(得分:2)

哦声音太可怕了......

检查维基?这并不难理解......即使你不太了解数学......你应该做什么 - 编程音乐并不容易。

所以:

让我们先定义一下:

var harmonics:Array = new Array();

harmonics 是我们存储各个谐波的阵列。每个子节点都是另一个数组,包含[“幅度”](技术上是音量),[“频率”]和[“波长”](周期)。给定幅度波长偏移(从波的开始)我们还需要一个可以给出波的相位的函数。对于方波这样的东西:

function getSquarePhase(amp:Number, wl:Number, off:Number):Number {
    while (off > wl){off -= wl;}
    return (off > wl / 2 ? -amp : amp); // Return amp in first half, -amp in 2.
}

如果需要,您可以添加其他类型,甚至是自定义矢量波。

现在是更难的部分。

var samplingFrequency; // set this to your SF

function getAddSyn(harmonics:Array, time:Number):Number {
    if (harmonics.length == 1){ // We do not need to perform AS here
        return getSquarePhase(harmonics[0]["amplitude"], harmonics[0]["wavelength"], time);
    } else {
        var hs:Number = 0;
        hs += 0.5 * (harmonics[0]["amplitude"] * Math.cos(getSquarePhase(harmonics[0]["amplitude"], harmonics[0]["wavelength"], time)));
        // ^ You can try to remove the line above if it does not sound right.
        for (var i:int = 1; i < harmonics.length; i++){
            hs += (harmonics[0]["amplitude"] * Math.cos(getSquarePhase(harmonics[0]["amplitude"], harmonics[0]["wavelength"], time)) * Math.cos((Math.PI * 2 * harmonics[0]["frequency"] / samplingFrequency) * time);
            hs -= Math.sin(getSquarePhase(harmonics[0]["amplitude"], harmonics[0]["wavelength"], time)) * Math.sin((Math.PI * 2 * harmonics[0]["frequency"] / samplingFrequency) * time);
        }

        return hs;
    }
}

这只是从维基百科转换(弱点:D),我可能在那里某处犯了错误......但我认为你应该明白这一点......如果没有,尝试自己转换维基百科的AS,正如我所说,它并不那么难。

我也不知何故忽略了奈奎斯特频率......

答案 1 :(得分:0)

我已经尝试过你的演示,并认为它实际上听起来很不错。你是什​​么意思听起来不那么好?少了什么东西?我感兴趣的主要领域是音乐,我没有发现任何错误,只是有点令人沮丧,因为创建一个序列后,我觉得需要添加新的声音!如果我能够记录我正在玩的东西,我会把它发给你。

进入添加剂合成虽然看起来不是一件轻松的事。你想在多大程度上推动它,你想创造某种形式的合成器吗?