



Как и среди людей, среди языков программирования есть свои долгожители. Самый известный, знакомый каждому пользователю со школьной скамьи, конечно, BASIC. Он дошёл до нас из середины XX века и, в отличие от рождённых тогда же FORTRAN, COBOL и прочих, используется по сей день в общем-то для того, для чего и был придуман: начинающие постигают с его помощью основы программирования.
BASIC — язык общего назначения, то есть его можно использовать понемногу для всего. Но существуют такие же интересные, хоть и значительно менее известные, «убелённые сединами» языки специальные. Таково, в частности, племя языков для программирования звука. Этот класс заточен под единственную узкую задачу: обработку звука в цифровом виде — из-за чего большинству пользователей и не знаком. Но как и с бейсиком, тут есть на что посмотреть и чему удивиться.
Заставить компьютеры генерировать звук инженеры пытались чуть ли не с самых первых машин. В 40-х годах никаких средств звукоизвлечения на вычислительные машины не устанавливали, поэтому ранним экспериментаторам приходилось идти на хитрость: заметив, что поставленный рядом с компьютером радиоприёмник воспроизводит какие-то шумы (сложные электрические схемы всегда генерируют какие-нибудь радиоволны), они писали программы, исполнение которых на ЭВМ приводило к появлению в радиоприёмнике чистых тонов.

На более поздних компьютерах (вроде ставшего легендарным именно по этой причине австралийского CSIRAC) динамик уже имелся — для облегчения отладки программ, конечно, не для музыкального сопровождения ;-) И вот там был сделан следующий шаг: сыграны первые по-настоящему сложные мелодии. Тем не менее и здесь всё ещё находилось на стадии эксперимента, ни о какой переносимости кода речи не шло. Программы, синтезирующие звук, подгонялись под особенности конкретного компьютера (его скорость, разрядность, систему команд и т.п.) и создавали звук прямым выводом в порт, к которому динамик и цеплялся.
И вот когда почва была подготовлена — в смысле, подтверждено практически, что вычислительная машина может звучать приятно для уха человека — был сделан ещё один шаг вперёд. Во второй половине 50-х появился первый язык программирования звука: MUSIC. Его автор, Макс Мэтьюс, сотрудник Bell Labs, наверняка был не единственным, кто мечтал об универсальном инструменте, с помощью которого на разных компьютерах можно будет описывать синтез и обработку звука, а потом делиться результатом с коллегами. Но так получилось, что именно ему удалось подать самую удачную идею.
А идея, положенная в основу MUSIC, очень простая (по современным меркам, конечно). Мэтьюс предложил программировать звук, опираясь на два файла. В первом файле должны быть описаны генераторы звука или, попросту, «музыкальные инструменты». Во втором содержатся только «ноты», а точнее, команды по управлению генераторами (описанными в первом файле). Вам это ничего не напоминает? Да, это объектно-ориентированное программирование — которое в те годы как раз оформлялось как новая большая концепция. Вероятно именно поэтому MUSIC и пережил всех своих конкурентов, и в конце концов стал родоначальником целого семейства похожих на него языков.
Меняясь и совершенствуясь, MUSIC просуществовал больше тридцати лет. Но в 80-х годах вычислительная техника пережила новую революцию: появилась персоналка, компьютеры шагнули в дом, офис, музыкальные студии. И производительности бытовых компьютеров уже хватало в том числе для работы со звуком. Так что появились и другие языки аудио-программирования, так или иначе позаимствовавшие классическую структуру MUSIC. А самым успешным среди них стал CSound.

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