Операционные системы. Учебное пособие. Марапулец Ю.В. - 223 стр.

UptoLike

Составители: 

PCM представляются в виде беззнаковых целых чисел; за нуль сигнала принято «цен-
тральное» значение 128 (шестнадцатеричное - 80). Итак, предельной отрицательно ам-
плитуде сигнала соответствует нулевое значение отсчета, а предельной положительной -
значение FF. Для пересчета значений отсчетов в знаковую двуполярную форму в диапа-
зоне от -128 до +127 из них нужно вычитать 128 (0x80), или прибавлять то же самое
смещение, вычисляя по модулю 256, что дает такой же результат.
Отсчеты с разрядностью более восьми представляются в виде целых чисел со зна-
ком в стандартном формате Intel, за нуль сигнала принято нулевое значение отсчета.
Здесь может без каких-либо ограничений применяться обычная целая арифметика, на-
пример над типами short (16-разрядный) и long (32-разрядный). Если разрядность отсче-
та превышает 16, она может быть не кратна байту - современные звуковые адаптеры мо-
гут использовать 18-, 20- и 22-разрядные отсчеты. В таком случае отсчет выравнивается
по старшей границе трех- или четырехбайтового слова, а лишние младшие разряды за-
полняются нулями. Подобное представление позволяет работать с отсчетами любой раз-
рядности так же, как с 24- или 32-разрядными; от фактической разрядности отсчета за-
висит лишь точность полученного числа.
С момента запуска потока драйвер отслеживает текущую позицию записи или вос-
произведения, которая в любой момент может быть запрошена приложением. Точность
определения реальной позиции зависит от используемого устройства: она может указы-
вать на конкретный звуковой отсчет либо на небольшую группу отсчетов, находящуюся
в данный момент в обработке. Как правило, все адаптеры имеют скрытую небольшую
очередь между встроенным процессором и ЦАП/АЦП, так что полученная от драйвера
позиция почти всегда будет отличаться от реальной на несколько отсчетов. Драйвер от-
слеживает позицию путем подсчета количества звуковых блоков потока, переданных от
приложения к устройству или наоборот. Если приложение не успевает своевременно пе-
редавать драйверу звуковые буферы, то вычисленная позиция будет отставать от дейст-
вительного времени записи или воспроизведения.
Циклическое движение буферов может быть приостановлено и затем возобновлено
с места прерывания с сохранением позиции в потоке. Поток может быть уничтожен
(сброшен) - в этом случае драйвер немедленно возвращает приложению все ждущие бу-
феры и обнуляет позицию потока. Для устройств воспроизведения один или несколько
идущих подряд буферов могут быть зациклены (looped): в этом случае драйвер последо-
вательно проигрывает их заданное количество раз, после чего возвращает приложению и
переходит к воспроизведению следующих буферов из очереди.
Звуковая подсистема Windows допускает работу с устройством нескольких про-
цессов (клиентов) одновременно. Многие современные и даже некоторые устаревшие
звуковые устройства поддерживают более одного клиента; устройство вывода (или его
драйвер) смешивает проигрываемые клиентами звуковые потоки, а устройство ввода
размножает записываемый поток для всех подключенных клиентов.
Устройство, драйвер которого поддерживает не более одного клиента, не может
быть повторно открыто до тех пор, пока клиент не закроет его. При попытке повторно
открыть такое устройство звуковая подсистема возвращает сообщение об ошибке, сиг-
нализирующее о том, что устройство занято.
Для упрощения реализации основных операций со звуком Windows содержит
службу переназначения - Wave Mapper. Поскольку в ОС Windows может быть установ-
лено более одного звукового устройства, существуют понятия стандартного системного
устройства ввода и стандартного системного устройства вывода. Оба они задаются в за-
кладке Audio формы свойств мультимедиа. Приложение может запросить работу с кон-
кретным звуковым устройством либо со стандартным системным - в последнем случае
служба переназначения определяет нужное устройство.
225
PCM представляются в виде беззнаковых целых чисел; за нуль сигнала принято «цен-
тральное» значение 128 (шестнадцатеричное - 80). Итак, предельной отрицательно ам-
плитуде сигнала соответствует нулевое значение отсчета, а предельной положительной -
значение FF. Для пересчета значений отсчетов в знаковую двуполярную форму в диапа-
зоне от -128 до +127 из них нужно вычитать 128 (0x80), или прибавлять то же самое
смещение, вычисляя по модулю 256, что дает такой же результат.
     Отсчеты с разрядностью более восьми представляются в виде целых чисел со зна-
ком в стандартном формате Intel, за нуль сигнала принято нулевое значение отсчета.
Здесь может без каких-либо ограничений применяться обычная целая арифметика, на-
пример над типами short (16-разрядный) и long (32-разрядный). Если разрядность отсче-
та превышает 16, она может быть не кратна байту - современные звуковые адаптеры мо-
гут использовать 18-, 20- и 22-разрядные отсчеты. В таком случае отсчет выравнивается
по старшей границе трех- или четырехбайтового слова, а лишние младшие разряды за-
полняются нулями. Подобное представление позволяет работать с отсчетами любой раз-
рядности так же, как с 24- или 32-разрядными; от фактической разрядности отсчета за-
висит лишь точность полученного числа.
     С момента запуска потока драйвер отслеживает текущую позицию записи или вос-
произведения, которая в любой момент может быть запрошена приложением. Точность
определения реальной позиции зависит от используемого устройства: она может указы-
вать на конкретный звуковой отсчет либо на небольшую группу отсчетов, находящуюся
в данный момент в обработке. Как правило, все адаптеры имеют скрытую небольшую
очередь между встроенным процессором и ЦАП/АЦП, так что полученная от драйвера
позиция почти всегда будет отличаться от реальной на несколько отсчетов. Драйвер от-
слеживает позицию путем подсчета количества звуковых блоков потока, переданных от
приложения к устройству или наоборот. Если приложение не успевает своевременно пе-
редавать драйверу звуковые буферы, то вычисленная позиция будет отставать от дейст-
вительного времени записи или воспроизведения.
     Циклическое движение буферов может быть приостановлено и затем возобновлено
с места прерывания с сохранением позиции в потоке. Поток может быть уничтожен
(сброшен) - в этом случае драйвер немедленно возвращает приложению все ждущие бу-
феры и обнуляет позицию потока. Для устройств воспроизведения один или несколько
идущих подряд буферов могут быть зациклены (looped): в этом случае драйвер последо-
вательно проигрывает их заданное количество раз, после чего возвращает приложению и
переходит к воспроизведению следующих буферов из очереди.
     Звуковая подсистема Windows допускает работу с устройством нескольких про-
цессов (клиентов) одновременно. Многие современные и даже некоторые устаревшие
звуковые устройства поддерживают более одного клиента; устройство вывода (или его
драйвер) смешивает проигрываемые клиентами звуковые потоки, а устройство ввода
размножает записываемый поток для всех подключенных клиентов.
     Устройство, драйвер которого поддерживает не более одного клиента, не может
быть повторно открыто до тех пор, пока клиент не закроет его. При попытке повторно
открыть такое устройство звуковая подсистема возвращает сообщение об ошибке, сиг-
нализирующее о том, что устройство занято.
     Для упрощения реализации основных операций со звуком Windows содержит
службу переназначения - Wave Mapper. Поскольку в ОС Windows может быть установ-
лено более одного звукового устройства, существуют понятия стандартного системного
устройства ввода и стандартного системного устройства вывода. Оба они задаются в за-
кладке Audio формы свойств мультимедиа. Приложение может запросить работу с кон-
кретным звуковым устройством либо со стандартным системным - в последнем случае
служба переназначения определяет нужное устройство.



                                        225