Меню Рубрики

Программирование звука в linux alsa

Лучшие методы управления звуком в Linux с использованием ALSA, часть 2

Тестирование звуковых каналов

На прошлой неделе мы изучили, как настроить звуковые карты для воспроизведения с использованием ALSA. Это легко, это работает на всех системах Linux, не создает конфликтов, не вносит задержек и не требует использования системы X Window. Сегодня мы приступим к изучению использования ALSA для записи, и расскажем как протестировать нашу звуковую систему.

Быстрый и не очень хороший путь увидеть, что звук работает — это направить содержимое файла в dev/dsp:

Более правильный способ — использование набора alsa-utils, который включает некоторое количество полезных команд для тестирования вашей установки. Команда speaker-test тестирует каналы динамиков. Вот пример команды для простой стерео-установки с двумя динамиками:

В ходе тестирования вы должны слышать приятный женский голос, говорящий «Front left, front right». В данном примере -c2 означает два канала, а -l2 означает запуск теста два раза.

Будьте внимательны с нумерацией каналов — номера динамиков выводимые командой speaker-test начинаются с нуля, в то время как номер опции -s начинается с единицы. Система требует точности!

LFE (Low Frequency Effects) означает низкочастотные эффекты, которые обычно подразумевают работу вашего сабвуфера. Естественно, они более сложные, чем те, что описывались выше (для более подробной информации смотрите « Что такое LFE канал? »).

«Раскопки» в звуковых картах

Как вы можете узнать какой тип вывода поддерживает ваша звуковая карта? Команда aplay вам поможет:

Прим.переводчика: перевод сообщений на русский язык в выводе команды вы, естественно, не увидите.

.asoundrc. Просто, но эффективно:

Теперь, вместо aplay -D hw:1,0 test.wav можно использовать aplay -D headset test.wav. То есть, происходит замена идентификаторов ядра (0,0- 1,0) именами (V8237, Headset) , поскольку идентификаторы ядра могут меняться, и особенно это касается udev устройств.

Запись с использованием ALSA

Для того, чтобы остановить выполнение команды, нажмите Ctrl+C.

Напоследок, несколько полезных советов.

Чтобы узнать версию ALSA, запустите cat /proc/asound/version.

Вышеприведенные примеры относятся к интегрированной в мою низкобюджетную материнскую плату ESC звуковой подсистеме. Она поддерживает цифровой выход (S/PDIF = Цифровой интерфейс Sony-Philips) в дополнение к аналоговому. Тем не менее, я не могу его использовать — на материнской плате нет разъемов.

Будьте внимательны при покупке звуковых карт, поскольку часто можно встретить заявления такого рода: «24-битный цифровой звук!». Все компьютерные звуковые карты поддерживают цифровой звук, это их основная работа — преобразовывать цифровые аудио-файлы для аналоговых динамиков. Но если вы действительно желаете приобрести звуковую карту с цифровым выходом для цифровых динамиков — внимательно прочитайте спецификацию, чтобы быть уверенным, что получаете 100% цифровое качество на самом деле.

Источники

  • man alsamixer
  • man aplay/arecord
  • man speaker-test
  • HOWTO Dolby Digital and DTS
  • ALSA , со множеством полезной документации
  • Неофициальная, но очень полезная ALSA Wiki

Карла Шредер — автор книг «Linux. Сборник рецептов» и недавно изданной «Сборник сетевых рецептов», а так же постоянный автор статей на LinuxPlanet.

Источник

Как настроить звук в Linux, чтобы он был не хуже, чем в Windows

Многие юзеры после перехода с Windows на Linux, или просто установки последнего в качестве дополнительной системы (мультибут), отмечают резко ухудшившееся качество звука. В связи с этим даже бытует мнение, что «пингвин» никогда не сравняется с «окнами» в плане звучания. Однако, даже немного разобравшись в том, как функционирует аудио-подсистема в Linux , можно добиться существенно большего комфорта при прослушивании своих любимых музыкальных композиций.

Для тех, кто не в курсе — в # Linux одновременно запущены и работают сразу две аудио-подсистемы. Одна из них — Alsa — более низкоуровневая и выступает на сегодняшний день больше в роли драйвера, а вторая — это PulseAudio, наоборот акцентированная на всяческие микшеры и высокоуровневые подстройки звучания. Наиболее важно правильно настроить именно PulseAudio, но начинать следует с Alsa .

Если в системе установлен пакет Alsa Utils , можно использовать команду

для просмотра в терминале используемых системой аудиокарт. Переключение между ними осуществляется клавишей F6. Обычно аудиокарта с индексом 0 выбрана по умолчанию, и звук выводится на PulseAudio через нее, но так бывает не всегда. Распознать дефолтное устройство в данном случае можно по наличию множества слайдеров (Master, PCM, Front и так далее). Переключаться между ними легко при помощи стрелок влево и вправо, тогда как уровень громкости изменяется стрелками вверх и вниз. Здесь нужно выставить все громкости (кроме заканчивающихся словом «Boost») на 100% , обеспечив тем самым передачу звука без урезания громкости на PulseAudio.

Не факт, что уровни громкости останутся максимальными после перезагрузки. Стоит это проверить, и если все-таки нет, тогда достаточно поместить в автозапуск (реализация зависит от дистрибутива) команды:

amixer -c 0 set ‘Master’,0 100%

amixer -c 0 set ‘PCM’,0 100%

или скрипт их содержащий («0» здесь означает индекс аудиокарты, а «100%» — уровень громкости на соответствующем канале).

Дальше начинается самое интересное. Вся соль различия в звучании между Linux и Windows состоит в том, что в первом случае (как всегда) нужно все делать собственными руками. Так свежеустановленная ОС от Microsoft сама определит и установит оптимальные настройки для основных параметров — частоты дискретизации и диапазона. Поэтому и выходит так, что пользователи сравнивают 24-битный звук с частотой 48000 кГц и стандартные 16 бит с 44100 кГц. А чтобы и в выбранном Linux-дистрибутиве было так же, следует открыть в текстовом редакторе с правами суперпользователя файл

и добавить туда две строчки:

Первая установит диапазон , подходящий для звуковых карт, умеющих обрабатывать 24- и 32-битный звук, вторая — частоту . Стоит также обратить внимание на строчку, которая выглядит следующим образом:

Если она вместо «no» содержит «yes», лучше раскомментировать ее (убрать точку с запятой в начале) и заменить «yes» на » no «. Так почти предотвращается ситуация со слишком интенсивным снижением звука за счет программной связи между каналами Alsa и PulseAudio — регулировка громкости на канале Master в одной подсистеме пропорционально изменяет данный показатель на том же канале в другой. «Предотвращается почти», по скольку связаны и другие каналы и, чтобы отвязать и их , нужно редактировать файл

Начиная с середины этого конфига, вслед за закомментированным содержимым, идут рабочие параметры типа «[Element PCM] . «. Каждый из них нужно заменить соответственно на:

Источник

Программирование звука в Linux

Андрей Боровский
borovsky@yandex.ru

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

Оборудование и данные

Микшер

Большинство звуковых карт оборудовано микшерами. Микшер √ это устройство, позволяющее устанавливать уровни записи/воспроизведения для других устройств, а также выбирать источник записываемых данных.

Цифровое аудио

Цифровое аудио (digital audio) √ самый простой и естественный формат хранения и передачи звука в цифровых устройствах. Принцип цифрового аудио следующий: аналого-цифровой преобразователь считывает значения амплитуды аналогового сигнала через определенные интервалы времени. Каждое значение кодируется числом, которое записывается в одном или нескольких байтах (один такой код называется сэмплом). В стереозаписи сэмплы, соответствующие левому и правому каналам, либо записываются на одном треке, чередуясь друг за другом, либо размещаются непрерывно на отдельных треках. Рассмотренная ниже система OSS использует чередование сэмплов. При воспроизведении выполняется обратное преобразование из цифровой в аналоговую форму. Качество записи определяют частота дискретизации и разрядность кодирования амплитуды.
Максимальная частота дискретизации, поддерживаемая большинством звуковых карт, составляет 48 КГц. Карты класса Hi-End поддерживают частоты дискретизации до 96 КГц (DVD audio). Сэмплы кодируются 8, 16 и 24 битами (последнее значение поддерживается не всеми картами). Для записи одной секунды одноканального звука с частотой дискретизации 8 КГц и разрядностью сэмплов 8 бит (качество цифрового телефона) потребуется 8000 байтов. Пропускная способность канала для передачи такого сигнала должна составлять 64 КБит/сек. Для записи одной секунды стереозвука с частотой дискретизации 44,1 КГц и разрядностью сэмплов 16 бит (что соответствует качеству аудио-CD) понадобится 172 КБ а пропускная способность канала должна быть не меньше 1.5 MБит/сек. Из этих расчетов становится очевидным, почему в большинстве форматов хранения цифрового аудио применяются различные методы сжатия данных.
MIDI
Протокол MIDI (Musical Instrument Digital Interface) используется электронными музыкальными инструментами, а также специальными устройствами воспроизведения звука. В MIDI передается не закодированный звуковой сигнал, а набор инструкций, описывающих мелодию, которую должны исполнять инструменты, поэтому запись в формате MIDI гораздо компактнее, чем запись в формате цифрового аудио. Главным недостатком MIDI с точки зрения программирования звука на компьютере является то, что этот протокол может воспроизводить только музыку, причем ее звучание будет зависеть от возможностей конкретной звуковой карты. Практически все звуковые карты оснащены портами для подключения внешних MIDI-устройств. Кроме того, большинство карт обладает встроенными MIDI-синтезаторами, позволяющими воспроизводить MIDI-музыку через аудиосистему самой карты.

Драйверы и интерфейсы

На сегодняшний день в Linux наиболее распространены две аудиоподсистемы: OSS и ALSA.
OSS (Open Sound System), разрабатываемая компанией 4Front Technologies, по замыслу разработчиков должна стать средством построения единого звукового интерфейса для различных UNIX-платформ и совместимых с ними систем. OSS представляет собой набор драйверов звуковых карт и библиотек, реализующих простые и удобные интерфейсы программирования. Система OSS распространяется в двух вариантах: OSS/Free и OSS Commercial. С сайта www.opensound.com можно бесплатно загрузить пробную версию OSS Commercial, обладающую более широкими возможностями по сравнению с OSS/Free и функционирующую в течение длительного периода времени. К достоинствам OSS следует отнести широкий спектр поддерживаемых звуковых карт и полноту проработки драйверов √ OSS позволяет работать со всеми типами встроенных в карты устройств, хотя новые карты не всегда поддерживаются полностью. Еще одно достоинство √ подробная документация.
Система ALSA (Advanced Linux Sound Architecture), как видно из названия, предназначена специально для Linux. Проект ALSA является открытым и начат сравнительно недавно (на момент написания этой статьи стабильная версия драйверов добралась лишь до номера 0.5.12). На сайте проекта www.alsa-project.org можно загрузить последнюю версию системы и документацию, которая еще далеко не полна. ALSA хорошо справляется с программированием микшера и цифрового аудио, однако поддержка MIDI-синтезаторов пока что отсутствует. Кроме того, при работе с некоторыми дистрибутивами Linux, ALSA не поддерживает устройство /dev/sndstat, позволяющее получать информацию о параметрах установленного звукового оборудования. Главное достоинство ALSA √ полная открытость проекта, остальные преимущества носят пока скорее потенциальный характер.
В распоряжении Linux-программиста есть и другие пакеты, например, ориентированная на KDE система aRts. В примерах программ, приведенных в этой статье, используется OSS.

Программирование микшера

Драйверы OSS позволяют обращаться к микшерам посредством файлов /dev/mixer00, /dev/mixer01 и т.п. Обычно к первому из доступных микшеров можно также обратиться по символической ссылке /dev/mixer. Все основные константы OSS для работы с микшером (как, впрочем, и с другими аудиоустройствами) объявлены в файле soundcard.h. Интерфейс микшера позволяет считывать и устанавливать значения уровней записи/воспроизведения для различных каналов, а также указывать канал-источник записи.
Перед началом работы с микшером надо открыть соответствующий файл устройства (например, /dev/mixer). Дальнейшая работа с файлом выполняется при помощи функции ioctl. Чтобы определить, какие каналы поддерживает данный микшер, следует вызвать функцию ioctl, передав в параметре request константу SOUND_MIXER_READ_DEVMASK.
ioctl(mixer_fd, SOUND_MIXER_READ_DEVMASK, &mask);

Здесь mixer_fd √ дескриптор файла микшера. В переменной mask будет возвращена маска каналов. Каждый бит маски соответствует определенному каналу. Если бит установлен, канал поддерживается. Битам маски соответствуют константы, определенные в файле soundcard.h. Их имена начинаются с префикса SOUND_MASK_, за которым следует имя канала. Обозначения основных каналов приводятся в таблице:

Общий уровень воспроизведения для основного выхода звуковой карты

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Программирование драйверов в linux
  • Программирование для linux профессиональный подход
  • Программирование для linux для начинающих
  • Программирование для linux в visual studio
  • Программирование pic в linux