ActionScript - Создание прямоугольных, треугольных, пилообразных волн из Math.sin ()? - PullRequest
1 голос
/ 02 августа 2010

Существует ли общий код, который создает квадратные, треугольные, пилообразные или любые другие пользовательские формы сигналов с использованием математического класса?

ниже - это базовая функция, которая обрабатывает SampleDataEvent и воспроизводит синусоидальную волну средней c (440 Гц). Я хотел бы изменить тон, включив квадрат, треугольник и другие волны.

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
        }
    }

1 Ответ

3 голосов
/ 03 августа 2010

В Википедии приведены простые уравнения для волн квадрат , треугольник и пилообразная .Вот, пожалуй, самый простой (у всех есть период 1):

square(t) = sgn(sin(2πt))
sawtooth(t) = t - floor(t + 1/2)
triangle(t) = abs(sawtooth(t))
...