Accessing mixer values

hi group

I want to read the volume of the mixer device with a ruby script.
Can anybody tell me what the ruby equivalent is of what the MIXER_READ
macro does in C?

#define SOUND_MIXER_VOLUME 0
#define SOUND_MIXER_READ_VOLUME MIXER_READ(SOUND_MIXER_VOLUME)
#define MIXER_READ(dev) _SIOR(‘M’, dev, int)

I’ve been googling with keywords like ‘ioctl, MIXER_READ SOUND_MIXER’,
but with little result. Hopefully someone can me push me in the right
direction…

thanks in advance,

Ruud

ruud wrote:

I want to read the volume of the mixer device with a ruby script.
Can anybody tell me what the ruby equivalent is of what the MIXER_READ
macro does in C?

I’m sure that you’ll happy to know that, on linux, MIXER_READ(dev) do
this

(((2U) << (((0 +8)+8)+14)) | (((‘M’)) << (0 +8)) | (((dev)) << 0) |
(((((sizeof(int) == sizeof(int[1]) && sizeof(int) < (1 << 14)) ?
sizeof(int) : __invalid_size_argument_for_IOC))) << ((0 +8)+8)))

:slight_smile:

I’ve been googling with keywords like ‘ioctl, MIXER_READ SOUND_MIXER’,
but with little result. Hopefully someone can me push me in the right
direction…

perhaps best if you use Ruby::Inline to access it

http://rubyforge.org/projects/rubyinline/

Guy Decoux

It encodes the ioctl request argument for a transfer of data from the
device to the program. See:
man ioctl

you may also need to look at the ioctl.h header.
_SIOR in at least the linux soundcard.h file just maps directly to _IOR

RF

http://www.4front-tech.com/pguide/sndcrd.html

May also help now that you know that

_SIOR is just _IOR.

search there for MIXER_READ…below it are the legal values for dev if
I’m getting this right.