uVolume is unsigned, so mCurrentVolume is always >=0 so.......
- err = ::AudioDeviceSetProperty(mAudioDevice, NULL, 0, false,
kAudioDevicePropertyVolumeScalar, dataSize, &scalarVolume);
- if (err != noErr)
+ // mCurrentVolume must be between 0.0 and 1.0
+ if (mCurrentVolume < 0.0)
...this is never true.
Ha ha, yeah, good point. That redundant block has been removed and this has
been committed to head and 150Cay. Thanks for the CR, Greg.
--Bob
At 01:33 PM 8/30/2006, Greg Wright wrote:
Bob Clark wrote:
Modified by: [EMAIL PROTECTED]
Date: 30 Aug 06
Synopsis:
This change sets the Helix audio device sound volume only, not the
entire Mac system volume.
Overview:
My original implementation incorrectly set audio device volume by
adjusting the Mac's system volume. Correct behavior is to adjust the
volume only of the (Helix) audio device being used.
Since the CoreAudio implementation needs to have its data converted
from UINT16 (0-65535) to float (0.0-1.0) anyway, adding a scalar
multiplier to the conversion to edit the volume is straightforward and
has no noticeable performance impact.
Files Modified:
audio/device/platform/mac/osxaudio.cpp
audio/device/pub/platform/mac/osxaudio.h
Image Size and Heap Use impact (Client -Only):
Negligible
Platforms and Profiles Affected:
OS X
Distribution Libraries Affected:
None
Platforms and Profiles Build Verified:
OS X
Platforms and Profiles Functionality verified:
OS X
Branch:
HEAD
150Cay
Copyright assignment: I am a RealNetworks employee
Index: device/platform/mac/osxaudio.cpp
===================================================================
RCS file: /cvsroot/audio/device/platform/mac/osxaudio.cpp,v
retrieving revision 1.1.2.2
diff -u -w -r1.1.2.2 osxaudio.cpp
--- device/platform/mac/osxaudio.cpp 3 Aug 2006 22:47:26 -0000
1.1.2.2
+++ device/platform/mac/osxaudio.cpp 30 Aug 2006 20:10:46 -0000
@@ -60,6 +60,7 @@
, mResetTimeNanos(0)
, mElapsedNanos(0)
, mElapsedNanosAtPause(0)
+ , mCurrentVolume(75.0)
{
OSStatus err = noErr;
UInt32 dataSize;
@@ -267,32 +268,22 @@
UINT16
CAudioOutOSX::_Imp_GetVolume(void)
{
- OSStatus err = noErr;
- UINT16 uVol = 50;
- Float32 scalarVolume = 0.0;
- UInt32 dataSize = sizeof(scalarVolume);
-
- err = ::AudioDeviceGetProperty(mAudioDevice, 0, false,
kAudioDevicePropertyVolumeScalar, &dataSize, &scalarVolume);
-
- if (err == noErr)
- {
- uVol = (UINT16)(100.0 * scalarVolume + 0.5);
- }
-
- return uVol;
+ return (UINT16)(mCurrentVolume * 100.0 + 0.5);
}
HX_RESULT
CAudioOutOSX::_Imp_SetVolume(const UINT16 uVolume)
{
- OSStatus err = noErr;
- Float32 scalarVolume = (Float32)(uVolume) / 100.0;
- UInt32 dataSize = sizeof(scalarVolume);
+ mCurrentVolume = (double)uVolume / 100.0;
uVolume is unsigned, so mCurrentVolume is always >=0 so.......
- err = ::AudioDeviceSetProperty(mAudioDevice, NULL, 0, false,
kAudioDevicePropertyVolumeScalar, dataSize, &scalarVolume);
- if (err != noErr)
+ // mCurrentVolume must be between 0.0 and 1.0
+ if (mCurrentVolume < 0.0)
...this is never true.
rest looks good.
--greg.
{
- return HXR_AUDIO_DRIVER;
+ mCurrentVolume = 0.0;
+ }
+ if (mCurrentVolume > 1.0)
+ {
+ mCurrentVolume = 1.0;
}
return HXR_OK;
}
@@ -389,7 +380,7 @@
int whichChan;
for (whichChan = 0; whichChan < mInputNumberOfChannels;
whichChan++)
{
- dst[whichChan] = (Float32)src[whichChan] / 32768.0;
+ dst[whichChan] = (Float32)src[whichChan] / 32768.0 *
mCurrentVolume;
}
for (whichChan = mInputNumberOfChannels; whichChan <
mDeviceNumberOfChannels; whichChan++)
{
Index: device/pub/platform/mac/osxaudio.h
===================================================================
RCS file: /cvsroot/audio/device/pub/platform/mac/osxaudio.h,v
retrieving revision 1.1.2.2
diff -u -w -r1.1.2.2 osxaudio.h
--- device/pub/platform/mac/osxaudio.h 3 Aug 2006 22:47:27 -0000
1.1.2.2
+++ device/pub/platform/mac/osxaudio.h 30 Aug 2006 20:10:46 -0000
@@ -115,6 +115,7 @@
UInt64 mResetTimeNanos;
UInt64 mElapsedNanos;
UInt64 mElapsedNanosAtPause;
+ double mCurrentVolume;
static HXMutex* zm_pMutex;
};
_______________________________________________
Client-dev mailing list
[EMAIL PROTECTED]
http://lists.helixcommunity.org/mailman/listinfo/client-dev
_______________________________________________
Audio-dev mailing list
[email protected]
http://lists.helixcommunity.org/mailman/listinfo/audio-dev