Tôi đang làm việc để nhận âm thanh vào iPhone dưới dạng tôi có thể chuyển nó sang thuật toán phân tích (C++). Có, tất nhiên, nhiều tùy chọn: hướng dẫn AudioQueue at trailsinthesand giúp mọi thứ bắt đầu.Làm thế nào để lấy mảng dữ liệu âm thanh nổi từ AudioQueueRef trong iOS?
Cuộc gọi lại âm thanh, mặc dù, cung cấp cho AudioQueueRef
và tôi đang tìm tài liệu của Apple mỏng về mặt này của sự vật. Các phương thức tích hợp để ghi vào một tệp, nhưng không có gì bạn thực sự nằm trong các gói để xem dữ liệu.
Tôi cần dữ liệu. Tôi không muốn viết bất cứ điều gì vào một tập tin, đó là những gì tất cả các hướng dẫn - và thậm chí cả các đối tượng I/O tiện lợi của Apple - dường như đang nhắm đến. Của Apple AVAudioRecorder
(tức giận) sẽ cung cấp cho bạn mức độ và ghi dữ liệu, nhưng không thực sự cung cấp cho bạn truy cập vào nó. Trừ khi tôi bỏ lỡ điều gì đó ...
Làm cách nào để thực hiện việc này? Trong đoạn mã dưới đây có inBuffer->mAudioData
gần giống nhưng tôi không thể tìm thấy thông tin nào về định dạng 'dữ liệu' này hoặc cách truy cập nó.
AudioQueue Callback:
void AudioInputCallback(void *inUserData,
AudioQueueRef inAQ,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp *inStartTime,
UInt32 inNumberPacketDescriptions,
const AudioStreamPacketDescription *inPacketDescs)
{
static int count = 0;
RecordState* recordState = (RecordState*)inUserData;
AudioQueueEnqueueBuffer(recordState->queue, inBuffer, 0, NULL);
++count;
printf("Got buffer %d\n", count);
}
và mã để viết các âm thanh vào một tập tin:
OSStatus status = AudioFileWritePackets(recordState->audioFile,
false,
inBuffer->mAudioDataByteSize,
inPacketDescs,
recordState->currentPacket,
&inNumberPacketDescriptions,
inBuffer->mAudioData); // THIS! This is what I want to look inside of.
if(status == 0)
{
recordState->currentPacket += inNumberPacketDescriptions;
}
mảng "mẫu" này, bao nhiêu giây lấy mẫu chứa? đây là biểu diễn nhị phân của âm thanh đã ghi? –
"mẫu" chứa một giá trị mẫu của bộ đệm. Độ dài là giây phụ thuộc vào kích thước bộ đệm và tốc độ lấy mẫu: 512 mẫu tại 44.1kHz là 512/44100 = 0,011609977 giây. – buildsucceeded