Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Beat Detection (https://www.delphipraxis.net/139879-beat-detection.html)

rollstuhlfahrer 16. Apr 2010 19:36

Re: Beat Detection
 
Zitat:

Zitat von BenjaminH
Achtung dafür braucht man die Modifizierte Bass.dll, die in diesem Beitrag zu finden ist.

Könntest du bitte genauer beschreiben, wo die modifizierte Bass.dll zu finden ist? Auf den ersten Blick findet man die nämlich im un4seen-Forum nicht.

Bernhard

BenjaminH 16. Apr 2010 21:19

Re: Beat Detection
 
Die modifizierte Bass.dll direkt: http://www.un4seen.com/stuff/bass.dll

dustin 17. Apr 2010 01:40

Re: Beat Detection
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

Ich versuche mich auch an irgendeiner Art Beaterkennung,aber eine zufriedenstellende Lösung finde ich nicht so richtig.
Das verfahren von Gamedev verstehe ich nicht wirklich, da mein Englisch sehr mieeeeees ist und finde
da auch nicht mehr rein (ins Englisch).

Vieleicht hat ja da einer noch eine Idee.
Es giebt ja verschiedene Ansätze im Netz, aber meist nur theoretische Ansätze.

Meime Idee war es eigendlich eine saubere BPM Erkennung und die dann mit den Peakwerten zu syncronisieren um die zwischenbeat's zu unterdrücken. Aber die BPM Ermittlung stellt da das Problem.

Mit der Bass DLL habe ich nicht viel am Hut da giebt es bei mir immer probleme.

nobbi29 30. Apr 2014 11:02

AW: Beat Detection
 
Hallo BenjaminH,

der Eintrag ist ja schon ein paar Tage alt, nicht desto trotz habe ich gestern den Beat_Detector_307 unter Windows 7/64 Bit ausprobiert und direkt ans Laufen bekommen. Jetzt mein Frage, was muss ich tun um in einem eigenen Delphi Programm die MIDI Message vom Deinem Beat Detector Programm zu empfangen?
Gib es da eine Chance?

Freue mich auf einen Hinweis oder besser noch auf ein Code Sample.

Viele Grüße

nobbi29

ElektroLurch 30. Apr 2014 11:41

AW: Beat Detection
 
Hi,
grob umrissen:
Richte auf deinem System einen virtuellen Midiport ein. (loopMidi ist da eine Möglichkeit)
Weise dem Programm diesen Port als Ausgang zu.
Für dein eigenes Programm sollte dann dieser als Eingang gewählt werden.

nobbi29 1. Mai 2014 07:44

AW: Beat Detection
 
Hallo ElektroLurch,

Danke für die prompte Antwort. Das probiere ich heute mal aus. Hast Du noch einen Tipp, welche Komponente ich am Einfachsten verwenden sollte. Mit Midi hab ich noch nie was programmiert:(.

Viele Grüße

nobbi29

ElektroLurch 1. Mai 2014 09:36

AW: Beat Detection
 
Hier in der DP, Tutorials und Kurse unter M findest du etwas zu MidiIn und MidiOut.
Das ist ein guter Anfang.
Mit MidiIn kannst du die Steuersignale übernehmen, interpretieren und dann damit sonstwas auslösen. Muss ja nicht zwangsläufig etwas mit Musik zu tun haben.

BenjaminH 2. Mai 2014 20:06

AW: Beat Detection
 
Hi,
ich habe das damals so gemacht:
Delphi-Quellcode:
uses MMSystem;

var fHandle:Hwnd;

//startet den Empfang der MIDI-Signale
// Verarbeitung in midiInCallback, für mididevnum siehe unten
procedure InitMidi(mididevnum);
begin
  midierror:=midiInOpen(@fHandle, mididevnum, Cardinal(@midiInCallback), mididevnum, CALLBACK_FUNCTION);
  if MMSYSERR_NOERROR<>midierror then
    case midierror of
      MMSYSERR_ALLOCATED: ShowMessage('The specified resource is already allocated.');
      MMSYSERR_BADDEVICEID: ShowMessage('The specified device identifier is out of range.');
      MMSYSERR_INVALFLAG: ShowMessage('The flags specified by dwFlags are invalid.');
      MMSYSERR_INVALPARAM: ShowMessage('The specified pointer or structure is invalid.');
    end;
  midiinstart(fHandle);
end;

procedure MidiEnd();
begin
  MidiInStop(fHandle);
  MidiInClose(fHandle);
end;

procedure midiInCallback(aMidiInHandle: PHMIDIIN; aMsg: Cardinal; aInstance, aMidiData, aTimeStamp: integer);stdcall;
begin
  //Hier verarbeitest du das Zeug, alles wichtige ist in aMidiData enthalten
end;

//Gibt dir eine Liste der MIDI-Geräte aus in eine Listbox names lbmidi, der Index des Eintrags entspricht der Gerätenummer, die du dann an InitMidi weitergeben kannst.
procedure ListMidiDevices;
    function GetMidiDeviceName(id:Integer):String;
    var caps: TMidiInCaps;
    begin
      midiInGetDevCaps(id,@caps, sizeof(TMidiInCaps));
      result:=caps.szPname;
    end;
  var count:Integer;
    i: Integer;
    midiname:String;
  begin
    count:=midiInGetNumDevs;
    lbMidi.Items.Clear;
    for i := 0 to count - 1 do
    begin
      midiname:=GetMidiDeviceName(i);
      lbMidi.Items.Add(midiname);
    end;
  end;
Aber natürlich kannst du das auch eleganter in eine Klasse kapseln ;-)

Die MIDI Daten(aMidiData) sind in Wikipedia sehr gut erklärt: http://de.wikipedia.org/wiki/MIDI#Protokoll
Was der BeatDetector genau sendet weiß ich nicht mehr, das siehst du wenn du die Daten checkst aber recht schnell.
Ich glaube es war erst ein Note On, dann ein Note Off in sehr kurzem Abstand.

Viel Erfolg,
Benjamin


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:35 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz