我正在從以AudioQueueGetProperty呼叫的-50(一般參數錯誤)。請幫助我,因爲我已經觸摸了XCode和任何iPhone工作了幾個月。這可能是一個簡單的代表,但我無法解決它。我的代碼導致-50:一般參數錯誤檢索記錄格式與AudioQueueGetProperty
//Setup format
AudioStreamBasicDescription recordFormat;
memset(&recordFormat, 0, sizeof(recordFormat));
recordFormat.mFormatID = kAudioFormatMPEG4AAC;
recordFormat.mChannelsPerFrame = 2;
CCGetDefaultInputDeviceSampleRate(&recordFormat.mSampleRate);
UInt32 propSize = sizeof(recordFormat);
AQ(AudioFormatGetProperty(kAudioFormatProperty_FormatInfo, 0, NULL,
&propSize, &recordFormat),
"AudioFormatGetProperty throws unexpected errors.");
//Setup Queue
//listing 4.8-4.9
AudioQueueRef theQueue = {0};
self->queue = theQueue;
AQ(AudioQueueNewInput(&recordFormat, CCAudioRecordingCallback,
self, NULL, NULL, 0, &self->queue),
"AudioQueueNewInput throws unexpected errors.");
UInt32 size = sizeof(recordFormat);
AQ(AudioQueueGetProperty(self->queue,
kAudioConverterCurrentOutputStreamDescription,
&recordFormat,
&size),
"Getting audio property kAudioConverterCurrentOutputStreamDescription throws unexpected errors.");
我覈實,我有一個有效的隊列,就像我打這個電話給AudioQueueGetProperty。我已經嘗試了通過隊列「self> queue」和「self.queue」的兩種方式,它們都導致相同的錯誤。隊列的定義如下:
@interface CCAudioRecorder()
//...
@property (nonatomic, assign) AudioQueueRef queue;
//...
@end
@implementation CCAudioRecorder
@synthesize queue;
AQ是#def:
#define AQ(expr, msg) if(nil!=CheckError((expr), msg)) [NSException raise:@"AudioException" format:@"Unexpected exception occured."];
解析爲以下錯誤檢查功能:
static NSString* CheckError(OSStatus error, const char* operation)
{
if (noErr == error) return nil;
NSString *errorMessage = nil;
char errorString[20];
//See if it appears to be a 4-char code
*(UInt32 *)(errorString+1) = CFSwapInt32HostToBig(error);
if (isprint(errorString[1]) && isprint(errorString[2])
&& isprint(errorString[3]) && isprint(errorString[4]))
{
errorString[0] = errorString[5] = '\'';
errorString[6] = '\0';
} else {
sprintf(errorString, "%d", (int)error);
}
errorMessage = [NSString stringWithFormat:
@"Audio Error: %@ (%@)\n",
[NSString stringWithUTF8String:operation],
[NSString stringWithUTF8String:errorString]];
NSLog(@"%@", errorMessage);
return errorMessage;
}
我也打過電話AudioFormatGetProperty與局部變量創建隊列,避免了類實例級伊娃,仍然得到了同樣的錯誤:
AudioQueueRef theQueue = {0};
AQ(AudioQueueNewInput(&recordFormat, CCAudioRecordingCallback,
self, NULL, NULL, 0, &theQueue),
"AudioQueueNewInput throws unexpected errors.");
UInt32 size = sizeof(recordFormat);
AQ(AudioQueueGetProperty(theQueue,
kAudioConverterCurrentOutputStreamDescription,
&recordFormat,
&size),
"Getting audio property kAudioConverterCurrentOutputStreamDescription throws unexpected errors.");
** **更新我 有以下代碼,在模擬器上,而不是在設備上工作。 (我還不能跨我早些時候發佈的引用,但我相信這是類似的或準確。)
AudioQueueRef theQueue = {0};
self->queue = theQueue;
AQ(AudioQueueNewInput(&recordFormat, CCAudioRecordingCallback,
self, NULL, NULL, 0, &self->queue),
"AudioQueueNewInput throws unexpected errors.");
UInt32 size = sizeof(recordFormat);
AQ(AudioQueueGetProperty(self->queue,
kAudioConverterCurrentOutputStreamDescription,
&recordFormat,
&size),
"Getting audio property kAudioConverterCurrentOutputStreamDescription throws unexpected errors.");
運行它在設備上我得到在同一地點發生碰撞,錯誤-50一般參數錯誤。我的設備是運行iOS6的iPhone 4S,我正在使用XCode 4.5。
你有我! :)是的,我正在學習核心音頻,我在那裏投入自我,以此作爲在其他方法中使用的將iVar中的隊列緩存的方法。我正在嘗試使用更多的O/O風格來實現音頻播放器對象。 – Cliff
我更新了我的帖子,試圖直接使用本地隊列,但仍然出現錯誤。我必須錯過一些東西,或者這一切都改變了iOS6?我還沒有閱讀iOS6上的文檔,但我最近更新了我的SDK和硬件。 – Cliff
剛剛更新了我的文章。我可以在模擬器上工作,但它在設備上崩潰。 – Cliff