這是一個後續到以前的問題: OSX CoreAudio: Getting inNumberFrames in advance - on initialization?OSX:用於設置IO緩衝區長度的CoreAudio API?
我試圖找出什麼將是AudioUnit API的可能設置inNumberFrames或較受歡迎的輸入回調的IO的緩存時間對於單個HAL音頻組件實例OSX(不是插件!)。 雖然我知道有一個全面的文檔,說明如何在iOS中實現這一點,通過AVAudioSession API,我既不能找出也沒有找到有關在OSX中設置這些值的文檔,無論哪個API。 該網站充滿了專家,但衝突的聲明範圍從「有一個音頻單元API請求採樣率和首選緩衝區的時間...」,以「你可以肯定得到的幀數,但僅用於當前的回撥呼叫...「。
是否有至少獲得(和適應)的inNumberFrames或音頻緩衝器長度 offerd由系統,用於在OSX輸入選擇的採樣率的方法嗎?例如,對於44.1k及其倍數(似乎部分起作用),以及48k及其倍數(這似乎根本不起作用,我不知道允許修改緩衝區的破解在哪裏爲這些價值增加)?這裏的控制檯打印:
Available 7 Sample Rates
Available Sample Rate value : 8000.000000
Available Sample Rate value : 16000.000000
Available Sample Rate value : 32000.000000
Available Sample Rate value : 44100.000000
Available Sample Rate value : 48000.000000
Available Sample Rate value : 88200.000000
Available Sample Rate value : 96000.000000
.mSampleRate = 48000.00
.mFormatID = 1819304813
.mBytesPerPacket = 8
.mFramesPerPacket = 1
.mBytesPerFrame = 8
.mChannelsPerFrame = 2
.mBitsPerChannel = 32
.mFormatFlags = 9
_mFormatHumanReadable = kAudioFormatFlagIsFloat
kAudioFormatFlagIsPacked
kLinearPCMFormatFlagIsFloat
kLinearPCMFormatFlagIsPacked
kLinearPCMFormatFlagsSampleFractionShift
kAppleLosslessFormatFlag_16BitSourceData
kAppleLosslessFormatFlag_24BitSourceData
expectedInNumberFrames = 512
Couldn't render in current context (Error -10863)
預期inNumberFrames從系統中讀取:
UInt32 expectedInNumberFrames = 0;
UInt32 propSize = sizeof(UInt32);
AudioUnitGetProperty(gInputUnitComponentInstance,
kAudioDevicePropertyBufferFrameSize,
kAudioUnitScope_Global,
0,
&expectedInNumberFrames,
&propSize);
預先感謝在正確的方向指向我!
非常感謝,@ hotpaw2。我之前已經看到過這個鏈接,但是因爲棘手的標題「**在音頻I/O期間省電--kAudioHardwarePropertyPowerHint屬性**」跑過了它,而不是密切關注這個** TN **的內容。非常感謝你指點我。一旦我按照這個** TN **重新編寫代碼,我相信我還會遇到其他一些外部高端硬件設備的問題。我將接受爲解決問題提供「最有幫助的解決方案」的答案。 – user3078414