Stereo ses sinyalinden vokal kısmı nasıl çıkarılır?


15

Şimdi MP3 dosyasını işliyorum ve bu sorunla karşılaşıyorum. MP3'im stereo kodlu. Ne yapmak istiyorum daha fazla işlem için ses parçası ayıklamak olduğunu (ne olursa olsun çıkış sinyalleri modu, mono veya stereo her ikisi de Tamam).

Bildiğim kadarıyla, ses MP3'teki farklı bağlantısız alt frekans bantlarına kodlanır. Sanırım kesme frekansı doğru ayarlanmış yüksek geçişli / düşük geçişli filtre ile sinyalleri vokal aralıkla sınırlandırabilirim. Ancak, sonuç bu durumda saf müzik sinyalinin parçalarını içermelidir. Veya googling yaptıktan sonra, önce arka plan sinyallerini hesaplayabileceğimi düşünüyorum (vokal kısmın faz iptali olarak adlandırılan stereo seste ortalandığı varsayılarak diğer kanaldan sinyaller ekleyerek bir kanalı ters çevirerek). Bu dönüşümden sonra sinyal mono olur. Daha sonra orijinal stereoyu, arka plan sinyalinin çıkarıldığı mono olarak birleştirmeliyim.

Etkililik göz önüne alındığında, hangisi tercih edilir (veya başka çözümler)? Eğer ikincisi, arka plan hesaplanırken (BA) veya (AB) iki kanal A ve B kullanılsın mı? İki kanalın birleştirilmesinde olduğu gibi, aritmetik ortalama yeterince doğru mu? Ya da her bir kanalı iki kat aşağı örnekleyebilir ve altörneklenmiş sinyalleri mono sonuç olarak serpiştirebilir miyim?

Teşekkür ve saygılarımla.

Yanıtlar:


21

Öncelikle, bir mp3 dosyasında verilerin nasıl kodlandığı, sıkıştırılmış etki alanı işlemeyi (oldukça aptalca) yapmayı hedeflemediğiniz sürece soru ile ilgisizdir. Böylece algoritmanızın sıkıştırılmış zaman alanı verileriyle çalışacağını varsayabilirsiniz.

Toplam / fark, vokal supresyon için çok, çok temel bir numaradır (çıkarma değil). Vokallerin stereo alanın merkezinde karıştırıldığı, diğer enstrümanların yanal olarak kaydırıldığı varsayımına dayanmaktadır. Bu nadiren doğrudur. LR ve RL aynı ses çıkarır (insan kulağı küresel bir faz kaymasına duyarsızdır) ve merkezde karışık aletler olmadan size mono bir karışım verecektir. Sorun, arka planı kurtardığınızda, bununla ne yapacaksınız? Orta (ortalama) sinyalden bastırmayı mı deneyin? Bu işe yaramayacak, (L + R) / 2 - (L - R) yapacaksınız, bu çok ilginç değil ... Bunların herhangi bir doğrusal kombinasyonunu deneyebilirsiniz (ortalama ve "merkez kaldırıldı"), hiçbir şey ondan çıkacak!

Filtreleme yaklaşımları ile ilgili olarak: sesin f0 değeri nadiren 1000 Hz'i aşar, ancak harmonikleri bunu aşabilir. En yüksek frekansın çıkarılması ünsüzlerin (özellikle sss, chhh) hoş olmayan olmasını sağlar. Bazı erkek sesleri 100 Hz'in altına düşer. Yine de 50 veya 60 Hz (bas, tekme) altında olanları güvenle kesebilirsiniz

Ses ayrımında araştırmaya değer bazı son gelişmeler:

  • Jean Louis Durrieu'nun arka plan NMF + harmonik tarak> filtre modeli. Burada Python kodu .
  • Rafii'nin arka plan çıkarımı yaklaşımı . Electro, Hip-Hop gibi çok tekrar eden desenlerle bilgisayar tarafından üretilen müzikte kodlama yapmak ve iyi çalışmak ...
  • Hsu, f0 tespit, takip ve maskelemeye dayanarak yaklaştı. "Müzik Eşliğinde Ses Çıkarma ve Ses Ayırma Şarkıları için Bir Tandem Algoritması" (erişilebilir PDF bulunamıyor).

4

Referans için teşekkürler! Summer_More_More_Tea'nın uygulaması için de ilgi çekici olabilecek davul geliştirme konusundaki çalışmalarınızdan bahsetmeyi unuttunuz . Her şey onunla ne yapmak istediğinize bağlı. Aklınızda belirli bir "son başvuru" var mı?

Pichenettes'in yukarıdaki açıklamalarına tamamen katılıyorum. Bununla birlikte, tam olarak söylemek gerekirse, bahsettiğiniz vokal artırmanın Karaoke parça üretimi üzerine Matti Ryynänen tarafından bazı çalışmalarda da sonuçları geliştirmek için kullanıldığını söylemeliyim.

Sorularınızı cevaplamak için:

Etkililik göz önüne alındığında, hangisi tercih edilir (veya başka çözümler)?

Pichenettes'in dediği gibi, ikinizin de ihtiyacınızı karşılamadığı görülüyor: alçak geçiren / yüksek geçiren filtreleme, insan sesinin harmonik yapısı (ve daha genel olarak herhangi bir "ilginç" sesin - yani sinüzoidlerin ötesindeki herhangi bir şeyin) nedeniyle başarısız olmaya mahkumdur ... ).

Eğer ikincisi, arka plan hesaplanırken (BA) veya (AB) iki kanal A ve B kullanılsın mı? İki kanalın birleştirilmesinde olduğu gibi, aritmetik ortalama yeterince doğru mu?

Yine, bahsettiğiniz ikinci yöntem işe yaramayacaktır, çünkü sadece ortadaki sinyali çıkarabilir, geri alamazsınız. Diğer bir deyişle, vokaller "merkezde" bile olsa, sadece vokal sinyali almak için basit bir matematik yoktur.

Ya da her bir kanalı iki kat aşağı örnekleyebilir ve altörneklenmiş sinyalleri mono sonuç olarak serpiştirebilir miyim?

er ... yukarıda önerildiği gibi bir mono-kanal sinyali elde etmek için kanalların ortalamasını almak mantıklıdır ve sinyalin spektral özelliklerini bozmaz (stereo sinyalin dejenere olmadığı varsayılarak). Böylece, temelde daha önce olduğu gibi aynı müzik içeriğine sahip olduğunuz bir mono sinyal elde edersiniz.

Her kanalın doğru şekilde altörneklenmesi, önce düşük geçişli bir filtre uyguladığınız anlamına gelir (davanızda örnekleme_ oranı / 4 kesme frekansı ile) ve daha sonra her 2 numuneyi güvenle alabilirsiniz. Bununla birlikte, bu şekilde altörneklenen kanalların serpiştirilmesi hakkında söylenecek çok şey yoktur: çoğu genel durumda, bu, sinyalin spektral özelliklerini bozmaktadır. Muhtemelen bunu istemiyorsun.

Aslında, düşük geçişli filtreleme işlemi ve ardından her 2 örnekte 0'a ayarlanması ve bu 0'ların Fourier alanında tutulması, yüksek frekanslı bileşenlere tutulan düşük frekanslı bileşenlerin "aynalanması" için tutulur. Örnekleme teorisi ile ilgili sinyal işleme derslerini hatırladığınızı hatırlayın: bir dizi impuls (veya diracs) ile çarpılması, Fourier alanındaki başka bir diracs dizisi ile konvülsiyon ile sonuçlanır, yani bu durumda sinyalin frekans spektrumu tekrarlanır (periyodize edilir) frekans ekseni boyunca, örnekleme oranına eşit bir süre ile.

Normalde, altörnekleme yaparken, 0'ları kaldırırsınız (çünkü yeni bir örnekleme hızı varsaydığınızdan). Ancak burada onları tutmak çok can sıkıcı ek yüksek frekans bileşenleri ile sonuçlanır. Bu sinyallerin serpiştirilmesi bunu düzeltmeyecektir.

Sonuçta, kısa cevap: bunu yapma . :-)

Sonunda, LVAICA 2012 konferansı için geliştirdiğim GUI'yi kullanmanızı da önerebilirim: bunun için bir git repo var. Ben hala hata ayıklama ve geliştiriyorum, bu yüzden yorumlarınızı bekliyoruz: D

Umarım yardımcı olur!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.