ГОСТ Р 53556.5-2013
НАЦИОНАЛЬНЫЙ СТАНДАРТ РОССИЙСКОЙ ФЕДЕРАЦИИ
Звуковое вещание цифровое
КОДИРОВАНИЕ СИГНАЛОВ ЗВУКОВОГО ВЕЩАНИЯ С СОКРАЩЕНИЕМ ИЗБЫТОЧНОСТИ ДЛЯ ПЕРЕДАЧИ ПО ЦИФРОВЫМ КАНАЛАМ СВЯЗИ.
ЧАСТЬ III
(MPEG-4 AUDIO)
Структурированное кодирование звуковых сигналов (SA)
Sound broadcasting digital. Coding of signals of sound broadcasting with reduction of redundancy for transfer on digital communication channels. A part III (MPEG-4 audio). Structured audio (SA)
ОКС 33.170
Дата введения 2014-09-01
Предисловие
1 РАЗРАБОТАН Санкт-Петербургским филиалом Центрального научно-исследовательского института связи "Ленинградское отделение" (ФГУП ЛО ЦНИИС)
2 ВНЕСЕН Техническим комитетом по стандартизации N 480 "Связь"
3 УТВЕРЖДЕН И ВВЕДЕН В ДЕЙСТВИЕ Приказом Федерального агентства по техническому регулированию и метрологии от 22 ноября 2013 г. N 1785
4 Настоящий стандарт разработан с учетом основных нормативных положений международного стандарта ИСО/МЭК 14496-3:2009* "Информационные технологии. Кодирование аудиовизуальных объектов. Часть 3. Аудио" (ISO/IEC 14496-3:2009 "Information technology - Coding of audio-visual objects - Part 3: Audio", NEQ)
5 ВВЕДЕН ВПЕРВЫЕ
6 ПЕРЕИЗДАНИЕ. Август 2020 г.
Правила применения настоящего стандарта установлены в . Информация об изменениях к настоящему стандарту публикуется в ежегодном (по состоянию на 1 января текущего года) информационном указателе "Национальные стандарты", а официальный текст изменений и поправок - в ежемесячном информационном указателе "Национальные стандарты". В случае пересмотра (замены) или отмены настоящего стандарта соответствующее уведомление будет опубликовано в ближайшем выпуске ежемесячного информационного указателя "Национальные стандарты". Соответствующая информация, уведомление и тексты размещаются также в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет (www.gost.ru)
1 Область применения
1.1 Обзор
1.1.1 Назначение
Комплект инструментальных средств структурированного аудио дает возможность передавать и декодировать синтетические звуковые эффекты и музыку, нормируя несколько различных компонентов. Используя структурированное аудио, может быть создан высококачественный звук при чрезвычайно низкой пропускной способности. Типичная синтетическая музыка для чрезвычайно тонкого выразительного исполнения с использованием многочисленных инструментов может быть кодирована в формате на скоростях передачи в пределах от 0 Кбит/с до 2 или 3 Кбит/с.
MPEG-4 стандартизирует не определенный набор методов синтеза, а метод для описания методов синтеза. Любой современный или будущий метод синтеза звука может быть описан в формате MPEG-4 структурированное аудио.
1.1.2 Введение в главные элементы
В комплекте инструментальных средств структурированного аудио есть пять главных элементов:
1. Язык оркестра структурированного аудио или SAOL. SAOL является языком обработки цифровых сигналов, который позволяет описывать произвольные алгоритмы синтеза и управления как часть потока битов контента. Синтаксис и семантика SAOL стандартизируются нормативным способом.
2. Язык оценки структурированного аудио или SASL. SASL является простым языком оценки и управления, который используется в определенных типах объектов для описания способа, который используют алгоритмы генерации звука, описанные в SAOL, для воспроизведения звука.
3. Формат банка сэмплов структурированного аудио, или SASBF. Формат банка сэмплов позволяет передавать банки аудиосэмплов, которые будут использоваться в табличном синтезе, и описание простых алгоритмов обработки, чтобы пользоваться ими.
4. Нормативное описание планировщика. Планировщик является диспетчерским элементом во время выполнения процесса декодирования структурированного аудио. Он отображает структурное управление звуком, определенное в SASL или MIDI, и диспетчеризированные события в реальном времени, используя нормативные алгоритмы генерации звука.
5. Нормативная ссылка на стандарты MIDI, стандартизированные внешне MIDI Manufactures Association. MIDI является альтернативным средством структурного управления, которое может использоваться в сочетании с или вместо SASL, хотя и менее мощное и гибкое чем SASL. Поддержка MIDI в этом стандарте предоставляет важную обратную совместимость с существующим контентом и инструментами авторинга. Поддержка MIDI в этом стандарте состоит из списка распознаваемых сообщений MIDI и нормативной семантики для каждого.
2 Нормативные ссылки
В настоящем стандарте использована нормативная ссылка на следующий стандарт. Для датированной ссылки применяют только указанное издание ссылочного стандарта, для недатированной - последнее издание (включая все изменения).
Звуковое вещание цифровое. Кодирование сигналов звукового вещания с сокращением избыточности для передачи по цифровым каналам связи. Часть III (MPEG-4 audio). Основные положения
Примечание - При пользовании настоящим стандартом целесообразно проверить действие ссылочных стандартов в информационной системе общего пользования - на официальном сайте Федерального агентства по техническому регулированию и метрологии в сети Интернет или по ежегодному информационному указателю "Национальные стандарты", который опубликован по состоянию на 1 января текущего года, и по выпускам ежемесячного информационного указателя "Национальные стандарты" за текущий год. Если заменен ссылочный стандарт, на который дана недатированная ссылка, то рекомендуется использовать действующую версию этого стандарта с учетом всех внесенных в данную версию изменений. Если заменен ссылочный стандарт, на который дана датированная ссылка, то рекомендуется использовать версию этого стандарта с указанным выше годом утверждения (принятия). Если после утверждения настоящего стандарта в ссылочный стандарт, на который дана датированная ссылка, внесено изменение, затрагивающее положение, на которое дана ссылка, то это положение рекомендуется применять без учета данного изменения. Если ссылочный стандарт отменен без замены, то положение, в котором дана ссылка на него, рекомендуется применять в части, не затрагивающей эту ссылку.
3 Термины и определения
В настоящем стандарте применены термины и сокращения с соответствующими определениями, используемые в .
4 Символы и сокращения
4.1 Математические операции
|
|
+ | дополнение |
- | вычитание |
х или * | умножение |
/ | деление |
Ехр | экспоненциальная функция ехр (основание ), |
натуральный логарифм | |
десятичный логарифм | |
abs | абсолютное значение |
floor ( ) | наибольшее целое число, меньшее чем или равное |
cell ( ) | наименьшее целое число, большее чем или равное |
> | больше чем |
< | меньше чем |
> = | больше чем или равно |
<= | меньше чем или равно |
<> или != | не равно |
4.2 Методы описания
4.2.1 Синтаксис потока битов
Синтаксис потока битов структурированного аудио описывается, используя SDL MPEG-4 Sintactic Description Language.
4.2.2 Синтаксис SAOL
Текстовый синтаксис SAOL описывается, используя нотацию расширенного формата Backus-Naur (BNF). BNF является описанием для контекстно-свободных грамматик языков программирования.
Грамматики BNF составляются из терминов, также называемых маркерами (символами). Термины представляют синтаксические элементы языка, такие как ключевые слова и пунктуацию. Правила описывают комбинирование этих элементов в структурные группы.
Правила подстановки, которые отображают продукты в последовательностях других продуктов и терминов, представляются символом ->.
Также описаны правила подстановки, использующие дополнительные элементы, с использованием символов []. Использование этой нотации не увеличивает возможности описания синтаксиса, но делает определенные конструкции более простыми.
Маркер NULL может использоваться, чтобы указать, что последовательность никаких символов (пустая строка) является допустимой перезаписью для определенного продукта.
Другие символы, такие как ellipsis (...), будут использоваться тогда, когда их значение будет ясным из контекста.
4.2.3 Синтаксис SASL
Синтаксис SASL определяется, используя расширенные грамматики BNF.
5 Синтаксис потока битов и семантика
5.1 Введение в синтаксис потока битов
Этот подпункт описывает формат потока битов, определяющий поток битов структурированного аудио MPEG-4.
Каждая группа классов записывается с нормативной семантикой, которая определяет значение данных, представленных этими классами.
5.2 Синтаксис потока битов
|
Поток битов может содержать таблицу символов. Таблица символов позволяет текстовому коду SAOL и SASL быть восстановленным из маркированного представления потока битов. Включение или исключение таблицы символов не влияют на процесс декодирования.
Если таблица символов включена, то все или некоторые из символов в оркестре и таблице должны быть ассоциированы с текстовым именем следующим образом: каждый символ (символ является только целым числом) должен быть связан со строкой символов, соединенной с этим символом в объекте sym_name. С данным символом должно быть ассоциировано не более одного имени, иначе поток битов недопустим. Допустимо для таблицы символов быть неполной и содержать имена, ассоциированные с некоторыми, но не всеми, символами, используемые в оркестре и таблице. Присутствие строки нулевой длины в записи таблицы символов указывает, что имя для этого символа не включается в таблицу символов.
Реализации SAOL и SASL, которые требуют текстового ввода, а не маркируемого ввода, допустимы в декодере совместимости. Тогда декодер может демаркировать поток битов прежде, чем он будет обработан. В этом случае любые символы без ассоциированных имен предполагаются ассоциированными с именем по умолчанию формы _sym_х, где х является значением символа. Имена этой формы с этой целью резервируются в SAOL, и таким образом гарантируется, что имена не будут приходить в противоречие с именами символа, определенными с помощью таблицы символов.
|
Файл оркестра (планировки) является строкой маркеров. Маркеры представляют собой синтаксические элементы, такие как зарезервированные слова, базовые имена кода операции и знаки препинания. Кроме того, есть пять специальных маркеров. Маркер 0xF0 является маркером символа. Когда он встречается, следующие 16 битов в потоке битов должны быть номером символа. Маркер 0xF1 является маркером значения. Когда он встречается, следующие 32 бита в потоке битов должны быть значением с плавающей точкой. Этот маркер должен использоваться для всех символьных констант в пределах программы SAOL за исключением тех, с которыми встречаются в специальных целочисленных контекстах. Маркер 0xF2 является целочисленным маркером. Когда он встречается, следующие 32 бита в потоке битов должны быть целочисленным значением без знака. Маркер 0xF3 является строковым маркером. Когда он встречается, следующие несколько битов в потоке битов должны представлять строку символов (этот маркер в настоящий момент не используется). Маркер 0xF4 является маркером байта. Когда он встречается, следующие 8 битов в потоке битов должны быть целочисленным значением без знака. Маркер 0хFF является маркером конца оркестра; этот маркер не имеет никакой синтаксической функции в оркестре SAOL, но показывает конец раздела файла оркестра потока битов.
Не каждой последовательности маркеров разрешено выступать как файл оркестра. Полная последовательность маркеров оркестра должна соответствовать производству <оркестра>.
|
Файл отсчета является рядом строк информации об отсчете, предоставленной в заголовке информации о потоке. События, которые известны перед началом передачи потока битов в реальном времени, могут быть включены в заголовок так, чтобы они сразу были доступны декодеру, что может помочь эффективному вычислению в определенных реализациях. Каждая линия должна быть одним из пяти событий. У каждого типа событий есть свои импликации в процессе декодирования и планирования. Инструмент событий определяет время старта, инструмент символа имени, продолжительность и любые другие параметры звука, проигрываемого на инструменте SAOL. Событие управления определяет параметр управления, который передают инструменту или инструментам, уже генерирующим звук. Таблица событий динамически создает или уничтожает глобальную звуковую таблицу в оркестре. Событие конца показывает конец работы оркестра. Событие темпа динамически изменяет темп воспроизведения оркестром.
Файл отсчета не должен быть представлен в порядке увеличения времен событий. События должны быть "сортированы" планировщиком по мере их обработки. В файле отсчета у каждой линии отсчета должна быть отметка времени.
Бит high_priority указывает, что событие отсчета является высокоприоритетным событием. Бит use_if_late указывает, если бит has_time устанавливается, то событие отсчета должно использоваться, прибывает ли оно вовремя или нет.
|
|
Участок выборки включает блок данных, который будет включен в звуковую таблицу в оркестре SAOL. Каждая выборка состоит из имени, длины блока данных и четырех дополнительных параметров: частота дискретизации, точки начала цикла и конца цикла, и основная частота. Доступ к данным в выборке обеспечивается через генератор звуковой таблицы выборки.
Данные выборки могут быть представлены как 32-разрядные значения с плавающей точкой, тогда они должны масштабироваться между -1 и 1 или как 16-разрядные целочисленные значения, тогда они должны масштабироваться между -32768 и 32767. В случае, когда данные выборки представляются как целочисленные значения, после включения в звуковую таблицу, они должны повторно масштабироваться к плавающей точке.
Каждая выборка именуется символом. Если у двух выборок в заголовке конфигурации декодера или в модуле одиночного обращения одно и то же имя, результат является неустановленным. Если у выборки в модуле доступа будет то же имя как у выборки в предыдущем модуле доступа или в заголовке конфигурации декодера, то новая выборка должна заменить старую выборку для доступов к нему по этому имени через генератор звуковой таблицы выборки для любого генератора таблиц, выполняемого в это время или позже, чем время декодирования модуля доступа, содержащего новую выборку. На таблицы, которые уже были сгенерированы, это не влияет.
|
Участок данных непрозрачен относительно транспортировки системами MPEG-4. Это должно соответствовать спецификации формата - то есть, это должен быть участок данных RIFF, начинающий "RIFF...".
|
Конфигурация декодера потока битов содержит всю информацию, чтобы сконфигурировать и запустить структурированный аудиодекодер. Она содержит последовательность одного или более участков, где каждый участок является одним из следующих типов: файл оркестра, файл отсчета, файл midi, данные выборки, банк выборки, или таблица символов. Многие участки каждого из этих типов могут появляться в потоке битов (за исключением midi_file) со следующей семантикой:
1. orc_file: многочисленные файлы оркестра должны быть объединены. Если больше чем один глобальный блок появляется в объединенном оркестре, то это синтаксическая ошибка.
2. score_file: многочисленные файлы отсчета должны быть сортированы совместно по временам событий и объединены.
3. midi_file: только один элемент midi_file может появиться в потоке битов структурированного аудио.
4. sample: к samples может получить доступ в оркестр.
5. sbf: все многочисленные банки выборок доступны для процесса синтеза. Поведение не определено, если присутствует определенная комбинация MIDI и номер банка MIDI используется не один раз, либо в единственном банке выборок, либо в множественных банках выборок.
|
Блок доступа структурированного аудио содержит управляющую информацию потоковой передачи в режиме реального времени, которая будет обеспечена для выполнения процесса декодирования структурированного аудио. Он может содержать такое количество команд управления, какое требуется и разрешено допустимой пропускной способностью. Он не должен содержать новые инструментальные определения. Конфигурация оркестра фиксируется при запуске декодера. Он может содержать линии отсчета, события MIDI и новые данные выборки. Когда обеспечивается часть блока доступа, линия отсчета не обязана содержать метку времени. Когда has_time очищается в классе score_line, событие диспетчеризируется немедленно. Линии отсчета без меток времени не являются реагирующими к изменениям темпа оркестра.
6 Типы объектов
Есть четыре типа объектов, стандартизированных для структурированного аудио. Каждый из этих типов соответствует определенному набору эксплуатационных характеристик. Объектным типом по умолчанию является объектный тип 4. Когда ссылка дается на формат структурированного аудио MPEG-4 независимо от объектного типа, это нужно понимать как то, что ссылка сделана на объектный тип 4.
Терминалы, реализующие профили систем MPEG-4, содержащие узел AudioFX, должны также обеспечивать поддержку для объектного типа 3 или 4 структурированного аудио.
1. MIDI only. В этом объектном типе в заголовке информации о потоке должен появиться только участок midi_file, и только событие midi_event должно иметь место в данных потока битов. В этом объектном типе используются отображения вставки General MIDI. Этот объектный тип используется, чтобы задействовать обратную совместимость с существующим контентом MIDI и устройствами рендеринга. Нормативное и независимое от реализации качество звука не может быть обеспечено в этом объектном типе.
2. Wavetable syntesis. В этом объектном типе только файл midi_file и участки sbf должны появиться в заголовке информации о потоке, и только событие midi_event должно иметь место в данных потока битов. Этот объектный тип используется, чтобы описать контент музыки и звуковых эффектов в ситуациях, в которых не требуются полная гибкость и функциональность SAOL, включая 3-D аудио.
3. Алгоритмический синтез и AudioFX. В этом объектном типе участки sbf и midi_file не должны появляться в заголовке информации о потоке. Этот объектный тип используется, чтобы описать алгоритмический синтез и обеспечить обработку звуковых эффектов в узле AudioFX, когда использование формата банка выборок SASBF не требуется.
4. Основной синтетический. Могут появиться все элементы потока битов и элементы потоковой информации.
7 Процесс декодирования
7.1 Введение
Этот подпункт описывает алгоритмический структурированный процесс декодирования аудио, в котором поток битов, соответствующий объектному типу 3 или 4, преобразовывается в звук.
7.2 Заголовок конфигурации декодера
При создании элементарного потока структурированного аудио создается декодер структурированного аудио и для этого декодера обеспечивается объект потока битов класса SA_decoder_config как информация о конфигурации. В это время декодер должен инициализировать планировщика времени выполнения и затем разобрать заголовок конфигурации декодера на его составные части и использовать их следующим образом:
Файл оркестра: Файл оркестра должен быть проверен на синтаксическое соответствие грамматике SAOL и семантике уровня. Безотносительно предварительной обработки (то есть компиляция, выделение статического хранения и т.д.) должна быть сделана подготовка к времени выполнения оркестра.
Файл отсчета: Каждое событие в файле отсчета должно быть зарегистрировано в планировщике. "Зарегистрироваться" означает сообщать планировщику о присутствии определенного параметризованного события в определенное будущее время и о соответствующих действиях планировщика.
Файл MIDI: Каждое событие в файле MIDI должно быть преобразовано в соответствующее событие, и эти события зарегистрированы в планировщике.
Банк выборок: Данные должны храниться в банке выборок и должны выполняться безотносительно предварительной обработки, необходимой чтобы подготовиться к использованию банка для синтеза.
Данные выборки: Данные в выборке должны храниться и должны выполняться безотносительно предварительной обработки, необходимой чтобы подготовить данные из генератора звуковой таблицы SAOL. Если данные выборки представлены как 16-разрядные целые числа в потоке битов, то в это время они должны быть преобразованы в формат с плавающей точкой.
Таблица символов: Никакое нормативное поведение декодера не связывается с таблицей символов.
Если имеется больше одного файла оркестра в заголовке информации о потоке, различные файлы объединяются посредством сочленения и обрабатываются как один большой файл оркестра. Таким образом, каждый файл оркестра в рамках потока битов ссылается на одно и то же глобальное пространство имен, инструментальное пространство имен и пространство имен кода операции.
7.3 Данные потока битов и создание звука
7.3.1 Отношение с системным уровнем
На каждом шаге, в рамках системной работы, системный уровень может представить декодер структурированного аудио с блоком доступа, содержащим данные, соответствующие классу SA_access_unit. Декодер структурированного аудио отвечает за то, чтобы получить элементы данных AU, проанализировать и понять их как различные элементы данных потока битов структурированного аудио, выполнить продолжающийся оркестр SAOL, произвести одну единицу композиции выхода и передать системному уровню эту единицу композиции.
7.3.2 Элементы данных потока битов
Поскольку блоки доступа получают из системного демультиплексора, они анализируются и используются декодером структурированного аудио различными способами следующим образом:
Выборочные данные должны храниться и, независимо от того, что предварительная обработка необходима для ссылки предстоящими линиями отсчета, содержащими ссылки на эту выборку, будут выполняться. Если выборочные данные будут представлены как 16-разрядные целые числа в потоке битов, то они должны быть преобразованы в формат с плавающей точкой. Любые выборки в блоке доступа должны быть обработаны перед линиями отсчета, если линии отсчета ссылаются на эти выборки.
События линии отсчета должны быть зарегистрированы в планировщике, если у них будут отметки времени, или если их нет, то выполняться в следующем k-цикле.
События MIDI должны быть преобразованы в соответствующие события SAOL и затем зарегистрированы в планировщике, если у них есть отметки времени, или если их нет, то выполняться следующем k-цикле.
7.3.3 Семантика планировщика
7.3.3.1 Назначение планировщика
Планировщик является центральным механизмом управления системы декодирования структурированного аудио. Он отвечает за обработку событий инструментами создания и прекращения, отслеживая то, какие инструментальные создания активны, давая различным инструментам команду выполнить синтез, направляя вывод инструментов на шины и отправляя шины инструментам эффектов.
7.3.3.2 Инстанцирование инструмента
Инстанцировать (создать) инструмент означает создать пространство данных для его переменных и пространство данных, требующееся для любых кодов операции, вызванных этим инструментом. Когда инструмент инстанцируется, должны выполняться следующие задачи. Должно быть выделено место для любых полей параметра и установлены их значения согласно р-полям выражения или события инстанцирования. Затем должно быть выделено место для любых локально объявленных переменных, и значения этих переменных установлены в 0. Затем в локальное место для хранения должны быть скопированы текущие значения любых импортированных переменных i-rate. Затем должны быть созданы локально объявленные звуковые таблицы и заполнены данными согласно их объявлению.
7.3.3.3 Завершение инструмента
Завершить инстанцирование инструмента означает уничтожить пространство данных для этого экземпляра.
7.3.3.4 Выполнение инструмента
Выполнить инстанцирование инструмента на определенной скорости означает вычислить результаты команд, данных в это инструментальное определение. Когда экземпляр инструмента будет выполнен на определенной скорости, должны выполняться следующие шаги. Во-первых, значения любых глобальных переменных и звуковых таблиц, импортированных этим инструментом на этой скорости, должны быть скопированы в место для хранения инструмента. Кроме того, во время выполнения на а-скорости экземпляр инструмента, который является целью оператора send, текущее значение стандартного имени input в экземпляре должны быть установлены в текущее значение шины или шин, на которые ссылаются в операторе send. Затем, блок кода для этого инструмента должен выполняться на определенной скорости с учетом пространства данных инстанцирования инструмента. Затем, значения любых глобальных переменных и звуковых таблиц, экспортируемых этим инструментом на этой скорости, должны быть скопированы в глобальное место для хранения. Наконец, при выполнении инстанцирования инструмента на а-скорости значение вывода инструмента должно быть добавлено к шине, на которую направляется инструмент. Если инструмент не является целью выражения send, ссылающегося на специальную шину output_bus, вывод инструмента является выводом оркестра и может быть превращен в звук.
7.3.3.5 Запуск оркестра и конфигурация
7.3.3.5.1 Введение
Задачи определения инструмента и ширины шины, назначения глобальной переменной, выполнение startup, создания глобальной звуковой таблицы, инициализации шины и инструмента send должны быть выполнены в обозначенном ниже порядке.
7.3.3.5.2 Определение ширины выхода инструмента и ширины шины
Ширина выхода каждого инструмента определяется в порядке, определенном глобальными правилами упорядочивания. Ширина каждой шины обеспечивается оператором send или определяется суммой выходных ширин инструментов, направленных к этой шине в route. У любого инструмента, который не получает данных шины согласно правилам упорядочивания, должна быть ширина inchannels, равная 1 (эта спецификация необходима, так как выходные ширины могут зависеть от значения inchannels или ширины input).
Примечание: если выходная ширина инструмента зависит от outchannels и ширина шины, куда этот инструмент направляется, не определяется посредством других операторов send/route, оркестр может быть недетерминированным. Программисты должны обратить особое внимание на проверку детерминированного поведения оркестра или использовать определенные ширины шины.
7.3.3.5.3 Варьируемое выделение, выполнение запуска и создание глобальной звуковой таблицы
Для изменений любых глобальных сигналов должно быть выделено место, и их значения установлены в нуль. Если в оркестре будет инструмент, называемый startup, этот инструмент нужно инстанцировать и выполнить в i-rate. После того как это выполнение закончено, создаются все глобальные звуковые таблицы и заполняются данными согласно их определениям в глобальном блоке оркестра.
7.3.3.5.4 Инициализация шин и инструментов send
После создания глобальной звуковой таблицы создаются и инициализируются шины оркестра. Каждый канал каждой шины устанавливается в значение 0. После того как шины созданы, все инструменты, которые являются целями операторов send, нужно инстанцировать и выполнить в i-rate, в порядке, определенном глобальными правилами упорядочивания. Глобальное абсолютное время оркестра должно быть установлено в 0.
Примечание - Время называют absolute, если оно определяется в секундах. Когда сначала декодируется команда темпа и значение темпа изменяется из его значения по умолчанию, время отсчета и абсолютное время больше не идентичны. Все времена в отсчете, следующем за выполнением линии темпа, масштабируются согласно новому темпу и ставятся в очередь в абсолютные времена диспетчеризации и продолжительности.
7.3.3.6 Выполнение декодера во время потоковой передачи
В каждом цикле оркестра процессом синтеза в реальном времени производится один композиционный модуль выборок. Этот синтез выполняется согласно правилам, приведенным ниже, и получающийся вывод оркестра представляется системному уровню как композиционный модуль. Чтобы выполнить один цикл оркестра, должны выполняться следующие задачи в обозначенном порядке:
1. Если есть событие конца, чье время диспетчеризации ранее или равно текущему абсолютному времени оркестра, или событие конца было получено без метки времени после последнего выполнения этого правила, никакой дальнейший вывод не производится, и на все будущие запросы от системного уровня даются ответы буферами как нуль.
2. Если есть какие-либо инструментальные события, чьи времена диспетчеризации ранее или равны текущему абсолютному времени оркестра, или какие-либо инструментальные события были получены без меток времени после последнего выполнения этого правила, для каждого такого инструментального события создается инстанцирование инструмента, и каждый из этих инстанцирований выполняется в i-rate порядке, предписанном глобальными правилами упорядочивания. Если инструментальное событие определяет продолжительность для инстанцирования инструмента, то инстанцирование инструмента должно быть запланировано для завершения во время, данное суммой текущего абсолютного времени оркестра и указанной продолжительности (масштабируемый к абсолютным единицам измерения времени согласно фактическому темпу, если имеется).
3. Если есть какие-либо активные инстанцирования инструмента, время завершения которых ранее или равно текущему абсолютному времени оркестра, то стандартное имя released должно быть установлено в 1 в пределах каждого экземпляра такого инструментального инстанцирования, и инструмент отмечается для завершения в шаге 12.
4. Если имеются какие-либо события управления, чьи времена диспетчеризации ранее или равны текущему абсолютному времени оркестра, или любые события управления были получены без меток времени после последнего выполнения этого правила, глобальным переменным или инструментальным переменным в пределах инстанцирований инструмента, маркированных каждым таким событием управления, нужно обновить их значения. Подразумевается, что оркестром может быть получено не больше чем одно изменение управления на переменную за цикл управления. Если множественные изменения управления, которые ссылаются на одну и ту же переменную, получаются в единственном цикле управления, результирующее значение инструмента или глобальной переменной является неуказанным.
5. Если есть какие-либо табличные события, чьи времена диспетчеризации ранее или равны текущему абсолютному времени оркестра, или любые табличные события были получены без меток времени после последнего выполнения этого правила, глобальные звуковые таблицы должны создаваться или уничтожаться, как определено табличным событием.
6. Если имеются какие-либо события MIDI, метка времени которых ранее или равна текущему времени оркестра, или которые были получены без меток времени после последнего выполнения этого правила, они диспетчеризируются согласно их семантике.
7. Если есть какие-либо события темпа, чьи времена диспетчеризации ранее или равны текущему абсолютному времени оркестра, или любые события темпа были получены после последнего выполнения этого правила, то глобальная переменная темпа должна быть установлена в указанное значение, и времена диспетчеризации всех событий, ожидающихся для выполнения, должны масштабироваться к новым временам согласно новому значению темпа. Уже запланированные времена для завершений также масштабируются в их остающейся части, согласно отношению между старым и новым темпом. На существующие времена extend это не влияет, так как они определяются в абсолютном времени и таким образом "вне" отсчета. Значение стандартного имени dur должно быть изменено в каждом активном экземпляре инструмента, чтобы отразить новую продолжительность инструмента.
Если множественные события темпа обрабатываются согласно предыдущему абзацу в том же самом цикле управления, то глобальная переменная темпа должна изменяться только однажды к темпу, обозначенному в событии темпа, полученном последним или с последней меткой времени, а другие события темпа отбрасываются. Если есть множественные события темпа с той же самой меткой времени или события без метки времени, события с меткой времени должны быть диспетчеризированы в том же самом цикле управления, и результирующее значение глобальной переменной темпа не указывается.
Примечание - Если текущее время оркестра отличается от времени диспетчеризации темпа, чтобы вычислить новые продолжительности и будущее время диспетчеризации событий, должно использоваться прежнее время.
8. Если поле speed узла сцены AudioSource, ответственное за инстанцирование этого декодера, было изменено в последнем k-rate, переменная стандарта темпа должна быть установлена в 60-кратное значение, и события в оркестре должны повторно масштабироваться.
9. Значение каждого канала каждой шины должно быть установлено в 0.
10. Каждый активный экземпляр инструмента должен выполняться однажды в k-rate и n раз в a-rate, где n является числом выборок в период управления. Каждое выполнение в k-rate должно быть выполнено в порядке, данном глобальными правилами упорядочивания, и каждое соответствующее выполнение в a-rate (то есть, первое выполнение a-rate в k-rate, второе выполнение a-rate в k-rate и т.д.) должно быть в порядке, данном глобальными правилами упорядочивания.
Примечания
1 Если инструмент а упорядочен перед инструментом b, то выполнение k-rate а должно быть строго перед выполнением k-rate b, и выполнение k-rate а должно быть строго перед первым выполнением a-rate а, и первое выполнение a-rate а должно быть строго перед первым выполнением a-rate b. Однако нет никакого нормативного упорядочивания между вторым выполнением a-rate а и первым выполнением a-rate b или между первым выполнение a-rate а и выполнением k-rate b в пределах определенного цикла оркестра.
2 В соответствии с правилами упорядочивание выполнения, описанное в этом подпункте, может быть перестроено или проигнорировано, когда исходя из исследования оркестра может быть решено, что если так сделать, то не будет оказано никакого влияния на вывод процесса декодирования. "Не имеет никакого влияния" должно быть принято как означающее, что вывод процесса декодирования в перестроенном порядке является повыборочно идентичным выводу процесса декодирования, выполняемого строго согласно правилам в этом подпункте.
3 Выполнения k-rate каждого экземпляра инструмента должны происходить как атомарная работа; то есть выполнение k-rate одного инструмента должно быть завершено прежде, чем начинается следующее. Недопустимо выполнять k-rate параллельно. Это не касается a-rate. Если у двух инструментов нет никакого отношения упорядочивания согласно глобальным правилам упорядочивания их, a-rate могут быть выполнены в любом порядке или параллельно.
11. Если специальная шина output_bus направляется к инструменту, вывод этого инструмента в каждом a-rate является выводом оркестра в этом a-rate. Иначе значение специальной шины output_bus после выполнения каждого инструмента для a-rate является выводом оркестра в этом a-rate. Если значение текущего вывода оркестра будет больше чем 1 или меньше чем -1, оно должно быть установлено в 1 или -1, соответственно.
12. Если инструмент, названный extend с параметром больше, чем количество времени в цикле управления, инструмент не завершается. Все другие инструменты, отмеченные для завершения в шаге 3, завершаются. В случае сообщения MIDI "All Notes Off2" инструменты могут не расширять себя, и в это время уничтожаются.
13. Текущее глобальное абсолютное время оркестра продвигается на один период управления.
7.3.3.7 Приоритет событий
Определенные события могут быть определены как "приоритетные" события, устанавливая соответствующее поле в элементе потока битов или используя * маркер в текстовом отсчете. В случае, когда происходит превышение возможностей декодера, этот флаг позволяет автору контента минизировать ухудшение выполнения события.
Если флаг high_priority будет установлен, и если наступит критическое состояние, событие всегда должно выполняться без ухудшения, и никакие инстанцирования, создаваемые на низких приоритетных уровнях, не будут активными. Если флаг high_priority будет убран, то событие должно выполняться без ухудшения, если не наступят никакие критические состояния. Инструментальные события с убранным флагом high_priority могут быть преждевременно завершены, если не доступны ресурсы, чтобы диспетчеризировать событие с установкой флага high_priority.
Примечание - Ухудшение не планируется как дозволенный нормативный метод, чтобы понизить вычислительную сложность. Соответствующие декодеры должны быть в состоянии декодировать в нормальных условиях потоки битов указанного уровня Profile@Level без ухудшения.
7.3.3.8 Запаздывающие события
В случае ошибки транспортировки или ошибки кодера определенные события могут поступить с метками времени, которые уже прошли. Поле use_if_late в элементе потока битов указывает надлежащее поведение в этом случае. Если это поле очищается, то событие игнорируется, и обработка должна продолжаться, как будто событие никогда не прибывало. Если это поле устанавливается, то событие немедленно диспетчеризуется, как если бы оно было получено без метки времени.
7.4 Соответствие
Относительно всего нормативного языка соответствие нормативному языку измеряется во время вывода оркестра. Любая оптимизация кода SAOL или перестановка последовательности обработки могут быть выполнены, пока их выполнение никак не влияет на вывод оркестра. "Не имеет никакого влияния" в этом смысле означает, что вывод перестроенного или оптимизированного оркестра является повыборочно идентичным выводу исходного оркестра.
8 Синтаксис и семантика SAOL
8.1 Соотношение с синтаксисом потока битов
Описание синтаксиса потока битов определяет представление инструментов и алгоритмов SAOL, которые должны быть предоставлены декодеру в потоке битов. Однако маркируемое описание, как представлено там, не достаточно, чтобы описать синтаксис и семантику языка SAOL. Чтобы обеспечить создание потока битов и обмен надежным способом, полезно иметь стандартное удобочитаемое текстовое представление кода SAOL в дополнение к маркируемому двоичному формату.
Грамматика формата Backus-Naur (BNF) обозначает язык или бесконечный набор программ. Допустимые программы, которые могут быть переданы в потоке битов, ограничиваются этим набором. Любая программа, которая не может быть проанализирована этой грамматикой, не является допустимой программой SAOL - у нее есть синтаксическая ошибка - и поток битов является недопустимым потоком. Хотя поток битов составляется из маркеров, грамматика будет описана с точки зрения лексических элементов. Синтаксические правила, выраженные грамматикой, которые ограничивают набор текстовых программ, также нормативно ограничивают синтаксис потока битов через отношение потока битов и текстового формата в нормативном процессе маркирования.
Этот подпункт таким образом описывает текстовое представление SAOL, которое стандартизируется, но стоит за пределами отношения декодера потока битов.
Приложение В содержит грамматику для текстового языка SAOL, представленного в форматах ’lex’ и ’уасс’. Используя эти версии грамматики, синтаксические анализаторы могут быть созданы автоматически, используя инструменты ’lех’ и ’уасс’. Эти версии годятся только в информативных целях и используются в создании декодера.
Нормативный язык синтаксиса в этом подпункте обеспечивает границы синтаксически верных программ SAOL и дополнительно - синтаксически верных последовательностей потока битов, которые могут появиться в классе потока битов orchestra. Таким образом, есть конструкции, которые допустимы только после чтения грамматики BNF, но отвергаются в нормативном тексте, сопровождающем грамматику. Состояние таких конструкций является состоянием тех, которые лежат за пределами языка, определенного одной только грамматикой.
Процесс декодирования для потоков битов, содержащих синтаксически недопустимые программы SAOL (то есть, программы SAOL, которые не соответствуют грамматике BNF, или содержат синтаксические ошибки или ошибки несоответствия уровня), является необусловленным.
Нормативная в отношении языка семантика в этом подпункте описывает семантические границы поведения декодера структурированного аудио. Определенные конструкции описывают "ошибочные по времени выполнения" ситуации. Поведение декодера при таких обстоятельствах не нормировано, но реализации позволяют корректно восстановиться из таких ситуаций и продолжать декодирование.
8.2 Лексические элементы
8.2.1 Понятия
Текстовый оркестр SAOL содержит знаки препинания, которые синтаксически снимают неоднозначность оркестра, идентификаторы, которые обозначают символы оркестра, числа, которые обозначают постоянные величины, строковые константы, которые в настоящий момент не используются, комментарии, которые допускает внутренняя документация оркестра, и пробел, который лексически разделяет различные текстовые элементы. Эти элементы не появляются в потоке битов, так как каждый представляется там маркером.
8.2.2 Идентификаторы
Идентификатор является серией одной или более букв, цифр и подчеркиваний, которая начинается с буквы или подчеркивания. Он обозначает символ оркестра. Идентификаторы являются чувствительными к регистру, что означает, что идентификаторы, которые отличаются регистром только одного или более символов, обозначают различные символы.
Строка символов, эквивалентная одному из зарезервированных слов, перечисленных в 8.9, одному из стандартных имен, перечисленных в 8.6.8, имени одного из базовых кодов операции, перечисленных в 9.3, или имени одного из базовых генераторов звуковой таблицы, перечисленных в 10, не обозначает символ, а обозначает, что зарезервировано слово, стандартное имя, код операции или генератор звуковой таблицы.
Идентификатор обозначается в грамматике BNF терминальным символом <ident>.
8.2.3 Числа
Существуют два вида символьных констант, которые содержат числовые значения в SAOL: целочисленные константы и константы с плавающей точкой.
В SAOL нет разницы между числами, кодированными с маркером потока битов для целых чисел и кодированными с маркером потока битов для байтов. Последний является только средством сжатия потока битов.
Целочисленная константа обозначается в грамматике BNF терминальным символом <int>.
Константа с плавающей точкой присутствует в выражениях SAOL и обозначает постоянное числовое значение. Маркер с плавающей точкой состоит из основания, дополнительно сопровождаемого экспонентой. Основание является серией одной или более цифр, опционно сопровождаемых десятичной точкой и серией из ни одной или большего количества цифр, или десятичной точкой, сопровождаемой серией из одной или более цифр. Экспонента обозначается буквой е, дополнительно сопровождаемой символом + или -, сопровождаемым серией из одной или более цифр. Так как константа с плавающей точкой появляется в выражении SAOL, где унарный оператор отрицания всегда является доступным, константы с плавающей точкой не должны быть лексически отрицательными. Каждая константа с плавающей точкой в оркестре должна быть представимой 32-разрядным числом с плавающей точкой.
Константа с плавающей точкой обозначается в грамматике BNF терминальным символом <number>.
8.2.4 Строковые константы
Строковые константы не используются в нормативной спецификации SAOL, но описаны здесь, чтобы они могли обрабатываться разработчиками, которые хотят добавлять к своим реализациям функциональность свыше нормативных требований.
Строковая константа обозначает постоянное строковое значение, то есть последовательность символов. Строковая константа является серией символов, заключенных в двойные кавычки ("). Символ двойных кавычек может быть включен в строковую константу, предшествуя ей с символом наклонной влево черты (\). Любой другой символ, включая символ разрыва линии (новая линия), должен быть заключен в кавычки.
8.2.5 Комментарии
Комментарии могут использоваться в текстовом представлении SAOL, чтобы внутренне документировать оркестр. Однако они не включаются в поток битов и теряются в последовательности tokenisation/detokenisation (назначения/удаления маркеров).
Комментарий является любой серией символов, начинающихся с двух наклонных черт (//) и завершающихся с новой линией. Во время лексического анализа, всякий раз когда в линии находится элемент //, остальная часть линии игнорируется.
8.2.6 Пробел
Пробел служит для того, чтобы лексически разделить различные элементы текстового оркестра SAOL. Он не имеет никакой синтаксической функции в SAOL и не представляется в потоке битов, таким образом, точный пробел текстового оркестра теряется в последовательности tokenisation/detokenisation. Пробел не требуется в SAOL, кроме случаев когда надо снять неоднозначность маркеров и зарезервированных слов, которые появляются друг за другом (например, отделяет "asig" от объявленного имени переменной).
Пробел является любой серией одного или более пространств, таблицы и/или символов новой строки.
8.3 Переменные и значения
Каждая сигнальная переменная в рамках оркестра SAOL содержит значение или упорядоченный набор значений для переменных массива, как промежуточное вычисление оркестра. В любом моменте времени значение переменной, выборка в звуковой таблице или единственный элемент переменной массива должны быть представлены 32-разрядным значением с плавающей точкой.
Реализации свободно использовать любое внутреннее представление для переменных значений, пока вычисленные результаты идентичны результатам вычислений, используя 32-разрядные значения с плавающей точкой.
Определенные чувствительным цифровым образом фильтрующими операциями, результаты использования большей точности в вычислении могут быть эквивалентно вредными для вывода оркестра, так же как и результаты использования меньшей точности, поскольку устойчивость фильтра может критически зависеть от ошибки квантования. Этому строго следуют для потоков битов, содержащих код, который генерирует совсем другие результаты, вычисленные с 32-разрядной и 64-разрядной арифметикой.
При выводе оркестра значения, вычисленные оркестром, должны находиться между минимальным значением -1 и максимальным значением 1. Эти значения при выводе оркестра представляют максимум негативно и положительно оцененных аудиосэмплов, которые могут быть произведены терминалом. Если значения, вычисленные оркестром, падают вне того диапазона, они отсекаются к [-1,1]. Этот звук представляется циклом управления MPEG-4 системы для использования в составе AudioBIFS.
8.4 Оркестр
<orchestra> -> <orchestra element>
<orchestra> <orchestra> -> <orchestra element>
Оркестр является набором подпрограмм обработки сигналов и объявлений, которые составляют структурированное описание обработки аудиоданных. Это должно состоять из списка одного или более элементов оркестра.
<orchestra element> -> <global block>
<orchestra element> -> <instrument declaration>
<orchestra element> -> <opcode declaration>
<orchestra element> -> <template declaration>
<orchestra element> -> NULL
Есть четыре вида элементов оркестра:
1. Глобальный блок содержит инструкции для глобальных параметров оркестра, маршрутизаций шины, глобальных переменных объявлений и инструментального упорядочивания. Недопустимо иметь больше чем один глобальный блок в оркестре.
2. Инструментальные объявления описывают последовательности обработки инструкций, которыми можно параметрически управлять, используя SASL или файлы счета MIDI.
3. Объявления кода операции описывают последовательности обработки инструментов, которые обеспечивают инкапсулировавшую функциональность, используемую нулем или большим количеством инструментов в оркестре.
4. Шаблонные объявления описывают многократные инструменты, используя краткую параметрическую форму.
Элементы оркестра могут появиться в любом порядке в пределах оркестра. В частности, определения кода операции могут произойти или синтаксически прежде или после того, как они используются в инструментах или других кодах операции.
8.5 Глобальный блок
8.5.1 Синтаксическая форма
<global block> -> global { <global list> }
<global list> -> <global statement> <global list>
<global list> -> NULL
Глобальный блок должен содержать глобальный список, который должен состоять из последовательности нулевых или более глобальных операторов.
<global statement> -> <global parameter>
<global statement> -> <global variable declaration>
<global statement> -> <route statement>
<global statement> -> <send statement>
<global statement> -> <sequence definition>
<global statement> -> <interpolation level>
Есть несколько видов глобального оператора.
1. Глобальные параметры устанавливают параметры оркестра, такие как частота дискретизации, управляют уровнем и числом входных и выходных каналов звука.
2. Глобальные переменные определяют переменные, которые могут быть совместно использованы многократными инструментами.
3. Операторы маршрута описывают маршрутизацию инструментальных выводов на шины.
4. Определения последовательности описывают порядок работы инструментов планировщика времени.
5. Уровень интерполяции определяет качество интерполяции, выполняемой в процессе синтеза.
8.5.2 Глобальный параметр
8.5.2.1 Параметр srate
\<global parameter> -> srate <int>;
srate глобальный параметр определяет аудиочастоту дискретизации оркестра. Процесс декодирования должен создать аудио на этой частоте дискретизации. Недопустимо упрощать сложность оркестра или учесть терминальную возможность, генерируя аудио на других частотах дискретизации. Это может иметь серьезное неблагоприятное воздействие на определенные элементы обработки оркестра.
srate параметр должен быть целочисленным значением между 4000 и 96000 Гц. Если srate параметр не будет обеспечен в оркестре, то значение по умолчанию должно быть самым быстрым из аудиосигналов, обеспеченных как входной. Если частота дискретизации не обеспечивается и нет никаких входных аудиосигналов, частота дискретизации по умолчанию должна быть 32000 Гц. Если больше чем одна srate инструкция параметра происходит в оркестре, то это синтаксическая ошибка.
В объектном терминале типа 3, или когда оркестр SAOL используется в AudioFX узла AudioBIFS, srate параметр должен быть одним из следующих значений: (4000, 8000, 11025, 12000, 16000, 22050, 24000, 32000, 44100, 48000, 88200, 96000).
8.5.2.2 Параметр krate
<global parameter> -> krate <int>;
krate глобальный параметр определяет уровень управления оркестра. krate параметр должен быть целочисленным значением между 1 и частотой дискретизации включительно. Если krate параметр не будет обеспечен в оркестре, то уровень управления по умолчанию должен составить 100 Гц. Если в оркестре больше чем одна krate инструкция параметра, то это синтаксическая ошибка.
Если уровень управления не равен делителю частоты дискретизации, то уровень управления является следующим большим целым числом, которое действительно равномерно делит частоту дискретизации. Период управления оркестра является числом выборок или количеством времени, представленным этими выборками, в одном цикле управления.
8.5.2.3 Параметр inchannels
<global parameter> -> inchannels <int>;
inchannels глобальный параметр определяет число каналов ввода. Если звуковые каналы обозначены как входные источники, то дополнительные каналы должны быть установлены в непрерывные оцененные нули сигналы. Если звуковые каналы обозначены как входные источники, дополнительные каналы игнорируются.
Если inchannels параметр не будет обеспечен в оркестре, то значение по умолчанию должно быть суммой чисел каналов, обеспеченных входными источниками. Если нет никаких входных источников, значение должно быть 0. Если больше чем одна inchannels инструкция параметра происходит в оркестре, то это синтаксическая ошибка.
8.5.2.4 Параметр outchannels
<global parameter> -> outchannels <int>;
outchannels глобальный параметр определяет число каналов вывода звука. Процесс декодирования времени выполнения должен произвести и представить это число каналов внутренне. Недопустимо упростить сложность оркестра или учесть терминальную возможность, производя меньше каналов.
Если outchannels параметр не будет обеспечен в оркестре, то значение по умолчанию должно быть одним каналом. Если больше чем одна outchannels инструкция параметра происходит в оркестре, то это синтаксическая ошибка.
8.5.2.5 Параметр interp
<global parameter> -> interp <int>;
interp глобальный параметр определяет качество интерполяции, выполняемой в процессе синтеза. Различные операции требуют доступа к звуковым таблицам в точках нецелого числа. Получить доступ к звуковой таблице в такой точке требует интерполяции среди доступных точек в звуковой таблице.
Если interp параметр 0, то "низкоуровневая" интерполяция выполняется. Каждая интерполяция должна выполняться используя линейную интерполяцию. Таким образом, i и j могут быть двумя последовательными индексами звуковой таблицы и позволять х и у быть значениями в точках i и j соответственно.
Если interp параметр 1, то "высокоуровневая" интерполяция выполняется. Метод высокоуровневой интерполяции не нормирован, но это должен быть метод более высокого качества, чем линейная интерполяция.
Если параметр не 0 или 1, то это синтаксическая ошибка. Если больше чем одна interp инструкция параметра происходит в оркестре, то это синтаксическая ошибка.
Если interp параметр не определяется в оркестре, то качество интерполяции "низко" по умолчанию.
8.5.3 Глобальное переменное объявление
8.5.3.1 Синтаксическая форма
<global variable declaration> -> ivar <namelist> ;
<global variable declaration> -> ksig <namelist> ;
<global variable declaration> -> <table declaration> ;
Глобальные переменные объявления объявляют переменные, которые могут быть совместно использованы и к которым получен доступ всеми инструментами и счетом SASL. Только ivar и переменные типа ksig, так же как звуковые таблицы, могут быть объявлены глобально. Глобальное переменное объявление является табличным определением или вводит имя, сопровождаемое списком объявлений имени.
Глобальное объявление имени определяет, что маркер имени должен создавать пространство, равное значению сигнала, выделенному для временного хранения в глобальном контексте. Глобальное объявление массива определяет, что маркер имени должен создавать пространство, равное конкретному количеству сигнальных значений, выделенных в глобальном контексте.
8.5.3.2 Сигнальные переменные
<namelist> -> <name>, <namelist>
<namelist> -> <name>
namelist является последовательностью одного или более объявлений имени.
<name> -> <ident>
<name> -> <ident>[<array length>]
<array length> -> <int>
<array length> -> inchannels
<array length> -> outchannels
Объявление имени является идентификатором или объявлением массива. Для объявления массива параметр должен быть или целым числом, строго больше чем 0, или одним из маркеров inchannels, или outchannels. Если outchannels, то длина массива должна быть такой же, как число каналов ввода или каналов вывода оркестра, соответственно. Недопустимо использовать маркер inchannels, если число каналов ввода оркестра 0. Не каждый идентификатор может использоваться в качестве имени переменной. Зарезервированные слова, перечисленные в подпункте 8.8, стандартные имена, перечисленные в подпункте 8.6.8, именах базовых кодов операции, перечисленные в 9, и имена базовых генераторов звуковой таблицы, перечисленные в 10, не должны быть объявлены как имена переменной.
8.5.3.3 Объявления звуковой таблицы
<table declaration> -> table <ident> ( <ident> , <expr> [ , <expr list>] ) ;
<expr> as defined in subclause
<expr>
<expr list>.
Звуковые таблицы являются структурами памяти и позволяют быстрое колебание, цикличное выполнение и воспроизведение. Объявление звуковой таблицы связывает имя (первый идентификатор) со звуковой таблицей, создаваемой базовым генератором звуковой таблицы, на который ссылается второй идентификатор. Если второй идентификатор не является одним из базовых генераторов звуковой таблицы, то это синтаксическая ошибка. Первое выражение в разграниченной запятой последовательности параметра называют выражением размера. Остающийся нуль или больше выражений включают в список параметра звуковой таблицы.
Семантика выражения размера и списка параметра звуковой таблицы определяется базовым генератором звуковой таблицы. Любое правильное выражение является законным как часть табличного списка параметра. Позволяется ссылка на глобальные переменные (их значения могут быть установлены специальным инструментальным startup). Каждое выражение должно быть однозначным, кроме случая concat генератора, когда выражения должны быть табличными ссылками. Порядок создания звуковых таблиц не детерминирован, за исключением табличных параметров concat генератора, которые всегда сгенерированы перед concat генератором, который использует их. В этом случае таблицы, используемые в качестве параметров concat генератора, появляются перед таблицей, которая использует concat генератор, чтобы предотвратить циклы зависимости.
На глобальную звуковую таблицу может сослаться заполнитель звуковой таблицы в любом инструменте или коде операции. Глобальные звуковые таблицы должны быть созданы и инициализированы с данными во время инициализации оркестра, сразу после выполнения специального инструментального startup.
Чтобы создать звуковую таблицу, во-первых, поля выражения оцениваются в порядке, как они появляются в синтаксисе согласно правилам в 8.6.7. Затем выполняется определенный генератор звуковой таблицы, названный во втором идентификаторе, нормативная семантика каждого генератора звуковой таблицы детализирует, как звуковая таблица должна создаваться.
8.5.4 Оператор маршрута
|
Оператор route состоит из единственного идентификатора, который определяет шину и последовательность одного или более инструментальных имен, которые определяют инструменты. Оператор маршрута определяет, что перечисленные инструменты не производят звуковой вывод непосредственно и их результаты помещаются в данную шину. Каналы вывода от инструментов размещаются в отдельном канале шины. Многократные операторы route на ту же самую шину указывают, что данные инструментальные выводы должны быть суммированы на шине. Многократные операторы route с отличающимися числами каналов, ссылающихся на ту же самую шину, недопустимы.
Должно быть по крайней мере одно инструментальное имя в инструментальном списке.
Недопустимо, чтобы оператор route ссылался на шину, которая не является специальной шиной output_bus, и это не происходит в send операторе.
Недопустимо, чтобы оператор route обратился к специальной шине input_.
Все инструменты, которые не упоминаются в операторах route, помещают свой вывод в специальную шину output_bus, за исключением инструмента эффекта, которому был отправлен output_bus. Те же самые правила для допустимых комбинаций канала применяются к специальной шине output_bus, когда операторы маршрута были явными.
8.5.5 send оператор
<send statement>->send(<ident>;<expr list>;<namelist>); <namelist>
<namelist>
<expr list>
send оператор создает инструментальное инстанцирование, определяет шины и определяет, что инструмент, на который ссылаются, используется в качестве процессора эффектов для этих шин.
Все шины в оркестре определяются при использовании send операторов. Недопустимо для оператора, ссылающегося на шину, чтобы можно было обратиться к шине, которая не определяется в send операторе. Исключением является специальная шина output_bus, которая всегда определена.
Идентификатор в send операторе ссылается на инструмент, который будет использоваться в качестве обрабатывающего шину инструмента, также названного инструментом эффекта. Нет никакого синтаксического различия между инструментами эффекта и другими инструментами. Список идентификаторов ссылается на одну или более шин, которые должны быть доступными для инструмента эффекта через его input стандартное имя, следующим образом:
Кроме того, группировка шин в input массиве должна быть сделана доступной для инструмента эффекта через его стандартное имя inGroup следующим образом:
Список выражения является списком нулевых или более i-rate выражений, которые обеспечиваются для инструмента эффекта как его поля параметра. Любое выражение i-rate является законным как часть этого списка; в частности позволяется ссылка на i-rate глобальные переменные. Число обеспеченных выражений должно соответствовать числу полей параметра, определенных в инструментальном объявлении; иначе это - синтаксическая ошибка.
Инструмент эффекта, упомянутый в send операторе, нужно инстанцировать при запуске оркестра. Эти инструментальные инстанцирования должны остаться в силе, пока процесс синтеза оркестра не завершится. Одно инструментальное инстанцирование должно создаваться для каждого send оператора в оркестре. Если такое инструментальное инстанцирование использует turnoff оператор, инстанцирование уничтожается. Никакие другие изменения в оркестре не производятся.
Любая шина, за исключением специальной шины output_bus, может быть отправлена больше чем одному инструменту эффекта и/или инстанцированиям. В случае, когда простой идентификатор не используется, недопустимо обратиться к шине с более одной длиной. Специальная шина output_bus представляет обработку second-to-finalmost звукового потока. Это может быть отправлено только одному инструменту эффекта. Если инструмент самостоятельно направляется или используется out_bus оператором, то это синтаксическая ошибка. Если output_bus не отправляется инструменту, он превращается в звук в конце цикла оркестра. Если output_bus отправляется инструменту, вывод этого инструмента превращается в звук в конце передачи оркестра. Этому инструменту не разрешают использовать turnoff оператор.
В случае если число каналов ввода, полученных инструментальным экземпляром, отличается от ширины шины input и inGroup, используют прежнее значение inchan. В случае если inchan меньше, чем число каналов на шинах, обеспечивающих ввод, используются только первые каналы inchan. В этом случае "дополнительные" каналы являются нулевыми и для input, и для inGroup.
По крайней мере одно имя шины должно быть обеспечено в send инструкции.
8.5.6 Спецификация последовательности
<sequence specifcation> -> sequence ( <identlist> ) ;
<identlist>.
Оператор sequence позволяет выполнить спецификацию упорядочивания выполнения инструментальных инстанцирований планировщиком времени. Оператор identlist описывает частичное упорядочивание при наборе инструментов. Если на инструмент а и инструмент b ссылаются в том же самом операторе sequence с предыдущим b, то инстанцирования инструмента а выполняются строго перед инстанцированиями инструмента b.
Есть несколько правил последовательности по умолчанию:
1. Специальный инструментальный startup инстанцируют, и инстанцирование i-rate выполняется в самом начале оркестра.
2. Любые инструментальные экземпляры, соответствующие инструменту startup, выполняются сначала в определенном цикле оркестра.
3. Если output_bus отправляется инструменту, инструментальное инстанцирование, соответствующее send оператору, является последним инстанцированием, выполняемым в цикле оркестра.
4. Для каждого инструмента, направленного к шине, которая отправляется инструментом эффекта, инстанцирования направленного инструмента выполняются перед инстанцированиями инструмента эффекта. Если циклы создаются, используя route и send операторы, упорядочивание разрешается синтаксически. Если send оператор последний, то инструментальное инстанцирование выполняется последним.
Правила 2, 3 по умолчанию и 4 могут быть переопределены при помощи оператора sequence. Правило 1 не может быть переопределено.
Если операторы sequence создают циклы в упорядочивании, то это синтаксическая ошибка. Любые send операторы, которые являются "обратной" частью неявного send цикла, не имеют никакого эффекта.
Если последовательность двух инструментов не определяется правилами последовательности по умолчанию, их инстанцирования могут быть выполнены в любом порядке или параллельно.
Невозможно определить упорядочивание многократных инстанцирований того же самого инструмента. Эти инстанцирования могут быть выполнены в любом порядке или параллельно.
8.6 Инструментальное определение
8.6.1 Синтаксическая форма
|
У инструментального определения есть несколько элементов.
1. Идентификатор, который определяет имя инструмента.
2. Список нуля или большего количества идентификаторов, которые определяют имена для полей параметра, также названных pfields инструмента.
3. Дополнительный список предварительно установленных значений для того, чтобы определить MIDI отображения.
4. Список нуля или большего количества инструментальных объявлений переменной.
5. Блок операторов, определяющих исполнимую функциональность инструмента.
8.6.2 Инструментальное имя
Любой идентификатор может служить инструментальным именем за исключением того, что инструментальное имя не должно быть зарезервированным словом, именем базового кода операции или именем базового генератора звуковой таблицы. Инструментальное имя может быть переменной в локальном или глобальном контексте.
Ни у каких двух инструментов или кодов операции в оркестре не должно быть одинакового имени.
8.6.3 Поля параметра
<identlist>->
Поля параметра инструмента, также названные pfields, являются интерфейсом, через который инстанцируют инструмент. В инструментальном коде у pfields есть семантика уровня i-rate локальных переменных. Их значения должны быть установлены на инструментальном инстанцировании, перед созданием локальных переменных, с соответствующими значениями как дано в строке счета, событии счета, событии MIDI, send операторе или instr операторе, соответствующих инструментальному инстанцированию.
8.6.4 Предварительно установленный тег
Тег preset определяет предварительно установленное число(ла) инструмента. Если изменения программы MIDI прибывают в потоке MIDI или файле MIDI, управляющем оркестром, то программы обращаются к данным preset тега различных инструментов. Только у одного инструмента может быть предварительно установленное одно и то же число. Если многократные инструменты в оркестре определяют тот же самый preset тег, то синтаксически последнему присваивается предварительно установленное число. Если preset тег не связывается с определенным инструментом, то инструмент не имеет никакого предварительно установленного числа и не может быть сослан с изменением программы. Если дается больше чем один тег, то инструмент отвечает на все перечисленные предварительно установленные значения.
8.6.5 Инструментальные объявления переменной
8.6.5.1 Синтаксическая форма
|
Инструментальными объявлениями переменной объявляют переменные, которые могут использоваться в рамках инструмента. Любая переменная уровня, так же как звуковые таблицы tablemaps и заполнители звуковой таблицы, могут быть объявлены в инструменте. Инструментальное объявление переменной является или объявлением звуковой таблицы или именем типа, которому возможно предшествует тег совместного использования, сопровождаемый списком объявлений имени, или тегом совместного использования, сопровождаемым маркерной table, сопровождаемой списком идентификаторов, ссылающихся на глобальные или будущие звуковые таблицы, или объявление массива кода операции, или определение табличной карты.
8.6.5.2 Объявление звуковой таблицы
Синтаксис и семантика 8.5.3.3 содержат для инструмента локальные звуковые таблицы со следующими исключениями и дополнениями:
Инструмент, локальная звуковая таблица, доступен только в пределах локального контекста единственного инструментального инстанцирования. Это должно быть создано и инициализировано с данными в инструментальное время инстанцирования, сразу после того, как от параметров вызова будут присвоены значения pfield. Это может быть удалено и освобождено, когда инструментальное инстанцирование завершается.
Не каждое выражение i-rate является законным как часть табличного списка параметра. Ссылка на константы, pfields, импортированные i-rate переменные и i-rate стандартные имена разрешена. Инструментальная инициализация звуковой таблицы должна произойти через инструментальный код, и ссылка на локальные i-rate переменные запрещается.
8.6.5.3 Сигнальные переменные
Синтаксис и семантика 8.5.3.2 содержат для инструмента локальные сигнальные переменные со следующими исключениями и дополнениями:
Локальное объявление имени определяет, что должны создаваться маркер имени и пространство, равное значению единицы сигнала, выделенное для временного хранения в каждом инструментальном инстанцировании, связанном с инструментальным определением. Локальное объявление массива определяет, что должен создаваться маркер имени и пространство, равное конкретному количеству сигнальных значений, выделенных в каждом инструментальном инстанцировании, связанном с инструментальным определением.
Теги imports и/или exports могут использоваться совместно с локальным i-rate или переменной k-rate. Они не должны использоваться с a-rate переменными. Если тег imports будет использоваться, то переменное значение должно быть заменено значением глобальной переменной того же самого имени в инструментальное время инициализации (для i-rate сигнальных переменных) или в начале каждой передачи управления (для k-rate переменных). Тег imports может использоваться для локального k-rate переменной сигнала уровня, даже если нет никакой глобальной переменной того же самого имени. В этом случае показывают, что k-rate переменная уровня может быть изменена строками control в счете SASL. Тег imports не должен использоваться для локальных i-rate сигнальных переменных, если нет глобальной переменной того же самого имени.
Если тег exports будет использоваться, то значение глобальной переменной того же самого имени должно быть заменено значением локальной сигнальной переменной после инструментальной инициализации (для i-rate сигнальных переменных) или в конце каждой передачи управления (для k-rate переменных сигнала). Тег exports не должен использоваться, если нет никакой глобальной переменной того же самого имени.
Если для определенной сигнальной переменной теги imports и/или exports будут использоваться и есть глобальная переменная с тем же самым именем, то ширина массива локальных и глобальных переменных должна быть одинакова.
Если для определенной локальной переменной тег imports не используется, то его значение устанавливается в 0 перед инструментальной инициализацией.
Если для определенного локального переменного объявления теги imports и exports не используются, даже если есть глобальная переменная того же самого имени, между этими двумя переменными нет никакого семантического отношения. Конструкция является синтаксически законной.
8.6.5.4 Заполнитель звуковой таблицы
Совместно теги imports и exports могут использоваться к ссылочным глобальным и будущим звуковым таблицам. В этом случае локальное объявление табличной ссылки называют заполнителем звуковой таблицы. Определение заполнителя звуковой таблицы не содержит полное определение звуковой таблицы, а только ссылку на глобальное или будущее имя звуковой таблицы.
Если используется только тег imports и есть глобальная звуковая таблица с тем же самым именем, то в инструментальное время инстанцирования текущее содержание глобальной звуковой таблицы копируется в локальную звуковую таблицу с тем же именем.
Если содержание глобальной звуковой таблицы изменяется после того, как определенное инструментальное инстанцирование, ссылающееся на глобальную звуковую таблицу, создано, новое содержание глобальной звуковой таблицы не должно быть скопировано в инструментальное инстанцирование. Если содержание локальной звуковой таблицы будет изменено, то эти изменения не должны быть отражены в глобальной звуковой таблице.
Если теги imports и exports используются и есть глобальная звуковая таблица с тем же самым именем, то в инструментальное время инстанцирования и в начале каждой передачи управления текущее содержание глобальной звуковой таблицы делается доступным для локальной звуковой таблицы с тем же именем. "Делается доступным" в предыдущем предложении означает, что доступ может быть в форме копирования данных из одной звуковой таблицы в другую или ссылкой указателя на пространство памяти, или любой эквивалентной реализацией. В конце инструментального инстанцирования и в конце каждой передачи управления текущее содержание локальной звуковой таблицы также делается доступным для глобальной звуковой таблицы с тем же самым именем. В случае, если звуковая таблица изменяется в одном инструментальном экземпляре и не указано точно, когда эти изменения будут видимы в других инструментальных экземплярах, то это должно быть не позже, чем следующий цикл оркестра (разрешается быть в том же самом цикле оркестра).
Недопустимо использовать один только тег exports для заполнителя звуковой таблицы.
Если тег imports используется и нет никакой глобальной звуковой таблицы с тем же именем, то ссылаются на будущую звуковую таблицу, которая будет в потоке битов. Когда инструмент инстанцируют, содержание новой звуковой таблицы в потоке битов с тем же именем должно быть скопировано в локальную звуковую таблицу. Если никакая звуковая таблица в потоке битов с тем же самым именем во время инструментального инстанцирования не была заполнена, то поток битов недопустим. Если звуковая таблица изменяется, обеспечивая новую звуковую таблицу с тем же самым именем при использовании table строки в потоке битов, то ссылка сразу изменяется на новую звуковую таблицу.
Недопустимо использовать тег exports, если нет никакой глобальной звуковой таблицы с тем же самым именем.
8.6.5.5 Объявление массива кода операции
Массив кода операции или oparray объявление объявляет несколько состояний кода операции, которые могут использоваться текущим инструментом или кодом операции. Объявляя состояния этим способом, доступ к ним доступен через oparray выражение. Идентификатор в объявлении должен быть именем базового кода операции или определен пользователем кода операции в другом месте в оркестре. Длина массива объявляет, сколько состояний имеется для доступа к oparray в локальном блоке кода. Это должно быть целочисленное значение или специальные теги inchannels или outchannels.
Если больше чем одно oparray объявление ссылается на то же самое имя кода операции в инструменте или коде операции, то это - синтаксическая ошибка.
8.6.5.6 Табличное определение карты
<table тар definition> -> tablemap <ident> ( <identlist> )
Табличная карта является структурой данных, позволяющей косвенную ссылку звуковых таблиц через нотацию массива. Идентификатор называет табличную карту, и это не должно быть именем любой другой сигнальной переменной или другого ограниченного слова в локальном контексте. Список идентификаторов дает много имен звуковой таблицы для использования с табличной картой. Каждое из этих имен должно соответствовать определенному заполнителю или звуковой таблицы в пределах текущего контекста. Tablemap объявление может прибыть прежде, после или посреди объявлений звуковой таблицы и заполнителей звуковой таблицы в инструменте. На все звуковые таблицы в пределах инструмента можно сослаться в tablemap независимо от синтаксического размещения tablemap.
Когда имя tablemap используется в ссылочном массивом выражении, индекс выражения определяет к какой из звуковых таблиц в списке обращается выражение. Первая звуковая таблица в списке является номером 0, вторым номером 1 и так далее.
8.6.6 Операторы блока программы
8.6.6.1 Синтаксическая форма
|
Блок является последовательностью нуля или большего количества операторов. Оператор должен принять одну из нескольких форм, которые перечисляются и описываются в последующих подпунктах. У каждого оператора есть правила уровней семантики, управляющих уровнем оператора, правила контекстов уровня, в которых это допустимо, и времена, в которые должны выполняться различные субкомпоненты.
Чтобы выполнить блок операторов на определенном уровне, каждый оператор в пределах блока должен выполняться в таком порядке, чтобы это привело к выполнению операторов последовательно в линейном порядке.
8.6.6.2 Присвоение
<lvalue> -> <ident>
<lvalue> -> <ident> [ <expr> ]
lvalue или значение левой стороны обозначает сигнальную переменную или переменные, значения которых должны быть изменены. lvalue может быть локальным именем переменной, когда обозначаются места хранения, связанные с этим именем. lvalue может также быть локальным именем массива, когда обозначается место для хранения массива. lvalue может также быть единственным элементом локального массива, обозначенным индексом имени локального массива. lvalue не должен быть табличной ссылкой или tablemap выражением. lvalue не должен быть стандартным именем кроме случаев MIDIctrl или params.
Если lvalue обозначит весь массив, то выражение правой стороны присвоения должно обозначаться массивом с той же длиной или единичным значением, иначе конструкция синтаксически недопустима. В случае, если lvalue зависит от вычисления выражения правой стороны (например, если весь массив умножается с одним из его элементов), lvalue не определен.
Если lvalue обозначает единичное значение, то выражение правой стороны присвоения должно обозначить единичное значение, иначе конструкция синтаксически недопустима.
Величина lvalue является величиной сигнальной переменной, если нет индексации, или величиной сигнального массива, обозначенного сигнальной переменной, и уровнем индексации, если есть индексация.
Уровень оператора является уровнем lvalue, однако оператор недопустим, если уровень правой стороны быстрее, чем уровень lvalue.
Присвоение должно выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть оценено правое выражение стороны. Затем место для хранения, обозначенное lvalue, должно быть обновлено, чтобы быть равным значению правого выражения. Если lvalue обозначит весь массив, и выражение правой стороны - единичное значение, то каждое из значений каждого из элементов массива должно быть изменено на единичное значение правой стороны.
8.6.6.3 Нулевое присвоение
<statement> -> <expr>
Нулевое присвоение содержит только выражение. Это обеспечивают коды операции, у которых нет полезных возвращаемых значений, и они не использовались в контексте присвоения фиктивной переменной.
Уровень оператора является уровнем выражения. Выражение может быть однозначным или оценено массивом. Это не должна быть табличная ссылка.
Нулевое присвоение должно выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть оценено выражение.
8.6.6.4 If
<statement> -> if ( <expr> ) { <block> }
If оператор позволяет условную оценку блока программы. Выражение, которое тестируется в if операторе, называют выражением защиты.
Уровень оператора является уровнем выражения защиты или уровнем самого быстрого оператора в защищенном блоке кода.
Недопустимо для блока программы, которым управляет if оператор, содержать операторы медленнее, чем выражение защиты. Недопустимо для любого из операторов в блоке программы, которым управляют, содержать коды операции, которые были бы выполнены медленнее, чем выражение защиты. Выражение защиты должно быть однозначным выражением.
If оператор должен выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть оценено выражение защиты. Если оператор защиты в определенной передаче оценен ненулевым значением, то блок программы должен быть оценен на уровне, соответствующем той передаче.
Если в блоке программы, выполняющейся в a-rate или k-rate, есть i-rate операторы, эти операторы должны быть выполнены только в первый раз.
Если в блоке программы, выполняющейся в a-rate, есть операторы k-rate, эти операторы должны быть выполнены только в первый раз, когда блок выполняется в kcycle.
8.6.6.5 Else
<statement> -> if ( <expr> ) { <block> } else { <block> }
Else оператор позволяет дизъюнктивую оценку двух блоков программы. Выражение, которое тестируется в операторе, называют выражением защиты.
Уровень оператора является уровнем выражения защиты или уровнем самого быстрого оператора в первом защищенном блоке программы, или уровнем самого быстрого оператора во втором защищенном блоке программы.
Else недопустимо для блоков программы, которым оператор else приказывает содержать более медленные операторы, чем выражение защиты. Недопустимо для любого из операторов в блоках программы, которыми управляют, содержать коды операций, которые были бы выполнены медленнее, чем выражение защиты. Выражение защиты должно быть однозначным выражением.
Else оператор должен выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть оценено выражение защиты. Если выражение защиты в определенной передаче оценено ненулевым значением, то первый защищенный блок программы должен быть на уровне, соответствующем этой передаче. Если оператор защиты в определенной передаче обнулить, то каждый оператор во втором защищенном блоке программы должен быть обнулен.
Если в блоке программы, выполняющейся в a-rate или k-rate, есть i-rate операторы, эти операторы должны быть выполнены только в первый раз, когда блок выполняется.
Если в блоке программы, выполняющейся в a-rate, есть k-rate операторы, эти операторы должны быть выполнены только в первый раз, когда блок выполняется в kcycle.
8.6.6.6 While
<statement> -> while ( <expr> ) { <block> }
While оператор позволяет блоку программы быть условно оцененным несколько раз в одном уровне передачи. Выражение, которое тестируется в while операторе, называют выражением защиты.
Уровень while оператора является уровнем выражения защиты.
Недопустимо для блока программы, которым управляет while оператор, содержать операторы, которые работают на уровне, кроме уровня выражения защиты. Недопустимо для любого из операторов в блоке программы, которым управляют, содержать коды операции, которые выполняются на уровне, кроме уровня выражения защиты. Выражение защиты должно быть однозначным выражением. Недопустимо для выражения защиты содержать базовые коды операции specialop.
While оператор должен выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, должно быть оценено выражение защиты. Если выражение защиты в определенной передаче оценено в ненулевое значение, то каждый оператор в защищенном блоке программы должен быть оценен согласно определенным правилам для этого оператора, и затем выражение защиты переоценивают, выполняя итерации, пока выражение защиты не обнулится.
8.6.6.7 Instr
<statement> > instr <ident> (<expr list>);
Instr оператор позволяет инструментальному инстанцированию динамически создавать другие инструментальные инстанцирования для методов синтетической производительности или иерархического представления. Он состоит из идентификатора, обращающегося к инструменту, определенному в текущем оркестре, задержки, продолжительности и списка выражений, определяющих параметры инструмента, на который ссылаются.
Если число выражений в списке выражения не два или больше чем число pfields, принятого инструментом, на который ссылаются, то это синтаксическая ошибка. Каждое выражение в списке выражения должно быть однозначным выражением.
Уровень instr оператора является уровнем самого быстрого выражения в списке выражения или уровнем выражения защиты, или уровнем кода операции.
Instr оператор должен выполняться следующим образом:
В каждой передаче через оператор, происходящей на равных уровнях присвоения, оценивается каждое из выражений в списке выражения. Новое инструментальное событие регистрируется в планировщике. Время нового инструментального события является суммой текущего времени оркестра и величины первого выражения в списке выражения, масштабируемого текущим глобальным темпом. Продолжительность нового инструментального события является значением второго выражения в списке выражения. Значения р полей для нового инструментального события являются значениями остающихся выражений в списке выражения. У значений первых и вторых выражений есть модули ударов счета, и они масштабируются согласно фактическому темпу оркестра.
Исключение происходит, когда задержка (первое выражение в списке выражения) меньше, чем продолжительность периода управлением оркестра. В этом случае инструментальное событие не создается, но новое инструментальное инстанцирование было сразу создано. Продолжительность нового инстанцирования является значением второго выражения в списке выражения, и значения инструментальных р-полей в новом инстанцировании устанавливаются в значения остающихся выражений.
В этом случае передача i-rate посредством нового инстанцирования инструмента должна выполняться непосредственно после его создания, прежде чем выполняются операторы от блока программы, содержащего instr оператор. Любые изменения в глобальные переменные i-rate, сделанные в новом экземпляре во время передачи i-rate, не признаются в этом инструменте ("caller") (переменные i-rate, импортированные из глобального контекста, устанавливаются только во время передачи инициализации каждого экземпляра и никогда не изменяются позже).
У динамически создаваемого инструмента есть доступ к MIDIctrl (8.6.8.9), MIDItouch (8.6.8.10), MIDIbend (8.6.8.11), channel (8.6.8.12) и preset (8.6.8.13) стандартному имени его предшественника. Динамически создаваемый инструмент не планируется для завершения, когда предшественник будет завершен под управлением MIDI.
8.6.6.8 Output
<statement> -> output ( <expr list> );
Output оператор создает аудиовыход из инструмента. Этот вывод не становится превращенным непосредственно в звук, а скорее буферизуется на одной или более шинах, основанных по инструкциям данных в операторах route или на специальной шине output_bus по умолчанию. Если текущее инструментальное инстанцирование является send оператором, ссылающимся на специальную шину output_bus, то вывод текущего инстанцирования суммирует его так, чтобы output мог быть превращен непосредственно в звук.
Список выражения должен содержать по крайней мере одно выражение.
Уровнем output оператора является a-rate.
Все операторы оркестра, которые ссылаются на шину outbus или маршрутизируются по умолчанию к специальной шине output_bus, будут иметь совместимое число параметров выражения, представляющего каналы вывода. "Совместимый" означает, что если output для определенной шины больше, чем один параметр выражения, то у всех других output на эту шину должно быть то же самое число параметров выражения или только один параметр выражения. Число каналов специальной шины output_bus должно быть тем же самым, как параметр у глобальной переменной outchannels и output, используемое инструментами, и будет совместимым с этим числом каналов.
Output оператор выполняется следующим образом:
В каждом k-rate проходят через выходной буфер с числом каналов, определенных правилами в 7.3.3.5.2, чтобы обнулить значения. Каждый уровень проходит через оператор, и параметры выражения должны быть оценены. Значения параметра выражения должны быть помещены в выходной буфер. Если значение у output оператора будет больше, чем одно выражение параметра, то значение каждого параметра должно быть добавлено к текущему значению выходного буфера в соответствующем канале. Если у output оператора будет только одно выражение параметра, то значение этого выражения должно быть добавлено к текущему значению выходного буфера в каждом канале.
Параметры выражения output оператора могут быть оценены массивом, в котором отображение, описанное в предыдущем абзаце, не от выражений, чтобы буферизовать каналы, а от каналов значения массива, чтобы буферизовать каналы.
Каждый уровень проходит через инструментальное инстанцирование во время, определенное оркестром. Значения в выходном буфере должны быть добавлены каналом к текущему значению шины или шин, на которые ссылается выражение route, или выражения, на которые также ссылается этот инструмент. Если не будет операторов route, то значения в выходном буфере должны быть добавлены каналом к текущему значению специальной шины output_bus. Если это инструментальное инстанцирование, создаваемое ссылкой на специальную шину output_bus в send операторе, то значения в выходном буфере являются выводом оркестра.
8.6.6.9 Spatialize
<statement>-> spatialize (<expr list>);
Spatialize оператор позволяет инструментам производить звук spatialised, используя ненормативные методы, которые зависят от реализации.
Список выражения должен содержать четыре выражения. Второе, третье и четвертое не должны быть уровнем выражения. Первое выражение представляет аудиосигнал spatialised. Второе - азимут (угол), из которого исходит звук, измеряется в радианах по часовой стрелке от 0 непосредственно перед слушателем. Третье - угол возвышения, откуда исходит звук, измеряется в радианах вверх от 0 на горизонтальном месте слушателя. Четвертое - расстояние от источника звука, измеряется в метрах от позиции слушателя. Каждое из этих четырех выражений должно быть однозначным.
Уровень spatialize оператора является a-rate.
Spatialize оператор должен выполняться следующим образом:
В каждом* уровень проходит через инструмент, выражения в списке выражения должны быть оценены. Звуковой сигнал в первом выражении должен быть представлен слушателю, как если бы он исходил от азимута, повышения и расстояния, данных во вторых, третьих и четвертых выражениях. Никакие нормативные требования не распространяются на эту spatialisation возможность.
Звук, произведенный через spatialize оператор, превращается непосредственно в вывод оркестра. На это не должны влиять маршрутизации шины или дальнейшее манипулирование в пределах оркестра. Если spatialize многократно повторяются в пределах оркестра, то различные звуки должны быть смешаны через простое суммирование после spatialisation. Если звук spatialised и non-spatialised будет произведен в пределах оркестра, то вывод всего звука non-spatialised должен быть смешан через простое суммирование с различными звуками spatialised. Чтобы включить это смешивание звука, произведенного через каждый spatialize оператор, количество каналов должно быть равно глобальному числу каналов вывода оркестра.
8.6.6.10 Outbus
<statement>-> outbus (<ident>, <expr list>);
Outbus оператор позволяет инструментам помещать динамически расчетные сигналы в шины. Параметр идентификатора должен обратиться к имени шины, определенной с помощью send оператора в глобальном блоке.
Если нет никаких выражений в списке выражения или если идентификатор не обращается к шине, определенной в глобальном блоке с помощью send оператора, то это синтаксическая ошибка. Число выражений в списке выражения должно быть совместимо с другими операторами, ссылающимися на эту же шину.
Уровень outbus оператора является a-rate.
Outbus оператор должен выполняться следующим образом:
Каждый уровень проходит через оператор, список выражения должен быть оценен. Значения выражения должны быть добавлены к текущему значению шины, на которую ссылаются. Если будет больше, чем одно выражение в списке выражения, то каждое значение выражения должно быть добавлено к соответствующему каналу шины, на которую ссылаются. Если будет только одно выражение в списке выражения, то значение выражения должно быть добавлено к каждому каналу шины, на которую ссылаются.
Выражения в списке выражения могут быть оценены массивом.
Outbus оператор не должен использоваться в инструменте, который является целью send оператора, ссылающегося на специальную шину output_bus.
8.6.6.11 Extend
<statement>-> extend (<expr>);
Extend оператор позволяет инструментальному инстанцированию динамически удлинять свою продолжительность.
Параметр выражения не должен быть уровнем. Выражение должно быть однозначным.
Для получения доступа к полной версии без ограничений вы можете выбрать подходящий тариф или активировать демо-доступ.