Слайд 1Новая аудио подсистема для ОСРВ QNX4 – Audio2
Олег Большаков
инженер-программист
«СВД Встраиваемые Системы»
Санкт-Петербург
Слайд 2Обзор существующих решений
Аудио подсистема Audio
Аудио подсистема ALSA 0.2 (Advanced Linux Sound
Architecture)
Недостатки существующих аудио подсистем
Слайд 3Обзор существующих решений :
Audio
Adlib
Sound Blaster
ProAudio Spectrum
Microsoft Sound System
Roland MPU-401
Audio поддерживает ограниченный
набор звуковых плат:
Слайд 4Обзор существующих решений :
Audio
/dev/dsp
/dev/fm (Adlib)
/dev/midi (Roland MPU401)
Audio создаёт несколько устройств:
Слайд 5Обзор существующих решений :
Audio
Audio
Client
ioctl
Управление форматом аудио потока производится при помощи вызовов
ioctl. Для произведения и записи звука используются функции для записи и чтения файла соответственно.
read
write
Слайд 6Обзор существующих решений :
ALSA 0.2
4D Wave
Ensoniq AudioPCI
ESS Solo 1
Yamaha OPL3-SA
OPTI 930/931
SoundBlaster
16/Pro
SoundBlaster Live!
VIA SuperSouth (VT686A)
ALSA 0.2 поддерживает следующий набор звуковых плат :
Слайд 7Обзор существующих решений :
ALSA 0.2
/dev/pcmXX
/dev/mixerXX
/dev/controlXX
ALSA создаёт несколько аудио устройств:
Слайд 8Обзор существующих решений :
ALSA 0.2
Client
ioctl
Управление форматом аудио потока производится при помощи
вызовов ioctl. Для произведения и записи звука используются функции для записи и чтения файла соответственно.
read
write
Слайд 9Обзор существующих решений : Недостатки аудио подсистем
Отсутствует поддержка миксера ( /dev/mixer
)
Нет поддержки современных аудио контроллеров
Не модульная система
Невозможность разработки новых драйверов
Audio обладает рядом недостатков:
Слайд 10Обзор существующих решений : Недостатки аудио подсистем
Отсутствует поддержка современных контроллеров
Старая версия
портированная в QNX (текущая версия 1.0.6)
Сложность разработки новых драйверов
Не совместима с OSS (Open Sound System)
Лицензия GPL (GNU General Public License)
ALSA 0.2 обладает следующим рядом недостатков:
Слайд 11Обзор существующих решений : Ссылки
OSS (Open Sound System) http://www.opensound.com/pguide/index.html
ALSA (Advanced Linux
Sound Architecture) http://www.alsa-project.org
GPL (GNU General Public License) http://www.gnu.org/licenses/gpl.html
MIDI (Musical Instrument Digital Interface) http://www.midi.org/about-midi/specshome.shtml
Слайд 12Звуковая подсистема Audio2
Описание
Разработка драйверов
Разработка приложений
Слайд 13Звуковая подсистема Audio2: Описание
Аудио сервер
Набор драйверов для аудио адаптеров
Набор утилит: миксер,
проигрыватель и звукозапись.
Audio2 состоит из следующих компонент:
Слайд 14Звуковая подсистема Audio2: Описание
C-Media CMI-8338/8738
Dummy Device
Sound Blaster Live!
AC’97
Audio2 на данный момент
поддерживает ограниченный набор звуковых плат:
Слайд 15Звуковая подсистема Audio2: Описание
/dev/dspX
/dev/midiX
/dev/mixerX
Audio2 создаёт следующие аудио устройства:
Слайд 16Звуковая подсистема Audio2: Описание
Client
ioctl
Управление форматом аудио потока производится при помощи вызовов
ioctl. Для произведения и записи звука используются функции для записи и чтения файла соответственно.
read
write
Слайд 17Звуковая подсистема Audio2: Описание
Audio2
Server
/dev/dsp1
/dev/dsp2
/dev/mixer1
Audio2
Driver1
Audio2
Driver2
Audio2 – это модульная система.
Модули могут быть загружены
и выгружены в любой момент времени.
Слайд 18Звуковая подсистема Audio2: Описание
С Audio2 работают приложения разработанные для Audio:
CD-проигрыватель phcd
MP3-проигрыватель
mpg123
Игровые программы, например, doom
Слайд 19
Звуковая подсистема Audio2: Разработка драйверов
A2.Drv_name
Для разработки драйверов поставляется библиотека, обеспечивающая интерфейс
с Audio2 сервером. Разработка аппаратной части драйвера полностью производится системным программистом на основе каркаса dummy драйвера.
a2_driver.lib
hw_part.c
Слайд 20Звуковая подсистема Audio2: Разработка драйверов
Audio2
Driver
Аудио драйвер должен реализовать две функции для
присоединения к Audio2 серверу:
dev_connect() – подсоединение к серверу
dev_disconnect() – отсоединение от сервера (опционально)
Слайд 21Звуковая подсистема Audio2: Разработка драйверов
Audio2
Driver
Драйвер должен реализовать следующий набор функций для
обеспечения своей функциональности:
dev_open() – открытие устройства ( dspX, mixerX )
dev_close() – закрытие устройства
dev_write() – запись в устройство (опционально)
dev_read() – чтение из устройства (опционально)
dev_sndctl() – обработка ioctl() (опционально)
Слайд 22Звуковая подсистема Audio2: Разработка драйверов
typedef struct
{
unsigned functions; // Набор флагов функций
func_t connect; // Соединение с сервером
func_t disconnect; // Отсоединение от сервера
func_t open; // _IO_OPEN
func_t close; // _IO_CLOSE
func_t read; // _IO_READ
func_t write; // _IO_WRITE
func_t sndctl; // _IO_SNDCTL
}
a2_drv_func_t;
Слайд 23Звуковая подсистема Audio2: Разработка драйверов
a2_derv_func_t a2_func =
{
A2_DRV_CONNECT |
A2_DRV_OPEN | A2_DRV_CLOSE | A2_DRV_WRITE,
(func_t)( dev_connect ),
(func_t)( NULL ),
(func_t)( dev_open ),
(func_t)( dev_close ),
(func_t)( NULL ),
(func_t)( dev_write ),
(func_t)( NULL )
};
Слайд 24Звуковая подсистема Audio2: Разработка драйверов
int far dev_connect( … )
{
//
1. Поиск устройства
// 2. Определение возможностей и инициализация
// устройства
// 3. Заполнение структуры с информацией об
// устройстве
// ( характеристики PCI: VendorID, DeviceID,
// PCIindex; число устройств dsp, midi, mixer )
// 4. В случае успешного завершение вернуть 0
}
Слайд 25Звуковая подсистема Audio2: Разработка драйверов
Audio2
Server
Audio2
Driver1
Client1
Client2
Audio2
Driver2
Card1
Card2
Слайд 26OSS
(Open Sound System)
Звуковая подсистема Audio2: Разработка приложений
Audio2
Audio
Audio2 совместима с Audio. Все
ранее разработанные программы будут работать с Audio2.
При этом Audio2 поддерживает стандарт OSS на уровне исходных кодов.
Слайд 27Звуковая подсистема Audio2: Разработка приложений
a2_audio.h
Для разработки аудио приложений Audio2 предоставляет заголовочный
файл a2_audio.h, с командами функции ioctl() для аудиоустройств.
При этом обеспечивается совместимость с OSS на уровне исходных кодов.
Слайд 28Стандарт OSS
Описание OSS
Разработка приложений для Audio2
Слайд 29Стандарт OSS: Описание
Единый API для различного типа оборудования на различных аппаратных
платформах
Поддержка PCM (Pulse-Code Modulation) и MIDI устройств
Управление параметрами звука производится через специальное устройство - mixer
Слайд 30Стандарт OSS: Описание
Linux
FreeBSD
OpenBSD
NetBSD
Solaris
HP-UX
Стандарт OSS поддерживается большим числом широко распространённых операционных систем.
Слайд 31Стандарт OSS: Разработка приложений для Audio2
1. Подключить заголовочный файл Audio2:
#include
2.
Открыть аудио устройство для чтения:
if ( ( afd = open( “/dev/dsp0”, O_RDONLY, 0 ) )== -1 )
{
perror( “open()” );
exit( -EXIT_FAILURE );
}
Слайд 32Стандарт OSS: Разработка приложений для Audio2
3. Установить частоту дискретизации:
rate = 44100;
if
( ioctl( afd, SOUND_PCM_WRITE_RATE, &rate ) == -1 ) {
perror( “ioctl()” );
exit( -EXIT_FAILURE );
}
if ( rate != 44100 )
{
printf( “Can’t set samplerate to 44100\n” );
exit( -EXIT_FAILURE );
}
Слайд 33Стандарт OSS: Разработка приложений для Audio2
4. Установить число каналов:
…
if ( ioctl(
afd, SOUND_PCM_WRITE_CHANNELS,
&channels ) == -1 )
{
…
5. Установить формат аудио потока:
…
if ( ioctl( afd, SOUND_PCM_WRITE_BITS, &bits ) == -1 ) {
…
Слайд 34Стандарт OSS: Разработка приложений для Audio2
6. Прочитать из аудио устройства:
if (
( len = read( afd, buff, 4096 ) ) == -1 )
{
perror( “read()” );
exit( -EXIT_FAILURE );
}
7. Закрыть аудио устройство:
close( afd );
Слайд 35Выводы
Поддержка аудио устройств в QNX4 существует только для устаревшего оборудования
Audio2 должна
решить эту проблему, поскольку обладает рядом преимуществ
Слайд 36Выводы: Audio2
Поддержка современного оборудования
Поддержка широко распространенного аудио стандарта OSS
Модульная система –
упрощает процесс разработки новых драйверов
Слайд 37SWD Software Ltd.
Официальный дистрибьютор QNX
196135, Санкт-Петербург,
пр. Юрия Гагарина 23
тел.: (812)
102-0833
тел.: (812) 373-0260
факс: (812) 373-0497
web: http://www.swd.ru/
e-mail: qnx@swd.ru
Спасибо!