2014-12-14 3 views
4

В настоящее время у меня есть код, который успешно возвращает значение звукового значения системы пользователей, которое они могут устанавливать с помощью клавиш регулировки громкости.Как получить уровень звука Mac?

Однако, я хочу, это значение звука, воспроизводимого динамиками. Поэтому, если пользователь наблюдает за Netflix, и персонаж начинает кричать, значение вернется выше, чем если бы персонаж шептал.

код у меня сейчас:

+ (AudioDeviceID)defaultOutputDeviceID { 
    OSStatus status = noErr; 

    AudioDeviceID outputDeviceID = kAudioObjectUnknown; 

    AudioObjectPropertyAddress propertyAOPA; 
    propertyAOPA.mElement = kAudioObjectPropertyElementMaster; 
    propertyAOPA.mScope = kAudioObjectPropertyScopeGlobal; 
    propertyAOPA.mSelector = kAudioHardwarePropertyDefaultSystemOutputDevice; 

    UInt32 propertySize = sizeof(outputDeviceID); 

    if (!AudioHardwareServiceHasProperty(kAudioObjectSystemObject, &propertyAOPA)) { 
     NSLog(@"Cannot find default output device!"); 
     return outputDeviceID; 
    } 

    status = AudioHardwareServiceGetPropertyData(kAudioObjectSystemObject, &propertyAOPA, 0, NULL, &propertySize, &outputDeviceID); 

    if(status) { 
     NSLog(@"Cannot find default output device!"); 
    } 

    return outputDeviceID; 
} 

+ (float)volume { 
    OSStatus status = noErr; 

    AudioDeviceID outputDeviceID = [[self class] defaultOutputDeviceID]; 

    if (outputDeviceID == kAudioObjectUnknown) { 
     NSLog(@"Unknown device"); 
     return 0.0; 
    } 

    AudioObjectPropertyAddress propertyAOPA; 
    propertyAOPA.mElement = kAudioObjectPropertyElementMaster; 
    propertyAOPA.mScope = kAudioDevicePropertyScopeOutput; 
    propertyAOPA.mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume; 

    Float32 outputVolume; 
    UInt32 propertySize = sizeof(outputVolume); 

    if (!AudioHardwareServiceHasProperty(outputDeviceID, &propertyAOPA)) { 
     NSLog(@"No volume returned for device 0x%0x", outputDeviceID); 
     return 0.0; 
    } 

    status = AudioHardwareServiceGetPropertyData(outputDeviceID, &propertyAOPA, 0, NULL, &propertySize, &outputVolume); 

    if (status) { 
     NSLog(@"No volume returned for device 0x%0x", outputDeviceID); 
     return 0.0; 
    } 

    if (outputVolume < 0.0 || outputVolume > 1.0) 
     return 0.0; 

    return outputVolume; 
} 
+0

Возможный дубликат [Как получить текущий уровень звука текущего устройства вывода звука?] (Http://stackoverflow.com/questions/11893555/how-can- i-get-the-current-sound-level-the-current-audio-output-device), [этот учебник также может помочь.] (http://www.raywenderlich.com/36475/how-to- make-a-music-visualizer-in-ios) – davidcondrey

+0

Не совсем тот же вопрос. Я ищу уровень звука. Не системный уровень звука. Код в этом ответе честно не очень помог мне. –

ответ

1

Получить уровень громкости и установить его, как вы хотите (как максимальный объем.), А затем вернуть его обратно к пользователям исходного уровня громкости. Для получения дополнительной информации вы можете увидеть приведенную ниже ссылку; https://stackoverflow.com/a/27743599/1351327
Надеюсь, это поможет. (Будьте осторожны, что Apple отклонит ваше приложение)

+0

Будет ли это работать и для Mac? –

+0

У меня есть только тест и использовать его для i-телефона, поэтому я не уверен, что он будет работать на Mac или нет. – ondermerol

Смежные вопросы