/* * Gets the value of system sound voulume. * * @return * The value of system sound voulume. * range of volume is 0.0 .. 1.0. * @example * System::Sound.volume */ static VALUE rb_sys_volume(VALUE obj) { AudioDeviceID device; OSStatus err; UInt32 size; UInt32 channels[2]; float volume[2]; float b_vol = 0.0; // get device device = get_audio_device_id(); // try set master volume (channel 0) size = sizeof(b_vol); err = AudioDeviceGetProperty(device, 0, 0, kAudioDevicePropertyVolumeScalar, &size, &b_vol); if (err == noErr) { goto EXIT; } // otherwise, try seperate channels // get channel numbers size = sizeof(channels); err = AudioDeviceGetProperty(device, 0, 0,kAudioDevicePropertyPreferredChannelsForStereo, &size, &channels); if (err != noErr) { rb_raise(rb_eRuntimeError, "Failed to get channel numbers"); } size = sizeof(float); err = AudioDeviceGetProperty(device, channels[0], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[0]); if (err != noErr) { rb_raise(rb_eRuntimeError, "Failed to get volume of channel"); } err = AudioDeviceGetProperty(device, channels[1], 0, kAudioDevicePropertyVolumeScalar, &size, &volume[1]); if (err != noErr) { rb_raise(rb_eRuntimeError, "Failed to get volume of channel"); } b_vol = (volume[0] + volume[1]) / 2.0; EXIT: return DOUBLE2NUM(b_vol); }
PRIMITIVE VALUE vm_double_to_rval(double d) { return DOUBLE2NUM(d); }
PRIMITIVE VALUE vm_float_to_rval(float f) { return DOUBLE2NUM(f); }