Tôi đang cố đọc dữ liệu âm thanh qua AudioQueue. Khi tôi làm như vậy, tôi có thể xác minh rằng độ sâu bit của tệp là 16 bit. Nhưng khi tôi nhận được dữ liệu mẫu thực tế, tôi chỉ thấy giá trị từ -128 đến 128. Nhưng tôi cũng thấy dữ liệu xen kẽ tìm kiếm đáng ngờ, điều này khiến tôi khá chắc chắn rằng tôi không đọc dữ liệu chính xác.Đọc dữ liệu đệm âm thanh với AudioQueue
Vì vậy, để bắt đầu, tôi có thể xác minh rằng tệp nguồn là tệp 44100, 16 bit, mono wav.
đệm của tôi được phân bổ thusly:
char *buffer= NULL; buffer = malloc(BUFFER_SIZE); assert(buffer);
Tất cả các giá trị có liên quan được thiết lập và sử dụng trong:
AudioFileReadPackets(inAudioFile,false,&bytesRead,NULL,packetNum,&numPackets,buffer);
Là một kiểm tra, chỉ để tôi có thể xem dữ liệu lấy ra, tôi chạy :
for(int i=0;i<BUFFER_SIZE;i++){ NSLog(@"%i", buffer[i]); }
Bây giờ, tôi biết rằng tệp nguồn của tôi cao nhất ở mọi nơi, nhưng giá trị tôi chỉ thấy tối đa ở -128 một thứ 128. Vì đây là tệp 16 bit, tôi hy vọng rằng các giá trị thay vào đó sẽ là -32768 đến 32768.
Ngoài ra, có vẻ như có hai mẫu trong dữ liệu. Dưới đây là ví dụ về dữ liệu được trả lại:
70 -13 31 -11 -118 -9 -15 -7 116 -4 31 -1 28 1 84 2 -123 3 -97 4 110 5 54 6 126
Bây giờ hãy xem mọi hàng khác bắt đầu bằng hàng thứ hai: -13. Xem cách nó tăng, không đồng đều, nhưng ít nhất là suôn sẻ? Các hàng được đánh số lẻ không ở bất kỳ đâu gần trơn tru.
Suy nghĩ đầu tiên của tôi là đây là dữ liệu âm thanh nổi xen kẽ, nhưng không, nó chỉ là một kênh, vì vậy không nên có bất kỳ sự xen kẽ nào, đúng không?
Dự đoán tốt nhất của tôi là tôi chỉ đọc dữ liệu không chính xác, vì vậy dữ liệu mẫu đang được trải rộng trên hai lần trả về. Bất kỳ ý tưởng làm thế nào để đọc nó một cách chính xác?
Cảm ơn bạn đã đọc qua toàn bộ câu hỏi và cho bất kỳ thông tin chi tiết nào bạn có thể cung cấp.
Cảm ơn Peter lần nữa! –