Я пишу класс, который открывает AudioQueue и анализирует его характеристики, а затем при определенных условиях может начинать или заканчивать запись файла из этого AudioQueue, который уже создан. Это мой код (полностью основанный на SpeakHere), который открывает AudioQueue, ничего не записывая в tmp:
void AQRecorder::StartListen() {
int i, bufferByteSize;
UInt32 size;
try {
SetupAudioFormat(kAudioFormatLinearPCM);
XThrowIfError(AudioQueueNewInput(&mRecordFormat,
MyInputBufferHandler,
this,
NULL, NULL,
0, &mQueue), "AudioQueueNewInput failed");
mRecordPacket = 0;
size = sizeof(mRecordFormat);
XThrowIfError(AudioQueueGetProperty(mQueue, kAudioQueueProperty_StreamDescription,
&mRecordFormat, &size), "couldn't get queue's format");
bufferByteSize = ComputeRecordBufferSize(&mRecordFormat, kBufferDurationSeconds);
for (i = 0; i < kNumberRecordBuffers; ++i) {
XThrowIfError(AudioQueueAllocateBuffer(mQueue, bufferByteSize, &mBuffers[i]),
"AudioQueueAllocateBuffer failed");
XThrowIfError(AudioQueueEnqueueBuffer(mQueue, mBuffers[i], 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
mIsRunning = true;
XThrowIfError(AudioQueueStart(mQueue, NULL), "AudioQueueStart failed");
}
catch (CAXException &e) {
char buf[256];
fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
catch (...) {
fprintf(stderr, "An unknown error occurred\n");
}
}
Но мне немного неясно, как написать функцию, которая будет сообщать этой очереди «с этого момента до сигнала остановки, начните записывать эту очередь в tmp в виде файла». Я понимаю, как сказать AudioQueue записывать в виде файла во время его создания, как установить формат файлов и т. Д., Но не как сказать, чтобы он запускался и останавливался в среднем потоке. Большое спасибо за любые указатели, спасибо.