[erledigt] Musik Rhythmus detekt via FFT u. in txt schreiben

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

[erledigt] Musik Rhythmus detekt via FFT u. in txt schreiben

Beitrag von udg »

Hallo,

eine Frage zum Rhythmus detect bei Songs der verschiedensten Genres.

Ich habe ein Programm mit nem Kumpanen geschrieben (JAVA), welches man startet, dann Musik abspielt und dann im Tool die "Enter Taste" im Rhythmus-Takt (nicht bpm) drücken kann und diese Werte, das Drücken der "Enter Taste" werden in eine TXT Datei geschrieben.

Was sind das für Werte?
ein Song startet bei 0:0:0 (Minuten,Sekunden,Millisekunden)

in die TXT Datei wird nun bei jedem "ENTER" drücken die Millisekunde in die TXT Datei geschrieben, bei welcher Songposition ich gerade "Enter" gedrückt habe.

Wir brauchen dies um später visuell etwas zur Musik darzustellen. Dadurch, das die Werte in die TXT Datei geschrieben wurden weis ich bei welcher MS zb. der Rhythmus (Drum und Kickdrum oder Snare) gespielt wurde bzw wird bei entsprechendem Song.

weiter...

Problem: es ist sehr Zeitaufwändig bei mehreren Songs und vor allem bei Songs die man nicht kennt, immer im Rhythmus die Entertaste zu drücken.

Meine Frage:
ist es realisierbar in PureBasic dies umzusetzen?
ich lade ein MP3 in meinen PB Player dieser registriert anhand eines FFT die Rhythmus Ausschläge und schreibt mir alles automatisch in eine txt Datei.

Für Hilfe bin ich sehr dankbar.

Ich habe anhand eines Beispieles in PureBasic dies programmiert: download Beipsiel

komme aber nicht weiter das Ganze in Werten, in Form von Millisekunden in eine TXT Datei zu schreiben, wann ein Rhythmus Ausschlag war.

gibt es Beispiele oder jemanden der mir bei diesem Problem helfen kann?

viele Grüße
Zuletzt geändert von udg am 18.09.2014 02:54, insgesamt 2-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von NicTheQuick »

Ich hatte da eine Vorlesung, in der genau sowas und noch mehr gemacht wurde. Wenn du willst, kann ich dir die Unterlagen schicken. Allerdings sind die auf Englisch und nur in Folienform, also kein Skript oder sowas.
Bild
es_91
Beiträge: 383
Registriert: 25.01.2011 04:48

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von es_91 »

Ich antworte, weil mich das Thema auch interessiert.
ich lade ein MP3 in meinen PB Player dieser registriert anhand eines FFT die Rhythmus Ausschläge und schreibt mir alles automatisch in eine txt Datei.
1. Ich kann Dir sagen, dass PureBasic keine Sound-Unterstützung für MP3 hat. Es gab mal ein sehr altes PlugIn, dieses funktioniert jedoch mit aktuellen Versionen von PureBasic nicht mehr. MP3 kannst Du nur über die Movie-Bibliothek abspielen und wie Du diese Werte dann ausliest, weiß ich nicht.

2. Wenn Du die FFT-Analyse beherrscht bist Du mir um Lichjahre vorraus und weisst wahrscheinlich schon, wie Du 1. löst. (Ich hätte jetzt den Beat einfach an der Elongation des Gesammtsignals abgemessen, falls das geht.)

3. Etwas in eine Textdatei zu schreiben ist das Allerleichteste in PureBasic. Siehe dazu den Code weiter unten.
komme aber nicht weiter das Ganze in Werten, in Form von Millisekunden in eine TXT Datei zu schreiben, wann ein Rhythmus Ausschlag war.
Im Grunde öffnest Du eine Textdatei mit OpenFile() oder CreateFile() und schreibst Zeilen mit WriteStringN() hinein - was immer Du willst. Die Millisekunden kannst Du durch eine Schleife messen: Du brauchst den Befehl ElapsedMilliseconds().

Das Ganze könnte so aussehen:

Code: Alles auswählen

CreateFile(0, "Beats.txt")

Int_ZeitStart = ElapsedMilliseconds()

Repeat
  
  If CheckForBeat() ; wenn wir einen Beat haben
    
    Int_ZeitBeat = ElapsedMilliseconds() - Int_ZeitStart
    
    WriteStringN(0, "Beat at " + Str(Hour(Int_ZeitBeat / 1000)) + ":" + Str(Minute(Int_ZeitBeat / 1000)) + ":" + Str(Second(Int_ZeitBeat / 1000)) + "," + Str(Int_ZeitBeat - Hour(Int_ZeitBeat / 1000) * 60 * 60 * 1000 - Minute(Int_ZeitBeat / 1000) * 60 * 1000 - Second(Int_ZeitBeat / 1000) * 1000))
    
  EndIf
  
Until Bool_EndOfSong

CloseFile(0)
Achtung: PSEUDOCODE !!!
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von ts-soft »

z.B. FMOD oder libzPlay könnten helfen:
http://www.fmod.org/download/#FMODExAPIDownloads

Für FMOD ist mir kein aktueller Wrapper bekannt, aber für zPlay :wink:
http://www.purebasic.fr/english/viewtop ... 94#p408794
http://www.purebasic.fr/english/viewtop ... 77#p375477

Das schreiben in eine Textdatei wirste dann wohl selber übernehmen müssen.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von udg »

hey danke für die Vorschläge.

Im Moment schreib ich gerade an einer Version.

es muss nicht zwingend MP3 laden. Es kann auch wav oder ogg abspielen.

okay. mein Player spielt mp3 ab ;) aber egal es kann auch wav oder ogg sein wie ich schon sagte denn es geht um die werte.

mein Beispiel Code, mein kleines Tool, dass ich als Download im ersten Post habe, zeigt ja das FFT funktioniert. Muss nur noch akkurat angepasst werden und bug fixed aber es funzt erstmal.

Hier einmal ein Beispiel meiner TXT Datei zu dem Song: Sexy Bitch von David Guetta

Code: Alles auswählen

472,
968,
1456,
1928,
2232,
2360,
2608,
...
u.s.w.
...
65800,
66016,
66240,
66464,
...
u.s.w.
...
190648,
190904,
191176,
191392,
191616,
und so möchte ich die Werte automatisch in ein File schreiben. Diese hier habe ich manuell mit Enter zum Rhytmus getippt und dabei recorded.

Jeder Wert stellt eine Position im Song dar (in Millisekunden) wo eine Position eines Drums oder Snares oder ähnlichem sich befindet und ich im Rhythmus gedrückt habe.

@ NickTheQuick
danke sollte ich hängen bleiben komme ich gern auf das Angebot zurück, wenn das nicht zu krasse Umstände macht

so long
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
helpy
Beiträge: 635
Registriert: 29.08.2004 13:29

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von helpy »

Windows 10
PB Last Final / (Sometimes testing Beta versions)
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: [ Frage ] Music Rhythmus detekt und in txt schreiben

Beitrag von udg »

helpy hat geschrieben:Schon mal Riffstation ausprobiert:
https://www.google.com/url?q=http://www ... tU4-0Atvgw
Hier ein Video dazu:
http://www.youtube.com/watch?v=ECvinPjm ... height=500
Danke aber das geht am Thema vorbei. Was Riffstation kann, kann ich mit meinen Soundtools ebenfalls erledigen. Bei meiner Frage ging es um etwas anderes.

Nichts desto trotz, danke an ALLE.
Mein Tool hab ich letzte Nacht fertigprogrammiert und erfüllt nun genau das was es soll:

Bild

NFO
Bild
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten