LoginSignup
1
1

More than 5 years have passed since last update.

macOSで音量を設定する

Posted at

サンプルコード

#import <CoreAudio/CoreAudio.h>
#import <AudioToolbox/AudioToolbox.h>

// デフォルトのサウンド出力デバイスを目標に設定
AudioObjectPropertyAddress addr;
addr.mSelector = kAudioHardwarePropertyDefaultOutputDevice;
addr.mScope = kAudioObjectPropertyScopeGlobal;
addr.mElement = kAudioObjectPropertyElementMaster;

// アドレスを元にデバイスIDを取得
AudioDeviceID outputDeviceID;
UInt32 size = sizeof(AudioDeviceID);
OSStatus err = AudioObjectGetPropertyData(kAudioObjectSystemObject, &addr, 0, NULL, &size, &outputDeviceID);

if (err == noErr) {
    // デバイスの出力マスター音量を目標に設定
    AudioObjectPropertyAddress addr;
    addr.mSelector = kAudioHardwareServiceDeviceProperty_VirtualMasterVolume;
    addr.mScope = kAudioObjectPropertyScopeOutput;
    addr.mElement = kAudioObjectPropertyElementMaster;
    Float32 volume;

    // 音量を取得
    AudioObjectGetPropertyData(outputDeviceID, &addr, 0, NULL, &size, &volume);
    NSLog(@"volume: %lf", volume);

    // 音量を設定
    size = sizeof(Float32);
    volume = 0.1;
    AudioObjectSetPropertyData(outputDeviceID, &addr, 0, NULL, size, &volume);
}

CoreAudioはC風のAPIなのでObjCで書いたけど、Swiftでも(UnsafePointerを駆使することになるが)できないことはないはず。

解説

サウンドデバイスはCore AudioではAudioDeviceIDによって表される。これはAudioObjectの一種で、AudioObjectを対象とする様々な関数の引数として渡すことができる。

AudioObjectのプロパティの取得・設定にはAudioObjectGetPropertyDataAudioObjectSetPropertyDataという関数を使う。これらの関数にはAudioObjectのどのプロパティを対象とするかをAudioObjectPropertyAddressというデータを渡すことで指定する。これは3つのフィールドを持つ構造体である(それぞれのフィールドについての詳しい説明についてはヘッダファイルCoreAudio/AudioHardwareBase.hを参照のこと)。

kAudioHardwareServiceDeviceProperty_VirtualMasterVolumeはAudioToolboxのAudio Hardware Serviceで提供されている。他にもkAudioHardwareServiceDeviceProperty_VirtualMasterBalance(ステレオ機器の左右の出力バランス)が設定できる。

備考

  • 情報が少なくて苦労したが、Audio MIDI設定でできるなら方法があるはずだと信じて探したらなんとかなった
  • AudioObjectGetPropertyDataAudioHardwareServiceGetPropertyDataは何か違うんだろうか? AHSには制限があるらしいが……

参考

OS Xでのマイク入力キャプチャ Swift版
macOSX10.6AudioVolumeいじいじ - のんべんだらりぃ~ for MacBook
HALExamples: ConfigDefaultOutput.c

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1