Hello, Guest the thread was called388 times and contains 3 replays

last post from DutchGuy at the

Question about programming music in ASM and MIDI file. Frage zur Programmierung von Musik in ASM und Midi Datei

  • I am programming a small game in C64 ASM with use op CBM PRG.

    I copied a bit of code out of the book "Machine Language Routines for the C64 and 128" to play a tune and it works fine.

    My question is what is now the best way to get a MIDI tune (existing of 3 channels) to it: Melody, Base and hi-hats.

    I could with help of my midi editor type al the notes 1,2,3 (1= C) with the duration 1,2,3. But this will be quite extensive work.

    Is it possible to do this smarter?

    Advice and pointers are much appreciated.

    Since this is a German site I also post this message in German :)


    Ich programmiere ein kleines Spiel in C64 ASM mit Verwendung von op CBM PRG.

    Ich habe ein wenig Code aus dem Buch "Machine Language Routines for the C64 and 128" kopiert um eine Melodie zu spielen, und es funktioniert gut.

    Meine Frage ist, wie man jetzt am besten eine MIDI-Melodie mit 3 Kanälen dazu bekommt: Melodie, Base und Hihats.

    Ich könnte mit meinem Midi-Editor alle Noten 1,2,3 (1= C) mit der Dauer 1,2,3 eingeben. Aber das wird eine ziemlich umfangreiche Arbeit sein.

    Ist es möglich, dies intelligenter zu machen?

    Ratschläge und Hinweise sind sehr willkommen.

  • Da MIDI am C64 leider nicht standartisiert ist müsste erstmal vom Benutzer abgefragt werden welche MIDI Schnittstelle den benutzt werden soll, es gibt viele für den Expansion Port aber auch welche die am Userport betrieben werden. Diese müssen entsprechend initialisiert werden und dann kann das Senden der MIDI Bytes fast schon losgehen. Mir ist da aber keine fertige lösung bekannt.

    Kann aber schon einmal den Hinweis geben das die MIDI Implemetierung im VICE Emulation ein wenig Buggy ist, z.B. Kann im MIDI Standard nach einem Note On einfach die nächste zu spielende Note gesendet werden unter Windows im VICE kommt dann aber nix, währen ein echter C64 mit z.B. Datel-MIDI Schnittstelle so spielt wie es der Standard vorsieht.

    Ich bin da gerade im Thema wegen dem BronxBox Projekt welches auch neben 8 Drum Spuren über den Userport noch 4 MIDI Spuren über ein MIDI Cartridge am Expasionport spielt. Und dabei ist mir der Unterschied zwischen VICE und echter Hardware aufgefallen.

  • :

    Kann aber schon einmal den Hinweis geben das die MIDI Implemetierung im VICE Emulation ein wenig Buggy ist, z.B. Kann im MIDI Standard nach einem Note On einfach die nächste zu spielende Note gesendet werden unter Windows im VICE kommt dann aber nix, währen ein echter C64 mit z.B. Datel-MIDI Schnittstelle so spielt wie es der Standard vorsieht.

    :

    Tritt das nur bei folgenden NoteOns auf dem selben Kanal auf oder ist das immer der Fall? Wenn das nur bei folgenden NoteOns auf dem selben Kanal auftritt wird da ggf. ein running status von VICE falsch interpretiert?

  • Ok, here is an update.

    1. With help of the tool https://www.fourmilab.ch/webtools/midicsv I was able to convert my 3 channel midi to a CSV

    2. If you look at the CSV, I noticed the Notes on and Notes off

    The definition is as follows:

    Track, Time, Note_on_c, Channel, Note, Velocity :

    Send a command to play the specified Note (Middle C is defined as Note number 60 on the given Channel with Velocity (0 to 127)

    More in detail:

    maxresdefault.jpg

    2, 3456, Note_on_c, 1, 48, 127
    2, 3522, Note_on_c, 1, 30, 110
    2, 3542, Note_off_c, 1, 30, 0
    2, 3542, Note_off_c, 1, 48, 0
    2, 3552, Note_on_c, 1, 47, 110


    3. So to come back to the C64 :) i can now easily convert the Notes to values for my ASM program and correct frequency and voice number for the SID.
    The only questions I now have are:


    A. How to use the Velocity (volume up when note on, and volume down when note is off) because the volume of the SID is for all voices the same. Correct?

    B. How can I easily thest my voice settings type, attack & decay settings to match my base and hi-hat sound I want to have. Is there tool to do that? And when you are done with it export the settings to ASM file with the correct SID settings?


    Your advice is appreciated!


    -------------------------------------------------


    Ok, hier ist ein Update.


    1. Mit Hilfe des Tools https://www.fourmilab.ch/webtools/midicsv konnte ich mein 3-Kanal-Midi in ein CSV konvertieren.


    2. Wenn Sie sich das CSV ansehen, sind mir die Ton an und Tone off aufgefallen

    2, 3456, Ton _ zu _c, 1, 48, 127

    2, 3522, Ton _ zu _c, 1, 30, 110

    2, 3542, Ton _ aus _c, 1, 30, 0

    2, 3542, Ton _ aus _c, 1, 48, 0

    2, 3552, Ton _ zu _c, 1, 47, 110


    Die Definition lautet wie folgt:

    Spur, Zeit, Ton _auf_c, Kanal, Note, Geschwindigkeit :

    Senden Sie einen Befehl, um die angegebene Note zu spielen (das mittlere C wird als Ton Nummer 60 auf dem gegebenen Kanal mit Velocity (0 bis 127) definiert)


    3.Um noch einmal auf den C64 zurückzukommen :) Ich kann jetzt die musikalischen Noten leicht in Werte für mein ASM-Programm umwandeln und die Frequenz und Stimmnummer für den SID korrigieren.

    Die einzigen Fragen, die ich jetzt habe, sind:


    A. Wie benutze ich die Velocity (lauter, wenn die Note an ist, und leiser, wenn die Note aus ist), da die Lautstärke des SID für alle Stimmen gleich ist. Ist das richtig?


    B.Wie kann ich die Einstellungen für den Typ, die Attack- und Decay-Einstellungen meiner Stimme so einstellen, dass sie zu meiner Base und dem Hi-Hat-Sound passen, den ich haben möchte. Wie kann ich auf einfache Weise die Einstellungen für den Stimme typ, die Attack- und Decay-Einstellungen meiner Stimme an meinen gewünschten Basis- und Hi-Hat-Sound anpassen? Gibt es ein Werkzeug, um das zu tun? Und wenn Sie damit fertig sind, exportieren Sie die Einstellungen in eine ASM-Datei mit den richtigen SID-Einstellungen?


    Ihr Rat ist willkommen