Как получить уровень звука 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;
}

person Community    schedule 14.12.2014    source источник
comment
Не совсем тот же вопрос. Я ищу сам уровень звука. Не системный уровень звука. Честно говоря, код в этом ответе мне мало помог.   -  person    schedule 14.12.2014


Ответы (1)


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

person ondermerol    schedule 27.04.2015
comment
Я только тестирую и использую его для i-phone, поэтому я не уверен, будет ли он работать для Mac или нет. - person ondermerol; 13.05.2015