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

UptoLike

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

При завершении обработки каждого буфера драйвер устанавливает в его заголовке
флаг готовности, по которому приложение может определить, что драйвер освободил
данный буфер. Однако для асинхронных устройств гораздо более эффективным спосо-
бом возврата буфера является уведомление (notification), при котором драйвер либо вы-
зывает заданную функцию приложения, либо активизирует событие (event), либо пере-
дает сообщение заданному окну или задаче (thread) приложения. При этом в параметрах
функции или сообщения передается также указатель заголовка буфера.
Перед тем, как быть переданным драйверу устройства, каждый звуковой буфер
должен быть подготовлен (prepared). Как правило, подготовка заключается в фиксации
буфера в памяти, так как большинство звуковых адаптеров пользуется внепроцессорны-
ми методами передачи данных, а эти методы требуют размещения буфера на одних и тех
же адресах памяти. Передача драйверу неподготовленного буфера приводит к ошибке.
При работе со звуковыми адаптерами чаще всего используется традиционный спо-
соб цифрового кодирования PCM (Pulse Code Modulation - импульсно-кодовая модуля-
ция, ИКМ). Ряд мгновенных значений звуковой амплитуды, следующих друг за другом с
частотой дискретизации, представляется рядом чисел выбранной разрядности, значения
которых пропорциональны величине амплитуды. Именно в таком виде звуковой поток
снимается с выхода АЦП или подается на вход ЦАП. Однако наряду с предельной про-
стотой PCM обладает существенной избыточностью, передавая звук настолько точно,
насколько это возможно при выбранных параметрах оцифровки. Зачастую при програм-
мировании звуковых устройств на первый план выходит задача минимизации скорости и
объема звукового потока, в то время как отдельными параметрами точности и качества
можно пренебречь. В таких случаях используются другие способы кодирования, когда
звуковая информация представляется в виде относительных изменений амплитуды
(ADPCM - adaptive differential PCM, адаптивная разностная ИКМ), мгновенных «сним-
ков» спектра (Audio MPEG) и т.п. Обрабатывать звук в PCM способен любой звуковой
адаптер. Иные способы кодирования аппаратно реализуются лишь в специализирован-
ных адаптерах.
Совокупность основных параметров потока - способа кодирования, частоты дис-
кретизации, количества каналов (стерео/моно) и разрядности отсчета - называется фор-
матом потока (Wave Format). Желаемый формат указывается при открытии устройст-
ва; для смены формата требуется закрытие и повторное открытие устройства.
Главным параметром формата является способ кодирования, который также называется
еще признаком формата (format tag). Каждый способ кодирования порождает группу од-
нотипных форматов, различающихся лишь точностью представления, а следовательно и
качеством передачи звука.
Основные частоты дискретизации (11025, 22050 и 44100 Гц) в сочетаниях с раз-
личным количеством каналов (1 или 2) и различной разрядностью отсчета (8 или 16) при
способе кодирования PCM образуют 12 типовых форматов. Частота 11025 Гц (полоса
звуковых частот примерно до 5 кГц) приблизительно соответствует качеству телефонно-
го сигнала, частота 22050 Гц (полоса до 10 кГц) - среднего радиоприемника, частота
44100 Гц (полоса до 20 кГц) - качественной звуковой аппаратуре.
Наименьшей единицей звукового потока является блок. Соответственно, размер
каждого буфера, передаваемого звуковой подсистеме, должен быть кратен размеру бло-
ка, а объем данных, возвращаемый устройством ввода, всегда будет кратен размеру бло-
ка. В PCM блоком считается набор отсчетов, передаваемых за один период частоты дис-
кретизации, а именно: один отсчет - для монофонических потоков, два - для
стереофонических, и т. д. Таким образом, блоки следуют друг за другом с частотой дис-
кретизации, а отсчеты в блоках размещаются начиная с левого (нулевого) канала. Если
отсчет занимает более одного байта, то байты размещаются в порядке по старшинству, в
порядке возрастания, как это принято в процессорах Intel. Восьмиразрядные отсчеты в
224
      При завершении обработки каждого буфера драйвер устанавливает в его заголовке
флаг готовности, по которому приложение может определить, что драйвер освободил
данный буфер. Однако для асинхронных устройств гораздо более эффективным спосо-
бом возврата буфера является уведомление (notification), при котором драйвер либо вы-
зывает заданную функцию приложения, либо активизирует событие (event), либо пере-
дает сообщение заданному окну или задаче (thread) приложения. При этом в параметрах
функции или сообщения передается также указатель заголовка буфера.
      Перед тем, как быть переданным драйверу устройства, каждый звуковой буфер
должен быть подготовлен (prepared). Как правило, подготовка заключается в фиксации
буфера в памяти, так как большинство звуковых адаптеров пользуется внепроцессорны-
ми методами передачи данных, а эти методы требуют размещения буфера на одних и тех
же адресах памяти. Передача драйверу неподготовленного буфера приводит к ошибке.
      При работе со звуковыми адаптерами чаще всего используется традиционный спо-
соб цифрового кодирования PCM (Pulse Code Modulation - импульсно-кодовая модуля-
ция, ИКМ). Ряд мгновенных значений звуковой амплитуды, следующих друг за другом с
частотой дискретизации, представляется рядом чисел выбранной разрядности, значения
которых пропорциональны величине амплитуды. Именно в таком виде звуковой поток
снимается с выхода АЦП или подается на вход ЦАП. Однако наряду с предельной про-
стотой PCM обладает существенной избыточностью, передавая звук настолько точно,
насколько это возможно при выбранных параметрах оцифровки. Зачастую при програм-
мировании звуковых устройств на первый план выходит задача минимизации скорости и
объема звукового потока, в то время как отдельными параметрами точности и качества
можно пренебречь. В таких случаях используются другие способы кодирования, когда
звуковая информация представляется в виде относительных изменений амплитуды
(ADPCM - adaptive differential PCM, адаптивная разностная ИКМ), мгновенных «сним-
ков» спектра (Audio MPEG) и т.п. Обрабатывать звук в PCM способен любой звуковой
адаптер. Иные способы кодирования аппаратно реализуются лишь в специализирован-
ных адаптерах.
      Совокупность основных параметров потока - способа кодирования, частоты дис-
кретизации, количества каналов (стерео/моно) и разрядности отсчета - называется фор-
матом потока (Wave Format). Желаемый формат указывается при открытии устройст-
ва; для смены формата требуется закрытие и повторное открытие устройства.
Главным параметром формата является способ кодирования, который также называется
еще признаком формата (format tag). Каждый способ кодирования порождает группу од-
нотипных форматов, различающихся лишь точностью представления, а следовательно и
качеством передачи звука.
      Основные частоты дискретизации (11025, 22050 и 44100 Гц) в сочетаниях с раз-
личным количеством каналов (1 или 2) и различной разрядностью отсчета (8 или 16) при
способе кодирования PCM образуют 12 типовых форматов. Частота 11025 Гц (полоса
звуковых частот примерно до 5 кГц) приблизительно соответствует качеству телефонно-
го сигнала, частота 22050 Гц (полоса до 10 кГц) - среднего радиоприемника, частота
44100 Гц (полоса до 20 кГц) - качественной звуковой аппаратуре.
      Наименьшей единицей звукового потока является блок. Соответственно, размер
каждого буфера, передаваемого звуковой подсистеме, должен быть кратен размеру бло-
ка, а объем данных, возвращаемый устройством ввода, всегда будет кратен размеру бло-
ка. В PCM блоком считается набор отсчетов, передаваемых за один период частоты дис-
кретизации, а именно: один отсчет - для монофонических потоков, два - для
стереофонических, и т. д. Таким образом, блоки следуют друг за другом с частотой дис-
кретизации, а отсчеты в блоках размещаются начиная с левого (нулевого) канала. Если
отсчет занимает более одного байта, то байты размещаются в порядке по старшинству, в
порядке возрастания, как это принято в процессорах Intel. Восьмиразрядные отсчеты в


                                        224