سؤال

وأنا أحاول أن تشغيل ملف صوت من برنامج اي فون.

وهنا رمز:

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );

وأول NSLog هو للتأكد من أن لدي الوصول إلى الملف (فعلت)، وNSLog الثاني هو لإظهار URL الملف، وNSLog الثالث يعود -1500 "حدث خطأ غير محدد."

لوNSLog الثانية، وأحصل على الإخراج التالية:

وملف: // المضيف المحلي / المستخدمين / ألن / المكتبة / التطبيق 敲 慬 楴 敶 瑓 楲 杮 يمكن upport / اي فون 蒠 ꁻ ތ Ā ⾅ 獕 牥 ⽳ 污 湡 䰯 扩 慲 祲 䄯 灰 楬 慣 楴 湯 匠 灵 潰 瑲 椯 桐 湯⁥ 楓 畭 慬 潴 ⽲ 獕 牥 䄯 灰 楬 慣 楴 湯 ⽳ 䙂 㕅 㡂 㤱 䌭 䐳 ⴸ 䐴 䙃 㠭 ㍃ⴷ 䍁 ㈶ 㠵 䙁 㤴 ㈰ 䰯 捯 瑡 䵥 ⹥ 灡 ⽰ 汰 祡 挮 晡 imulator / المستخدم / تطبيقات / BFE5B819 -C3D8-4DCF-8C37-AC6258AF4902 / LocateMe.app / play.caf

وغير ذلك إما نتيجة لبلدي سوء فهم لطريقة "صفا"، أو هذا يساهم في المشكلة.

وأي فكرة عما يحدث خطأ؟

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

المحلول 3

واستكمالا في هذا الشأن.

وحصلت مفاتيحي للسماح لي لتشغيل التطبيق الخاص بي على الجهاز.

ولقد وجدت أن ملفي .caf عبت بنجاح عندما ركض التطبيق على الجهاز.

وحاولت بعد ذلك البدائل المختلفة.

وملف الرعايا التي هي 60 ثانية فشلت طويلة للعمل على جهاز محاكاة والجهاز.

وملف الرعايا التي هي 5 ثوان طويلة سوف تعمل على جهاز محاكاة، ولكن ليس على الجهاز.

وملف .aiff الذي يعمل 5 ثوان طويلة على جهاز محاكاة والجهاز.

وسيكون من الجيد أن نعرف بشكل قاطع ما محاكاة والجهاز والتحقق حول الملف عندما يتم تمرير ذلك إلى AudioServicesCreateSystemSoundID

نصائح أخرى

والمعلمة الأولى لNSLog هي سلسلة الشكل؛ كنت تمر [URL description] كسلسلة الشكل إلى استخدام الثاني من NSLog. وهذا أمر سيئ، لأنه إذا وصف URL يحتوي على أية أحرف % بعد ذلك سوف يختتم طباعة الاشياء بشكل عشوائي من المكدس.

وبدلا من ذلك، كتابة

NSLog(@"%@", URL);

وأنت لا تحتاج حتى إلى استخدام -description هنا. سوف NSLog استدعاء لانها لكم تلقائيا ل%@ يعني "كائن" وليس "لNSString"، وانها ذكية بما فيه الكفاية لفعل الشيء الصحيح بالنسبة لك.

وبالإضافة إلى ذلك، يبدو أن محاكاة فون لا يرغب في اللعب (systemSound) يبدو أكثر من 5 ثواني في الطول. كان لي نفس المشكلة كما من تطبيقات تقريبا دائما تلعب البدء systemSound.

واحدة من التطبيقات كنت أعمل على جهاز محاكاة لن تشغيل الصوت ولكن سيكون الجهاز. في وقت لاحق وجدت أن هناك بعض القيود غريب على جهاز محاكاة والطريقة التي يتعامل بها مع الأصوات. لقد قدمت خلل مع أبل. نأمل أن يكون هذا العنوان مع الافراج عن اي فون SDK 3.0.

وحاولت الشيء نفسه مع طلبي أن يلعب يبدو على ما يرام. لا تلعب الأصوات في محاكي وعندما أحاول NSLog عنوان URL، وأحصل على نفس القمامة، وأنت EXC_BAD_ACCESS على أعلى من ذلك. عندما كنت تسجيل URL على الجهاز، وURL على ما يرام، ولكن يمكنني الحصول EXC_BAD_ACCESS ذلك. عندما تسقط قطع الأشجار، ويبدو اللعب وكل شيء يعمل. إذا كان شخص ما يمكن أن يفسر هذا السلوك سأكون ممتنا. أما بالنسبة لمشكلتك، فما استقاموا لكم فاستقيموا إسقاط قطع الأشجار ومحاولة رمز على الجهاز.

استخدم "AVAudioPlayer" الطبقة لتشغيل ملفات .caf

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