Я использую CoreAudio для воспроизведения непрерывного звука.Мне удалось заставить его работать, однако теперь у меня есть проблема, которую я не могу преодолеть.Звук, который он воспроизводит, более того, это фактический звук, который мне нужен, не просто шум, но вместе с ним я получаю шум, шипение, треск, а также.
Я проверил частоту дискретизации, обнулел все буферы тишины, проверил каналы (я уверен, у меня только 1) и дважды проверил алгоритм, который подает метод воспроизведения (но я будудобавьте это здесь просто чтобы быть уверенным).Мой опыт работы со звуком невелик, поэтому, вероятно, я делаю что-то очень плохое.Я хотел бы знать, есть ли другие вещи, которые нужно проверить, или каков лучший подход к этому, где искать в первую очередь?
//init
playedBufferSize=audioFilesSize[audioFilesIndex];
startPointForPlayedBuffer=0;
//feed the audio
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
AudioBuffer buffer = ioData->mBuffers[0];
if (playedBufferSize>=buffer.mDataByteSize) {
memcpy(buffer.mData , audioFiles[audioFilesIndex]+startPointForPlayedBuffer, buffer.mDataByteSize);
playedBufferSize-=buffer.mDataByteSize;
startPointForPlayedBuffer+=buffer.mDataByteSize;
}else {
memcpy(buffer.mData , audioFiles[audioFilesIndex]+startPointForPlayedBuffer, playedBufferSize);
nextAudioFileIndex();
memcpy(buffer.mData+playedBufferSize, audioFiles[audioFilesIndex], playedBufferSize);
playedBufferSize = audioFilesSize[audioFilesIndex]-(buffer.mDataByteSize-playedBufferSize);
startPointForPlayedBuffer = (buffer.mDataByteSize-playedBufferSize);
}
return noErr;
}
РЕДАКТИРОВАТЬ: я знаю, что этот код выше не будет воспроизводить звук непрерывно, потому чтов какой-то момент он заполняет буфер кучей нулей, однако я получаю много странных звуков вместе с этим, если звук будет воспроизводиться, останавливаться на короткое время и запускаться снова, я был бы счастлив, хорошее начало:)
EDIT2: я отредактировал код так, чтобы он больше не выводил тишину, но, к сожалению, я слышу шипение и шипение ...
Спасибо!