Я использую новокаин для воспроизведения звука в приложении, и я постоянно получаю зависания после следующих шагов:ошибка буфера аудио, когда наушники подключены
- Открыть приложение на iPhone без каких-либо наушников, подключенных в
- Начать воспроизведение аудио в приложении
- подключает наушники
АРР, аварии на линии outData[i*stride] = mData[whichChannel][idx];
в следующей функции:
void RingBuffer::FetchData(float *outData, SInt64 numFrames, SInt64 whichChannel, SInt64 stride)
{
int idx;
for (int i=0; i < numFrames; ++i) {
idx = (int)((mLastReadIndex[whichChannel] + i) % (mSizeOfBuffer));
outData[i*stride] = mData[whichChannel][idx];
}
mLastReadIndex[whichChannel] = (mLastReadIndex[whichChannel] + numFrames) % (mSizeOfBuffer);
mNumUnreadFrames[whichChannel] -= numFrames;
if (mNumUnreadFrames[whichChannel] <= 0) mNumUnreadFrames[whichChannel] = 0;
}
В файле заголовка mData
объявлен как float **mData;
и сообщение об ошибке в редакторе "AURemoteIO :: IOThread (14): EXC_BAD_ACCESS (код = 1, адрес = 0x0)."
Если я нахожу в консоли po mData[whichChannel][idx]
, я получаю сообщение «error: Невозможно применить эффекты выражения: не удалось дематериализовать переменную результата: не удалось прочитать ее память».
Что здесь происходит и как его избежать? Как разработчик Objective-C/Swift, для меня это странные воды, поэтому любая помощь будет высоко оценена. Спасибо за прочтение!
EDIT: Дополнительная информация отладки во время аварии:
numFrames=1024
whichChannel=1
stride=2
idx=6 // though it's been several different numbers before at the time of crash
Вам нужно запустить это в отладчик, установить точку останова на 'OutData [я * шаг] = mData [whichChannel] [IDX];' и смотреть значения ' stride', 'whichChannel' и' numFrames'. Мы не можем видеть, что эти значения есть, поскольку они передаются в функцию. –
Привет @JamesMoore, спасибо за комментарий. См. Изменение выше. – Rogare
@Rogare ли вы избавились от проблемы? Даже у меня такая же проблема. – Vishnuvardhan