close

Вход

Забыли?

вход по аккаунту

?

Direct Sound (2)

код для вставкиСкачать
 Direct Sound (direct - прямой, непосредственный, sound - звук) -
- программный интерфейс (API) в системе Windows для воспроизведения и записи звука. Входит в состав DirectX. Интерфейс DirectSound был разработан в середине 1990-х в дополнение к стандартному звуковому интерфейсу MME, главным образом для воспроизведения звуков в играх и других приложениях реального времени. Впоследствии к нему были добавлены интерфейсы DirectSoundCapture, предназначенный для записи звука, и DirectSound3D, позволяющий работать с пространственными звуками.
DirectSound обеспечивает приложениям практически непосредственный доступ к аппаратуре звукового адаптера. DirectSound использует возможности аппаратуры там, где это можно, а в остальных случаях выполняет нужную работу на программном уровне.
Подсистема DirectSound построена по объектно-ориентированному принципу в соответствии с моделью COM (Component Object Model - модель объектов-компонентов, или составных объектов) и состоит из набора интерфейсов. Интерфейс представляет собой обычный набор управляющих функций, или методов, организованных в класс объектно-ориентированного языка.
Взаимодействие между приложением и звуковым адаптером (звуковая карта) с помощью DirectSound. Сначала приложение для работы создает COM-объект. Данный объект будет представлять проигрывающее устройство и будет использоваться для управления этим устройством и для создания звуковых буферов. Звуковые буферы представляют собой участок памяти, в который заносятся звуковые данные. /*Множество приложений может создавать такие объекты для одного и того же устройства, используемого для воспроизведения звука (звуковая карта). Когда происходит переход от приложения к приложению, то потоки автоматически тоже переключаются. Поэтому не нужно постоянно останавливать и воспроизводить буферы при переключении приложений. Если устр-в много, то перебором выбирается работающее.*/
В зависимости от размещения и способа управления различают аппаратные (hardware) и программные (software) буферы. Аппаратным называют буфер, к которому адаптер имеет прямой доступ; такой буфер располагается либо в памяти самого адаптера, либо в основной памяти. Программные буферы всегда располагаются в основной памяти и управляются процессором, адаптер к таким буферам прямого доступа не имеет.
В DirectSound буфер является кольцевым, то есть указатель текущей позиции при достижении конца буфера автоматически перебрасывается на его начало. +Позиции в буфере
DirectSound использует для адресации в звуковых буферах понятие текущих позиций, или курсоров. Различают позицию записи/воспроизведения, отслеживающую проигрывание звука из буфера в адаптер или запись звука из адаптера в буфер, и позицию доступа, отслеживающую чтение/запись (обмен данными) между приложением и буфером. В первичной англоязычной документации первая позиция называется Play/Capture Position, а вторая - Read/Write Position. В DirectSound выделяется 2 вида буферов: первичный и вторичный.
Первичный буфер содержит звук, который непосредственно слышит пользователь. Каждый вторичный буфер содержит короткий звук или поток аудио. DirectSound автоматически создает первичный буфер, а приложения сами должны создавать вторичные буферы. Когда звуки во вторичных буферах проигрываются, DirectSound смешивает их в первичном буфере и отправляет на устройство вывода (ЦАП адаптера).
/*Только доступное процессорное время ограничивает количество вторичных буферов которые может смешивать DirectSound.*/
В типовой схеме взаимодействия для каждого источника звука создается свой вторичный буфер (в DirectSound часто отождествляются понятия <источник звука> и <вторичный звуковой буфер>). *Даже если смешивание выполняет DirectSound - оно осуществляется на уровне ядра (VxD или системно).
В исключительных случаях возможен прямой доступ к первичному буферу. При этом запрещается использование вторичных буферов - то есть приложение теряет возможность описывать независимые источники звука.
Вторичный буфер может быть статическим (static) и потоковым (streaming). Статические буферы предназначены для постоянных звуков, цифровое представление которых не меняется либо меняется достаточно редко. Потоковые буферы ориентированы на часто изменяемые звуки, как правило - на представление длительного звукового потока, который по частям "прогоняется" через буфер.
Статические и потоковые буферы различаются только тем, что подсистема старается в первую очередь делать аппаратными статические буферы, чтобы постоянные и короткие звуки оказывались в распоряжении адаптера (достаточно дать команду, чтобы они включились в общее звучание).
Поскольку каждый вторичный буфер описывает независимый источник звука, при необходимости приложение может изменить параметры звучания в буфере: частоту (SetFrequency), громкость (SetVolume), положение на панораме (SetPan). +Для изменения набора необходимо уничтожить буфер и создать его заново. +Изменение частоты воспроизведения звукового буфера меняет высоту звука.
Если нужно проиграть длинный звуковой файл, необходимо использовать механизм потокового воспроизведения звука. Секрет заключается в использовании зацикленного воспроизведения, обеспечивающего непрерывный звук без пауз, и постоянную загрузку новых звуковых данных на замену тем, которые уже были воспроизведены.
Данный механизм заключается в установке нескольких маркеров в звуковом буфере. Когда воспроизводимый звук проходит один из этих маркеров, мы получаем сигнал, что пришло время загружать следующую порцию звуковых данных, вместо воспроизведенной.
/*Длинные звуки нужно записывать в буфер потоковым методом. Это осуществляется либо с помощью уведомлений (notification), которые посылаются при достижении позиции проигрывания определённых меток, либо опрашиванием позиции проигрывания.*/
DirectSound вводит четыре уровня взаимодействия (cooperation levels) приложений между собой и звуковым адаптером.
* Обычный (normal) уровень фиксирует формат первичного буфера адаптера. Форматы вторичных буферов преобразуются в этот формат, и при переключении приложений подсистеме нет необходимости изменять формат первичного буфера. * Приоритетный (priority) уровень позволяет приложению устанавливать формат первичного буфера и предоставляет приоритетный доступ к аппаратным ресурсам, когда окно приложения становится активным (foreground). Если происходит переключение между приложениями этого уровня, установившими различные форматы первичного буфера, - подсистема вынуждена переключать форматы, для чего необходим перезапуск адаптера, нередко порождающий щелчки и тому подобные помехи. * Исключительный (exclusive) уровень подобен приоритетному, но на время активности окна приложения ему предоставляется исключительный доступ к адаптеру, и звучание источников всех остальных приложений заглушается (но не останавливается). * Уровень доступа к первичному буферу (write-primary) разрешает приложению прямую запись в первичный буфер адаптера.
Потеря буферов
Когда приложение высшего уровня становится активным, звучание всех вторичных буферов приложений более низких уровней останавливается, а сами буферы помечаются как потерянные. Это происходит потому, что подсистема не может правильно отслеживать текущие позиции во вторичных буферах, не имея доступа к первичному буферу адаптера. И наоборот, когда приложение высшего уровня становится неактивным, его первичный буфер также помечается как потерянный.
Приложения получают ошибки, когда пытаются обратиться к потерянным буферам. Все приложения должны корректно обрабатывать эту ситуацию и выполнять восстановление потерянных буферов.
Поэтому при создании звукового буфера лучше использовать системную память. 
Документ
Категория
Рефераты
Просмотров
100
Размер файла
42 Кб
Теги
direct, sound
1/--страниц
Пожаловаться на содержимое документа