2013-04-02 85 views
4

所以我想弄清蘋果在iOS 5中添加的記錄不當的NBandEQ。我能夠得到它在16頻段以下的任何事情都很好,但我想要更多:)發生了什麼?如果我將它設置爲15段均衡器,一切正常,但如果我使用16或更高的數字,當我設置kAUNBandEQProperty_NumberOfBands時,出現-10851(kAudioUnitErr_InvalidPropertyValue)的錯誤,那麼前8個樂隊設置正常,其餘的結果是 - 10878(kAudioUnitErr_InvalidParameter)錯誤。所以15個樂隊可以成功完成,但是當我到達16個時,突然間只有8個樂隊可以完成。有我可以讀的kAUNBandEQProperty_MaxNumberOfBands,我認爲是目前狀態的設備可以處理的限制。那麼它吐出不規則的數字從12位數字到4位數字。我想我自己不喜歡我給它的極端頻率。我消除了這種可能性。然後我意識到頻帶的帶寬可能會重疊,並且不會那樣。所以我將帶寬從默認的.5降低到最小。 .05沒有幫助以太。試圖找出核心音頻的NBandEQ

我確實意識到,畢竟我搞砸了所有愚蠢的設置,因爲它開始抱怨之前,我甚至得到了這些設置。它已經在樂隊的數量和錯誤。

我發佈這個問題,看看是否有更多的經驗豐富的程序員可以看到我的代碼中的東西搞砸了我,並指出了我。我意識到並不是很多人已經冒險進入核心音頻,更少的NBandEQ,但也許我搞亂了一些基本的C,所以請看看。我會非常感激。我很沮喪。同樣在發佈這個代碼(甚至tho這是醜陋的測試代碼),也許我可以幫助其他人後面。我知道我希望至少有一個代碼片段,我可以看看有關NBandEQ

在此先感謝您的幫助!

//Getting max bands for this device??? 
UInt32 maxNumOfBands; 
UInt32 propSize = sizeof(maxNumOfBands); 
AudioUnitGetProperty([_equilizer audioUnit], 
        kAUNBandEQProperty_MaxNumberOfBands, 
        kAudioUnitScope_Output, 
        0, 
        &maxNumOfBands, 
        &propSize); 
NSLog(@"THIS IS THE MAX NUMBER OF BANDS?---%u",(unsigned int)maxNumOfBands); 

UInt32 noBands = [eqFrequencies count]; 
// Set the number of bands first 
NSLog(@"NumberOfBands atempted:%i with result:%ld", (unsigned int)noBands, AudioUnitSetProperty(_equilizer.audioUnit, 
        kAUNBandEQProperty_NumberOfBands, 
        kAudioUnitScope_Global, 
        0, 
        &noBands, 
        sizeof(noBands))); 
// Set the frequencies 
for (NSUInteger i=0; i<noBands; i++) { 
    NSLog(@"Set Frequency for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit], 
          kAUNBandEQParam_Frequency+i, 
          kAudioUnitScope_Global, 
          0, 
          (AudioUnitParameterValue)[[eqFrequencies objectAtIndex:i] floatValue], 
          0)); 
} 
//set bandwidth 
for (NSUInteger i=0; i<noBands; i++) { 
    NSLog(@"Set bandwidth for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit], 
          kAUNBandEQParam_Bandwidth+i, 
          kAudioUnitScope_Global, 
          0, 
          0.05,//of octive 
          0)); 
} 

// Set the bypass to off "0" 
for (NSUInteger i=0; i<noBands; i++) { 
    NSLog(@"Set Bypass for band:%i with result:%ld", i, AudioUnitSetParameter([_equilizer audioUnit], 
                kAUNBandEQParam_BypassBand+i, 
                kAudioUnitScope_Global, 
                0, 
                0,//off 
                0)); 
} 

}

回答

3

好吧,我想通了。我曾在kAUNBandEQProperty_MaxNumberOfBands上使用kAudioUnitScope_Output,應該是kAudioUnitScope_Global

kAUNBandEQProperty_MaxNumberOfBands在Sim,iPhone 5和Retina Ipad上產生了16個。

+0

這是問題的答案,但我不確定標記我自己的答案是否很酷,因爲看起來這可能會被濫用以提高聲譽。請讓我知道我應該如何做到這一點。如果別人想要回答它,我可以將它們標記爲答案。 –

+0

此外,我很想知道如果數量不同,在不同的設備上。這些是我可以訪問的唯一設備。如果人們發佈了他們的結果,會喜歡它。 –

+1

如果你接受你自己的答案,那很好。你不會得到它的聲譽。你解決了這個問題,接受它是表明這是答案的正確方法。 –