Я пытался передать и массивировать метод в аудиобиблиотеке DiracLE.
Массив выглядит так в отладчике
- (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 ));
Поскольку мне нужно было извлечь аудиоданные из файла в моем методе, я должен выделить там массив и передать его в функцию dirac для заполнения. Я malloc вроде так arrayToFill = (float **) malloc ( (frameCount * channelCount) * sizeof( float ));
а затем передаю его функции dirac, как упоминалось ранее.
Этот массив может быть двумерным или одномерным массивом в зависимости от количества каналов.
%@
? Потому что вы должны использовать обычный спецификатор формата C%f
as. - person Jack   schedule 22.07.2012frameCount
, но цикл повторяется доnumFrames
? Это опечатка? А если нет, может лиnumFrames
быть просто нулем? - person Kevin Grant   schedule 22.07.2012