سؤال

أحاول التقاط الصوت باستخدام الطريقة الموجودة في هذا السؤال;مع AVCaptureSession وAVCaptureAudioDataOutput.يبدو أن هذا يعمل بشكل جيد مع وجود إزعاج واحد:لا يعمل في جهاز المحاكاة.يعمل كل من AVAudioRecorder والتطبيق التجريبي القديم SpeakHere بشكل جيد في جهاز المحاكاة، باستخدام الميكروفون الداخلي الموجود على جهاز MacBook Pro الخاص بي.

المشكلة هي أن [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] يعطي null في جهاز المحاكاة، لذلك يفشل الكود اللاحق مع الرسالة (عندما يحاول إضافة null كمدخل إلى 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:].'

هل هناك طريقة سهلة لتشغيل هذا في جهاز المحاكاة؟

هل كانت مفيدة؟

المحلول

ال AVCaptureDevice لم يتم تنفيذ الفصل الدراسي على جهاز المحاكاة (حتى كتابة هذه السطور على الأقل، ربما سيتغير في المستقبل).

حاول على سبيل المثال.

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

والتي ستنتج قائمة فارغة على جهاز المحاكاة (ولكنها ستدرج جميع أجهزة الالتقاط إذا تم تجميعها وتشغيلها على iDevice حقيقي).

يجب اختبار هذا النوع من الوظائف على جهاز حقيقي على أي حال (نظرًا لاعتماد تفاصيل الأجهزة، مثل زمن الوصول وتنسيقات العينات المدعومة)، لذلك لأغراض الاختبار، ليس من المهم أن يكون هناك دعم للجهاز في جهاز المحاكاة.ولكن سيكون من الجيد حقًا الحصول عليه لأغراض العرض التوضيحي.

لتشغيل العرض التوضيحي على جهاز المحاكاة، ربما يمكنك الاستهزاء بإدخال الالتقاط.إذا كنت تريد حقًا قضاء بعض الوقت في ذلك، فربما يمكنك الرجوع إلى AVAudioRecorder لجهاز المحاكاة (لم أستخدم AVAudioRecorder مطلقًا، لذلك لا يمكنني معرفة ما إذا كان يعمل على جهاز المحاكاة أم لا، ولكن من سؤالك قرأت أنه يعمل).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top