Ноты и частоты:)

Jun 29, 2009 17:11

Нашел вот старый-старый листик. Я еще в школе его сделал. Программировал мелодии в Паскале, и мне нужны были целочисленные значения частот нот. Интернета у меня тогда не было, но в разных источниках я нашел значения для нескольких нот. По ним восстановил пять октав.
Не помню, во сколько раз нужно умножить частоту, чтобы звук звучал на полтона выше... Зато чтобы он звучал выше на октаву, его нужно умножить в два раза;)
Звездочками отмечены частоты, которые и без того целочисленны (соль и ля).




Кстати, если использовать только C, D#, F, G, G#, A# и H (H сразу после более высоких нот), то сфальшивить очень трудно. А мелодия получится минорной.
Если нотами не пользоваться, все равно можно сгенерить немало звуковых эффектов. Достаточно использовать формулы различных графиков. Очень интересно послушать затухающую синусоиду, логарифмическую функцию и т.п. (речь идет только о частоте, а не о громкости, которая не управляется во встроенном динамике никак).
А если генерировать максимально короткие бипы произвольной частоты в пределах, например, от 50Гц до 100Гц, получим белый шум.

У меня в ноуте нет встроенного динамика, только колонки. И экспериментировать со звуками таким образом я больше не могу. Но все же, вдруг кто-то захочет поэкспериментировать со своим?))) Так что вот несколько рецептов (действительны для TurboPascal. Вообще, у меня FreePascal, но с его звукогенераторами я не работал))):

1. Нужно подключить модуль CRT. Можно и без него обойтись, но это проще, нежели работать с прерываниями.
2. Известных мне "звуковых" команд всего две: sound(freq) и nosound. Freq - частота звука.
3. Звук продолжается, пока не было команды nosound. Он продолжается и тогда, когда программа уже завершила работу. Поэтому каждую "звуковую" программу нужно завершать строкой nosound;
4. Можно написать сто строк кода. А можно объявить двумерный массив с частотой и длительностью звуков, в самой программе тогда будет только с десяточек строк...
5. ...но лучше загружать элементы из файла. Тогда не придется лезть в код, чтобы "сменить пластинку":))
6. Длительность звука не предусмотрена в саундовых командах. Поэтому следует использовать команду Delay(t). Она остановит программу на количество миллисекунд t. Звук же, например, при этом звучать будет.

Вот и все:)

кодинг, компьютеры

Previous post Next post
Up