Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

1000 / 4(рус)

.docx
Скачиваний:
30
Добавлен:
15.06.2014
Размер:
18.48 Кб
Скачать

Синусоидальная волна

Пока простая волна имеет свойство быть простой для расшифровки цифровым компьютером, на самом деле очень сложна с музыкальной точки зрения. Она содержит большое количество резонансных частот выше единицы, которые мы создаем с выбранной величиной периода, который может сделать звук "полным" и характерным. На самом деле некоторые из них можно описать скорее как "пустые" или "воздушные", но все-таки имеющие определённый характер.

С физической точки зрения, самая простая форма сигнала - синусоидальная. Она проста в описании идеального колебания и похожа на вид колебаний, который можно получить с помощью маятника или груза, подвешенного на пружине, к примеру. Объекты, как правило, предпочитают такую форму движения, когда они совершают поступательно-вращательное движение взад и вперед пересекая среднюю точку.

Субъективно, синусоида довольно скучна, она может быть охарактеризована только как очень чистый сигнал, и не более того. Для выработки возможных чистых звуков у неё есть достоинства, и это также весьма ценный компонент в создании более сложных звуков. Больше всего важны теоретическая и математическая конструкция этой величины.

Синусоида довольно сложна в создании в вычислительном отношении, но в большинстве случаев функция sin() моделируется на разумной скорости (и в простым для использования способом). Полный период колебаний sin(t) достигается цикличным изменением t от 0 до 2*пи (что составляет примерно 6,283), и выводит значения в диапазоне от -1 до +1. Причины для использования таких, казалось бы, нечетные параметров диапазона - математические и связанны с окрудностью, традиционно родных функций синуса и косинуса. Окружности радиуса 1 имеет окружность ровно 2 * PI.

Треугольная волна

Треугольная волна представляет собой попытку имитировать синусоидальную волну более точно, чем вы могли бы прямоугольной, но её использование требует весьма простых вычислений. Это просто рост и падение значений уклона. Результат создаёт звук очень похожий на синусоиду, так что в этом смысле она полезна. Звучит скучно хотя, естественно.

Пилообразная волна

Это половина треугольной волны, сброшенная в исходное значение, когда она достигает вершины. С этого скачка в уровне сигнала вы получите жесткий характеристики аналогичные прямоугольной волне, но есть только один такой скачок в периоде (по сравнению с прямоугольной волной, которая имеет 2 скачка - вверх и вниз), а остальное плавные формы, поэтому, как правило, звук немного теплее и более органичен, нежели у прямоугольной волны.

Шум

Если вы хотите более хаотичных звуков, напоминающих взрывы или удары, вам не посчастливиться иметь дело с простыми повторяющимися моделями (если вы будете много менять их, тогда они перестанут быть простыми повторяющимися моделями). Прямой путь получения хаотической модели это использование генератора случайных чисел. Большинство языков программирования имеют такие генераторы. В C вы могли бы сделать что-то вроде этого:

next_number = (float) (rand ()% 20000-10000) / 10000

... Чтобы получить случайное число между -1,0 и +1,0. Посмотрите функции rand () и srand () для деталей.

Несмотря на это модель не будет полностью случайной, вы можете по-прежнему контролируете явную "частоту" или легкость звучания. Это можно сделать несколькими способами, но наиболее простой это задержка между переключением на новые случайные значения основана на качестве после этой задержки. Модель очень похоже на прямоугольные волны в этом отношении, кроме как вам придется задерживать период намного короче длины для шума.

Общие формы волн (для программистов)

Чтобы испробовать различные виды сигналов с использованием одного и того же контрольного кода, вы должны сохранить переменную, которая будет изменяться от 0 до 1 и оборачивать вокруг период для каждого выбранного звука. В периоде длина будет определяться по желаемым частотам. Для получения актуальных значений, можно использовать различные функции (в зависимости от того, какой сигнал вы хотите), чтобы найти подходящее значение, основанное на текущем положении периода.

Для прямоугольной волны, вы может просто проверить период, меньше или больше 0,5. Если он меньше, выводить -1, или 1 (наоборот). Чтобы получить пилообразную волну, вы напишите что-то вроде (-1,0 + period_pos*2,0), что приведет к уклону сигнала от -1 до +1 над {0,0 - 1,0} положения диапазона периода.

Одну вещь, я нашел полезной для шума это восстановление буфера случайных моделей каждый раз в период подсчёта витков, и постоянное считывание значений из этого буфера на основанного на текущем положении в пределах периода. Вы можете выбирать размер буфера будет подходящее значение, на основе которых значения частот вы хотите использовать. Он не должен быть длинным, но несколько сотен моделей, вероятно, хорошая идея, чтобы избежать пересчета все это время.

Для изменения частоты звука вам нужно просто установить новое значение для длины периода (хотя это влияет только на скорость, с которой положение периода увеличивается, он всегда будет в промежутке между 0 и 1). Для контроля звука нужно умножить выходную модель с помощью значения звука (скажем, между 0.0 для тишины и 1.0 для максимальной громкости). Можно также смешать несколько независимых сигналов, соединив их модели вместе, хотя будьте уверены, что он не превышает допустимого диапазона вашей звуковой карты (которые, вероятно, равны -1,0 до +1,0). Иными словами, вы должны будете использовать звук ниже для каждого сигнала (или "канала"), если вы собираетесь смешать (добавить) некоторые из них вместе ... или вы можете просто перемножить итоговую сумму на значение громкости, если вам не нужна регулировка громкости на каждый канал.

Еще одно небольшое предостережение, которое стоит рассмотреть это то, что вы не должны использовать числа с плавающей точкой, как будто они были неотъемлемой типов данных. То есть: не увеличивать маленькие шаги в большом диапазоне. Они имеют ограниченную точность и будет неправильно, если вы это сделаете. Это может проявляться как небольшое, но заметное изменение в высоте звука, ни хуже. Вы можете увеличивать числа с запятой столько, сколько хотите держать их в разумных пределах, как между 0,0 и 1,0. Проблемы возникают, когда размер приращения намного меньше, чем текущее значение (например, 50000,0 + 0,1).

Соседние файлы в папке 1000