Soru:
Pioneers Rekordbox yazılımı için bir EDB veritabanı dosyasını ters çevirmeye yardım edin
Evan Purkhiser
2014-05-11 17:21:30 UTC
view on stackexchange narkive permalink

Pioneers Rekordbox yazılımı, DJ'ler için bir müzik yönetim aracıdır. Özelliklerinden biri, müzik dosyaları için BPM tespitidir. Maalesef bu bilgiyi ID3 etiketlerinin BPM çerçevesine yazmıyor ve bunun yerine algılanan BPM'yi kendi veritabanı dosyalarında tutuyor.

Ağımı daha iyi yönetmeme yardımcı olacak bir CLI aracı yazıyorum müzik ve yapmak istediğim şeylerden biri de, BPM verilerini her şarkı için rekordbox veritabanından çıkarmak.

Guntram Blohm'un işaret ettiği gibi, BPM neredeyse kesinlikle ikisinde depolanmıyor ANLZ dosyaları. Bunun yerine, Rekordbox 'database.edb' dosyasında depolanıyor gibi görünüyor. Buraya [1] BPM '170' ile bir parça içeren örnek bir edb dosyası yükledim.

Bu forum başlığına [2] göre edb biçimi değil açık bir format.


Biraz daha araştırmadan sonra, gömülü uygulamalarda kullanılmak üzere tasarlanmış tescilli, yüksek performanslı bir SQL veritabanı gibi görünüyor. (DAHA FAZLA araştırmadan sonra, veritabanına 'DeviceSQL' adı verilir . Orijinal yazarlar Quora'nın bu konudaki gönderisini okuyun). Tersine çevirmesi kolay bir şey gibi görünmüyor :(

BPM bilgilerini rekordbox kitaplıklarından çıkarmak isteyen herkes için: Kullanabileceğiniz bir XML dışa aktarımı olduğu ortaya çıktı. Veritabanı dosyasını okumak kadar otomatik olmasa da, güzel bir standart biçimdir!


Eski soru: Her parçanın veritabanında tutulan iki dosyası var gibi görünüyor (veritabanı bu dosyaların sadece bir dizin ağacıdır) onun için İşte örnek bir parça için dosya çifti [4]. BPM parça için 170 olarak algılandı, ancak onu bir kayan nokta veya "169,96" gibi sayılarda diğer bazı parçalar tespit edilebildiğinden iki kat daha fazla. Çift ve kayan noktalı onaltılık temsilleri aramak benim için hiçbir eşleşme sağlamadı.

Dosyaların başlık gibi görünen başlıklara sahip olduğunu görüyorum, örneğin "PPTH" ve ardından dosya yolu. ve Rekordbox kuantizasyon özelliği için "PQTZ". Ancak dosya formatlarına çok aşina değilim, bu yüzden standart bir dosya türü kullanıp kullanmadığını anlayamıyorum. Ya da daha tescilli bir şey.

Biri dosyalara bakmak ve beni doğru yöne yönlendirmekle ilgilenirse çok memnun olur! Şu anda BPM'nin nasıl depolandığını anlamaya çalışıyorum.


Henüz yeterince itibarım olmadığı için birden fazla bağlantı yapamadığım için :( İşte bağlantılar yukarıdaki parantez içindeki referanslar için: https://gist.github.com/EvanPurkhiser/72b37edd4a6ea26fbe73

üç yanıtlar:
CodeKiller
2014-07-18 17:05:52 UTC
view on stackexchange narkive permalink

Kesin BPM'ler aslında veri dosyalarında (dosya adı) .DAT (genel BPM edb'de olabilir .. ancak onaylayamıyorum) Bu yüzden RekordBox tarafından oluşturulan iki veri dosyasını da tersine çevirdim:

 file.DAT -------- / sayıların tümü büyük endian / [etiket] - 4 bayt string4byte - etiket başlığı boyutu 4byte - segment boyutu (etiket başlığı dahil) (multibit alanlarda, msb-to- lsb (soldan sağa) genel yöndür) ////////////////////////////// PMAI - ana dosya tanımlayıcı4byte - head boyut (28) 4byte - toplam dosya boyutu4byte - ??? (1) 4 bayt - ??? (65536) 4 bayt - ??? (65536) 4 bayt - ??? (0) PPTH - dosya yolu4 bayt - kafa boyutu (16) 4 bayt - etiket boyutu4 bayt - veri uzunluğu veri_ bayt - UTF16 (büyük endian) \ 0 sonlandırılmış dosya yolu 4 * 400 + 4) 4byte - 0> girişler> 4byte - dosya konumu> last_entry> 4byte - ??? PQTZ - Quantized time zones4byte - head size (24) 4byte - tag size4byte - 04byte - ??? (524288 = 0x80000) 4 bayt - giriş sayısı> girişler> 2 bayt - atım aşaması (1-2-3-4) 2 bayt - bpm * 100 4 bayt - zaman indeksi (msn) PWAV - Düşük çözünürlüklü Dalga ekran verileri (5 + 3 bit) 4 bayt - kafa boyutu (20) 4 bayt - etiket boyutu (420) 4 bayt - veri boyutu (400) 4 bayt - ??? (65536)> girişler> 3bit - renk indeksi 5bit - yükseklikPWV2 - En düşük çözünürlük Dalga görüntüleme verileri (4bit) 4byte - kafa boyutu (20) 4byte - etiket boyutu (120) 4byte - veri boyutu (100) 4byte - ??? (65536)> girişler> 4bit - 0 4bit - yükseklikPCOB - CUE Nesnesi /// sıcak ipuçları için ilk PCOB, bellek için ikinci PCOB /// yalnızca USB depolama için oluşturulmuştur, /// aksi takdirde yalnızca sahte verileri ve depolanan gerçek ipucu verilerini içerir edb'de 4byte - kafa boyutu (24) 4byte - etiket boyutu4byte - hotCUE? (1 = sıcak işaret, 0 = bellek) 4 bayt - işaret noktası sayısı 4 bayt - bellekler (-1 = sıcak işaret)> giriş etiketleri> PCPT - CUE Noktası 4 bayt - kafa boyutu (28) 4 bayt - etiket boyutu (56)
4 bayt - sıcak işaret no #, 0 aksi takdirde 4 bayt - etkin (0 = etkin değil / 4 = etkin) 4 bayt - (65536) 4 bayt - ???? ---- nokta türü: 0xffff ffff = hot cue //// bellek önce: 0xffff xxxxx ----- bellek son: 0x xxxx ffff> veriler> 1byte - işaret türü 1 = tek / 2 = döngü 1 bayt - 0 2bayt - ??? (1000) 4 bayt - başlangıç ​​zamanı (msn) 4 bayt - döngü sonu (-1 kullanılmıyorsa) 16 bayt - 0 dosya.EXT -------- PMAI - ana dosya tanımlayıcı4 bayt - kafa boyutu (28) 4 bayt - toplam dosya boyutu4 bayt - ??? (1) 4 bayt - ??? (65536) 4 bayt - ??? (65536) 4 bayt - ??? (0) PPTH - dosya yolu4 bayt - kafa boyutu (16) 4 bayt - etiket boyutu4 bayt - veri uzunluğu veri_ bayt - UTF16'da dosya yolu (büyük endian) \ 0 sonlandırıldıPWV3 - Yüksek çözünürlüklü Dalga görüntü verisi4 bayt - kafa boyutu (24) 4 bayt - etiket boyutu4 bayt -? ?? (1) 4 bayt - veri boyutu4 bayt - ??? (0x0096 0000)> girişler> 3bit - renk 5bit - yükseklik 

Geri giderken dosyalarda PKEY yoktu, bu yüzden ne işe yaradığını bilmiyorum (ve sadece 0 Bilgisayarda)

Böylece BPM değerleri PQTZ etiketinde saklanır (dinamik modda, aynı şarkı sırasında farklı BPM'lere sahip olabilirsiniz, yani mantıklıdır)

Guntram Blohm supports Monica
2014-05-11 20:41:07 UTC
view on stackexchange narkive permalink

Öğrendiğiniz gibi, dosya biçimi etiketi olan başlıklardan oluşuyor. Bu başlıkların her biri 16+ bayt gibi görünüyor, etiket için 4 bayt, başlık uzunluğu için 4 bayt, başlık + veri boyutu için 4 bayt ve emin olmadığım 4 bayt. Ne yazık ki bu uzunluk baytları büyük endian , bu da bpm'nin büyük endian IEEE kayan noktasında da saklanabileceğini düşünmeme neden oldu, bu da sizin hiçbir şey bulamamış olmanızın nedeni olabilir.

İlk başlık, PMAI. Görünüşe göre bir tür zarf (uzunluk alanı dosyanın kendisinin boyutudur), başlıkların geri kalanı çeşitli veri içeriği biçimlerine benziyor.

Bölüm adlarını dökmek için küçük bir program yazdım ve uzunluklar (lütfen bunu iyi bir stil için örnek olarak kullanmayın!):

  #include <stdio.h> #include <arpa / inet.h> int main (int argc, char ** argv ) {analiz (argv [1]); } int analiz (char * dosya adı) {FILE * fp; struct {karakter etiketi [4]; int x0; int x1; int x2; } başlık; int uzunluk; eğer ((fp = fopen (dosya adı, "rb")) == NULL) {hata (dosya adı); dönüş; } while (fread (&header, sizeof başlık, 1, fp)) {başlık.x0 = ntohl (başlık.x0); başlık.x1 = ntohl (başlık.x1); header.x2 = ntohl (başlık.x2); printf ("% 04x% 4.4s:% 08x (% 06d) |% 08x (% 06d) |% 08x (% 06d) \ n", ftell (fp) -sizeof (başlık), başlık.tag, başlık.x0 , başlık.x0, başlık.x1, başlık.x1, başlık.x2, başlık.x2); if (! memcmp (başlık.tag, "PMAI", 4)) {// dış kap uzunluğu = başlık.x0; // sadece başlığı atla
} else if (! memcmp (başlık.tag, "PPTH", 4)) {int i; for (i = 0; i<header.x2; i + = 2) {getc (fp); putchar (getc (fp)); } putchar ('\ n'); devam et; } else {uzunluk = başlık.x1; // veriyi atla} fseek (fp, length-sizeof (başlık), 1); }}  

aşağıdaki çıktıyı üretir:

  $ ./sections ANLZ0000.DAT 0000 PMAI: 0000001c (000028) | 000028fc (010492) | 00000001 (000001) 001c PPTH: 00000010 (000016) | 00000100 (000256) | 000000f0 (000240) E: \ music \ 247 Hardcore \ [+ single] \ [247HC055] [12B] Al Storm Ft. Malaya - Her Zaman Elveda Diyoruz (Technikore Remix) .mp3 011c PVBR: 00000010 (000016) | 00000654 (001620) | 00000000 (000000) 0770 PQTZ: 00000018 (000024) | 00001f40 (008000) | 00000000 (000000) 26b0 PWAV: 00000014 (000020) | 000001a4 (000420) | 00000190 (000400) 2854 PWV2: 00000014 (000020) | 00000078 (000120) | 00000064 (000100) 28cc PCOB: 00000018 (000024) | 00000018 (000024) | 00000001 (000001) 28e4 PCOB: 00000018 (000024) | 00000018 (000024) | 00000000 (000000) $ ./sections ANLZ0000.EXT 0000 PMAI: 0000001c (000028) | 0000cf56 (053078) | 00000001 (000001) 001c PPTH: 00000010 (000016) | 00000100 (000256) | 000000f0 (000240) E: \ music \ 247 Hardcore \ [+ single] \ [247HC055] [12B] Al Storm Ft. Malaya - Her Zaman Elveda Diyoruz (Technikore Remix) .mp3 011c PWV3: 00000018 (000024) | 0000ce26 (052774) | 00000001 (000001) cf42 PKEY: 00000014 (000020) | 00000014 (000020) | 0000000c (000012)  

Demek ki, PMAI kapsayıcıdır. PPTH, MP3 dosyasının adıdır. PVBR, muhtemelen değişken bit hızı, PQTZ nicemleme ve PWAV, PWV2 ve PWV3 çeşitli dalga formları hakkında bilgidir. Bu da muhtemelen bit hızını içermek için sadece PCOB ve PKEY bırakır. Maalesef, bunların onaltılık dökümüne bakarsanız:

  000028c0 xx xx xx xx xx xx xx xx xx xx xx xx 50 43 4f 42 ........... .PCOB 000028d0 00 00 00 18 00 00 00 18 00 00 00 01 00 00 00 00 ................ 000028e0 ff ff ff ff 50 43 4f 42 00 00 00 18 00 00 00 18 .... PCOB ........ 000028f0 00 00 00 00 00 00 00 00 ff ff ff ff ............ 0000cf40 xx xx 50 4b 45 59 00 00 00 14 00 00 00 14 00 00 ..PKEY .......... 0000cf50 00 0c 00 00 00 00  

Görünüşe göre PCOB 00 00 00 00 ff ff ff içeriyor ff ve PKEY'de 00 00 00 00 var. Bunların hiçbiri 170 anlamına gelmiyor gibi görünmüyor.

Bu makale 'rekordbox başlangıçta çökerse, database.backup.edb'yi yeniden adlandırın diyor. veritabanı.edb'ye, hala çöküyorsa, tüm veri dosyalarını kaldırın. BPM, ANLZ. * Dosyalarında depolanmış görünmediğine göre - sizin de bir database.edb dosyanız var mı? BPM orada saklanabilir mi?

Teşekkür ederim! Başka bir yerde saklanabileceğini fark etmediğim için kendimi biraz aptal hissediyorum. Yazılım, analiz edilen verileri depolaması gereken yolu belirlemenize izin verir, ancak her zaman edb dosyasını kullanıcıların AppData'sına yapıştırır. Her neyse, edb dosyası kesinlikle BPM'yi içeren dosya gibi görünüyor, gördüğüm gibi (bir alan tanımına benzeyen) "BPM" adlı. [Edb dosyası burada] (https://docs.google.com/file/d/0B2TT08R8boDIS2V4WjJfWVZSN3c/edit). Biraz araştırma yaparak, uzantı MS Outlooks "Exchange Databse" dosyası için yaygın olarak kullanılıyor gibi görünüyor, ancak bu aptalca görünüyor.
[Buna göre] (http://forums-archive.pioneerdj.com/eve/forums/a/tpc/f/240103214/m/7560086126) edb dosyası açık bir format değildir.
Vay canına Evan, bunu sorduğundan beri uzun bir yol katettik (Bu soruyu soranın siz olduğunuzu fark etmemiştim - ki araştırmaya başlarken dizanteri ile sonuçlandı - sizden ilk haber aldığımda ). Kablo protokolünü oldukça iyi çözdük ve bu verileri doğrudan ağ üzerinden Pioneer donanımından toplayabiliriz; ayrıntılar https://github.com/brunchboy/dysentery/blob/master/doc/Analysis.pdf adresinde yazılmıştır, ancak yine de flash sürücüdeki dosyalardan çevrimdışı analiz yapabilmeyi çok isterim. Tek ihtiyacımız olan, meta veriler için edb dosyalarını bulacak biri. Umut var mı?
Merhaba James, yardım etmek isterim, çünkü zaten biraz tersine dönmeye başladım, ancak zaman ve motivasyon eksikliğimden vazgeçtim.Bildiğiniz gibi, EDB, uzun zaman önce denenebilen bir veritabanı formatıdır (deviceSQL), ancak artık yok (programı hiçbir yerde bulamadım). Meta verilerin çoğu, yukarıda açıklandığı gibi file.DAT ve file.EXT dosyasındadır ... Tüm araştırmalarım tamamen kara kutu, yani tamamen yasal (AFAIK).
Bu harika olurdu! Şu anda, metadata ve tam bir CDJ setiyle çalışmak isteyen şovlar yürüten kişilerin, DJ'ler aynı medyayı tüm CDJ'lere bağlamadan önce, ağ üzerindeki tüm meta verileri bir CDJ'den yavaşça toplamaları gerekiyor. Gösteriden önce doğrudan hafıza çubuğundan okuyabilmek çok yardımcı olacaktır.
Merhaba @CodeKiller - Bu cevabın 3 yaşındayken farkındayım, bu yüzden birçok bilginin hala alakalı olmasını beklemiyorum. OP'ye benzer bir şey yapmaya çalışıyorum, sadece oynatma listesi verilerini Rekordbox'ta kırmakla ilgileniyorum. Hangi dosyada bunun olduğu ve onu okumanın en iyi yolu hakkında herhangi bir fikriniz var mı?
@Yevgeny Simkin yeni Rekordbox v6 için https://github.com/Deep-Symmetry/crate-digger ve ilgili projelere bakın: https://rekord.cloud/blog/technical-inspection-of-rekordbox-6-and -its-new-internals
@CodeKiller teşekkürler!
Ferruccio
2015-02-13 18:19:49 UTC
view on stackexchange narkive permalink

EDB biçimi, Microsoft'un Genişletilebilir Depolama Motoru (ESE) tarafından bir dizi uygulama ve hizmete (Exchange, Active Directory, Desktop Search, Windows Live Mail vb.) depolama arka ucu sağlamak için kullanılır

EDB biçiminin kendisi belgelenmemiş olsa da, bir Windows API aracılığıyla iyi bir şekilde desteklenmektedir.

Bir EDB dosyasının içeriğine libesedb aracılığıyla da erişebilirsiniz..

Tek yapmak istediğiniz bir EDB dosyasının içeriğine insan tarafından okunabilir bir şekilde bakmaksa, EseDbViewer aracı çok iyidir.

Merhaba - 5 yaşındayken bu cevabın farkındayım, bu yüzden pek çok bilginin hala alakalı olmasını beklemiyorum. OP'ye benzer bir şey yapmaya çalışıyorum, sadece oynatma listesi verilerini Rekordbox'ta kırmakla ilgileniyorum. Hangi dosyada bunun olduğu ve onu okumanın en iyi yolu hakkında herhangi bir fikriniz var mı?


Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...