ДЛЯ НАЧАЛА: ЖИВЫЕ

- Knoppix -
Линукс за пять минут
- Puppy Linux -
Хороший друг


ДЛЯ ДЕЛА: ПРОФИ

- Debian -
Он такой один
- Linux Mint -
С родинкой на щеке!
- CentOS -
Копейка рубль бережёт!
- Fedora -
По следам Red Hat
- Ubuntu Linux -
Мы одной крови!
- Mageia -
Красота и удобства
- openSUSE -
Настоящее немецкое качество
- Slackware -
Линукс из кубиков
- ALT Linux -
Что русскому хорошо





ДЛЯ ДЕЛА: РОЛЛЫ

- ArchLinux -
Гениальное - просто!
- PCLinuxOS -
Просто линукс
- Aptosid -
Почувствуй силу!


ДЛЯ ДЕЛА: СОБЕРИ САМ

- Gentoo -
Каждому своё
- LinuxFromScratch -
Линукс с нуля


ДЛЯ ДЕЛА: ЛЁГКИЕ

- DeLiCate -
Старость в радость!
- SLAX -
Тысяча и один модуль


ЗАЩИТА

- OpenWall -
Не стучите, закрыто!
- Kali -
Вам, хакеры!


ПРИЛОЖЕНИЯ

- Planet CCRMA -
Работа со звуком
- VegaStrike -
Каждому по планете!


ЭКСПЕРИМЕНТ

- коЛинуксы -
Не выходя из Виндоус
- GoboLinux -
Очевидно и вероятно
- ReactOS -
Освободите Виндоус!


РОДНЯ

- BSD-семейство -
На плечах гигантов
- OpenIndiana -
До звёзд рукой подать


АРХИВ (2003-2016)
ФОРУМ




НАШИ ПРОЕКТЫ

MATRIX GL
ПОЛЕЗНЫЕ СОВЕТЫ
ПИНГВИН В КАРМАНЕ
ЗАКЛАДКИ
СТАТЬИ
КОНТАКТЫ


ПОМОЧЬ






Личный архив ЕЗ

Программируем звук!

Как и среди людей, среди языков программирования есть свои долгожители. Самый известный, знакомый каждому пользователю со школьной скамьи, конечно, BASIC. Он дошёл до нас из середины XX века и, в отличие от рождённых тогда же FORTRAN, COBOL и прочих, используется по сей день в общем-то для того, для чего и был придуман: начинающие постигают с его помощью основы программирования.

BASIC — язык общего назначения, то есть его можно использовать понемногу для всего. Но существуют такие же интересные, хоть и значительно менее известные, «убелённые сединами» языки специальные. Таково, в частности, племя языков для программирования звука. Этот класс заточен под единственную узкую задачу: обработку звука в цифровом виде — из-за чего большинству пользователей и не знаком. Но как и с бейсиком, тут есть на что посмотреть и чему удивиться.

Заставить компьютеры генерировать звук инженеры пытались чуть ли не с самых первых машин. В 40-х годах никаких средств звукоизвлечения на вычислительные машины не устанавливали, поэтому ранним экспериментаторам приходилось идти на хитрость: заметив, что поставленный рядом с компьютером радиоприёмник воспроизводит какие-то шумы (сложные электрические схемы всегда генерируют какие-нибудь радиоволны), они писали программы, исполнение которых на ЭВМ приводило к появлению в радиоприёмнике чистых тонов.

Забегая вперёд: работает язык программирования звука CSound и визуальный конструктор Cabbage.

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

И вот когда почва была подготовлена — в смысле, подтверждено практически, что вычислительная машина может звучать приятно для уха человека — был сделан ещё один шаг вперёд. Во второй половине 50-х появился первый язык программирования звука: MUSIC. Его автор, Макс Мэтьюс, сотрудник Bell Labs, наверняка был не единственным, кто мечтал об универсальном инструменте, с помощью которого на разных компьютерах можно будет описывать синтез и обработку звука, а потом делиться результатом с коллегами. Но так получилось, что именно ему удалось подать самую удачную идею.

А идея, положенная в основу MUSIC, очень простая (по современным меркам, конечно). Мэтьюс предложил программировать звук, опираясь на два файла. В первом файле должны быть описаны генераторы звука или, попросту, «музыкальные инструменты». Во втором содержатся только «ноты», а точнее, команды по управлению генераторами (описанными в первом файле). Вам это ничего не напоминает? Да, это объектно-ориентированное программирование — которое в те годы как раз оформлялось как новая большая концепция. Вероятно именно поэтому MUSIC и пережил всех своих конкурентов, и в конце концов стал родоначальником целого семейства похожих на него языков.

Меняясь и совершенствуясь, MUSIC просуществовал больше тридцати лет. Но в 80-х годах вычислительная техника пережила новую революцию: появилась персоналка, компьютеры шагнули в дом, офис, музыкальные студии. И производительности бытовых компьютеров уже хватало в том числе для работы со звуком. Так что появились и другие языки аудио-программирования, так или иначе позаимствовавшие классическую структуру MUSIC. А самым успешным среди них стал CSound.

CSound в среде разработки CSoundQT.

CSound очень похож на MUSIC, но вместе с тем сильно отличается от него рядом свойств. Он унаследовал «объектный» принцип и отчасти синтаксис, но стал свободным проектом, развиваемым энтузиастами — которые совершенствуют сам язык, пишут документацию, и пополняют коллекцию CSound-программ. В отличие от MUSIC, который синтезировал звук не в реальном времени (компьютеры были слабыми!), CSound умеет генерировать и обрабатывать звук в реалтайме — так что его можно использовать в составе сложных музыкальных комплексов, построенных вокруг MIDI, например.

Наконец, он достаточно прост по современным меркам, чтобы попробовать научиться хотя бы его основам, а потом и экспериментировать самому. Тем более, что документация накоплена богатейшая, а внутренняя совместимость разработчиками CSound контролируется очень строго (программы, написанные на нём четверть века назад, можно исполнять и сегодня, в последних версиях языка).

Говоря о простоте, я, впрочем, не имею в виду простоту бейсика. Языки программирования звука имеют весьма необычную структур и синтаксис — особенно для тех, кто привык к языкам программирования общего назначения. Честно говоря, тот же CSound ближе к HTML, чем, например, к BASIC или C. Но справившись с первыми трудностями, вы откроете для себя интереснейшие перспективы. Так что давайте прямо сейчас попробуем его установить и что-нибудь на нём написать.

Для начала — установка. В Debian Linux это можно сделать через Synaptic: вам нужно инсталлировать сам csound и пакет qutecsound (среду разработки, в которой будет легче делать первые шаги; иногда она называется CSoundQT). На других дистрибутивах воспользуйтесь своими менеджерами пакетов. Но есть версии и для MS Windows, и для OS X.

Запустите QuteCSound и вы увидите примерно такое окно:

А теперь скопируйте туда следующий текст:

<CsoundSynthesizer>

<CsOptions>

</CsOptions>

<CsInstruments>

instr 123

 aSin oscils 0dbfs/4, 440, 0

 out aSin

endin

</CsInstruments>

<CsScore>

i 123 0 1

e

</CsScore>

</CsoundSynthesizer>

Написал это не я, это один примеров, поставляемых в комплекте с языком. Но я воспользуюсь им, чтобы объяснить основы CSound-программирования. Итак, то, что вы видите — это типичная программа на языке CSound. Она разделена на три секции, которые обязательно присутствуют в каждой CSound-программе.

В первой секции (CsOptions) задаются параметры для звуковой карты — сейчас менять их нет необходимости, поэтому она пустая.

Вторая (CsInstruments) содержит описание генераторов звука, «музыкальных инструментов», так сказать. У нас, как видите, описан всего один инструмент, названный «123». он состоит из генератора синусоидальных колебаний (aSin) с параметрами, и команды вывода звука (out).

Наконец, последняя секция (CsScore) содержит «ноты». Это команда «i» с параметрами (активирует инструмент «123» на протяжении одной секунды) и команда «e», завершающая воспроизведение.

Теперь остаётся только нажать кнопку «Run» и услышать в колонках приятный тон частотой 440 Гц и длительностью в одну секунду. Я, конечно, сильно упростил описание, но и того, что вы узнали, должно быть достаточно, чтобы прямо сейчас вы смогли самостоятельно изменить программу для воспроизведения звука другой тональности и/или продолжительности. Попробуйте!

Если вам понравилось, дальше лучше взяться за документацию — тем более (обучающие материалы есть и на русском). Но можно попробовать учить CSound и хакерским методом: вкладка «Examples» содержит множество интересных примеров, от тривиальных до очень сложных, взаимодействующих с другими программами и железом. В них точно так же можно менять всё, что вам заблагорассудится — и сразу же проверять результат изменений.

Генерация одного тона, которую мы только что выполнили, это, можно сказать, «Hello, World!» на CSound. Однако из таких вот простых кубиков в конце концов собираются комплексы огромной сложности — с красивым графическим интерфейсом, ручками, бегунками и кнопками, отзывающиеся на нажатие MIDI-клавиатуры, перехватывающие и отдающие звук с других синтезаторов. Главное — пусть вас не испугают первые трудности. CSound — язык специализированный, понятно, что средства в нём очень специфические и ни на что непохожие. Зато и результат, который можно получить с их помощью, тоже может оказаться ни на что не похож! Тут уже всё зависит от вас, вашей фантазии. Примеры? Вот, например, коллекция музыки, написанной с применением CSound. Успехов вам!

--------------------------------------------

Этот текст всегда доступен по адресу linux.su/110616.shtml


При частичной или полной перепечатке, переводе, переработке материалов сайта ссылка на Knoppix.ru обязательна.
(c) Knoppix.ru 2003 - 2016