2012-07-22 89 views
0

我一直在試圖傳遞和陣列到DiracLE音頻庫中的一個方法。聲音採樣的空浮點數**

數組看起來像這樣在調試器

enter image description here

- (OSStatus) readFloatsConsecutive:(SInt64)numFrames intoArray:(float**)audio withOffset:(long)offset 

,填補了數組像這樣

if (audio) { 
    for (long c = 0; c < mExtAFNumChannels; c++) { 
     if (!audio[c]) continue; // this executes for both channels 
            // but doesnt proceed into next for loop 
     for (long v = 0; v < numFrames; v++) { 
      if (v < loadedPackets) audio[c][v+offset] = (float)data[v*mExtAFNumChannels+c]/32768.f; 
      else audio[c][v+offset] = 0.f; 
     } 
    } 
} 

我這樣稱呼它

[reader readFloatsConsecutive:frameCount intoArray:arrayToFill]; 

arrayToFill是當前函數範圍的參數

[self readAudioDataForFile:temp withArray:tempArray];

陣列最初傳遞到函數這樣

// this array was passed into the function as tempArray which is float **tempArray = NULL; 
arrayToFill = (float **) malloc ((frameCount * channelCount) * sizeof(float)); 

正如我需要提取從文件的音頻數據在我的方法我已到那裏MALLOC陣列並把它傳遞到Dirac函數對於灌裝。我malloc像這樣arrayToFill = (float **) malloc ((frameCount * channelCount) * sizeof(float));然後傳遞給dirac函數如前所述。

這個陣列可以是取決於信道計數

+0

你是如何記錄它們的?用'%@'?因爲你應該使用正常的C'%f'作爲格式說明符。 – Jack 2012-07-22 03:51:09

+0

我沒有使用它,它看起來像數組是空的,當它到達for循環來填充傳入的數組。如果(音頻)失敗,所以我沒有任何數組?我是否正確地配置了數組,因爲它看起來像在通過它不存在的兩個函數調用之後傳遞它。 – user773578 2012-07-22 03:55:00

+0

@傑克 - 你的網站鏈接很好的遊戲。 :) – user773578 2012-07-22 03:56:33

回答

1

的問題依賴於分配在我看來2維或1維陣列。

分配一個1個維陣列看起來像:

arrayToFill = (float *) malloc ((frameCount * channelCount) * sizeof(float)); 

和將它足夠多。

分配一個2維數組雖然不同,但是你必須分配內部數組。因爲你需要分配一個指針,指針浮

arrayToFill = (float **)calloc(channelCount, sizeof(float*)); 
for (int i = 0; i < channelCount; ++i) 
    arrayToFill[i] = (float*)calloc(frameCount, sizeof(float)); 

這樣的:如果我理解正確的,如果你有兩個通道,則數組是二維,你應該這樣做。所以在第一步中你分配一個2維浮點指針數組,這些指針被初始化爲NULL,所以你必須遍歷它並分別分配它們。

如果通道在陣列內(例如,第一個索引選擇了幀而不是通道),那麼您應該交換尺寸。