Necesito que se notifique a mi aplicación cuando ha cambiado el volumen del sonido de OS X. Esto es para una aplicación de escritorio, no para iOS. ¿Cómo puedo registrarme para esta notificación?¿Cómo me registro para recibir una notificación y luego el volumen del sonido cambia?
5
A
Respuesta
9
Esto puede ser un poco complicado porque algunos dispositivos de audio admiten un canal maestro, pero la mayoría no lo hace, por lo que el volumen será una propiedad por canal. Dependiendo de lo que necesite hacer, podría observar solo un canal y asumir que todos los demás canales que admite el dispositivo tienen el mismo volumen. Independientemente del número de canales que desea ver, se observa el volumen mediante el registro de un oyente propiedad para el AudioObject en cuestión:
// Some devices (but not many) support a master channel
AudioObjectPropertyAddress propertyAddress = {
kAudioDevicePropertyVolumeScalar,
kAudioDevicePropertyScopeOutput,
kAudioObjectPropertyElementMaster
};
if(AudioObjectHasProperty(deviceID, &propertyAddress)) {
OSStatus result = AudioObjectAddPropertyListener(deviceID, &propertyAddress, myAudioObjectPropertyListenerProc, self);
// Error handling omitted
}
else {
// Typically the L and R channels are 1 and 2 respectively, but could be different
propertyAddress.mElement = 1;
OSStatus result = AudioObjectAddPropertyListener(deviceID, &propertyAddress, myAudioObjectPropertyListenerProc, self);
// Error handling omitted
propertyAddress.mElement = 2;
result = AudioObjectAddPropertyListener(deviceID, &propertyAddress, myAudioObjectPropertyListenerProc, self);
// Error handling omitted
}
Su proc oyente debe ser algo como:
static OSStatus
myAudioObjectPropertyListenerProc(AudioObjectID inObjectID,
UInt32 inNumberAddresses,
const AudioObjectPropertyAddress inAddresses[],
void *inClientData)
{
for(UInt32 addressIndex = 0; addressIndex < inNumberAddresses; ++addressIndex) {
AudioObjectPropertyAddress currentAddress = inAddresses[addressIndex];
switch(currentAddress.mSelector) {
case kAudioDevicePropertyVolumeScalar:
{
Float32 volume = 0;
UInt32 dataSize = sizeof(volume);
OSStatus result = AudioObjectGetPropertyData(inObjectID, ¤tAddress, 0, NULL, &dataSize, &volume);
if(kAudioHardwareNoError != result) {
// Handle the error
continue;
}
// Process the volume change
break;
}
}
}
}
Cuestiones relacionadas
- 1. ¿Dónde y cómo registro un objeto para recibir una Notificación?
- 2. ¿Cómo configurar volumen de sonido de notificación mediante programación?
- 3. ¿Cómo publicar y recibir una notificación?
- 4. ¿Cómo recibir una notificación de luz LED?
- 5. Notificación de Android para reproducir sonido solo
- 6. iPhone: ¿Cómo se reproduce un sonido de notificación local alto independientemente de la configuración del volumen?
- 7. Cómo recibir una notificación cuando se notifica una notificación
- 8. Cómo aumentar el volumen del sonido grabado usando AVAudioRecorder
- 9. ¿Cómo recibir una notificación cuando el estado de SMS cambia de 'En cola' a 'Enviado'?
- 10. ¿Cómo recibir una notificación cuando un usuario cambia la contraseña o solicita un restablecimiento de contraseña?
- 11. Un sonido del sistema ignora el nivel de volumen
- 12. ¿Cómo configurar el volumen del audio HTML5?
- 13. Control del volumen del sonido de la aplicación en Delphi
- 14. Cómo puedo recibir una notificación si una columna DataGrid está ordenada (y no ordenada)
- 15. Recibir notificación cuando se cambió el valor de RegistryKey
- 16. Android: Sonido de notificación desactivar
- 17. ¿Cómo utilizar la notificación con sonido y vibración?
- 18. Notificación de iPhone Push - Cómo usar el sonido predeterminado
- 19. ¿Cómo ajustar el volumen de un sonido en OpenAL?
- 20. Cómo recibir una notificación cuando NSWindow se cierra
- 21. Obtener volumen de sonido principal en C#
- 22. Apple Push Notificación de registro y token de dispositivo ¿Recibir aclaración?
- 23. ¿Cómo cambiar el sonido de notificación por código en android?
- 24. AudioServicesPlaySystemSound Volumen en el iPad
- 25. Cómo cambiar el volumen con MPMusicPlayerController sin afectar el volumen del dispositivo
- 26. coreaudio: cómo obtener/configurar el volumen de alerta del sistema en oposición al volumen del dispositivo
- 27. ¿Cómo ajustar el volumen del micrófono en Android?
- 28. ¿cómo recibir notificaciones de cambio de volumen de medios?
- 29. iOS: Cambiar el Volumen del Dispositivo
- 30. ¿Notificación cuando cambia un archivo?