"Songify" gibi kendi vocoder sentezleyicimi programlamak istiyorum ama basit bir vocoder algoritması bulamıyorum. Belki vocoder'ın nasıl çalıştığı hakkında nerede bilgi arayacağınızı açıklayabilir veya söyleyebilirsiniz.
"Songify" gibi kendi vocoder sentezleyicimi programlamak istiyorum ama basit bir vocoder algoritması bulamıyorum. Belki vocoder'ın nasıl çalıştığı hakkında nerede bilgi arayacağınızı açıklayabilir veya söyleyebilirsiniz.
Yanıtlar:
Buradaki tüm cevapların soru ile ilgisiz olduğundan korkuyorum. Müzik prodüksiyon dünyasında vocoder olarak adlandırılanın sinyal işlemede kullanılan faz vocoder ile ilgisi yoktur . Daha da kötüsü, orijinal gönderinin referans verdiği Songify uygulaması vocoder örneği değildir. Bunu halledelim!
1. Faz vocoder
Faz ses kodlayıcı , diğer cevaplar tarafından başvurulan, sinyalin bir zaman-frekans gösterimini hesaplayarak sinyalleri (zaman-germe, zifiri değişen) zaman / aralık modifikasyonu için kullanılabilen bir sinyal işleme tekniğidir (kısa süreli Fourier Dönüşümü veya STFT) ve daha sonra sinyal çerçevelerini yerleştirme / çıkarma ve daha sonra faz bilgilerinin tutarlılığını koruma. Sesle ilişkisi sadece tarihseldir ve şu anda alt uç ses donanımında / yazılımında adım kaydırma ve zaman uzatması için kullanılmaktadır. RubberBand , bir faz-vokoderi temel alan açık kaynaklı C ++ zaman / perde değiştirme kütüphanesine bir örnektir.
2. Vocoder
Müzik üretimi alanındaki insanlar bir Vocoder'a başvurduğunda, bir sinyalin spektral zarfını (genellikle ses, modülatör denir) ayıklayan ve başka bir sinyali (genellikle taşıyıcı olarak adlandırılan zengin bir synth dokusu) filtreleyen bir cihaza başvururlar. yanıtı çıkarılan spektral zarf olan bir filtreyle. Ortaya çıkan ses örneği için , birkaç saniye içinde Kraftwerk Trans Europe Express veya Alan Parsons'ın The Raven Projesi'ni dinleyin . Ortaya çıkan efekt, taşıyıcı sinyalin çaldığı melodiye veya akorlara uygulanan vokal benzeri bir tınıdır ve bir sesin bir sentezleyici aracılığıyla konuşulduğu hissini verir.
Vocoder başlangıçta analog bir cihazdır, yüksek Q ile bir düzine veya daha fazla bant geçiren filtrenin iki bankı ile uygulanmıştır. Modülatör sinyali ilk filtre bankasından gönderilir ve tüm alt bant sinyallerinin genliği bir zarf takipçileri dizisi. Paralel olarak, taşıyıcı sinyali başka bir filtre bankasından gönderilir. Her alt bant, zarf takipçileri tarafından verilen kazançlarla güçlendirilir (VCA ile). Analog okursanız, burada bir vocoder kanalının şemalarına Jurgen Haible'ın yaşayan Vocoder'ından bakabilirsiniz.- modülatör sinyal filtresinin üstünde, altta taşıyıcı filtre ve VCA. Vocoderların yazılım uygulamaları buna yakın kalır, çünkü müzik yapımcıları vocoder'ların klasik analog cihazlar gibi ses çıkarmasını beklerler! Ancak, "vintage" cihazlara sadakat istemiyorsanız ve 40 biquad'den daha ucuz bir şey istiyorsanız, aynı sonucu elde etmenin başka bir yolu, tüm kutuplu bir filtreyi tahmin etmektir (ne kadar yakın olduğunuza bağlı olarak 8 ila 20 sipariş) orijinal sese ulaşmak için) modülatör sinyalinden (AR-modelleme); ve ardından bu filtreyi taşıyıcıya uygulayın. Buradaki tipik sorun, filtre katsayılarınızı her 20 ms'de bir güncellemeniz gerektiğidir; bu nedenle, ani katsayı güncellemelerini işleyen tüm kutuplu filtrenin bir temsiline ihtiyacınız vardır.
3. Otomatik ayar ve perde yeniden eşleme
Songify'ın yaptığı şudur: kaydedilen sesin prozodi (pitch konturu) çıkarın ve ortaya çıkan pitch konturunun bir hedef melodiyle eşleşeceği şekilde değiştirin. Songify sadece hedef değere iterken, otomatik ayarın perdeyi en yakın müzikal doğru yarı tona "yuvarlaması" farkıyla biraz benzer.
Buradaki iş algoritmaları, geleneksel adım kaydırma zaman uzamasından çok farklıdır, çünkü ses sinyali monofoniktir ve kaynak filtre modeline iyi uyar. Time-Domain Pitch-Synchronous-Overlap-Add (TD-PSOLA) gibi yaklaşımlar, ses perdesini genel zaman streç algoritmalarından (genellikle faz-vokoderlerle yapılır) şeffaf bir şekilde değiştirmek için hem hesaplama hem de kalite açısından çok daha etkilidir. ). Bunlar, örneğin, Songify'ın aksine, sentezlenmiş bir cümlenin prozodiğini değiştirmek için konuşma sentezinde kullanılır! Otomatik ayar ayrıca bu tür zaman alanı yöntemlerine de dayanır (giriş dalga formunun tüm döngülerini tespit etmek ve yeniden örneklemek).
Dan Ellis'in bu sayfada çok iyi bir Matlab örneği var: http://www.ee.columbia.edu/~dpwe/resources/matlab/pvoc/
İşte Mathworks'teki sözde kod için bir bağlantı.
İşte bu bağlantı DSP Boyutları en algoritmalarının bir açıklaması.
Bir FFT selesinin merkez frekansı vardır. Bu tam bölme frekansındaki herhangi bir sinüzoid, tam olarak 1 FFT çerçevesini birbirinden ayrılan 2 referans noktasına referansla aynı faza sahip olacak veya 2 referans noktası veya 2 FFT çerçevesi için rastgele bir mesafe mesafesinden hesaplanabilecek bir delta fazına sahip olacak (belki de çakışıyor) . Bir faz ses kodlayıcısının temel fikri, her FFT kutu frekansını yakındaki bir frekansa hafifçe ayarlamaktır, böylece FFT kutu merkezi frekansları yoksa, bu frekanstaki bir sinüzoit, 2 ofset FFT çerçevesinin referans noktalarında tespit edilen fazla eşleşir.
Bu ayarlanmış frekanslar daha sonra, orijinal spektrum dizisi frekans veya zaman alanlarında ölçeklendirilmiş olsa bile, yeniden sentezlenen kareler arasında daha fazla süreklilik sergileyen bir dalga formunun tanecikli bir yeniden sentezi için kullanılabilir. Bu ofset frekansları aynı zamanda frekans tahmini için ya da bir adım tahmini yönteminin bir parçası olarak da kullanılabilir. Ses perdesi tahmini ve ses resentezi ile, kişi bir perdede ses alabilir ve başka bir perdelik dışında neredeyse aynı olan bir şeye yeniden sentez uygulayabilir.
Aşağıdaki makalede, kısa süreli Fourier dönüşümü (STFT) tabanlı bir faz vokoderi ve ses sinyallerinin zaman ve perde modifikasyonlarını ele almak için bir perde senkronize çakışma ekleme (PSOLA) tekniği açıklanmaktadır:
Moulines, E. & Laroche, J.
" Konuşmanın zift ölçeğinde ve zaman ölçeğinde modifikasyonu için parametrik olmayan teknikler ",
Konuşma İletişimi, 1995.
( google bilgin bağlantılarından bazı PDF sürümleri mevcuttur )