Midi

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Hypersoft
Beiträge: 22
Registriert: 04.10.2004 16:14

Midi

Beitrag von Hypersoft »

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
Benutzeravatar
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

Beitrag von NicTheQuick »

Ich habe gerade nicht wirklich Zeit viel zu erklären, aber schau dir dochmal das hier an: MIDI-Requester, usw. von NicTheQuick
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

cya,
...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

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Ich hab hier mal nen Mini-Beispiel ausgegraben...

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

End
Vielleicht hilft's ja was...
Aber wie MIDI-Dateien aufgebaut sind.. ka
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Jilocasin
Beiträge: 665
Registriert: 13.05.2006 16:04
Kontaktdaten:

Beitrag von Jilocasin »

Aber immer 8)
Kaeru Gaman hat geschrieben:aber das ist genauso mini und undokumentiert...
Toll! :lol: :lol: :mrgreen:
Das hab ich ja auch wo rauskopiert ^^
Halt mal ansehen, dann erklärt sich vllt ja manches..
Bild
Antworten