для приложения для изменения голоса в iphone (цель c), я пытаюсь взять дискретизированные целочисленные значения из буфера звуковой очереди записи, обрабатывать их в функции и записывать измененные значения обратно в буфер воспроизведения. В настоящее время я использую что-то вроде этогоКак извлечь целые образцы из буфера очереди аудио и записать измененные образцы назад?
AudioBuffer audioBuffer = bufferList->mBuffers[0];
int bufferSize = audioBuffer.mDataByteSize/sizeof(SInt32);
SInt32 *frame = audioBuffer.mData;
SInt32 signalInput[22050];
for(int i=0; i<bufferSize; i++) {
SInt32 currentSample = frame[i];
*(signalInput +i) = currentSample;
}
для извлечения значений выборок и, кажется, работает довольно отлично (signalinput должен быть целевой вектор для записи целых образцов). , но запись их обратно в буфер по-прежнему является проблемой ... Я искал документацию и много форумов, чтобы найти решение, но еще не удалось.
так идентификатор очень благодарен за любые советы, заранее спасибо Лукаш
Спасибо за ваш быстрый ответ. - Часть записи уже работает. Я хотел каким-то образом изменить обратный вызов, чтобы изменить записанные образцы, прежде чем записывать их в файл, например. Как бы то ни было, возможно ли это, и в случае, если это так, как я могу напрямую обращаться к записанным образцам звукового буфера (независимо от аудио-очереди или аудио-единицы). – Lukas
Убедитесь, что типы данных PCM, которые вы указываете, получаете и используете, являются согласованными. Вы просили 16 или 32-битные образцы? Целое или плавающее? Большой или малодушный? и т. д. – hotpaw2
ОК, спасибо. Я проверю это немедленно. Но в принципе, функция, заявленная выше, правильная ?! Если это так, как я могу записать значения (тип которых когда-либо) обратно в звуковой буфер. Я не смог найти какой-либо образец кода в любом месте ...? – Lukas