Интернет магазин музыки, mp3 почтой, заказать mp3 диски

баннер интернет-магазина ножей nifovka.ru

RSS - RSS,
Карта сайта

Rambler's Top100

Написать на e-mail © 2007-2012 г.

Посмотрите. Тут химическая мягкая мебель СПб.



Теги страницы:

После того как буфер заперт, начинается настоящее веселье. Для того чтобы получить звук, этот пример программы заполняет буфер данными, генерированными с помощью функции синуса. Если вы уже давно работали с тригонометрией, то могу напомнить, что функция синус возвращает значение от -1 до совершая при этом колебание. Довольно сложно правильно получить частоту волны. Для того чтобы это сделать, существует небольшой алгоритм. В первую очередь в этом алгоритме мы определяем, на каком волновом цикле мы находимся, т. е. сколько полных периодов прошло с начала. Если pos - это полное число, то это начало нового периода.

В этом коде выражение pos - floor(pos) равно «остатку» pos, т. е. числу, показывающему, в каком месте конкретной волны мы находимся (всегда между нулем и единицей). Например, если pos равно 2.54 (что значит, что вы прошли уже две полных волны и чуть больше половины третьей), тогда равно 2, а (reminder) равен 0,54. Обратите внимание, что вне зависимости от того, насколько длинна или коротка данная волна, вы всегда получите остаток между нулем и единицей. И не нужно ничего делать с частотой, потому что вы ее уже учли, когда определяли pos в цикле. В этом красота этого алгоритма.

Начиная отсюда, все просто: подставьте полученное значение в функцию синус, чтобы получить высоту волны этой точки между и Далее нужно умножить это число на 127, делая волну — высокой максимально. Вспомните, что высота волны - это громкость звука, поэтому, умножая на 127. мы даем звуку максимальную громкость. Если вы хотите сделать его в два раза тише, то умножать следовало на 64. Теперь высота где-то между -17 и 127 (или от -64 до 64, если вы уменьшили громкость). Последним шагом нужно сместить волну, чтобы она попала в промежуток для unsigned с liar (от 0 до 255) Для этого мы просто прибавляем 127.

Звуковой генератор мог использовать косинус вместо синуса при вычислении для буфера. Я предпочел использовать синус, потому что он начинается в нуле. Далее, если вы заканчиваете делать нормальный звуковой генератор, а не простой пример программы, всегда делайте размер буфера кратным волновой частоте, которую вы генерируете. Таким образом, вы гарантируете видимость того, что последний байт буфера точно совпадает с первым. В этом примере, из-за выбранной частоты, буфер не может так образовывать цикл, чтобы это было незаметно, поэтому вы услышите небольшой клик или щелчок, когда буфер будет проходить через конец цикла.

Итак, код делает это для каждого байта вторичного буфера. После того как программа пройдет цикл, она отпирает буфер вызовом метода Unlock, используя указатели и размеры, переданные методом Lock. Нет никаких доступных флагов - Unlock просто отпирает то, что раньше вы закрыли, Совет. Пример программы ToneGenerator не поддерживает переключение заданий, но, если вы хотите, чтобы ваша программа поддерживала, не забывайте, что необходимо восстанавливать буферы, когда пользовательское задание переключается снова на игру. Это выполняется с помощью метода Restore, принадлежащего интерфейсу Idirect- SoundBuffer. 3a примерам, как восстанавливать «красиво», обратитесь к примерам программ DirectXSDK, DirectSound.