我正在編寫一個需要託管音頻單元的Objective-C++框架。如果我嘗試使用Apple的默認單位(如DLS合成器和各種效果),一切正常。但是,我的應用程序似乎無法找到任何第三方音頻單元(in/Library/Audio/Plug-Ins/Components)。音頻單元主機需要做些什麼才能使用非Apple音頻單元?
例如,下面的代碼片段...
CAComponentDescription tInstrumentDesc =
CAComponentDescription('aumu','dls ','appl');
AUGraphAddNode(mGraph, &tInstrumentDesc, &mInstrumentNode);
AUGraphOpen(mGraph);
...工作得很好。但是,如果我用'aumu', 'NiMa', '-Ni-'
(對於Native Instruments的Massive Synth的說明)初始化tInstrumentDesc
,則AUGraphOpen()
將返回OSStatus
錯誤badComponentType
,並且AUGraph將無法打開。這適用於我所有的第三方音頻單元。
下面的代碼,從Audacity源代碼中修改,對這個問題略有提及。它循環遍歷某種類型的所有可用音頻單元並打印出其名稱。
ComponentDescription d;
d.componentType = 'aumu';
d.componentSubType = 0;
d.componentManufacturer = 0;
d.componentFlags = 0;
d.componentFlagsMask = 0;
Component c = FindNextComponent(NULL, &d);
while(c != NULL)
{
ComponentDescription found;
Handle nameHandle = NewHandle(0);
GetComponentInfo(c, &found, nameHandle, 0, 0);
printf((*nameHandle)+1);
printf("\n");
c = FindNextComponent(c, &d);
}
這段代碼運行之後,唯一的輸出是Apple: DLSMusicDevice
(其是音頻單元嵌合上面的描述'aumu', 'dls ', 'appl'
)。
這似乎不是單位本身的問題,因爲蘋果的auval
工具列出了我的第三方單位(他們也驗證)。
我試過運行我的測試應用程序sudo
,我正在處理的自定義框架位於/ Library/Frameworks中。
感謝您的回覆。我正在初始化mGraph,並在我發佈的代碼片段之外完成所有合適的工作。原來,這個問題是由於編譯爲64位。由於成爲新用戶,我無法發佈解決方案。 – admsyn 2011-04-13 14:39:32