Midi programmiren
-
Hallo
Ich möchte gerne unter visual c# eine Midi Anwendung schreiben
ich habe unter http://www.gotdotnet.com/community/usersamples/details.aspx?sampleguid=89cde290-5580-40bf-90d2-5754b2e8137cEine Midi klasse gefunden.Aber kenne mich da mit nicht aus hat jemand erfahrung mit midi programmierung.oder kann mir jemand sagen wie ich diese klasse Anwenden kann?
Bin prg Anfänger
Dankeee!!!
-
Hallo!
Also diese Klasse sieht ja eigentlich recht einfach aus und es gibt ein paar Beispiele zur Verwendung.
Was genau ist denn dein Problem bzw. was willst Du überhaupt machen?Gruß,
yanni
-
Hallo yanni
ich möchte ein Midi keyboard ans pc anschlissen über midiin eingang. und die noten die auf dem keyboard gespielt werden abfangen und weiter verarbeiten.
in dise klasse ist ein DrumDemo wenn ich auf dem pc tastatur eine bestimmte taste drücke dann spielt ein instrument.
ich möchte aber diese instrumente über mein Midi-keyboad spielen
ich weiss nicht wie ich das machen soll!!
welche methode dafür zuständig ist.Gruß Can
-
Hi!
Tja, MIDI-Input scheint in der Klasse wirklich nicht vorgesehen zu sein.
Wie's aussieht, werden die MIDI-Funktionen aus non-managed DLLs importiert (in der NativeMethods-Klasse in MidiInterop.cs). Die entsprchende Funktion wäre wohl midiInOpen. Aber ich weiß leider nicht, wie man die verwendet und u.U. könnte es Probleme mit der Callback-Funktion geben.Gruß,
yanni
-
Hallo
Soll ich es lieber mit DirectX-DirectMusic programmieren
was meinst du?Oder gibt es andere klassen für Midi?
ich habe mal bei Amazon nach Büchern nach geschaut aber ich finde keine buch in Deutsch für DirectX .net
Gibet es ein buch oder eine informations quelle wie ich DirectX mit visual c#
programmieren kann?Gruß Can
-
also mit MidiInOpen etc.
währe ein sehr einfacher hartcodierter Midi-Thru zum soundkarten synth max.20 zeilen C:#include <mmsystems> void CALLBACK MidiInFunc(hMidiIn, wMsg, const class_midiout * Midiout, dwParam1, dwParam2) { //ganz eifach: if (wMsg==MIM_data)midiOutShortMsg(hMidiOut, dwParam1); // oder die klasse benutzen: if (wMsg==MIM_data)Midiout->ausgabe(dwParam1); } HANDLE midiIn; class_midiout Midiout ; ..... // midiOut initialisieren ........ midiInOpen(&midiIn, wDeviceID, (long)MidiInFunc, (long)&Midiout, CALLBACK_FUNCTION); ... midiInClose(midiIn); // evtl. grosskleinschreibung überprüfen : der code ist 'ne grobe übersetzung aus einem Pascal fragment
benutzung des dx-synths ist damit allerdings nicht möglich
schreib mal was genau du vorhast (z.B. ob du nur ein Programm brauchst oder dich generell mit midi auseinander setzten willst, im ersteren fall würd wahrscheinlich "midi-ox" weiterhelfen)
-
Hallo Lui
Also ich möchte ein Midi_Begleitautomat programmiren.
Das heist ich muß ein Midi-Keyboad über die MidiIn buchse des pc's Anschließen
Und die gespielten noten an die soundkarte oder an eine sofware-syntheiser weiterleiten.ich habe versucht es in visual c++6 zu programmiren.hab da für auch klassen gekauft (MaximumMidi) Aber es ist seher schwer für mich da ich Anfänger bin.
jetz hat mir ein freund geraten so ein programm in visual C# zu schreiben
weil es leichter sein soll.in der tat weil es keine zeiger und so weiter hat.Für c# habe ich unter diese klasse gefunden aber die klasse hat keine midiin und midiout funklion.
Midi For .Net v2,0
http://www.gotdotnet.com/community/usersamples/details.aspx?sampleguid=89cde290-5580-40bf-90d2-5754b2e8137cvielleicht kann ich meine klassen in c++ v6 in c# benutzen aber ich weiss nicht wie ich es machen soll.
jetz stehe ich daa
Gruß Can
-
ich weis nicht ganz genau wo ich anfangen soll also
a) zeiger sind nichts dramatisches und c# versteckt die nur (sehr simpel vormuliert)b) im prinzip müsste du bei meinem beispiel nur noch die gewünschte transformation durchführen (ich steh dummerweise mit der c(++/# etc.) syntax auf kriegsfuss) ich versuch mal eine demo (mit korekturen zum letzten post)
#include <mmsystem.h> void CALLBACK MidiInFunc(HANDLE hMidiIn,UINT wMsg,HANDLE * Midiout,long dwParam1, long dwParam2) { long chan,what,note,vel; if (wMsg!=MIM_DATA)return;//andere meldungen chan=dwParam1 & 0x0F;//kanal 0-15 die ersten 4 bits what=(dwParam1 >> 4) & 0x0F;// die nächsten 4 bits u.a. note an/aus note=(dwParam1 >> 8) & 0xFF;//sollte klar sein ;-) vel=(dwParam1 >> 16) & 0xFF;//anschlagstärke if (what!=8 && what!=9) return;// 8 und 9 sind note aus bzw. an alles andere wird erstmal ignoriert midiOutShortMsg(*hMidiOut, dwParam1); // erstmal die gleiche note zur ausgabe senden note+=12//und ne oktave höher midiOutShortMsg(*hMidiOut, chan+what*16+note*256 +vel*256*256); } // in der init function: midiOutOpen(&midiOut, MIDI_MAPPER,0,0,0); midiInOpen(&midiIn, 0/* erstes gerät*/, (long)MidiInFunc, (long)&midiOut, CALLBACK_FUNCTION); // beim beenden schliessen nicht vergessen: midiOutClose(midiOut); midiInClose(midiIn);
-evtl. winmm.lib in den linker optione eintragen
sollte eigentlich auch mit JEDEM C DIALEKT also auch vc+ und c# klappen
p.s falls du auf der suche nach einer netten programiersprache bist würd ich pascal nicht vergessen