Главная страница
Об авторе
Ссылки
Гостевая книга
12.09.05

Семпл-плеер live. Аудио в Max/MSP (объект dac~). Волновые таблицы (Wavetable).

Вывод звука из Max/MSP (т.е. передача результатов просчета звука драйверу аудиокарты) осуществляет объект dac~. (Названия всех объектов Max/MSP, работающих непосредственно с аудио, оканчивается на знак тильды: ~) Если ввести этот объект без параметров, он покажет столько входов, сколько каналов обеспечивает используемый драйвер.
DSP Status
Драйвер можно выбрать, вызвав объект DSP Status (Options->DSP Status…). Селектор Audio показывает включено или выключено воспроизведение звука. Селектор Driver позволяет выбрать драйвера из установленных в системе, плюс еще псевдо-драйвер NonRealTime. В последнем случае обсчет аудиоданных производится не в режиме реального времени, соответственно, ничего услышать нельзя, но можно, допустим, сохранить результаты в файл. Здесь же задается входное и выходное устройство и задержка (Latency). В следующем разделе отображается загрузка процессора и ориентировочное число процессов, запущенных Вашем патчем в Max/MSP.

Строго говоря, логические и физические каналы ввода/ вывода аудио - две большие разницы. По умолчанию dac~ показывает входы 2х первых логических каналов, вообще же логических каналов может быть до 512. Для отображения логических каналов на физические нужно задавать маппинг. Сделать это можно в том же окне DSP Status или в специальном окне [iomap], вызываемом при нажатии на кнопку I/O Mapping внизу окна DSP Status. По умолчанию, попустим, на карточке с 2мя физическими выходными каналами первые два логических канала отображены на левый и правый физические каналы, так что смело включайте все звуковые источники в них.


Включение и выключение воспроизведения звука
Чтобы включать/ выключать воспроизведение звука, в левый вход объекта dac~ передаются сообщения определенного вида или цифры 0 (естественно означающая "выключено") и 1. Сообщение start включает воспроизведение во всех окнах, stop выключает (тоже во всех). Startwindow включает аудио только для текущего окна и всех его субпатчей. Для передачи сообщений используется объект Message box. Когда патч в режиме редактирования, Message box можно выбрать из меню вверху патча - он второй слева, сначала тыкнув в него мышью, а после тыкнув мышью в поле патча. Получается пустой бокс, куда надо ввести волшебные слова. Там же, но правее, есть объкт Toggle - переключатель, посылающий на выход ноль или единицу. В нашем семпл-плеере используются сообщения startwindow и stop.

Объект buffer~ для работы с волновыми таблицами в Max/MSP
Теперь надо чего-нибудь воспроизвести, коль скоро мы теперь умеем это делать. Первое, что приходит в голову, - проиграть файл, допустим, в формате wav. Для этого нужно содержимое файла разместить в некоторой области памяти, с которой Max/MSP может работать (не важно, как это реализовано на самом деле - такое объяснение вполне пригодно). Такая область памяти, представляемая в виде массива чисел с плавающей запятой, называется волновой таблицей. В Max/MSP волновую таблицу реализует объект buffer~. Обычно вводят 3 параметра: название таблицы, длина в миллисекундах и количество каналов. Чтобы загрузить звук из файла, используются 2 сообщения - read и replace, при вызове которых (кликом мыши на соответствующем боксе сообщения, или некоторым другим сообщением, приходящим на вход бокса) открывается стандартный диалог открытия файла.

Воспроизводить звук из буфера (волновой таблицы) могут несколько объектов Max/MSP. В нашем случае воспользуемся объектом wave~, имеющем параметры: название буфера и (необязательно) начальная позиция воспроизведения, конечная позиция, количество каналов. Чтобы вывести из буфера некое число (в случае многоканальной записи - вектор), нужно передать на крайний левый вход объекта wave~ число от 0 до 1, где за единицу принят адрес последней позиции в буфере. Естественно, чтобы сыграть звук, находящийся в таблице, нужно последовательно вывести все числа из таблицы по порядку от начала до конца. Для этого используется объект line~. При нажатии кнопки play once в окне [board] объекту line~ передается начальное значение 0, конечное - 1 и время, за которое должно быть достигнуто конечное значение. Время проигрывания получаем при загрузке семпла, используя для этого объект info~ (кстати, с него же длина семпла отправляется на цифровой индикатор length, ms объекта [board]).

А теперь тест на внимательность: в схеме воспроизведения данных волновой таблицы есть ошибка. Кто нашел, тот молодец и может похвалицца в Гостевой книге.



Еще статьи на тему: семпл-плеер для Max/MSP


beatumen смиренно руку приложыл

Hosted by uCoz