Die Weihnachtszeit ist vorüber und die Melodie klingel vom Mr.Chang hat
sich als sehr brauchbar erwiesen. Klingt tatsächlich wie eine kleine
Spieluhr - sehr schmuck :))
die mitgelieferten Melodien (mel.txt, mel1.txt, mel2.txt) habe ich
tatsächlich in asm umgewandelt bekommen - kuzum - funktioniert, wie
erwartet.
Wie könnten die txt Dateien jedoch erstellt werden?
Für Elise usw. geht einem ja nach einer gewissen Zeit schon auf den
Geist...
Hat jemand eine Ahnung, ob man das direkt aus eine MIDI Datei
herausbekommt.
Sicher hat Mr.Chang auch ein perl Script verwendet. Leider ist es nicht
dabei:(
Ich habe jetzt mal aus dem Netz einige MIDI Editoren gezogen, aber
keines der Programme erlaubt ein entsprechenden Export, von
Notenblättern mal abgesehen.
Wenn da einer einen Tipp für mich hätte, würde ich mich jedenfalls
freuen.
SuFu hatte ich benutzt, google auch, danke.
gnmidi habe ich probiert
http://www.gnmidi.com/handbook/english/midi2txt.htm
die Ausgabe müsste denn allerdings nochmal nachbearbeitet werden, denn
Noteoff gibt es ja nicht und Attack ist fest eingestellt.
Viele Grüße
Axelr.
EDIT
wenn man die Noteneinschwingerei ähnlich der Envelopekurve am Ende der
Note und nicht mit einem 1K Sample machen würde, könnte man evtl
verschiedene Sustainbereiche und somit mehrere Instrumente generieren...
(Nur so 'ne Idee, was haltet ihr davon?
>wenn man die Noteneinschwingerei ähnlich der Envelopekurve am Ende der>Note und nicht mit einem 1K Sample machen würde, könnte man evtl>verschiedene Sustainbereiche und somit mehrere Instrumente generieren...>(Nur so 'ne Idee, was haltet ihr davon?
Na ja, für den Attack-Abschnitt ist ja nicht nur die Hüllkurve, sondern
auch die darin enthaltenen Frequenzen charakteristisch. Also das
Einschwingsample ist schon wichtig; nur die Hüllkurve zu manipulieren,
würde wahrscheinlich ein bißchen seltsam klingen.
Ich hab mal mit Synthesizern gearbeitet, wenn man den Attack
abschneidet,
erkennt man selbst gut gesampelte Instrumente nicht mehr.
Der gute Chan hat schon gewußt, warum er sich die Spieluhr ausgesucht
hat: Hier kann man eben mit einfachen Mitteln dem Original schon sehr
nahe kommen.
Was die Erstellung der Melodiedaten betrifft: Ist es nicht am
einfachsten, die Tonfolge von Hand einzugeben? Die Zeiten(Zahlenfolge)
kann man ja mit einem kleinen Programm (Delpi?) erzeugen.
Wie werden eigentlich Pausen erzeugt?
Bei dem Stück "Für Elise" kommt ja alle 30 Ticks ein Ton.
>Die Weihnachtszeit ist vorüber und die Melodie klingel vom Mr.Chang
Du machst ja aus Mr. Chan einen Chinesen ;-)
>> Du machst ja aus Mr. Chan einen Chinesen ;-)>
Auweia, stimmt!! sry:)
ich habe mal testweise den Attack-Teil weggelassen und muss Dir recht
geben, leider...
nun macht der Attack-Teil leider nur einen Bruchteil der Spielzeit aus
und schluckt 1K Flash. Mein Ansinnen war es, 2 verschiedene Instrumente
einzubauen. Die Spieluhr für die Meoldie und einen weich ein- und
ausklingendes Instrument für die Begleitung.
>Wie werden eigentlich Pausen erzeugt?>Bei dem Stück "Für Elise" kommt ja alle 30 Ticks ein Ton.
TmrS wird in der Hauptschleife mit dem aktuell eingelesenen Timetick
verglichen, wenn augenblicklich keine Note zu spielen ist und die alte
ausgeklungen ist, wird eben keine gespielt.
1
start_play_snd:
2
ldiw Z, score*2
3
play_snd:
4
cli
5
clrw _Tmr
6
clr _TmrS
7
sei
8
9
pl_next:
10
lpmw B, Z+ ;timeticks laden, R18:R19<-LOW:HI
11
;sbrc DL,2
12
;ser BL
13
rcall drv_decay
14
cli
15
cpw _Tmr, B ;timeticks vergleichen
16
sei
17
brcs PC-5
18
pl_note:
19
lpm CL, Z+ ;note laden
20
cpi CL, EoS
21
breq sprung_rst
22
mov AL, CL
23
rcall note_on
24
andi CL, en
25
breq pl_note
26
rjmp pl_next
27
28
sprung_rst:
29
rjmp reset
ist schon jemandem eingefallen, was
1
sbrc DL,2
2
ser BL
eigentlich macht? Register DL wird nirgentwo verwendet. Ich habs mal
auskommentiert - keine Änderung im Ergebnis.
nun ist es mir gelungen, mittels MidiOx und MIDIYoke
http://www.midiox.com/moxdown.htmhttp://www.midiox.com/zip/MidiYokeSetup.msi
Midi-Dateien in asm zu wandeln. kllingt zwar etwas komisch, da das Event
Not-Off nicht existiert, klingt aber schonmal ganz gut.
ich habe exemplarisch mal den Song "Africa" von Toto ausgewählt und ein
(leider etwas großes) Stück daraus herauskopiert.
Sieht prinzipiell so aus:
1
TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT
2
1375970 2 1 147 73 0 4 C# 4 Note Off
3
1376115 2 1 147 76 0 4 E 4 Note Off
4
1376900 2 1 144 56 0 1 G# 2 Note Off
5
1376908 2 1 144 61 0 1 C# 3 Note Off
6
1376915 2 1 144 64 0 1 E 3 Note Off
7
1376963 2 1 144 66 104 1 F# 3 Note On
8
1376963 2 1 144 69 112 1 A 3 Note On
9
1376963 2 1 144 57 104 1 A 2 Note On
10
1376963 2 1 144 61 100 1 C# 3 Note On
11
1377226 2 1 147 81 95 4 A 4 Note On
12
1377458 2 1 147 81 0 4 A 4 Note Off
13
1377573 2 1 147 81 90 4 A 4 Note On
14
1377779 2 1 147 81 0 4 A 4 Note Off
15
1377871 2 1 147 81 67 4 A 4 Note On
16
1377976 2 1 147 81 0 4 A 4 Note Off
17
1378063 2 1 147 81 86 4 A 4 Note On
18
1378222 2 1 144 62 104 1 D 3 Note On
19
1378230 2 1 144 61 0 1 C# 3 Note Off
20
1378441 2 1 147 81 0 4 A 4 Note Off
21
1378501 2 1 147 81 82 4 A 4 Note On
22
1378753 2 1 147 81 0 4 A 4 Note Off
23
1378826 2 1 147 81 86 4 A 4 Note On
24
1379053 2 1 147 81 0 4 A 4 Note Off
25
1379138 2 1 147 81 90 4 A 4 Note On
26
1379390 2 1 147 81 0 4 A 4 Note Off
27
1379476 2 1 144 62 0 1 D 3 Note Off
28
1379476 2 1 147 81 105 4 A 4 Note On
29
1379491 2 1 144 66 0 1 F# 3 Note Off
im MIDIOX habe ich nur den Kanal 1 und 4 gefiltert und dann Excel
bemüht, da ich meine Delphi CD nicht mehr lesen kann und eine
Installation leider fehlgeschlagen ist :((
aus dem Mitschnitt wurde dann (auszugsweise)
Am Ende muss dann noch 255,5,EoS eingetragen werden.
Die gesamte Prozedur ist etwas aufwändig und im Excelblatt 8siehe
Anhang8
im VBA Modul1 in der Sub midi2asm zusehen.
erst wird die Textdatei (bei mir Africa_1_4_1.txt) eingelesen und die
NoteOff ereignisse entfernt.
dann werden die Noten+Oktave "vereint".
gleiche Zeiten suchen und alle Noten in eine Reihe schreiben.
nicht mehr benötigte zeilen löschen
Zeit aufarbeiten (8ms Timticks)
Breich zum markieren bestimmen und bereich markieren (Zeit+Noten)
Bereich in neues Tabellenblatt kopieren und den Bereich dann im Neuen
Blatt als Textdatei exportieren.
Nun in der erstellten textdatei alle kommas in Leerzeichen wandeln und
doppelte Leerzeichen am Ende der textdatei eintfernen.
Zum Schluss das Perl Script drüberjagen lassen...
Hallo Axel,
ich habe hier im Forum schon einige Threads zu Chans Programm gefunden,
aber eine Frage ist noch offen (keine Ahnung von ASM):
Wie werden die Noten auf Kanäle verteilt?
Also in welchen Register kommen z.B. diese Werte?
.db 1, 0, Fis3, A3, A2, Cis3|en
Ich versuche gerade, das Ganze in C nachzumachen..
@Axel
Wie hat er das gemacht? wahrscheinlich einfach das Notenblatt
hergenommen. "Für Elise" ist einfach, weil sich leicht alle Notenlängen
und -Höhen normieren lassen.
Also ich hatte gedacht, dass die Noten auf noch freie Kanäle verteilt
werden, aber:
"Because number of channles is small, when a number of notes are on at a
time, old notes are overwritten and canceled by new one."
Einen Mitschnitt gibt es auf der o.g. Site.
Hi , Axel Rühl (axelr) !
Könntest du etwas genauer erklären, wie du aus MIDI-datei die codes für
melody.asm erstellt hast?
Ich komme nicht mal MidiOx zurecht...:(