Thread: [Alsa-user] Create disfunctional volume control
Brought to you by:
perex
From: Muffinman <ne...@ko...> - 2012-10-23 17:39:45
|
Hello all, I want to create a disfunctional volume control. I'm running MPD for playing music which uses hw:0 for playing back sound. However, I want to route the volume control to a sortof 'null' device and have a selfwritten application listen for changes in the volume level, translate and send that data to my amplifier through a serial port without it affecting the actual audio data stream to my USB-dac. I'm not sure if it's all going to work, but I figure I have to begin somewhere to find out. So I'm trying to create that null device first. Based on the steps I've taken as seen below, can someone give me some advice on how to approach this task? Thanks in advance, Maarten ************************************ I created a null device in /etc/asound.conf: pcm.blackhole { type null # Null PCM } However MPD now says its an invallid CTL blackhole and apparently tries to hook it up to hw:0 (mpd settings are copied below): ALSA lib control.c:882:(snd_ctl_open_noupdate) Invalid CTL blackhole Oct 23 16:27 : Failed to open mixer for 'Ayre QB-9': failed to attach to blackhole: No such file or directory If I want to create that CTL, the MPD wiki gives the example below. Now I'm guessing that if I can create a (virtual) hw:1 things would be a lot easier, but is that possible? And if so, how? ################## # mpd volume control pcm.mpdvol { type softvol slave.pcm "dmixer" control { name "MPD" card 0 } } # ctrl for mpd volume ctl.mpdvol { type hw card 0 } # src:http://mpd.wikia.com/wiki/Alsa ##################### ######### MPD settings: audio_output { type "alsa" name "Ayre QB-9" device "hw:0" # optional mixer_type "hardware" #none" mixer_device "blackhole" # hw:0" # optional # mixer_control "PCM" # optional # mixer_index "0" # optional |
From: Muffinman <ne...@ko...> - 2012-10-23 17:44:48
|
Hello all, I want to create a disfunctional volume control. I'm running MPD for playing music which uses hw:0 for playing back sound. However, I want to route the volume control to a sortof 'null' device and have a selfwritten application listen for changes in the volume level, translate and send that data to my amplifier through a serial port without it affecting the actual audio data stream to my USB-dac. I'm not sure if it's all going to work, but I figure I have to begin somewhere to find out. So I'm trying to create that null device first. Based on the steps I've taken as seen below, can someone give me some advice on how to approach this task? Thanks in advance, Maarten ************************************ I created a null device in /etc/asound.conf: pcm.blackhole { type null # Null PCM } However MPD now says its an invallid CTL blackhole and apparently tries to hook it up to hw:0 (mpd settings are copied below): ALSA lib control.c:882:(snd_ctl_open_noupdate) Invalid CTL blackhole Oct 23 16:27 : Failed to open mixer for 'Ayre QB-9': failed to attach to blackhole: No such file or directory If I want to create that CTL, the MPD wiki gives the example below. Now I'm guessing that if I can create a (virtual) hw:1 things would be a lot easier, but is that possible? And if so, how? ################## # mpd volume control pcm.mpdvol { type softvol slave.pcm "dmixer" control { name "MPD" card 0 } } # ctrl for mpd volume ctl.mpdvol { type hw card 0 } # src:http://mpd.wikia.com/wiki/Alsa ##################### ######### MPD settings: audio_output { type "alsa" name "Ayre QB-9" device "hw:0" # optional mixer_type "hardware" #none" mixer_device "blackhole" # hw:0" # optional # mixer_control "PCM" # optional # mixer_index "0" # optional |
From: Clemens L. <cla...@go...> - 2012-10-23 20:39:17
|
Muffinman wrote: > I want to create a disfunctional volume control. I'm running MPD for > playing music which uses hw:0 for playing back sound. However, I want to > route the volume control to a sortof 'null' device and have a > selfwritten application listen for changes in the volume level, > translate and send that data to my amplifier through a serial port > without it affecting the actual audio data stream to my USB-dac. > pcm.blackhole { > type null # Null PCM > } > > However MPD now says its an invallid CTL blackhole Because pcm.xxx is a PCM device, not a control device. There is no 'null' control plugin, but for the softvol plugin, ALSA has the ability to add 'user' controls to kernel drivers. Ask "alsactl --help" where it stores its mixer settings file, and add the following entry: control.12345 { iface MIXER name 'Fake Playback Volume' value 100 comment { access 'read write user' type INTEGER count 1 range '0 - 100' } } Then run "alsactl restore", check that it shows up in alsamixer, and tell MPD to use that control. Regards, Clemens |
From: Muffinman <ne...@ko...> - 2012-10-24 11:31:10
|
On 23-10-12 22:37, Clemens Ladisch wrote: > There is no 'null' control plugin, but for the softvol plugin, ALSA > has the ability to add 'user' controls to kernel drivers. Ask "alsactl > --help" where it stores its mixer settings file, and add the following > entry: control.12345 { iface MIXER name 'Fake Playback Volume' value > 100 comment { access 'read write user' type INTEGER count 1 range '0 - > 100' } } Then run "alsactl restore", check that it shows up in > alsamixer, and tell MPD to use that control. Regards, Clemens Works like a charm, many thanks. However, one additional question: how do I make this change persist between reboots? I've added your entry to the state entry of my Dac in "/var/lib/alsa/asound.state" but apparently that is being generated at boot. |
From: Clemens L. <cla...@go...> - 2012-10-24 12:19:53
|
Muffinman wrote: > On 23-10-12 22:37, Clemens Ladisch wrote: >> control.12345 { >> comment { >> access 'read write user' > > Works like a charm, many thanks. However, one additional question: how > do I make this change persist between reboots? I've added your entry to > the state entry of my Dac in "/var/lib/alsa/asound.state" but apparently > that is being generated at boot. In theory, that file should be *read* at boot (or after the device is plugged in). You could put this into your own file and then run "alsactl -f myfile restore" from your own boot or helper script. Regards, Clemens |
From: Muffinman <ne...@ko...> - 2012-10-24 13:36:45
|
On 24-10-12 14:19, Clemens Ladisch wrote: >> the state entry of my Dac in "/var/lib/alsa/asound.state" but apparently >> that is being generated at boot. > > In theory, that file should be *read* at boot (or after the device is > plugged in). I use Voyage Linux. Even though I know it syncs a number of directories I thought it was regenerated because I saw an Ubuntu user with the same issue. However, considering the normal behaviour, I rechecked and it was synced indeed. I updated the sync dirs, now all is fine. Many thanks. Maarten |