Hi,
Ich möchte einen Midi-Sound programmieren und habe dazu im Codearchiv auch ein Beispiel gefunden. Ich verstehe es jedoch nicht. Wie ist das mit den Kanälen und welche API-Befehle muss ich aufrufen um die Instrumente einzustellen und die Noten einzugeben? Es wäre nett, wenn mir da jemand helfen könnte.
MfG
Hypersoft
Midi
- NicTheQuick
- Ein Admin
- Beiträge: 8812
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich habe gerade nicht wirklich Zeit viel zu erklären, aber schau dir dochmal das hier an: MIDI-Requester, usw. von NicTheQuick
und MIDI_Painter.zip
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
kennt sich jemand damit aus?
mein Problem ist, dass der MIDI-painter und das PureMIDI-include komplett undokumentiert ist.
ich möchte gerne MIDI-sound verstehen, und für on-the-fly-soundeffekte nutzen.
irgendwelche Libs und sonstwas würde mir garnichts bringen, mir geht es um kurze, knackige API-nutzung.
mein Problem ist, dass der MIDI-painter und das PureMIDI-include komplett undokumentiert ist.
ich möchte gerne MIDI-sound verstehen, und für on-the-fly-soundeffekte nutzen.
irgendwelche Libs und sonstwas würde mir garnichts bringen, mir geht es um kurze, knackige API-nutzung.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
Ich hab hier mal nen Mini-Beispiel ausgegraben...
Vielleicht hilft's ja was...
Aber wie MIDI-Dateien aufgebaut sind.. ka
Code: Alles auswählen
Global hMidiOut
#Channel1 = 1
#Channel2 = 2
#Channel3 = 3
#Channel4 = 4
#Channel5 = 5
#Channel6 = 6
Procedure MidiOutMessage(hMidi,iStatus,iChannel,iData1,iData2)
dwMessage = iStatus | iChannel | (iData1 << 8 ) | (iData2 << 16)
ProcedureReturn midiOutShortMsg_(hMidi, dwMessage) ;
EndProcedure
Procedure SetInstrument(channel,instrument)
MidiOutMessage(hMidiOut, $C0, channel, instrument, 0)
EndProcedure
Procedure PlayNote(channel,Note,velocity)
MidiOutMessage(hMidiOut, $90, channel, Note , velocity)
EndProcedure
Procedure StopNote(channel,Note)
MidiOutMessage(hMidiOut, $90, channel, Note , 0)
EndProcedure
midi.MIDIOUTCAPS
devices = midiOutGetNumDevs_()
For devnum=-1 To devices-1
If midiOutGetDevCaps_(devnum,@midi,SizeOf(MIDIOUTCAPS))=0
If midi\wVoices >0
midiport=devnum
EndIf
EndIf
Next
hMidiOut.l
If midiOutOpen_(@hMidiOut,midiport,0,0,0) = #MMSYSERR_NOERROR
; "25" = Akustische Gitarre
SetInstrument(#Channel1,25)
SetInstrument(#Channel2,25)
SetInstrument(#Channel3,25)
SetInstrument(#Channel4,25)
For a = 1 To 5
; normal sound
PlayNote(#Channel1,$2D,63)
PlayNote(#Channel2,$39,63)
PlayNote(#Channel3,$3C,63)
PlayNote(#Channel4,$40,63)
Delay (2000)
StopNote(#Channel1,$2D)
StopNote(#Channel2,$39)
StopNote(#Channel3,$3C)
StopNote(#Channel3,$40)
; this must be a staccato sound
PlayNote(#Channel1,$39,100)
PlayNote(#Channel2,$3C,100)
PlayNote(#Channel3,$40,100)
Delay (300)
StopNote(#Channel1,$39)
StopNote(#Channel2,$3C)
StopNote(#Channel3,$40)
Delay (200)
; this must be a muted sound
PlayNote(#Channel1,$2D,80)
PlayNote(#Channel2,$30,80)
PlayNote(#Channel3,$34,80)
Delay (300)
StopNote(#Channel1,$2D)
StopNote(#Channel2,$30)
StopNote(#Channel3,$34 )
Delay (285)
Next
; Zurücksetzen der Instrumente
SetInstrument(#Channel1,0)
SetInstrument(#Channel2,0)
SetInstrument(#Channel3,0)
SetInstrument(#Channel4,0)
; MIDI-Output schließen
midiOutClose_(hMidiOut)
EndIf
EndAber wie MIDI-Dateien aufgebaut sind.. ka
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
hm.. okeee
danke für das beispiel...
aber das ist genauso mini und undokumentiert...
mir gehts auch nicht darum, wie midi-dateien aufgebaut sind...
mir gehts nur darum, wie man die midi-device anspricht.
dein listing wird bestimmt ein wenig helfen, danke.
danke für das beispiel...
aber das ist genauso mini und undokumentiert...
mir gehts auch nicht darum, wie midi-dateien aufgebaut sind...
mir gehts nur darum, wie man die midi-device anspricht.
dein listing wird bestimmt ein wenig helfen, danke.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
