我正在爲客戶端做一些音頻編程,而且遇到了一個我只是不理解的問題。Objective C變量值未被保存
我有一個由CoreAudio重複調用的渲染回調函數。這裏面回調我有以下幾點:
// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame]/(Float32) 32768;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
可正常工作,顯示沒有任何意外的舍入誤差。
我想要做的下一件事是添加一個小的延遲。我一個全局變量添加到類:
即@implementation行
Float32 last = 0;
然後我使用這個變量來獲得一幀延遲如下:
// Get the audio sample data
AudioSampleType *outA = (AudioSampleType *)ioData->mBuffers[0].mData;
Float32 data;
Float32 next;
// Loop over the samples
for (UInt32 frame = 0; frame < inNumberFrames; frame++) {
// Convert from SInt16 to Float32 just to prove it's possible
data = (Float32) outA[frame]/(Float32) 32768;
next = last;
last = data;
// Convert back to SInt16 to show that everything works as expected
outA[frame] = (SInt16) round(next * 32768);
}
這一次有一個信號上奇怪的音頻失真。
我只是不能看到我做錯了什麼!任何建議將不勝感激。
我認爲這是一個音頻問題,而不是C問題。嘗試記錄所有變量的值並查看是否有幫助。在跳到結論之前總是記錄日誌。 – Linuxios
這可能是一個線程問題。檢查您的代碼是否始終在同一個線程上運行。即NSLog(@「thread:%@」,[NSThread currentThread]);.如果沒有,你需要用鎖/互斥鎖來保護你的全局。 – EricS