2013-06-26 35 views
6

Çalınan bir piyano parçası için bir müzik parçasını üretebilen bir sistem uygulamaya çalışıyorum, yani, gerçek zamanlı bir transkripsiyon olmalı ve kaydedileninki değil. parça. Gerçek zamanlı müzik transkripsiyonu

Şimdiye kadar FFt on MATLAB kullanarak, wav dosyalar üzerinde test ettik, ancak gerçek zamanlı gelince, sistem gerçekten-gerçekten hızlı olması gerekiyor.

Ben, tahta ait türünü kullanabilirsiniz yaklaşımın ne tür üzerinde herhangi bir öneriniz (I Arduino kullanarak düşündüm). Ben doğrudan Kullanabileceğim yaklaşımın ne tür C

için
+1

1 İlginç proje henüz müzik yazıyla birlikte işe yaramadı, ama bence küçük parçalar halinde parça kaydetmek ve bunları transkripsiyonu gerekecektir. –

+0

Bu tür bir yaklaşımın sadece bağımsız notları transkripsiyon için uygun olacağını tahmin ediyorum. Transkripsiyon akorları muhtemelen iyi sonuçlar getirmeyecektir. Bir midi klavye çok daha kolay olurdu. –

+0

Çok ilginç bir proje. Mevcut fft tabanlı uygulamanızın ne kadar hızlı çalıştığını söyleyebilir misiniz? Fft'nin çok hızlı bir şekilde O (n log (n)) olduğunu sanmıştım. – Oli

cevap

1

herhangi bir öneriniz dönüştürerek yerine benim MATLAB code transfer etmek istiyorum, çünkü kullanabilirsiniz, kartın tipi (I Arduino kullanarak düşündüm). Ben doğrudan C.

dönüştürerek yerine benim MATLAB kodu transfer etmek istiyorum, çünkü kullanabilirsiniz

Sen aklıma gelen projenize farklı yaklaşımlar olabilir: Orada İlk

  1. çalınan notaları hız ve konum ile bir midi arabiriminden çıkarabilen elektronik bir cihaza sahip bazı piyanolardır. Çok fazla DIY olmasa da, oynanan notaları izlemek için en doğru ve hızlı çözümdür. Bilgisayar tarafında, sadece bir midi arabirimine (bir arduino kullanılarak kolayca yapılabilir) ve MIDI notlarını bir skora dönüştüren bir yazılıma sahip olmanız gerekir; Daha sonra, bu davranışı, piyanonun klavyesini hızını ölçebilecek ve hangi nota çalındığını algılayan sensörlere bağlayarak taklit edebilirsiniz. Kullanabileceğiniz birçok strateji vardır (mekanik üzerindeki lazerleri kullanarak, basınç şalterlerine ...), her şey yapmaya hazır olduğunuz yatırıma bağlıdır; Orada bir arduino (mega veya vadesi gibi) iyi bir çözüm olabilir.
  2. FFT'ler hakkında konuştuğunuz gibi, piyanonun sesini kaydetmek ve anahtarları tespit etmek istediğinizi farz ediyorum. Orada müzik araştırmaları ile ilgili en güncel bilgilere ulaştınız, karşılaşacağınız problem, strategies specific to piano olmasına rağmen, yine de çok aktif bir araştırma alanı olan multiple f0 detection inpolyphonic music.
  3. Transkripsiyon için sadece tek sesli algılama yaptığınızı varsayalım. Sorun, Arduino'da bulunan Analog-Dijital-Dönüştürücünün sadece berbat olması, 10bitlik bir tanımı vardır ki bu da yararlı bir şey bulmak için çok düşük. Arduino DUE ile, 16 kanallı 12 bit 1Msps ADC'ye sahip olduğundan biraz daha fazla tanımınız olabilir. İyi bir transkripsiyon için hala çok fazla değil. Yani ya 16bit 1Msps olan Linear LTC2383-16 gibi bir harici ADC kullanmanız gerekecek ve oynamaya başlamak için minimum bir SPI arayüzüne sahip olacaksınız. Bunun ardında doğru mikrofonu bulmanız ve ADC ile mikrofon arasında iyi elektronikler oluşturmanız (çok fazla şey bilmiyorum) gerekir.
  4. Son olarak, küçük bir bilgisayarı (Beaglebone veya RaspberryPI 5 gibi) almak gerçekten çok iyi bir USB ADC/ses kartını takmak ve bu kartı transkripsiyon yoluyla pipetlemek için kullanmak daha kolay olmaz mı? Matlabınızı mutlu bir şekilde çalıştırabilmeniz için yeterli işlemciye sahip bir bulut sunucusunda (google appengine veya AWS gibi) yazılımınızı çalıştırabilirsiniz.

İyi bir gerçek zaman ve müziğin gömülü kopyalamasını yapmak için en iyi çözüm ilk çözümdür (ya da gerçekten DIY'e gitmek istiyorsanız ikinci). Eğer gerçekten "hava" arayüzlerinden geçmek istiyorsanız, iyi çözümün beşinci olduğunu düşünüyorum.

Ve son olarak, kodla ilgili olarak, kodunuzu Matlab'dan Python'a dönüştürmenizi tavsiye ederim (eğer C/C++ kodu yazmak istemiyorsanız) çok daha hızlı çalışacaktır. Yani Matlab'ın ne kadar kötü çalıştığını anlayabiliyorsunuz, IRCAM için çalışırken Matlab kaynak kodunu C++ kaynak koduna çeviren bir araç yazdım ve bir kez derlenmiş olan sonuç 40 kat daha hızlıydı.

HTH

İlgili konular