ALSA

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page ALSA and the translation is 100% complete.
Outdated translations are marked like this.


Эта статья рассказывает о настройке звуковой карты для работы с ALSA (Advanced Linux Sound Architecture).

Установка

Определение аппаратного обеспечения

Для выбора подходящего драйвера сперва нужно определить звуковой контроллер. Для это цели можно воспользоваться командой lspci:

user $lspci | grep -i audio

После определения названия контроллера, нужный драйвер может быть найден в ALSA sound card matrix.

Kernel

Активируйте следующие параметры ядра:

ЯДРО
Device Drivers --->
    <*> Sound card support
        <*> Advanced Linux Sound Architecture --->
            [*] PCI sound devices  --->
                Select the driver for your audio controller.
                HD-Audio  --->
                   Select a codec or enable all and let the generic parse choose the right one:
                   [*] Build Realtek HD-audio codec support
                   [*] ...
                   [*] Build Silicon Labs 3054 HD-modem codec support
                   [*] Enable generic HD-audio codec parser
            [*] USB sound devices  --->
                Must have as some cards are presented as USB devices.
                [*] USB Audio/MIDI driver
General setup --->
    [*] System V IPC

Команда lsmod может быть полезной.

Если ваша система имеет больше 8 звуковых выходов (каждый HDMI выход на GPU считается за один), максимальное количество звуковых карт должно быть увеличено:

ЯДРО
Device Drivers --->
    <*> Sound card support
        <*> Advanced Linux Sound Architecture --->
            [*] Dynamic device file minor numbers
            (32) Max number of sound cards

Программное обеспечение

Portage знает глобальный USE флаг alsa для включения поддержки ALSA в других пакетах. Включение этого фалага автоматически установить media-libs/alsa-lib (стандартное поведение в x86 и amd64 профилях):

root #euse -E alsa

Команда euse является частью app-portage/gentoolkit.

USE flags for media-libs/alsa-lib Advanced Linux Sound Architecture Library

alisp Enable support for ALISP (ALSA LISP) interpreter for advanced features.
debug Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see https://wiki.gentoo.org/wiki/Project:Quality_Assurance/Backtraces
doc Add extra documentation (API, Javadoc, etc). It is recommended to enable per package instead of globally
python Add optional support/bindings for the Python language

После установки этого флага потребуется обновить систему, чтобы изменения вступили в силу:

root #emerge --ask --changed-use --deep @world

Пакет media-sound/alsa-utils содержит утилиты для отладки и тестирования звуковой системы. Рекомендуется установить этот пакет, если это ещё не сделано:

root #emerge --ask media-sound/alsa-utils

Конфигурация

Файлы

  • /etc/asound.conf — глобальный (системный) конфигурационный файл.
  • ~/.asoundrc — локальный (пользовательский) конфигурационный файл.

~/.asoundrc

Файл используется для пользовательского переопределения настроек ALSA по умолчанию. Если в системе есть необычное оборудование - большая вероятность что карта 0 и устройство 0 (настройки по умолчанию) не будут работать.

Самые простые изменения это карта и устройство. Например, конфигурация для подключения GPU от NVIDIA, подключённой к звуковому контроллеру Realtek ALC88* на материнской плате.

ФАЙЛ ~/.asoundrc
defaults.pcm.!card 1
defaults.pcm.!device 7

Если вы не можете увидеть номер карты, присвоенной устройству которое вы собираетесь использовать, не паникуйте - номер карты является именем во внутренней логике, которое вы можете использовать. Если ваша карта выводится как:

user $aplay -L
front:CARD=Generic,DEV=0
HD-Audio Generic, ALC282 Analog
Front speakers

... это значит что ~/.asoundrc должен выглядеть примерно так:

ФАЙЛ ~/.asoundrc
defaults.pcm.!card Generic
defaults.pcm.!device 0
defaults.ctl.!card Generic
Предупреждение
Эти настройка отключают всё микширование. Чтобы выводить всё в 96kHz, добавьте defaults.pcm.dmix.rate 96000 в ~/.asoundrc

Если используется несколько звуковых карт, их номера могут изменяться после перезагрузки, использование имён рекомендуется.

Если вы не можете найти корректное имя, их список можно найти используя:

user $cat /sys/class/sound/card*/id

Вывод этой команды с системы имеющей несколько звуковых карт:

user $cat /sys/class/sound/card*/id
Q1U
HDMI
PCH
C930e

Здесь указан микрофон Q1U как Q1U, встроенный HDMI как HDMI, аналоговый звук как PCH и встроенный микрофон в камере как C930e. Каждое из этих имён является валидным.

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

.asoundrc для S/PDIF или HDMI

Основы

Большинство звуковых карт позволяют передавать звук на внешний потребительский ресивер или ЦАП с помощью цифровых коаксиальных или оптических кабелей S/PDIF. При этом сохраняется качество звука и сжатый материал, закодированный в формате Dolby/DTS. Для несжатого материала Dolby/DTS или Bluray требуется подключение HDMI. Более распространенные монофонические или аналоговые стереокабели не могут передавать сигналы Dolby/DTS.

При установке ALSA по умолчанию подключение S/PDIF или HDMI может работать сразу после установки (без изменений файла .asoundrc). В то время как только некоторые приложения, такие как плагин Adobe Flash для веб-браузера, не воспроизводят звук. Таким образом, приведенный ниже .asoundrc обычно требуется для большинства подключений S/PDIF и HDMI. Кроме того, все открытые мультимедийные приложения необходимо будет перезапустить, чтобы файлы .asoundrc вступили в силу (например, веб-браузеры, использующие подключаемый модуль Adobe Flash).

Предпочтения для соединений по сравнению с типами носителей

Базовый аналог

Базовые аналоговые (т.е. RCA) соединения — базовый пользователь. Качество зависит от ЦАП звуковой карты. Ищите звуковую карту с высоким уровнем SNR db.

S/PDIF

S/PDIF обеспечивает хорошее качество звука для музыки, видео и фильмов качества DVD, содержащих сжатые сигналы Dobly/DTS. Большинство звуковых карт и материнских плат в наши дни имеют порт S/PDIF. В настоящее время на материнских платах чаще можно увидеть порты S/PDIF Toslink. Многие компьютерные игры поддерживают сжатые сигналы Dolby/DTS.

Цифровой коаксиальный S/PDIF

Цифровой коаксиальный кабель S/PDIF может иметь проблемы с перекрестными помехами по напряжению, но встречается чаще, поскольку для него требуется простой 3.5mm jack или коаксиальный кабель RCA.

Оптический S/PDIF (TOSLINK)

Оптический кабель S/PDIF (TOSLINK) полностью исключает возможные электрические перекрестные помехи или помехи между кабелями, поскольку он является оптоволоконным, однако он подвержен ухудшению сигнала, если кабель перегнут слишком сильно. Аудиофилы склонны отдавать предпочтение этому типу кабеля.

HDMI

Кабель HDMI (мультимедийный интерфейс высокой четкости) может передавать сжатые сигналы Dolby/DTS и несжатые (например, Blu-ray) сигналы Dolby/DTS. Аудиорынок отдает предпочтение этому соединению, но по-прежнему сохраняет соединения S/PDIF. Одна из проблем заключается в том, что кабели HDMI представляют собой медные провода, которые по-прежнему подвержены перекрестным электрическим помехам или помехам, подобно цифровым коаксиальным соединениям S / PDIF.

Оптические кабели HDMI производятся, но они, как правило, слишком дороги для потребительского рынка. Если у аудиофилов есть оптические порты S/PDIF, они будут использовать соединения S/PDIF для других носителей, таких как музыка и DVD-фильмы, в то время как HDMI будет использоваться только при необходимости для обработки несжатого материала, закодированного в формате Dolby/DTS, такого как носители Blu-ray. Опять же, обычный пользователь, скорее всего, просто будет использовать HDMI, избегая возни с изменением файлов конфигурации.

Конфигурация

Найти устройство цифрового вывода:

user $aplay --list-devices

Настройте файл ниже, чтобы использовать номер карты/устройства.

ФАЙЛ ~/.asoundrc
pcm.!spdif {
    type hw
    card 0
    device 1
}

pcm.!default {
    type plug
    slave {
        pcm "spdif"
    }
}

# Распределить одну звуковую карту на несколько приложений
#pcm.!default {
#    type plug
#    slave.pcm "dmix:CARD=0,DEVICE=1,RATE=48000"
#}
Заметка
Конфигурация выше не работает со звуком, исходящим из нескольких приложений одновременно, или больше чем с двумя звуками проходящими через одну звуковую карту. Чтобы сделать это возможным, звук ремикшируется с высокой потерью качества звука. Большинство людей слушающих музыку предпочитают не использовать это, из-за прерываний и низкого качества звука.
Заметка
При проигрывании звуковых файлов через aplay, начало звука будет обрезано, потому-что цифровые S/PDIF или HDMI подключения не держатся открытыми и должны открываться каждый раз когда новый файл проигрывается. Microsoft Windows, наоборот, удерживает подключения и микширует звук.

A/52, AC3, Dolby, DTS

Звуковые карты, обеспечивающие выход S/PDIF, могут передавать многоканальный звук со сжатием с потерями. На мой взгляд, сжатый носитель с высокой скоростью передачи данных имеет небольшие потери по сравнению с двухканальным звуком CD или DVD. Я предполагаю, что это потому, что теперь у нас есть многоканальное питание для нескольких динамиков. Следовательно, чем больше железа, тем равнозначнее или лучше звучание?

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

HDMI будет передавать несжатый многоканальный звук, но видеопоток чередуется, как того требует спецификация HDMI. По сравнению с DVD-видео и аудио я вижу и слышу очень небольшую разницу в качестве, если она вообще есть! Единственное, что я заметил между S/PDIF Toslink и HDMI, HDMI, похоже, усиливает сигнал на несколько ватт или 5 дБ. (Я делаю вывод, что это из-за более высокой скорости передачи данных?)

Таким образом, S/PDIF по-прежнему довольно популярен даже сегодня.

Заметка
Для прохождения расширенных кодировок требуется подключение S/PDIF или HDMI. Аналоговые соединения (RCA и minijack) не поддерживают расширенное кодирование.

Для декодирования или кодирования в Dolby или DTS требуется лицензия. Если вы уже приобрели звуковую карту с такой поддержкой многоканальности, то, скорее всего, у вас уже есть лицензия. См. эту статью для получения дополнительной информации.

Пакет ALSA media-plugins/alsa-plugins требует перекомпиляции для включения USE-флага ffmpeg с подключаемым модулем A/52 (pcm.a52encode).

root #USE="ffmpeg" emerge -q media-plugins/alsa-plugins

Декодирование или воспроизведение

Перекомпилируйте mplayer или другой любимый программный проигрыватель, чтобы включить библиотеки ALSA.

root #USE="a52 dts" emerge -q media-video/mplayer

Добавьте многоканальные кодеки в mplayer.conf, чтобы медиафайлы, которые пытаются воспроизвести, сначала получали возможность аппаратного сквозного доступа, а не микширования.

ФАЙЛ /etc/mplayer/mplayer.conf
ac=hwac3,hwdts,hwmpa,spdifac3,spdifeac3,spdifaac,spdifdts,spdifmpa,spdifthd,dts,ffaac,

Теперь вы должны иметь возможность передавать (и наслаждаться) почти любой сигнал Dolby или DTS через S/PDIF на ресивер.

Кодирование в A/52

Повышающее микширование двухканального аудио в многоканальный аудиопоток A/52

Чтобы имитировать звук, закодированный в формате A/52, из обычных одно- или двухканальных аудиопотоков или файлов, ALSA может выполнять повышающее микширование с помощью своего подключаемого модуля A/52. (A/52 также известен как кодирование AC-3 или Dolby Digital.)

Воспроизводящее микширование A/52 предпочтительнее при игре в компьютерные игры или просмотре видео без материалов, закодированных в формате Dolby/DTS, таких как старые фильмы. Многие производители звуковых карт предоставляют своим приложениям функцию программного повышающего микширования до Dolby Digital и рекомендуют включать это повышающее микширование при прослушивании таких носителей, кроме музыки.

Аудиофилы не одобряют микширование до A/52. Таким образом, пользователь предпочитает микшировать все звуки до A/52 перед отправкой потока на бытовой стереоресивер или ЦАП. На самом деле, аудиофилы предпочитают простое стерео, и, кроме того, стереофонический звук по-прежнему имеет лучшее качество, чем материал Dolby / DTS или другой звук, закодированный с помощью уловок. Кроме того, потребительские стереосистемы или ЦАП, вероятно, включают функцию повышающего микширования звука в пятиканальный звук.

ФАЙЛ ~/.asoundrc
pcm.!default {
    type plug:surroundaudio
}

ctl.!default {
    type plug:surroundaudio
}

pcm.a52encode {
    type a52
    format S16_LE
    channels 6
    rate 48000
    bitrate 448
}

pcm.surroundaudio a52encode

ctl.surroundaudio {
    type hw
    card 0
    device 1
}
user $speaker-test -Dsurroundaudio -c 6
Кодирование 24-битного звука PCM 5.1 в 16-битный аудиопоток A/52 (для потоковой передачи через S/PDIF)

Также известно как кодирование аудиопотока PCM 5.1 в сжатый поток Dolby Digital для воспроизведения через S/PDIF. Нет реальной необходимости использовать это, если вы используете HDMI, поскольку HDMI может обрабатывать полосу пропускания аудиопотока PCM 5.1. Предполагается, что S/PDIF Toslink также был обновлен для этого, но большая часть оборудования еще не обновлена ​​до новых спецификаций, и некоторые сомневаются, что это когда-либо произойдет.

По какой-то причине предыдущий раздел .asoundrc, упомянутый ранее, не работает с потоками PCM 5.1. Еще одна проблема, с которой я сталкиваюсь с 24-битными аудиопотоками PCM 5.1, требует понижающего микширования из битового формата S24_LE в битовый формат S16_LE. Причина в том, что 24-битный формат является распространенным для большинства медиафайлов, однако приемники иногда могут декодировать только 16- или 32-битный звук. Кроме того, S/PDIF может обрабатывать только 16-битный звук при кодировании в многоканальные форматы, такие как A/52, пока не будут обновлены аппаратные спецификации S/PDIF TosLink.

Следующий фрагмент .asoundrc кодирует 24-битный поток PCM 5.1 в 16-битный поток A/52 для потоковой передачи через S/PDIF.

ФАЙЛ ~/.asoundrc
#####
# Описание: Это позволит использовать a52 с PulseAudio из
#         коробки. Это может быть полезно для других случаев использования. Просто включите
# это в файле ~/.asoundrc.

pcm.a52 {
    @args [ CARD ]
    @args.CARD {
        type string
        default 0
    }
    type plug
    slave {
        pcm {
            type a52
            card $CARD
            bitrate 640 # Default 448
        }
        # Convert to S16 bit format, per SPDIF spec
        format S16_LE # Required for current S/PDIF spec
    }
}
user $aplay -D pcm.a52 /home/me/Music/Led_Zeppelin/Celegration_Day/PCM51-24bit/*.wav

Клонирование аудио для 2 и более устройств

Иногда вам нужно клонировать звук (например, используя 2 клонированных экрана с разными входами (первый экран HDMI и второй экран DVI + аналоговый звук)). Это простой сценарий, который вы можете использовать в качестве глобальной или локальной конфигурации для клонирования 2 (или более) каналов. Вы должны настроить для своей системы строки ниже закомментированных строк. Больше информации от автора скрипта и обсуждение на форуме здесь.

ФАЙЛ /etc/asound.conf
ctl.!default {
    type hw
    # Set your default card
    card 0
}

pcm.!default both

pcm.both {
    type softvol
    slave {
        pcm {
            type plug
            slave {
                pcm {
                    type route
                    slave {
                        pcm {
                        type multi
                        slaves.a.pcm {
                            type dmix
                            ipc_key 2589455
                            ipc_perm 0666
                            slave {
                                pcm {
                                    # Добавить стандартную карту - измените для того чтобы подходить под вашу карту #1
                                    type hw
                                    card 0
                                    device 0
                                }
                                buffer_size 4096
                                channels 2
                            }
                        }
                        slaves.b.pcm {
                            type dmix
                            ipc_key 4855689
                            ipc_perm 0666
                            slave {
                                pcm {
                                    # Добавить подчинённую карту - измените для того чтобы подходить под вашу карту #2
                                    type hw
                                    card 1
                                    device 7
                                }
                                buffer_size 4096
                                channels 2
                            }
                        }
                        slaves.a.channels 2
                        slaves.b.channels 2
                        bindings.0.slave a
                        bindings.0.channel 0
                        bindings.1.slave a
                        bindings.1.channel 1
                        bindings.2.slave b
                        bindings.2.channel 0
                        bindings.3.slave b
                        bindings.3.channel 1
                    }
                }
                ttable.0.0 1
                ttable.1.1 1
                ttable.0.2 1
                ttable.1.3 1
            }
        }
    }
}
control {
    # Определить имя контроля звука
    name PCM
    # Установить на стандартную карту
    card 0
}

Комплект аудиоподключения JACK

JACK обеспечивает дополнительный уровень для драйверов и приложений ALSA с уже низкой задержкой, а также гарантирует постоянную задержку звука и синхронную работу всех своих клиентов. JACK может одновременно использовать только одну звуковую карту и предоставит отдельные выходы и входы для каждого аудиоканала звуковой карты. Кроме того, JACK предоставляет возможность просматривать, манипулировать или направлять аудиопотоки, как аппаратные, так и программные потоки, аналогичным образом мы используем кабели для подключения различного аудиооборудования. Например, JAMin может перехватывать аудиопоток перед его экспортом в другое аудиоприложение и/или через аналоговые выходы или выходы S/PDIF. Демон, принадлежащий пользователю Jack, обычно запускается с помощью [1]. Утилита qjackctl предоставляет множество других функций, включая подключение аудиопотока.

Чего JACK не делает, так это обрабатывает входной материал в кодировке A/52 (AC-3 или Dolby/DTS); это просто звуковой сервер, который работает с отдельными каналами аудиопотоков. И у него есть возможность одновременно и синхронно подключать любой выходной поток к любому входу, и любой вход к любому выходному потоку, то есть к любому аппаратному и программному аудио компоненту, и с постоянной задержкой. Это делает JACK выдающимся инструментом для производства и создания аудио. Инструмент [2] можно использовать для кодирования нескольких отдельных аудиоканалов в потоки AC-3.

При воспроизведении медиафайла, закодированного в формате A/52, проигрыватель будет запрашивать у JACK столько выходных сигналов, сколько аудиоканалов в медиафайле. Это не удастся, если ваша звуковая карта не имеет запрошенного количества аудиовыходов, но в остальном все будет в порядке. Например, вы можете использовать mplayer как обычно и настроить его для вывода потока 5.1 в конфигурации вывода 7.1 или потока 7.1 в 2-канальном стереовыходе.

Одним из решений является настройка ядра и ALSA в соответствии с инструкциями по установке JACK для обеспечения звука с малой задержкой. Поскольку ALSA, как говорят, уже очень эффективен и имеет низкую задержку, обеспечивая воспроизведение очень хорошего качества без дополнительного микширования, если указано в его файле .asoundrc, в отличие от MS Windows, JACK, вероятно, не нужен для большинства. Основная аудитория JACK — аудиопродюсеры и музыканты (в студии, на живых выступлениях, ди-джеи, ...). (Пакет ac3jack в настоящее время размещается в оверлее pro-audio, доступном через eselect-repository.)

Можно соединить JACK и ALSA. На момент написания статьи лучшим решением было использовать модуль snd-loopback и мост zita-*2*. Для этого см. Using an ALSA Loopback device and zita-ajbridge на вики оверлея ProAudio Gentoo.

С помощью zita-ajbridge также можно добавить в JACK дополнительные настоящие звуковые карты. (пример нужен)

Те, кто хочет попробовать JACK, должны знать одну вещь: если вас устраивает pulseaudio, вам не нужно настраивать ядро реального времени для JACK. Вам потребуются операции rt только в том случае, если вы хотите создать цифровую звуковую рабочую станцию (DAW) на своем компьютере, что требует чего-то, чего не может достичь pulseaudio: постоянная задержка звука, такая низкая или менее 20 мс (pulseaudio не может обеспечить постоянную задержка звука вообще) и синхронные операции. Но если вы хотите сделать DAW, JACK — это определенно то, что вам нужно, и вы никогда не будете оглядываться назад.

Надеемся, что этот небольшой краткий раздел о JACK даст некоторое представление об его особенностях, при этом оставив подробности на странице вики, специально посвященной JACK.

А пока вы можете взглянуть на Pro-Audio Gentoo Overlay Wiki.

Разрешения

Если USE-флаг acl включен глобально и используется демон входа в систему (например, systemd-logind или elogind) (т. е. система использует профиль desktop) права доступа к звуковым картам будут обрабатываться автоматически. Разрешения можно проверить с помощью getfacl:

user $getfacl /dev/snd/controlC0 | grep larry
user:larry:rw-

Более широкое решение состоит в том, чтобы добавить пользователя, которому вы хотите предоставить доступ к звуковой карте, в группу audio:

root #gpasswd -a larry audio
user $grep audio /etc/group
audio::18:larry
Предупреждение
Вы должны выйти из системы и снова войти в систему, чтобы alsamixer заработал, иначе запуск команды alsamixer выдаст ошибку "cannot open mixer: No such file or directory"

Сервис

OpenRC

Если вы используете OpenRC, запустите ALSA с помощью команды service:

root #rc-service alsasound start

Чтобы ALSA запускался во время загрузки, добавьте его на уровень загрузки boot, используя rc-update:

root #rc-update add alsasound boot

systemd

При использовании systemd состояние ALSA будет сохраняться и автоматически восстанавливаться при перезапуске системы.

Статус ALSA можно проверить с помощью команды systemctl:

root #systemctl status alsa-restore

Микширование

Если вы ничего не слышите, возможно, выходные каналы отключены. Включите звук каналов с помощью микшера среды рабочего стола или с помощью alsamixer, выбрав соответствующие каналы и нажав клавишу M, чтобы отключить или включить звук:

user $alsamixer

Использование

Проверка динамиков

Если все вышеперечисленное идеально, теперь можно протестировать звуковую карту и динамики. Инструмент командной строки speaker-test из пакета media-sound/alsa-utils (он уже должен быть установлен в соответствии с предыдущей рекомендацией).

user $speaker-test -t wav -c 2

Для конфигураций с системой объемного звучания 5.1:

user $speaker-test -t wav -c 6 -D surround51

Нажмите Ctrl+C, чтобы прервать тест.

Проверка микрофона

При необходимости выберите аудиоустройство, если оно не указано по умолчанию, и добавьте --device=hw:0,0 к вызову arecord, заменив CardNumber,DeviceNumber в целочисленные поля.

Данная команда выведет все возможные девайсы:

user $arecord --list-devices
Заметка
Возможно, вам также потребуется включить звук линии или канала микрофона. Откройте alsamixer и сначала выберите звуковую карту (например, F6), затем нажмите F4, чтобы отобразить каналы захвата, "клавиши курсора влево/вправо" для выбора "Микрофон" и нажмите Space, чтобы переключить ЗАХВАТ канала.

Следующее будет записываться бесконечно до тех пор, пока CTRL+C не будет нажата и не обеспечит монофоническую запись с частотой 8000 Гц по умолчанию:

user $arecord /tmp/test.wav

Следующее обеспечит запись в течение двух секунд (--duration=2) с использованием качества DAT 48000 Гц (--format=dat) и отобразит вуметр проклятий в стерео (--vumeter= стерео) и сохраните в /tmp/test.wav.

user $arecord --channels=1 --duration=2 --format=dat --vumeter=stereo /tmp/test.wav

Или опционально:

ФАЙЛ ~/.bashrc
# Простая удобная оболочка для записи и воспроизведения временного звукового файла.
# Использование: arecord-mic время
function arecord-mic {
    [[ $1 == *[![:digit:]]* ]] || return
    typeset tmpFile
    tmpFile=$(mktemp --suffix .wav) || return

typeset -a arecordOpts=(
        -c 1          # количество каналов
        -D plughw:0,0 # имя девайса
        -d "$1"       # длительность
        -f S32_LE     # формат
        -r 48000      # частота
        -V mono       # тип измерителя громкости
    )

arecord "${arecordOpts[@]}" -- "$tmpFile" && aplay -- "$tmpFile"
    rm -f -- "$tmpFile"
}

Обратите внимание, arecord не может записывать в формате S24_LE и может записывать только в форматах S16_LE или S32_LE. Считается, что для человеческого уха любые звуковые разрешения выше 24 бит (S24_LE) или 48000 Гц неразличимы. Справочник по выборке (обработка сигналов) Википедия, Дискретизация. Пользователям также следует указать channels=1, так как все записи выполняются в моно/монофоническом режиме при обычном использовании входа микрофона, если только записи не используют линейный стереовход. Чтобы еще больше побудить arecord записывать монофонический или только один канал, дополнительно указывается использование device=plughw:0,0. (Решает распространенную проблему: воспроизведение с микрофона/микрофона происходит только на правом или левом каналах.)

Используйте mplayer или aplay для воспроизведения сохраненного файла. Обычно я записываю в форматах качества "dat" или, по крайней мере, "cd". DAT лучше всего подходит для бенчмаркинга.

Советы

Попробуйте один из многих параметров конфигурации в файле asoundrc Пола Бредбери.

Устранение проблем

В Firefox, Chromium и YouTube нет звука с пользовательским файлом .asoundrc, но в других приложениях он есть

Браузеры иногда требовательны к настройкам ~/.asoundrc. Если вы указываете аудиоустройство по умолчанию (вероятно, учитывая, что в настоящее время большинство компьютеров имеют выход HDMI A/V, а аналоговый и аудиовыход HDMI рассматриваются как две отдельные звуковые карты), попробуйте сделать это следующим образом:

ФАЙЛ ~/.asoundrc
defaults.pcm.card <номер вашей стандартной звуковой карты>
defaults.ctl.card <стандартная звуковая карта>
Заметка
Начиная с версии 52, Firefox сделал PulseAudio жестким требованием и прекратил поддержку прямого вывода в ALSA. Чтобы включить звук в этих версиях Firefox, включите USE-флаг pulseaudio. См. Требование PulseAudio нарушает работу Firefox в системах, поддерживающих только ALSA. Это ограничение не распространяется на Firefox (только версия 52), собранный из исходников (www-client/firefox). Chrome также не застрахован от проблем. Оба браузера либо зависят от PulseAudio, чтобы установить правильную частоту дискретизации, либо, в отсутствие PulseAudio, устанавливают частоту дискретизации на 48000 в качестве стандарта де-факто в мире звуковых карт. Поэтому, если у вас частота дискретизации 96000 Гц, уменьшите ее до 48000, и звук снова заработает.

Звуковая карта доступна только для одного приложения

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

Принудительно используйте dmix вместо прямого вывода звука (это то, что большинство вещей использует по умолчанию, например Adobe Flash [что на самом деле означает браузер] и Wine).

Если устройство — это карта 1 и устройство 7 (как в случае с Nvidia HDMI для меня):

ФАЙЛ ~/.asoundrc
pcm.dmixed {
    type asym
    playback.pcm {
        type dmix
        ipc_key 5678293
        ipc_perm 0660
        ipc_gid audio

        slave {
            channels 2 # Сделайте 5.1 или 6
            pcm {
                format S16_LE # S32_LE
                rate 48000 # Также может быть 44100
                type hw
                card 1 # Ваша карта
                device 7 # Ваш девайс
                subdevice 0
            }

            period_size 1024
            buffer_size 8192
        }

        bindings {
            0 0
            1 1
# Раскомментируйте ниже если вы используете 6 каналов
#           2 2
#           3 3
#           4 4
#           5 5
        }
    }
    capture.pcm "hw:0"
}

pcm.!default {
    type plug
    slave.pcm "dmixed"
}

Использование ~/.asoundrc является немедленным, и если вы не принудительно используете определенные устройства в каких-либо приложениях, они либо потребуют перезагрузки, либо начнут работать немедленно. Один из лучших тестов — запустить Chrome, перейти на YouTube, открыть терминал, запустить mplayer с аудио- или видеофайлом и убедиться, что вы не получаете сообщение об ошибке со звуком (такой ошибкой может быть 'Device or resource busy').

Отсутствуют звуки с динамиками 4.0

Если вы используете звуковую карту 4.0 (например, старый SB Live!) или динамики 4.0 в целом, вы можете заметить, что в некоторых играх или фильмах диалоги очень тихие или даже отсутствуют. Это связано с тем, что большинство этих приложений/фильмов поддерживают только вывод 2.0 (стерео) или 5.1. Для достижения объемного звука используется звуковая дорожка 5.1, но отбрасываются два лишних канала — центральный канал (который обычно несет звуки) и канал сабвуфера.

Вышеупомянутую проблему можно обойти, создав виртуальное устройство, которое будет микшировать 5.1 в 4.0, микшируя центральный канал и каналы сабвуфера с другими аудиоканалами.

ФАЙЛ ~/.asoundrc
pcm.downmix {
    type route

    slave {
        # Используемая звуковая карта
        pcm surround40
        # Число настоящих звуковых каналов
        channels 4
    }

# ttable.A.B G
# где A - входной канал
#     B - выходной канал
#     G - усиление (1.0 = по умолчанию)

# Скопировать каналы 0-3
    ttable.0.0 1
    ttable.1.1 1
    ttable.2.2 1
    ttable.3.3 1

# Микшировать канал 4 (центр) в передние динамики, и немного (0.3) в задние
    ttable.4.0 1.0
    ttable.4.1 1.0
    ttable.4.2 0.3
    ttable.4.3 0.3

# Микшировать канал 5 (сабвуфер) в основном (0.6) в тыловые колонки и немного (0.3) в передние
    ttable.5.0 0.3
    ttable.5.1 0.3
    ttable.5.2 0.6
    ttable.5.3 0.6
}

ctl.downmix {
    type hw
    card 0
}

Тестирование динамиков HDMI/SPDIF 5.1 и 7.1

Заявлено, что утилита ALSA для тестирования динамиков не будет тестировать более двухканального звука через HDMI или SPDIF. Для этого вам нужно использовать mplayer, как указано в документации ALSA.

Загрузите либо 5.1 (FLAC), либо /raw/master/surround71.flac 7.1-канальный (FLAC) тестовый файл динамика:

Воспроизвести предоставленный звуковой файл; указав устройство HDMI или SPDIF, файл PCM и количество каналов, которое, вероятно, будет либо 6 (для 5.1-канального объемного звучания), либо 8 (для 7.1-канального объемного звучания).

Для тестирования канала 5.1 с mplayer:

user $mplayer -channels 6 "/path/to/downloaded/flac_file.flac" -channels 6

Для тестирования 7.1 канала:

user $mplayer -channels 8 "/path/to/downloaded/flac_file.flac" -channels 8
Заметка
Чтобы протестировать mplayer без устройства по умолчанию, передайте дополнительную опцию -ao alsa:device=hw=0.7, где hw= соответствует соответствующему устройству.

Альтернативное тестирование с помощью VLC media player:

user $cvlc /path/to/downloaded/flac_file.flac

Выход APlay SPDIF/HDMI имеет неправильные каналы динамиков

Теперь, когда вы знаете, как использовать MPlayer для воспроизведения файла PCM WAV для тестирования динамиков в соответствии с приведенным выше разделом «Тестирование динамиков HDMI/SPDIF 5.1 и 7.1», вы обнаружите, что APlay не выводит должным образом каналы динамиков при использовании SPDIF/HDMI. С HDMI это, вероятно, вызвано аудиомодулем/драйвером snd_hda_intel HDMI, который используется другими производителями, такими как NVidia HDMI, помимо аппаратного обеспечения Intel HDMI. Что касается того, почему MPlayer использует правильные каналы, MPlayer обычно находится в постоянном развитии и вручную исправляет эту проблему?

Еще одна проблема, к которой относится это решение, - попытка воспроизведения 24-битных файлов PCM 2.0 или PCM5.1 WAV и обнаружение, что APlay постоянно отказывается воспроизводить поток из-за неправильного битрейта и т. д.

Чтобы исправить это для ALSA (APlay) с минимальными изменениями в потоках PCM, нам нужно переназначить каналы динамиков в файле ${HOME}/.asoundrc. Добавьте следующее в конец файла ${HOME}/.asoundrc. Также обратите внимание, что приведенная ниже конфигурация предназначена как для звука 5.1, так и для звука 7.1, или вы можете дополнительно сопоставить/скопировать два дополнительных канала в свои каналы 5.1, если вы не хотите пропускать звук из потока 7.1.

ФАЙЛ .asoundrc
pcm.myHDMI {
    type plug
    slave {
        pcm "hw:1,7"
        format S32_LE
        channels 6
    }
    ttable {
        0.0= 1
        1.1= 1
        2.4= 1
        3.5= 1
        4.2= 1
        5.3= 1
        6.6= 1
        7.7= 1
    }
}

Кажется, что большинство подключений HDMI к стереоресиверу передают только 16- и 32-битные форматы, пропуская 24-битные. Приведенная выше конфигурация микширует любой поток PCM до 32 бит при использовании профиля pcm.myHDMI, поскольку довольно часто можно увидеть 24-битные аудиофайлы PCM 2.0 и 5.1. Просто кажется неправильным микшировать все до 16 бит или использовать Float, поскольку последний использует больше вычислительной мощности. (Пользователи также могут установить псевдоним в своем файле bashrc для 16-битных или 24-битных вызовов.)

Протестируйте разводку динамиков, используя тестовый файл объемного звучания PCM. (См. ранее упомянутый выше «Тест 8-канального динамика».)

user $aplay -D my.HDMI 8Channel.wav

Слабый центральный канал на живой музыке PCM 5.1

Если у вас многоканальная звуковая дорожка или музыка с явно слабым центральным каналом, а звуковая дорожка представляет собой живую запись; можно сопоставить центральный канал с задними каналами. Обратите внимание, что задние каналы на живых записях обычно содержат только крики публики с очень небольшим количеством музыки.

Следующее заклинание mplayer указывает; ваше устройство HDMI с hw: 1.7, ваш файл PCM 5.1, количество каналов, формат (не требуется, если ваш ресивер может изначально обрабатывать 24 бита, и в моем случае мне нужно повышающее микширование, поскольку мой ресивер Yamaha HDMI изначально может обрабатывать только 16 или 32 бит аудио), а затем сопоставление. Сопоставление следующим образом; укажите, что это 6-канальный аудиопоток с 6 сопоставлениями сразу за ним, скопируйте левый передний канал в левый динамик, скопируйте правый канал в правый динамик, скопируйте центральный канал в левый задний динамик, скопируйте центральный канал в правый задний динамик, скопируйте центральный канал в центральный динамик и, наконец, скопируйте канал сабвуфера на динамик сабвуфера.

user $mplayer -ao alsa:device=hw=1.7 Music/MyAlbum/PCM51-24bit/01.MyMusic.wav -channels 6 -format s32le -af channels=6:6:0:0:1:1:4:2:4:3:4:4:5:5

См. Манипуляции с каналами в MPlayer.

Нужно просмотреть более подробную информацию о потоке ALSA?

Если вам нужно посмотреть подробную иллюстрацию того, как ваша программа подключается к ALSA, используйте интерфейс /proc. Вам нужно будет подставить соответствующие данные карты/устройства в приведенную ниже команду.

Вы должны увидеть дамп информации о программе и полезных вещах, таких как частота дискретизации (rate) и PID (owner_pid).

user $cat /proc/asound/card2/pcm0p/sub0/*
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 44100 (44100/1)
period_size: 5513
buffer_size: 22050
card: 2
device: 0
subdevice: 0
stream: PLAYBACK
id: USB Audio
name: USB Audio
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 0
state: RUNNING
owner_pid   : 934
trigger_time: 86393.193574796
tstamp      : 86540.250594985
delay       : 17714
avail       : 4602
avail_max   : 7379
-----
hw_ptr      : 6485052
appl_ptr    : 6502500
tstamp_mode: NONE
period_step: 1
avail_min: 5513
start_threshold: 2147483647
stop_threshold: 22050
silence_threshold: 0
silence_size: 0
boundary: 6206523236469964800

HTML5 не воспроизводится в браузере

Если в каком-либо используемом браузере (Firefox, SeaMonkey, Otter Browser и т. д.) нет звука, а ALSA в целом работает, существует обходной путь, который может решить эту конкретную проблему: попробуйте удалить {{Path|/etc/asound.conf}. } файл.

root #mv /etc/asound.conf /etc/asound.conf.old

Перезапустите браузер и проверьте вывод звука для HTML5. Это может работать только сейчас после применения этого обходного пути.

HTML5 не воспроизводится в браузере Firefox

Некоторые системные материнские платы (например, Asus Z87-EXPERT) заставляют карту 0 быть устройством MID, а не устройством PCM. Один и тот же модуль драйвера snd_hda_intel используется как для плат MID, так и для плат PCM на этой материнской плате. По какой-то причине Firefox HTML 5 требует карты 0 snd_hda_intel независимо от того, как вы меняете ее с помощью asoundrc. Вы можете заставить flash работать с помощью файла asoundrc, но звук в формате HTML 5 молчит.

Вы должны переназначить устройство PCM в Linux как карту 0 и удалить изменения в asoundrc, которые были добавлены для работы Flash. Эта вики-страница указывает, что вы должны скомпилировать драйвер snd_hda_intel в ядро. Используя эту конфигурацию, вы должны переназначить устройства карты 0 и карты 1, используя параметры загрузки вместо файла /etc/modprobe.d/alsa.conf. Например, следующая опция командной строки ядра поменяет местами индикаторы карт MID и PCM, так что картой по умолчанию 0 будет карта PCM:

snd-hda-intel.index=1,0

Заметка
Модуль называется snd_hda_intel, но имя параметра загрузки — snd-hda-intel.

Ноутбуки с аудиовыходом HDMI

Некоторые ноутбуки с аудиовыходом HDMI отображают /proc/asound/card0 как HDMI и поэтому делают его устройством вывода по умолчанию для приложений, как указано выше в разделе Firefox. Другой способ переназначения — добавить эти две строки в /etc/modprobe.d/alsa.conf.

ФАЙЛ /etc/modprobe.d/alsa.conf
# Установите это на правильное количество карт.
options snd cards_limit=2
options snd-hda-intel index=1,0

Проверьте изменение порядка, проверив эту команду

user $cat /proc/asound/cards
 0 [PCH            ]: HDA-Intel - HDA Intel PCH
                      HDA Intel PCH at 0xf2534000 irq 45
 1 [HDMI           ]: HDA-Intel - HDA Intel HDMI
                      HDA Intel HDMI at 0xf2530000 irq 46

Этот метод работает только в том случае, если snd-hda-intel скомпилирован как не встроенный модуль.

IPC semaphore - function not implemented

Если вы попытаетесь запустить тестовую процедуру, а динамик-тест вернет ошибку о том, что семафор функции IPC не реализован, эту опцию можно активировать в вашем ядре:

ЯДРО
General setup --->
    [*] System V IPC

Разъем для наушников не работает

Иногда для работы разъема для гарнитуры требуется дополнительная информация о модели аудиодрайвера. Например, в случае ноутбука Dell Latitude E7470 с драйвером snd-hda-intel это необходимо добавить в /etc/modprobe.d/alsa.conf:

ФАЙЛ /etc/modprobe.d/alsa.conf
options snd-hda-intel model=headset-mic

Дополнительную информацию о настройке можно найти в документации ядра Linux Documentation/sound/hd-audio/models.rst.

Ошибки восстановления udev/alsactl при загрузке

Из-за особенностей разбивки разделов, шифрования или наличия системы с отделенным разделом /usr при загрузке могут возникать следующие ошибки:

root #journalctl -b | grep alsa
 
(udev-worker)[2594]: controlC2: Process '/usr/sbin/alsactl restore 2' failed with exit code 2.
 
(udev-worker)[2611]: controlC0: Process '/usr/sbin/alsactl restore 0' failed with exit code 2.
 
(udev-worker)[2579]: controlC1: Process '/usr/sbin/alsactl restore 1' failed with exit code 2.

Чтобы исправить эту проблему, добавьте TEST=="@sbindir@/alsactl" к следующим строчкам этого файла:

ФАЙЛ /lib/udev/rules.d/90-alsa-restore.rules
TEST!="/etc/alsa/state-daemon.conf", TEST=="@sbindir@/alsactl", RUN+="/usr/sbin/alsactl restore $attr{device/number}"
TEST=="/etc/alsa/state-daemon.conf", TEST=="@sbindir@/alsactl", RUN+="/usr/sbin/alsactl nrestore $attr{device/number}"

См. следующие ссылки для дальнейшей информации[1][2].

Смотрите также

Внешние ресурсы

Ссылки