我正在創建一個Mac OS X CoreAudio命令行程序,通過AudioUnits的方式將一些字母數字終端輸入的專有渲染轉換爲實時音頻信號,儘量保持簡單。所有的工作都很好,以匹配輸出採樣率。CoreAudio獲取輸出採樣率
作爲一個起點,我使用了Addisson Wesley的「Learning Core Audio」的第07章教程代碼CH07_AUGraphSineWave。
我初始化AudioComponent「經書」:
void CreateAndConnectOutputUnit (MyGenerator *generator)
{
AudioComponentDescription theoutput = {0};
theoutput.componentType = kAudioUnitType_Output;
theoutput.componentSubType = kAudioUnitSubType_DefaultOutput;
theoutput.componentManufacturer = kAudioUnitManufacturer_Apple;
AudioComponent comp = AudioComponentFindNext (NULL, &theoutput);
if (comp == NULL) {
printf ("can't get output unit");
exit (-1);
}
CheckError (AudioComponentInstanceNew(comp, &generator->outputUnit),
"Couldn't open component for outputUnit");
AURenderCallbackStruct input;
input.inputProc = MyRenderProc;
input.inputProcRefCon = generator;
CheckError(AudioUnitSetProperty(generator->outputUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
0,
&input,
sizeof(input)),
"AudioUnitSetProperty failed");
CheckError (AudioUnitInitialize(generator->outputUnit),
"Couldn't initialize output unit");
}
我的主要問題是我不知道如何中檢索的輸出硬件採樣率渲染AURenderCallbackStruct ,因爲它確實在起着重要作用信號發生過程。我不能將採樣率硬編碼到渲染回調中,但知道這是最簡單的方法,因爲速率不匹配會導致信號以錯誤的音調播放。
有沒有辦法在這樣一個低級別的API上獲得默認輸出的採樣率? 有沒有辦法將它匹配,而不會過度複雜? 我錯過了什麼嗎?
在此先感謝。
問候,
湯姆