【问题标题】:ActionScript - Creating Square, Triangle, Sawtooth Waves From Math.sin()?ActionScript - 从 Math.sin() 创建方形、三角形、锯齿波?
【发布时间】:2010-08-02 11:13:41
【问题描述】:

是否有可用的通用代码使用数学类生成方形、三角形、锯齿或任何其他自定义波形?

以下是处理 SampleDataEvent 并播放中间 c (440 Hz) 正弦波的基本函数。我想通过合并方波、三角波和其他波来改变音调。

var position:int = 0;

var sound:Sound = new Sound();
sound.addEventListener(SampleDataEvent.SAMPLE_DATA, sampleDataHandler);
sound.play();

function sampleDataHandler(event:SampleDataEvent):void
    {
    for(var i:int = 0; i < 2048; i++)
        {   
        var phase:Number = position / 44100 * Math.PI * 2;
        position ++;

        var sample:Number = Math.sin(phase * 440);
        event.data.writeFloat(sample); // left
        event.data.writeFloat(sample); // right
        }
    }

【问题讨论】:

  • 必须只使用sin吗?可以自己写函数吗?
  • 我没有使用 Math.sin() 的要求,但我只是假设使用 Math.sin()(或 .cos())将如何完成创建自定义波形?或者至少很容易完成。

标签: actionscript-3 math waveform


【解决方案1】:

维基百科给出了squaretrianglesawtooth 波的简单方程。这里可能是最简单的(都有句号 1):

平方(t) = sgn(sin(2πt)) 锯齿(t) = t - 地板(t + 1/2) 三角形(t)= abs(锯齿(t))

【讨论】:

  • 嗨 BlurRaja。按照您的示例,我遇到了一些困难。恐怕我的数学技能不是很好。您如何将这些新波形合并到以下基本声音样本中: var sample:Number = Math.sin(phase * 440);我已经更新了我的问题以显示此功能。
  • 特别是,我不知道 2πt 是什么意思,也不知道它应该如何在 AS3 中替换。
  • @TDI1978:2πt 表示 pi (3.141592...) 乘以 t 的两倍(这是您的变量,如 sin(t))。 sgn是符号(-1表示负数,0表示零,+1表示正数),floor表示向下舍入,abs是绝对值(负数去掉负号)跨度>
猜你喜欢
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-10
  • 2012-11-26
  • 2010-11-11
  • 2019-11-27
相关资源
最近更新 更多