[RMXP] Scriptbarer MIDI Output: Selbst Töne erzeugen im Maker
Hallo, heute bringe ich euch ein Script was an sich erst mal ein Werkzeug für andere Scripter ist und so direkt kein Gameplay-Element mit sich bringt.

Bei diesem Script handelt es sich um einen per Ruby steuerbaren Zugriff auf den MidiOutput des Computers. Den gleichen den Audio.me_play und Audio.bgm_play verwenden, um MIDI-Soundfiles abzuspielen. Das Besondere ist, das ihr beliebige Noten auf einem beliebigen Midi-Instrument abspielen könnt. Ihr habt also Lust plötzlich das hohe C auf einer Tuba erklingen zu lassen? Oder doch lieber Cello oder Pan Flöte? Kein Problem mehr.
Das Script findet ihr hier:
Das Script erlaubt ja ein Instrument zu wählen. Die Nummern (1-128) könnt ihr in der Liste auf Wikipedia nachgucken: General MIDI#Programm wechsel

Bei diesem Script handelt es sich um einen per Ruby steuerbaren Zugriff auf den MidiOutput des Computers. Den gleichen den Audio.me_play und Audio.bgm_play verwenden, um MIDI-Soundfiles abzuspielen. Das Besondere ist, das ihr beliebige Noten auf einem beliebigen Midi-Instrument abspielen könnt. Ihr habt also Lust plötzlich das hohe C auf einer Tuba erklingen zu lassen? Oder doch lieber Cello oder Pan Flöte? Kein Problem mehr.
Das Script findet ihr hier:
![]() |
Ruby Source code |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
#============================================================================== # ** MIDI Output im RPG Maker #------------------------------------------------------------------------------ # Dieses Script ist ein Tool, um damit Spielmechaniken oder weitere Scripts # zu erstellen. Es ist für sich alleine noch kein Beitrag zum Spiel. # # Dieses Script erlaubt einen scriptbaren MIDI-Output zu erstellen und über # diese MIDI-Noten auszugeben. Es werden keine weiteren Dateien im Spiel- # ordner benötigt. # # Erzeugt euch einen neues Objekt bei Spielstart: # $playms_cello = MIDI_OUTPUT.new # # Euch stehen alle im MIDI-SoundFont verfügbaren Musikinstrumente zur Verfügung, # wir wollen hier ein Cello imitieren, also wählen wir Voice#43: # $playms_cello.set_instrument( 43 ) # # Und jetzt können wir ein paar Noten erklingen lassen: # $playms_cello.play_note(48) # sleep(0.5) # $playms_cello.play_note(49) # sleep(0.5) # $playms_cello.play_note(50) # sleep(0.5) # $playms_cello.play_note(51) # sleep(2) # # Wenn wir den MIDI Output nicht mehr benötigen, schließen wir ihn: # $playms_cello.close() # # Wie Audio.me_stop() kann auch unser MIDI Output gestoppt werden: # $playms_cello.stop() #------------------------------------------------------------------------------ # Autor: Playm # Maker: RPG Maker XP # Einfache Nutzung in nicht-kommerziellen RMXP Projekten ist gestattet. # Für die Erlaubnis zur kommerziellen Nutzung bitte an den Autor wenden. # Keine Weiterverbreitung in originaler oder abgeänderter Form gestattet. #============================================================================== # * MIDI OUTPUT #============================================================================== class MIDI_OUTPUT attr_reader :handle def initialize handle = [0].pack('i') midiOutOpen = Win32API.new('winmm.dll', 'midiOutOpen', 'plpii', 'i') # Open Output result = midiOutOpen.call( handle, 0, nil, 0, 0 ) @handle = handle.unpack('i').first # API @midiOutShortMsg = Win32API.new('winmm.dll', 'midiOutShortMsg', 'il', 'i') @midiOutReset = Win32API.new('winmm.dll', 'midiOutReset', 'i', 'i') end def close return nil if closed? Win32API.new('winmm.dll', 'midiOutClose', 'i', 'i').call(@handle) @handle = nil end def closed? @handle.nil? end def set_instrument( voice_number ) return nil if closed? msg = (256 * voice_number) + 192 @midiOutShortMsg.call(@handle, msg) end def play_note( midi_note, volume=127 ) return nil if closed? msg = [144, midi_note, volume, 0].pack('cccc').unpack('V').first @midiOutShortMsg.call(@handle, msg) end def stop() @midiOutReset.call(@handle) if not closed? end end |
-
Ideen
Hier findet ihr Ideen, was man mit dem Script machen könnte.
Weitere Ideen folgen, wenn sie mir einfallen. Oder postet einfach gute Ideen hier in den Thread. :-) -
Anwendungsbeispiel: Fun-Tasten
Die originale Idee für das Script hatte ich, als ich Mustas "Fun-Tasten" - Klavierscript von Mustamakkara gesehen habe. Musta hatte sich für sein Script entschieden, dafür vorgefertigte Sound-Files im Spielordner abzulegen. Wenn man das Script hier im Thread mit seinem kombiniert, kann man aber auf die Dateien verzichten und die einzelnen Töne live vom eigenen Computer erzeugen lassen. Ich habe mit Musta abgesprochen, dass ich euch eine Anleitung posten darf, wie ihr die beiden Scripte kombiniert. Dafür müsst ihr beide Scripte im Sciprteditor eingefügt haben und dann in seinem Script an ein paar Stellen Anpassungen vornehmen.
Ab Zeile 60 in der initialize-Methode müsst ihr vier Zeilen einfügen. Einmal direkt am Anfang, um den MIDI-Output zu öffnen und dann bei der Auswahl der Instrumente:
Ruby Source code
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
def initialize(instrument = 0, noten = nil, vergleich = true) @midi_output = MIDI_OUTPUT.new # Neu case instrument when 1 @instrument = "Harpsichord" @midi_output.set_instrument(7) # Neu when 2 @instrument = "Church Organ" @midi_output.set_instrument(20) # Neu # Hier können beliebig viele Instrumente angegeben werden. # Vielleicht ein Akkordeon? else @instrument = "Piano" @midi_output.set_instrument(1) # Neu end @noten = noten @compare = vergleich end
Die Kirchenorgel war bei mir irgendwie ein bisschen buggy. Aber das ignoriere ich mal.
Den Output müssen wir am Ende der Main-Methode, wenn wir auch die Grafiken entfernen, wieder schließen:
Ruby Source code
120 121 122
Graphics.freeze loesche_grafiken @midi_output.close # Neu
Anschließend in der Update-Methode noch das Audio.se_stop durch unseren eigenen Stop-Ersetzen:
Ruby Source code
144 145
#Audio.se_stop @midi_output.stop()
Und schließlich bei play_note noch das Abspielen der Sounddateien ersetzen:
Ruby Source code
247 248 249
def play_note #Audio.se_play("Audio/SE/#{@instrument}/" + @cursor.to_s) @midi_output.play_note( 47 + @cursor )
Zack, fertig ist es und das Script funktioniert auch ohne extra Dateien im Audio-Ordner.
Das Script erlaubt ja ein Instrument zu wählen. Die Nummern (1-128) könnt ihr in der Liste auf Wikipedia nachgucken: General MIDI#Programm wechsel
Das große Scientia Wiki zur Spielentwicklung 
Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs
Musik von Shabraxxx für euch
Guide zu den Audioformaten
Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








Das ist super genial! :D
Jetzt bitte noch ein Short-Output, ohne den Maker exta starten zu müssen, damit ich anhören kann, obs gut klingt! XD
So könnte man glatt ein ganzes Lied komponieren, ohne eine Datei im Ordner haben zu müssen! :D
Jetzt bitte noch ein Short-Output, ohne den Maker exta starten zu müssen, damit ich anhören kann, obs gut klingt! XD
So könnte man glatt ein ganzes Lied komponieren, ohne eine Datei im Ordner haben zu müssen! :D
Notfalldiscord: Hier klicken
-
Joseys Wuselei
-
Meine Story - Pausiert
Lust auf Abenteuer?
So richtig mit Selbstbestimmung?
Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
"Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
Hier die Antwort:
Hier könnt ihr euren Lieblingschar wählen ;D
Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt. -
Meine Arbeiten
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(Mein) Autismus
Ich bin im autistischen Sprektrum-
sollte ich mich komisch verhalten, oder unhöflich wirken
(oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
ist das nicht beabsichtigt.
Josey. Epicgarantie.
Nehmt das bloß nicht ernst! D: -
Meine Welt
Mein Ehemann Kain!:*
Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
Er verdient einfach einen Platz () in meiner Signatur! XD
-
Mein Support
Der In-Game-Charset-Generator!
Erstelle Random-NPCs mit Charsetteilen!
Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
Bastelt mal Banner! : D
-
Meine beendeten Contests
[Pixelcontest] Rund um den Kürbis
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
Scripted Desaster
("nicht ganz so ernstes Projekt")
Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.
Das bedeutet doch Spaß... -
Pokémon EV
Pokemon EV
("Zeitvertreib nebenbei - Kreatief-Helfer")
Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
Ist inzwischen alles schonmal dagewesen. XD -
Lost Island
Harvest Moon - Lost Island
(Arbeitstitel, "Eventtechnik-Projekt")
Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
Das Spiel ist ein Harvest Moon Abklatsch. XD
Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
-
-
Joseys Fortschritt
-
Endless Ending
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
Musik: 00%
Das macht richtig Spaß XD
-
-
Huiii
Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.
was meinst Du damit?
Quoted
Jetzt bitte noch ein Short-Output
![]() |
Ruby Source code |
1 |
So könnte man glatt ein ganzes Lied komponieren, ohne eine Datei im Ordner haben zu müssen! |
Das große Scientia Wiki zur Spielentwicklung 
Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs
Musik von Shabraxxx für euch
Guide zu den Audioformaten
Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








Quoted
da müsste man jetzt Mustamakkara fragen, wo der Unterschied zwischen einer Ruby-Scriptdatei, die einzelne Miditöne abspielt und einer .midi-Datei ist.
Im Endeffekt ist es das Gleiche. Spoileralarm:
Zum Komponieren ist das Script also zwar nutzbar, aber doch auch echt umständlich

Ist aber ne coole Sache, wenn man nur ein paar einzelne Töne triggern möchte. Zum Beispiel Soundeffekte für irgendwelche Dinge, oder wenn man ein spielbares Klavier haben will, oder warum fällt mir jetzt der Singing Stone aus Stardew Valley ein? Oder lustige Fußmatten, die einzelne Drum-Sounds spielen.

Ich muss eher an den Musikblock aus Minecraft denken, der einzelne Noten abspielt wenn man ihn mit Power versorgt.
Das große Scientia Wiki zur Spielentwicklung 
Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs
Musik von Shabraxxx für euch
Guide zu den Audioformaten
Skripte von mir (Auswahl):
Atmungssystem
| Streichholzsystem
| Animiert durch Bücher blättern
Random : Marktsystem für Kardor
| Staterelated Battlergraphic
| Hinweis auf mögliche Aktionen
SelfSwitchExpirationtimer Skript - Gameplayerweiterung für Pilzesammler und Farmspiele
Meine Skripte werden gerade hier gesammelt.

Was ist das RGSS ? RGSS-Dokumentation auf Sc
Kyoshiros Makerkurs

Musik von Shabraxxx für euch

Guide zu den Audioformaten

Skripte von mir (Auswahl):
Atmungssystem






Random : Marktsystem für Kardor








Quoted
Quoted
Jetzt bitte noch ein Short-Output
was meinst Du damit?
Momentan müsste man die Noten ins Script schreiben, dann den Maker öffnen und das Script triggern, um die Noten zu hören, korrekt?
Ich meinte, du könntest ein kleines Programm basteln, in dem man die Noten reinschreiben und per "Abspielen" einmal anhören kann. Wenn alles passt, kann man die Scriptzeilen, wie sie sind, aus dem Programm kopieren und in das Script im Maker reinpacken XD
Ich kann damit also auch mein Klavier bestücken?
Wo ist denn dann der Vorteil, zu vielen kleinen Mididateien als Note von c-c1? :(
Notfalldiscord: Hier klicken
-
Joseys Wuselei
-
Meine Story - Pausiert
Lust auf Abenteuer?
So richtig mit Selbstbestimmung?
Und mit was Spannendem? Zum Spielen? Ohne Schokolade?
"Eines, das mit dem leistungsstärksten Grafikchip der Welt läuft? Deiner Vorstellungskraft?"
Hier die Antwort:
Hier könnt ihr euren Lieblingschar wählen ;D
Und hier findet ihr das Minigame, das ab und an den Würfel ersetzt. -
Meine Arbeiten
-
Meine Fähigkeiten
Maker:XP
Pixeln:
Mappen:
Eventen:
Scripten:
Komponieren:
-
(Mein) Autismus
Ich bin im autistischen Sprektrum-
sollte ich mich komisch verhalten, oder unhöflich wirken
(oder mich zu oft entschuldigen, unaufmerksam sein, unsicher wirken, zum zehnten Mal nachfragen, blablabla),
ist das nicht beabsichtigt.
Josey. Epicgarantie.
Nehmt das bloß nicht ernst! D: -
Meine Welt
Mein Ehemann Kain!:*
Freund und Helfer in der Not, immer da, steht er mir mit Rat und Tat zur Seite. Meine andere Hälfte! : D
Er verdient einfach einen Platz () in meiner Signatur! XD
-
Mein Support
Der In-Game-Charset-Generator!
Erstelle Random-NPCs mit Charsetteilen!
Diese Spiele finde ich toll und brauchen viel mehr Aufmerksamkeit!
Bastelt mal Banner! : D
-
Meine beendeten Contests
[Pixelcontest] Rund um den Kürbis
Abstimmung
Siegerehrung
Das Wunder der Berge
Abstimmung
Siegerehrung -
Meine Contests
Ein Schreibcontest in Arbeit! : D
-
-
Joseys Spiele
-
Endless Ending
-
Scripted Desaster
Scripted Desaster
("nicht ganz so ernstes Projekt")
Ein verfressener Idiot und ein sarkastischer Workaholic treffen in einem dunklen Wald auf einen weißes Kaninchen...
Ein Auftragskiller jagt einem Meisterdieb hinterher, wobei nicht ersichtlich ist, wer eigentlich wen jagt...
Und eine "Kristallhöhle", sowie einen "Wald ohne Wiederkehr" gibts auch.
Das bedeutet doch Spaß... -
Pokémon EV
Pokemon EV
("Zeitvertreib nebenbei - Kreatief-Helfer")
Ist nur ein Pokemonspiel mit üblicher Story und nicht so üblicher Story.
Ist inzwischen alles schonmal dagewesen. XD -
Lost Island
Harvest Moon - Lost Island
(Arbeitstitel, "Eventtechnik-Projekt")
Ist momentan mein Hauptprojekt, weil bei EE die Scripts einfach fehlen :<
Das Spiel ist ein Harvest Moon Abklatsch. XD
Felder funktionieren, Tiere auch, Grafiken sehen schon gut aus, Maps sind fast fertig. Man kann in die Miene, man kann einkaufen. Auf dem Papier ist alles schon durchgeplant, einiges muss noch umgesetzt werden.
-
-
Joseys Fortschritt
-
Endless Ending
Story: 60%
Charas: 20%
Maps: 01%
Zeichnungen: 05%
Grafiken: 30%
Scripte: 70%
Musik: 00%
...ist nicht viel, huh? ^^° -
Scripted Desaster
Story: 10%
Charas: 60%
Maps: 30%
Zeichnungen: 01%
Grafiken: 60%
Scripte: 70%
Musik: 00%
Gut Ding... -
Pokemon EV
Story: 60%
Charas: 10%
Maps: 00%
Zeichnungen: 00%
Grafiken: 80%
Scripte: 90%
Musik: 70%
Nicht ernstnehmen XD Das mache ich nur, wenn woanders nix mehr geht... -
Lost Island
Story: 100%
Charas: 10%
Maps: 90%
Zeichnungen: 00%
Grafiken: 60%
Scripte: 90%
Musik: 00%
Das macht richtig Spaß XD
-
-
Huiii
Bitte klicken Sie weiter. Hier gibt es nichts zu sehen. Nichts. Hören Sie? Nichts.

Similar threads
-
Sinnieren & Debattieren »
-
Musik-Rechte in RPG (Dec 25th 2008, 2:04am)
-
Einsteigerhilfe »
-
BGM falsch abgespielt (Jul 6th 2008, 10:02pm)
-
RGSS 1 Probleme & Talk »
-
Zeilenumbrüche (Jun 22nd 2008, 5:44pm)
-
RGSS 1 Probleme & Talk »
-
Warum stürzt das ab? (Jan 19th 2008, 7:24pm)