Potrzebuję powiadomienia mojej aplikacji o zmianie głośności dźwięku systemu OS X. Dotyczy to aplikacji na komputer, a nie na iOS. Jak mogę zarejestrować się, aby otrzymać to powiadomienie?Jak zarejestrować się w powiadomieniu o zmianach głośności?
5
A
Odpowiedz
9
Może to być trochę trudne, ponieważ niektóre urządzenia audio obsługują kanał główny, ale większość tak nie robi, że głośność będzie właściwością dla jednego kanału. W zależności od tego, co musisz zrobić, możesz obserwować tylko jeden kanał i założyć, że wszystkie inne kanały obsługiwane przez urządzenie mają taką samą głośność. Niezależnie od tego, ile kanałów chcesz oglądać, można zaobserwować głośność rejestracji nieruchomość słuchacza do AudioObject w pytaniu:
// 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
}
Twój słuchacz proc powinno być coś jak:
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;
}
}
}
}
Powiązane problemy
- 1. Powiadomienia o zmianach w usługach lokalizacyjnych?
- 2. Informuj składnik podrzędny o zmianach w Angular2
- 3. Usuń ikonę terminalu w powiadomieniu o węźle
- 4. Powiadomienie o zmianach obiektu w blasku niebieskim
- 5. Android - EditText w powiadomieniu o statusie
- 6. Aktualizacja iPhone osiągalności o zmianach Network
- 7. Jak mogę wyłączyć/zarejestrować/zarejestrować w Django?
- 8. howto otrzymywać powiadomienia o zmianie wolumenu nośników?
- 9. Jak odwoływać się do widoku w niestandardowym powiadomieniu
- 10. Jak zarejestrować się w trybie uśpienia w systemie Android?
- 11. drogi zarejestrować się w rejestracji obszaru
- 12. Powiadomienia o zmianach w systemie Mac OS X/RSS
- 13. Wysyłaj transmisję po powiadomieniu kliknij
- 14. Jak wybrać kolumny wyświetlane w Oczekujących zmianach?
- 15. Jak zaktualizować pasek głośności w MinimalMediaRouteProvider
- 16. Czy usługa podstawowa Tridion może zostać powiadomiona o zmianach danych?
- 17. Regulacja głośności w aplikacji Android
- 18. Zwiększenie głośności nagranego dźwięku
- 19. wbudowany android newline w powiadomieniu
- 20. Android MediaRouter głośności wydarzenia
- 21. Jak zarejestrować ogólny serwis
- 22. Poziom głośności iPoda wpływa na poziom głośności aplikacji
- 23. StructureMap - Jak zarejestrować się i rozwiązać otwartą ogólny typ
- 24. Ustawianie głośności aplikacji Android
- 25. Zmiana poziomu głośności głównej
- 26. Jak zarejestrować niestandardowy typ pliku w iOS
- 27. iOS: Zmiana głośności urządzenia
- 28. Suwak głośności podobny do VLC
- 29. Jak zarejestrować nowy backend LLVM?
- 30. Sterowanie mikserem głośności