changeset 21352:2d786b7625d7

adds support for AOCONTROL_GET_VOLUME/AOCONTROL_SET_VOLUME in ao_macosx, patcg by Crhis Roccati<roccati@pobox.com>
author nplourde
date Tue, 28 Nov 2006 23:05:45 +0000
parents c611dfc4cb85
children a965ca17debc
files libao2/ao_macosx.c
diffstat 1 files changed, 26 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/libao2/ao_macosx.c	Tue Nov 28 22:50:02 2006 +0000
+++ b/libao2/ao_macosx.c	Tue Nov 28 23:05:45 2006 +0000
@@ -171,13 +171,36 @@
 }
 
 static int control(int cmd,void *arg){
+ao_control_vol_t *control_vol;
+OSStatus err;
+Float32 pan, vol;
 	switch (cmd) {
-	case AOCONTROL_SET_DEVICE:
-	case AOCONTROL_GET_DEVICE:
 	case AOCONTROL_GET_VOLUME:
+		control_vol = (ao_control_vol_t*)arg;
+		err = AudioUnitGetParameter(ao->theOutputUnit, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, &vol);
+
+		if(err==0) {
+			// printf("GET VOL=%f\n", vol);
+			control_vol->left=control_vol->right=vol*100.0/4.0;
+			return CONTROL_TRUE;
+		}
+		else {
+			return CONTROL_FALSE;
+		}
+
 	case AOCONTROL_SET_VOLUME:
+		control_vol = (ao_control_vol_t*)arg;
+		
+		vol=(control_vol->left+control_vol->right)*4.0/200.0;
+		err = AudioUnitSetParameter(ao->theOutputUnit, kHALOutputParam_Volume, kAudioUnitScope_Global, 0, vol, 0);
+		if(err==0) {
+			// printf("SET VOL=%f\n", vol);
+			return CONTROL_TRUE;
+		}
+		else {
+			return CONTROL_FALSE;
+		}
 	  /* Everything is currently unimplemented */
-	  return CONTROL_FALSE;
 	default:
 	  return CONTROL_FALSE;
 	}