2012-03-15 27 views
7

Tôi đang cố gắng ghi lại âm thanh, sử dụng phương thức trong this question; với AVCaptureSession và AVCaptureAudioDataOutput. Điều này dường như làm việc tốt với 1 sự bất tiện: nó không hoạt động trong trình mô phỏng. Cả AVAudioRecorder và ứng dụng demo SpeakHere cũ tốt, hoạt động tốt trong trình mô phỏng, sử dụng micrô bên trong trên MacBook Pro của tôi.AVCapturePhiên cho âm thanh trong trình mô phỏng

Vấn đề là [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] cho null trong mô phỏng, code để sau này không thành công với thông điệp (khi nó cố gắng thêm null làm đầu vào cho AVCaptureSession):

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Can't add <AVCaptureDeviceInput: 0x9138b40 [(null)]> because the device does not support AVCaptureSessionPresetHigh. Use -[AVCaptureDevice supportsAVCaptureSessionPreset:].' 

Có một cách dễ dàng để có được điều này để làm việc trong trình mô phỏng?

+0

Tôi không biết tại sao thiết lập AVCaptureSession không hoạt động, tuy nhiên nếu bạn không nhất thiết phải kiểm tra bản ghi trên trình mô phỏng nhưng chỉ trên thiết bị, bạn vẫn có thể loại trừ phần ghi trên iOS-Simulator bằng cách sử dụng: # nếu TARGET_IPHONE_SIMULATOR // Mã mô phỏng ở đây #else // Mã "thiết bị iOS" thực tại đây #endif Điều này sẽ ngăn chặn sự cố ứng dụng trên trình mô phỏng. – Markus

Trả lời

14

Lớp AVCaptureDevice không được triển khai trên trình mô phỏng (vì ít nhất bằng văn bản này, có thể nó sẽ thay đổi trong tương lai).

Hãy thử ví dụ:

NSLog(@"%@", [AVCaptureDevice devices]); 

sẽ tạo danh sách trống trên trình mô phỏng (nhưng sẽ liệt kê tất cả thiết bị chụp nếu được biên dịch và chạy trên iDevice thực).

Loại chức năng này cần được kiểm tra trên thiết bị thực (do phụ thuộc phần cứng, chẳng hạn như độ trễ và định dạng mẫu được hỗ trợ), vì vậy cho mục đích thử nghiệm, điều đó không quan trọng để hỗ trợ thiết bị trong trình mô phỏng . Nhưng nó sẽ thực sự tốt đẹp để có nó cho mục đích demo.

Để có bản trình diễn chạy trên trình mô phỏng, có thể bạn có thể giả lập đầu vào chụp. Nếu bạn thực sự muốn dành thời gian cho nó, có thể bạn có thể dự phòng trên AVAudioRecorder cho trình mô phỏng (tôi chưa bao giờ sử dụng AVAudioRecorder, vì vậy tôi không thể biết nó có hoạt động hay không hoạt động trên trình mô phỏng, nhưng từ câu hỏi của bạn mà tôi đọc nó có).

+2

Đó là một sự xấu hổ thực sự. Tôi đã dự kiến ​​(hy vọng) rằng AVAudioRecorder được xây dựng trên đầu trang của AVCaptureSession, vì vậy tôi đoán đây không phải là trường hợp. Tôi đồng ý rằng cuối cùng tôi muốn thử nghiệm công cụ này trên một thiết bị, nhưng trong chu kỳ phát triển lặp đi lặp lại nó sẽ là tuyệt vời nếu tôi chỉ có thể sử dụng giả lập. – Claude

+0

Vì vậy, tôi khuyên bạn nên ghi lại âm thanh (sử dụng thiết bị thực, tùy thuộc vào loại ứng dụng đó) và #ifdef trong phát lại tĩnh của tệp đó khi sử dụng trình mô phỏng. – Krumelur

+0

Điều này đã thay đổi, nó không còn xuất ra một mảng trống. Tôi đang sử dụng Xcode 5.0.2. Trình mô phỏng iOS iOS 5.0 trả về 2 thiết bị: Camera trước, Camera sau. – neoneye

Các vấn đề liên quan