AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Beat Detection
Thema durchsuchen
Ansicht
Themen-Optionen

Beat Detection

Ein Thema von BenjaminH · begonnen am 7. Sep 2009 · letzter Beitrag vom 2. Mai 2014
Antwort Antwort
nobbi29

Registriert seit: 16. Feb 2012
2 Beiträge
 
#1

AW: Beat Detection

  Alt 1. Mai 2014, 07:44
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
  Mit Zitat antworten Zitat
ElektroLurch

Registriert seit: 24. Nov 2007
Ort: Berlin
5 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Beat Detection

  Alt 1. Mai 2014, 09:36
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.
Werner B
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Beat Detection

  Alt 2. Mai 2014, 20:06
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
Benjamin
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz