içeriği ile mp3 saklamak ve arama nasıl

5 Cevap php

Ben birden fazla mp3 dosyaları depolamak ve hangi şarkı algılamak için, şarkının bir kısmını vererek onları aramak istiyorum.

Ben mysql tüm ikili içeriği depolamak düşünüyorum ve ben içeriğe göre belirli bir şarkı aramak istediğiniz zaman şarkının bazı orta kısmını almak ve aslında MySQL ikili veri ile eşleşir.

Benim sorular şunlardır:

  1. Bu onların içeriğine göre şarkıları bulmak için makul bir yolu var mı?
  2. Sağ veritabanındaki şarkıların içeriği depolamak için ya da dosya sistemini kullanmanız gerekir mi?

5 Cevap

Bu işe gitmiyor. MP3 "kayıplı" biçimidir. Bu kodlama, böylece hemen hemen her kodlama tamamen farklı byte-bilge verilerini üretirken sürekli müziğin ince nüansları değiştirir demektir for the same song.

Ayrıca, hatta WAV gibi sıkıştırılmamış formatta, farklı hacimlerde iki özdeş kayıtları farklı bayt veri üretecektir. Yani, dosyanın içeriğinin bayt değerlerini karşılaştırarak müzik karşılaştırmak mümkün değildir.

Bir ikili karşılaştırma sadece iki exact identical copies the same MP3 dosyası için çalışacaktır. Eğer aynı ayarlarla aynı MP3 dosyasını yeniden kodlamak zaman bile artık işe yaramaz.

Müzik karşılaştıran çeşitli yaklaşımlar ancak PHP kullanılan olabilir bilgim hiçbiri mevcut, önemsiz bir konu değildir.

Eğer şanslıysanız, eşleştirme çeşit sağlayan bir web hizmeti mevcuttur. O bir şekilde ticari olmasını bekliyoruz, ama - Ben bu tür şeyleri ücretsiz olarak kullanılabilecek aşamadadır şüpheliyim.

O şarkının içeriği şarkıları bulmak için bir doğru yoldur.

Sadece eğer arama kritere olarak almak kısmı aslında o MP3 dosyası bir alıntıdır olacağından emin olabilirsiniz ... ve bu çok, çok düşüktür. Parçası farklı bir kaynaktan (aynı şarkının yani farklı bir kayıt, ya da sadece bir farklı sıkıştırılmış MP3) arasında olabilir varsa, çok daha karmaşık olduğunu audio fingerprinting hangi kullanmak gerekecek.

Doğru veritabanı veya dosya deposunda saklamak şarkılar içeriğe normal çalışacak mı?

Eğer basit bir ikili eşleştirme yaparsanız, bir veritabanı kullanılarak hiçbir nokta yoktur. (Örneğin ses parmak izi gibi) daha karmaşık bir endeksleme tekniği varsa bir veritabanı kullanarak mantıklı olabilir.

Diğerleri işaret gibi - dosyaların ikili içeriğe bakarak MP3 karşılaştırarak işe gitmiyor.

Ben benim son yıl proje için üniversitede iken Java böyle bir şey yazdı. Sana kaynak kodu göndermek için çok mutlu olurdum. Yerine maçlarda daha "şarkı X, şarkı Z'ye daha şarkı Y daha benzer olduğunu", ancak bunun doğru yönde bir adım olabilir - bu göreceli benzerlikler ele.

Ve, ne yaparsanız yapın, deneyin ve PHP bunu yapmayın lütfen. Bu analiz her MP3 için 30 30x30 matrisler - Ben kullanılan algoritma (Ben yaklaşık 3 yıl önce bu çalıştı eğer doğru hatırlıyorum) hesaplamak için bana ihtiyacı vardı. Her şarkı (benim yeni bilgisayar işi önemli ölçüde daha hızlı halletmek olabilir emin değilim) benim aksak eski makinede matrislerin bir dizi işlemek için yaklaşık 30 saniye sürdü. Ben n şarkı şarkıların her çifti arasında hesaplanan ikinci bir adım farklılıklar için bu matrisler vardı, ve üçüncü basamak m-boyutlu uzayda aşağı bu farklılıkları azaltılmış bir kere. Bu 3 adımların her beygir gücü adil bir miktar alır, ve PHP kesinlikle iş için doğru atı değil.

Için işe yarayabilecek ne PHP önyüz - I m-boyutlu uzayda her şarkının koordinatlarını saklanan basit bir arkaplana vardı nerede Ruby on Rails ile yazılmış bir queryable web uygulaması ile sona erdi, (I m seçmek oldu = 6) - özel bir şarkı veya parça verilmiş, X, daha sonra X belli bir "mesafe" içinde şarkılar hesaplayabilirsiniz

NB. Avusturya'da bir üniversitede bazı akıllı insanlar tarafından vardı - - Bu kütüphaneler iki şarkı aldı ve matrisleri Oluşturuldu - Ben yaptığım işlem mesafeleri oldu muhtemelen ben yazdım tüm kodu temelde diğerleri yazmıştı kütüphaneleri etrafında sadece bir sarıcı olduğunu işaret olmalıdır ve m-boyutlu uzaya şarkı sürü mesafeleri haritasına. Ben de ilk biraz yaptım kadar akıllı olsaydı!

Ben tam olarak yapmak için çalışıyoruz anlamıyorum, ama dizine bir MP3 koleksiyonu gidiyoruz eğer, muhtemelen yerine gerçek dosya daha (yeterli uzunlukta) bir karma depolamak için daha iyi bir fikir.

Sorun bayt içinde müzik yani, dosyanın içeriğine herhangi bir fikir vermek kalmamasıdır. Eğer (meta yazım / harf değişiklikleri gibi gürültü kurtulmak için) karşılaştırmak için bayt meta kesilmiş olsa bile, yalnızca tek bir dosya kendisi hakkında bir şeyler biliyorum. Yani eşitlik için iki özdeş dosya (yani tam çiftleri) karşılaştırabilirsiniz, ancak benzerlik için herhangi iki rasgele dosya karşılaştırın olamazdı.

Şarkı aramak için, muhtemelen dizin istiyorum kendi tags ve kullanıcıların esnek şekillerde onlara bakmak böylece bir kullanımı kolay, güzel UI odaklanabilir.

Yukarıda söylediğim gibi, aynı şarkı kodlama bağlı olarak farklı içerik bayt gösterecektir.

Ancak, bir fikir yönüne işaret, ve ben, dizine benzersiz olarak tanımlamak bazı şarkılar desenler nasıl mümkün olduğunu olurdu emin değilim. Ex için. Tüm Johnny Cash şarkıları ortak ne var? Ses, ton, bunların bir kombinasyonu? Eğer içeriğin bir kısmını olsun Ve, bunu ve maçtan aynı desen çıkarabilir. Bu ilginç bir kavram olacaktır.