سؤال

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

1) اقطع ملف الصوت في كتل صغيرة جدًا (قل 1/10 ثانية)

2) قم بتشغيل FFT على كل كتلة

3) تحول المرحلة مساحة التردد لأعلى أو لأسفل اعتمادًا على المفتاح الذي أريده

4) استخدم FFT معكوس لإرجاع كل كتلة إلى المجال الزمني

5) الغراء جميع الكتل معًا

لكنني الآن أتساءل عما إذا كانت الكتل المحولة لن تكون مستمرة عندما أحاول أن تعيدها معًا. هل هناك أفكار كيف يجب أن أفعل هذا لضمان الاستمرارية ، أو هل أنا فقط قلق بشأن لا شيء؟

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

المحلول

تداخل عينات الوقت لكل كتلة بمقدار النصف بحيث تتكون كل كتلة بعد الأولى من عينات N/2 الأخيرة من العينات السابقة وعينات جديدة N/2. تأكد من تطبيق بعض النوافذ على العينات قبل التحويل.

بعد تحويل التردد ، قم بإجراء FFT معكوس واستخدم عينات N/2 الأوسط من كل كتلة. ستحتاج إلى ضبط الربح النهائي بعد IFFT.

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

نصائح أخرى

للكلام قد ترغب في النظر إليه Psola - هذه خوارزمية شعبية ل pitch-shifting و/أو time stretching/compression وهو أكثر تطوراً قليلاً من طريقة التداخل الأساسي ، ولكن ليس أكثر تعقيدًا.

إذا كنت بحاجة إلى معالجة عينات غير يتحدث ، مثل الموسيقى ، فهناك العديد من الاحتمالات, ، ومع ذلك ، فإن نهج FFT/Modify/IFFT المتداخل المذكور في إجابات أخرى هو أفضل رهان.

وجدت هذا المقال العظيم حول هذا الموضوع ، لأي شخص يحاوله في المستقبل!

قد تضطر إلى العثور على عبور صفري بين الكتل لتغضف الموجة الفردية مرة أخرى. وإلا فقد تجد أنك تحصل على نقرات أو ملوثات العضوية الثابتة بين الكتل.

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