Главная страница 1
скачать файл

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) разрешает приложению прямую запись в первичный буфер адаптера.

Потеря буферов

Когда приложение высшего уровня становится активным, звучание всех вторичных буферов приложений более низких уровней останавливается, а сами буферы помечаются как потерянные. Это происходит потому, что подсистема не может правильно отслеживать текущие позиции во вторичных буферах, не имея доступа к первичному буферу адаптера. И наоборот, когда приложение высшего уровня становится неактивным, его первичный буфер также помечается как потерянный.



Приложения получают ошибки, когда пытаются обратиться к потерянным буферам. Все приложения должны корректно обрабатывать эту ситуацию и выполнять восстановление потерянных буферов.

Поэтому при создании звукового буфера лучше использовать системную память.
скачать файл



Смотрите также:
программный интерфейс (api) в системе Windows для воспроизведения и записи звука. Входит в состав DirectX
50.43kb.
* Графическое устройство DirectX 9 с драйвером wddm версии 1
67.38kb.
При записи чисел в римской системе счисления используются следующие правила
64.99kb.
Методическое пособие для студентов 1 курса дневного и заочного отделений
393.6kb.
Служба Windows Installer
240.9kb.
Андреевский собор
83.39kb.
Программный комплекс "Карусель" для диагностики определения готовности к школьному обучению
18.03kb.
Цели и задачи преподавания и изучения дисциплины
35.95kb.
Сейшельские острова
37.41kb.
Copyright 2005 Paragon Software (Smart Handheld Devices Division) Долгопрудный, Московская область, Россия
151.9kb.
Запуск команд Windows Shell, используя названия и {guid} объектов
87.35kb.
Перед эксплуатацией котла необходимо внимательно ознакомиться с эксплуатационной документацией на котел и его составные части
80.47kb.