Re: Enable system volume when driver doesn't
Re: Enable system volume when driver doesn't
- Subject: Re: Enable system volume when driver doesn't
- From: Jeff Moore <email@hidden>
- Date: Thu, 20 Mar 2008 11:42:33 -0700
All the information here is more or less accurate. I'm not sure I see
a question for me to answer here. The transfer function one uses to
map between scalar and dB values is a matter of personal preference
and/or user testing. You'll note that the CAVolumeCurve class in our
SDK (which is what I use internally in the HAL and the sample user-
land driver) implements several flavors of exponential transfer
functions.
On Mar 20, 2008, at 3:03 AM, Stéphane Letz wrote:
Le 19 mars 08 à 18:12, Mikael Hakman a écrit :
Cordially welcome to this thread, Stephane!
On March 18, 2008 12:08, Stéphane Letz wrote:
What kind of property the user-land driver would have to
implement? Jeff can you help here?
As far as I can see, there are 10 related properties. 5 of these
properties are on AudioVolumeControl object, which is a subclass of
AudioLevelControl, in turn, a subclass of AudioControl.
AudioVolumeControl objects are accessible from AudioDevice by
kAudioObjectPropertyOwnedObjects property. As usual element 0 gives
master control (if there is one) and the other numbers give
controls for corresponding channels. I think one should use
kAudioDevicePropertyScopeOutput as scope and
kAudioVolumeControlClassID as qualifier to get them. I'm getting
all objects for all devices by recursively getting
kAudioObjectPropertyOwnedObjects with NULL qualifier in my test
app. The 5 properties are:
kAudioLevelControlPropertyScalarValue = 'lcsv',
kAudioLevelControlPropertyDecibelValue = 'lcdv',
kAudioLevelControlPropertyDecibelRange = 'lcdr',
kAudioLevelControlPropertyConvertScalarToDecibels = 'lcsd',
kAudioLevelControlPropertyConvertDecibelsToScalar = 'lcds'
Use global scope, element 0, no qualifier when accessing above. On
my MBP using built-in analog output, the first 2 are read/write and
the rest is read/only. The same gives on an iMac using Logitech
Z-10 USB speakers. For built-in digital output there is no
AudioVolumeControl at all. This could be the very first test if you
implement virtual volume control in Jack. You need to plug in an
optical jack into combined analog/digital output connector for
digital output to appear (and analog output to disappear).
The other 5 properties which should behave exactly as above are on
a corresponding AudioDevice object. As far as I can see, they are
defined to other numbers than above but should do the same.
kAudioDevicePropertyVolumeScalar = 'volm',
kAudioDevicePropertyVolumeDecibels = 'vold',
kAudioDevicePropertyVolumeRangeDecibels = 'vdb#',
kAudioDevicePropertyVolumeScalarToDecibels = 'v2db',
kAudioDevicePropertyVolumeDecibelsToScalar = 'db2v',
Use output scope, element 0 for master, element n for channel n on
AudioDevice.
Neither built-in analog output nor Z-10 USB implement master
controls but they implement volume control for left and right
channel. OS X somehow figures this out and displays master volume
control in menu bar (and also in Sound Preferences), it also reacts
to Apple IR remote +/- buttons by increasing/decreasing the volume.
Obviously it loops through channels and uses channel controls. I
don't know whether this works with multi-channel devices too. In
AMS you can see that left/right control is there but master is not.
Decibel range and therefore translations to/from scalar (0 - 1) are
somewhat unclear. Also unclear is whether scalar values should be
linear with respect to signal level or with respect to human
perception of loudness. According to AMS, built-in output goes from
-64 dB to 0 and Z-10 output from -41 to +3 dB. Theoretically, 16
bits format should give range -96 to 0 dB.
I'm sure Jeff has more up to date and detailed information on all
above topics.
Hoping so...
Current Jack on OSX maintainer is essentially one (me..) doing
what I can, and perfectly knowing that things are far from
perfect. I consider the jack server and JackRouter infrastructure
to be quite solid now, and the real weakness being in the
configuration tools and user experience (JackPilot)
What I said about Jack and/or open source wasn't by any way meant
to be negative. On the contrary, I think Jack is a masterpiece of
work. I just was unsure whether I could use it for my purposes.
The structure is the following:
- the centralized jack server is the one that interact with a real
audio device
- CoreAudio applications access the jack server through the user-
land device "JackRouter" (http://jackosx.cvs.sourceforge.net/jackosx/jackosx/jackrouter2/
)
This device does not implement volume control, but yes "virtual
volume control" could possibly be done at this level.
But you're invited to participate in this open source project.
Would I become certain that I can use Jack in current project then
I'm prepared to help, of course. I'll start with installing Jack
and learning its setup.
--
Jeff Moore
Core Audio
Apple
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden