Seite 1 von 1

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

Verfasst: 15.09.2014 20:21
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

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

Verfasst: 15.09.2014 23:19
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.

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

Verfasst: 15.09.2014 23:29
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 !!!

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

Verfasst: 15.09.2014 23:52
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.

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

Verfasst: 16.09.2014 02:05
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

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

Verfasst: 16.09.2014 07:15
von helpy

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

Verfasst: 16.09.2014 17:35
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