DeviceBufferSizeを知りたい
Audio Unitを作るときに,frameSize(一回の処理でどれだけのBufferを処理するか.deviceBufferSize)をDSPループが呼ばれる前に知りたい(Bufferを事前に用意する必要がある)とき,どうやればいいのか.
AudioUnitのAPIでありそうな気もするけど,見当たらないので,deviceの情報を直に調べてしまうことにする.
AudioDeviceID device = kAudioDeviceUnknown;
UInt32 size;
UInt32 deviceBufferSize;
OSStatus err = kAudioHardwareNoError;
size = sizeof(device);
err = AudioHardwareGetProperty(kAudioHardwarePropertyDefaultOutputDevice, &size, (void *) &device);
if (err) {
NSLog(@"err = %d",err);
}
size = sizeof(deviceBufferSize);
err = AudioDeviceGetProperty(device, 0, false, kAudioDevicePropertyBufferSize, &size, &deviceBufferSize);
if (err != kAudioHardwareNoError) {
NSLog(@"err = %d",err);
}
deviceBufferSize = deviceBufferSize / size;
NSLog(@"deviceBufferSize = %d ",deviceBufferSize);
これでできる.
kAudioDevicePropertyBufferSizeをkAudioDevicePropertyDeviceNameにするとDeviceの名前が(char*で)取得できる.
kAudioDevicePropertyDeviceNameCFStringだと,CFStringで取得できる.
getがあるなら,setもあるので,AudioDeviceSetProperty + kAudioDevicePropertyDeviceNameで,どのdeviceを使うかを設定できる.