LINUX.ORG.RU

mpd + alsa = проблемы

 , ,


0

2

итак, имеем alsa (без всяких там pulseaudio) и mpd.

всё хорошо, все звуки из всех приложений смешиваются, но mpd монополизирует звук, то есть всё, что запущено (во время воспроизведения. на паузе такого нет) после mpd не имеет доступа к HDA Intel (интегрированный кусок какашки). если очень долго поковыряться, можно это временно починить, но после перезагрузки mpd снова монополизирует звук (содержимое /etc/asound.conf и /etc/mpd.conf не сбрасывается, но какая-то неведомая фигня происходит).

на заметку: когда монитор был подключен к VGA такой проблемы не было, после смены монитора и перехода в HDMI стало твориться странное с ALSA.

суть вопроса: как настроить ALSA и mpd, чтобы такого не было? обязательно не потеряв качества звука.

примеры конфигов (особенно алсы) приветствуются. реквестируйте конфиги/выхлопы, которые нужны.

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

ctl.!default {
	type hw
	card 1
}

defaults.pcm.rate_converter "samplerate_best"

pcm.dmixer {
	type dmix
	ipc_key 1024
	ipc_key_add_uid 0
	ipc_perm 0660
	slave.pcm "plughw:1"
	slave {
		pcm "hw:1,0"
		channels 2
		period_size 1024
		buffer_size 4096
		rate 44100
	}
}
music_directory "/mnt/userdata/music"
playlist_directory "/usr/share/mpd/playlists"
db_file "/usr/share/mpd/mpd.db"
log_file "/var/log/mpd.log"
pid_file "/tmp/mpd.pid"
state_file "/usr/share/mpd/mpd.state"
bind_to_address "localhost"
log_level "default"
restore_paused "no"
save_absolute_paths_in_playlists "yes"
follow_outside_symlinks "yes"
follow_inside_symlinks "yes"
auto_update "yes"
buffer_before_play "10%"
connection_timeout "10"
max_connections "1000"

audio_output {
	type "fifo"
	name "my_fifo"
	path "/tmp/mpd.fifo"
	format "44100:16:2"
}

audio_output {
	type "alsa"
	name "HDA Intel"
	mixer_control "PCM"
	options "dev=plug"
	device "default"
}

input {
	plugin "curl"
}
root@gentoo aplay -L
null
    Discard all samples (playback) or generate zero samples (capture)
hdmi:CARD=HDMI,DEV=0
    HDA Intel HDMI, HDMI 0
    HDMI Audio Output
sysdefault:CARD=PCH
    HDA Intel PCH, ALC887-VD Analog
    Default Audio Device
front:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    Front speakers
surround40:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    4.0 Surround output to Front and Rear speakers
surround41:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    4.1 Surround output to Front, Rear and Subwoofer speakers
surround50:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    5.0 Surround output to Front, Center and Rear speakers
surround51:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    5.1 Surround output to Front, Center, Rear and Subwoofer speakers
surround71:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Analog
    7.1 Surround output to Front, Center, Side, Rear and Woofer speakers
iec958:CARD=PCH,DEV=0
    HDA Intel PCH, ALC887-VD Digital
    IEC958 (S/PDIF) Digital Audio Output
hdmi:CARD=NVidia,DEV=0
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=1
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=2
    HDA NVidia, HDMI 0
    HDMI Audio Output
hdmi:CARD=NVidia,DEV=3
    HDA NVidia, HDMI 0
    HDMI Audio Output
root@gentoo aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 1: ALC887-VD Digital [ALC887-VD Digital]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 7: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 8: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: NVidia [HDA NVidia], device 9: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Подобных проблем не было.
alsa.conf (gentoo default).

mpd.conf

audio_output {
	type		"alsa"
	name		"default"
	device		"hw:0,0"	# optional
	format		"44000:16:2"	# optional
	mixer_type      "software"	# optional
	mixer_device	"default"	# optional
#	mixer_control	"Master"	# optional
##	mixer_index	"0"		# optional
}

unclear
()
Ответ на: комментарий от unclear

alsa.conf (gentoo default).

у меня его искаропки не было, поделись?

mpd.conf

твоя конфигурация у меня не взлетела (пробовал ради интереса)

«44000:16:2»

о_О нутыпонел.

funeralismatic ★★★
() автор топика

УМВР вот так:

audio_output {
	type		"alsa"
	name		"My ALSA Device"
	mixer_type      "hardware"
}
Сразу уточню, что с mpd связался совсем недавно и пока что всерьёз не разбирался, что к чему в этом конфиге.

mathcrosp ★★
()
Ответ на: комментарий от mathcrosp

у меня так было искаропки (да и у всех, наверное. во всяком случае в генте точно), проблема уже тогда была.

покажи /etc/asound.conf?

funeralismatic ★★★
() автор топика
Ответ на: комментарий от funeralismatic

44000:16:2

У меня там просто 48000, в спешке исправил, забыл добавить 100.

у меня его искаропки не было, поделись?

/usr/share/alsa

А какие программы конфликтуют? mplayer в котором тоже программный микшер включен (softvol=1) не конфликтует, а больше ничем и не пользуюсь.

unclear
()

только что обнаружил ещё одну неприятность: если в vlc изменить настройки на вкладке Audio, пропадает звук, и даже после вручную вернуть как было. помогает только общий сброс настроек vlc.

funeralismatic ★★★
() автор топика
Настройка выходов

Для того, что бы при работе mpd другие программы могли обращаться к звуковой карте раскомментируйте или добавьте эту строку:

/etc/mpd.conf

mixer_type			"software"

источник

MPD supports 3 types of mixers. See below for description. For best sound quality, set mixer_type to "disabled". Setting to "software" is not recommended unless it is really necessary to control volume for your use, e.g. listen via headphone/earphone, and your DAC does not have hardware volume mixer built-in.

источник

dhampire ★★★
()
Ответ на: комментарий от mathcrosp

Хм. А вот его у меня нет.

а у меня без него не взлетело. )=

funeralismatic ★★★
() автор топика
Ответ на: комментарий от dhampire

mixer_type «software»

у меня оно какое-то время не работало. о_О

funeralismatic ★★★
() автор топика

монополизация звуковухи была по причине того, что mpd пускался с правами, отличными от юзера, который запускает весь остальной звук (по этой причине смешивались все звуки, но mpd не давал звуковую, и не давал с ним смешиваться).

из этого вытекает вопрос: можно ли юзая mpd из-под рута, пользовать звук пользователем? всякая пульса исключается по причине ненужности комбайна.

funeralismatic ★★★
() автор топика
audio_output {
	type "alsa"
	name "HDA Intel"
	mixer_control "PCM"
	options "dev=plug"
	device "default"
}
device "default"

Судя по этому мпд рвётся к дефолтному девайсу, который есть hw:1,0 и, соответственно, монополизирует звук, как и любое другое приложение, которому ты скажешь стучать в hw:1,0. Менять на dmix пробовал?

anonymous
()
audio_output {
    type "alsa"
    name "Desktop speakers/headphones"
    mixer_type "software"
}

mpd работает из-под отдельного (не-root) пользователя, звук не монополизирует. Может, не надо было все так усложнять со всяким dmix-ами? Настройки по умолчанию давно уже стали адекватными.

si0 ★★★
()
Ответ на: комментарий от unclear

то не совсем конфиг.

А что это?

не совсем скрипт.

funeralismatic ★★★
() автор топика
Ответ на: комментарий от anonymous

ну ты целиком конфиг алсы-то прочитай! дефолт — plug → dmix → slave → hw.

funeralismatic ★★★
() автор топика
Ответ на: комментарий от si0

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

funeralismatic ★★★
() автор топика
Ответ на: комментарий от funeralismatic

Пользователь сам по себе лишняя сущность, достаточно root'а.

А вот что по этому поводу пишут разработчики mpd.

# This setting specifies the user that MPD will run as. MPD should never run as
# root and you may use this setting to make MPD change its user ID after
# initialization. This setting is disabled by default and MPD is run as the
# current user.

OpenRC всего лишь запускает скрипт который запускает mpd, а под каким пользователем запускаться смотрит уже сам mpd в /etc/mpd.conf а если там не указан пользователь то запускает от текущего, вообще по идеи для 95% которые боятся поломать свою систему из под root'а мог быть создан и указан отдельный пользователь как для transmission'а. Т.к. сижу под root'ом подобных проблем не возникает.

unclear
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.