Показаны сообщения с ярлыком sound. Показать все сообщения
Показаны сообщения с ярлыком sound. Показать все сообщения

среда, 15 февраля 2012 г.

Запись звука в linux с выхода звуковой карты

Понадобилось записать звук из браузера (точнее его флеш плагина). Самый простой и надежный способ - соединить выход и линейный вход кабелем и записать звук. Под рукой у меня не оказалось такого кабеля. Поиски в гугле привели меня на страницу, где подробно описаны разные способы организовать loopback для записи звука. Получилось:

$ cat ~/.asoundrc
pcm.teewav {
   type empty
   slave.pcm "tee:default,'/home/andrey/tmp/alsa-out.wav',wav"
}

Чтобы флеш плагин начал использовать вывод звука через этот PCM нужно экспортировать переменную окружения

$ env FLASH_ALSA_DEVICE=teewav iceweasel

NOTE: Результат будет окончательно записан только после закрытия программы, которая использовала teewav для вывода звука.

Интересные ссылки по теме: 

пятница, 13 января 2012 г.

Тестирование OSS proxy

Тут я упоминал OSS Proxy, который я начал использовать вместо встроенной в ALSA эмуляции OSS.

Для тестирования я выбрал демки Heroes III и Unreal Tournament. Обе игры плохо работают через перехват обращений к /dev/dsp (alsa-oss) или не работают вообще.

В итоге:
  • Heroes III - звук появился сразу и нареканий на качество нет;
  • UnrealTournament - пришлось поправить конфиг ~/.loki/ut/System/UnrealTournament.ini
    AudioDevice=Audio.GenericAudioSubsystem
    После этого звук в UT появился и проблем с качеством не было

В процессе тестирования в фоне играла музыка, в проигрывателе через ALSA. Это позволило оценить одновременную работу ALSA и эмуляции OSS.

OSS proxy

На домашнем компьютере я использую suspend-to-disk вместо выключения системы. Все работает замечательно, кроме звуковой системы. До начала работы с засыпанием на диск в качестве звуковой платы я использовал Aureal Vortex 2 и был весьма ей доволен. Vortex имел много приятных фишек вроде аппаратного эквалайзера и микшера. Последний весьма полезен, когда параллельно используется несколько потоков ALSA и OSS.

Т.к. поддержка управления питанием для Vortex 2 в linux оставляет желать лучшего, то пришлось отказаться от aureal в пользу встроенной в материнскую плату карточки. Микширование потоков в последних версиях ALSA происходит программно, но для этого нужно следить чтобы устройством вывода звука был default, а не hw:0,0. А вот с эмуляцией OSS все гораздо сложнее. Во-первых звук в некоторых играх с искажениями, а во-вторых ошибка "устройство занято", если запущен микшер в трее, выводит из себя.

Чтобы пробежаться в UnrealTournament или Heroes III, приходится закрывать все приложения, использующие alsa и после игры восстанавливать все обратно.

Так продолжалось бы бесконечно долго, если бы в какой-то рассылке не упомянули OSS proxy. Если кратко, то OSS proxy - реализация OSS через CUSE (Character device in USErspace). В changelog даже упомяналась поддержка MMAP для /dev/dsp - фича, которую хотят многие игрушки (к слову сейчас поддержка MMAP отключена из-за проблем с ее реализацией).

Быстренько накидал пакет для debian, который можно забрать у меня в репозитории.

deb http://www.tataranovich.com/debian squeeze main

Для остальных есть вариант с пересборкой пакета под свою систему.

deb-src http://www.tataranovich.com/debian squeeze main

В итоге нормально заработали игры, которые не работают через AOSS. Причем сейчас не нужно выгружать другие проигрыватели или микшеры.

четверг, 15 апреля 2010 г.

ALSA в многопользовательской среде

Дома пришлось создать жене отдельного пользователя, чтобы можно было пользоваться одним и тем же софтом и не мешать друг-другу настройками. Все нормально, но вот только неудобно переключаться на соседний сеанс, чтобы выключить музыку или фильм.
Недавно наткнулся на описание плагина softvol для alsa и решил его использовать. Схема работы проста: для каждого пользователя создается отдельный канал в программной громкостью и все они микшируются через dmix.
~/.asoundrc
pcm.!default {
    type            plug
    slave.pcm       "softvol"
}

pcm.softvol {
    type            softvol
    slave.pcm       "plug:dmix"
    
    control {
        name        "Andrey"
        card        0   
    }   
}
После первого использования появится отдельный канал (чтобы он стал доступен уже запущенным приложениям, их нужно перезапустить). Так выглядит alsamixer при работе двух пользователей:


Настройка канала микшера в приложениях:
~/.mplayer/config
ao=alsa
mixer-channel=Andrey

~/.mpdconf
audio_output {
   type       "alsa"
   device     "default"
}
mixer_type    "alsa"
mixer_device  "default"
mixer_control "Andrey"

Чтобы теперь разом отключить звук у другого пользователя достаточно повесить на хоткей amixer set Ann 0%