تطبيق iPhone النهائي: إضافة ميزة جديدة. نظام تسجيل النظام ثم يكون قادرا على تشغيل

StackOverflow https://stackoverflow.com/questions/962252

سؤال

لقد أنشأت للتو تطبيق طبل. يقوم المستخدم بنابليات على الأزرار الفردية التي تزيد صوتا قصيرا للعب باستخدام الجهاز من AudioToolbox. أود الآن إضافة uibutton التي تقول "سجل"، وعند النقر، ستسجيل جميع الأنظمة التي يتم تشغيلها، ثم عند الضغط على زر الإيقاف؛ يجب أن يكون البرنامج قادرا على تشغيل الصوت.

كيف أذهب عن القيام بذلك؟! عملية البرنامج بأكملها القدرة على تسجيل الأصوات القصيرة التي يقوم المستخدم بتشغيل النقر على المناطق الفردية التي ضربها؟!

أخبرونى من فضلكم

شكرا

بافان

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

المحلول

أنا لست على دراية بأجهزة الصوت داخل iPhone نفسه، ولكن نظرا لأنه لا يعرض أي إجراءات توليف داخلية، فلن أتفاجأ إذا لم يكن من الممكن التقاط الصوت الخارجي لإعادة المعالجة.

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

مع ضرب الطبول، كنت بحاجة إلى إلحاق nsmutablerray. تعتمد العينة أدناه على DrumType (علامة لزر الطبل الذي يتم الضغط عليه على سبيل المثال)، و DrumNextDelay وهو التأخير (nstimeInterval) إلى الأسطوانة التالية. من الواضح أن هناك طرق أخرى لمعالجة هذا، ولكنها مجرد مثال.

يمكن تنفيذ نسخة تقريبية من التشغيل عن طريق استدعاء الطلب بشكل متكرر مع الفاصل الزمني التالي، شيء مثل ما يلي:

- (void) startPerformance {
self.drumIndex = -1;
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:0];
}

- (void) playDrumBeat {
self.drumIndex++;
[self playDrum:[[drumBeats objectAtIndex:self.drumIndex] drumType]];
[self performSelector:@selector(playDrumBeat) withObject:nil afterDelay:[[drumBeats objectAtIndex:self.drumIndex] drumNextDelay]];
}

يمكن أن يكون هذا عرضة لقضايا توقيت مع نظام التشغيل، لكنني سأتابع شيئا مثل هذا من أجل قطع أول ومعرفة ما إذا كان يعمل.

بارني

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