[MIDI] MIDI file schrijven gaat niet goed

Pagina: 1
Acties:

  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Ik ben in C++ een simpele muziekverwerkingsapp aan het schrijven en één van de dingen die die moet kunnen is een textbestand met noten inlezen en deze outputten als een MIDI-file. Alles lijkt goed te gaan, op het laatste ding na: midi-spelers zeggen dat mijn files incorrect zijn. Ik heb geprobeerd ze te openen in zowel Windows Media Player ("Class factory cannot supply requested class") als in Cakewalk ("Cannot read file"; Cakewalk is een echte professionele MIDI-editor) en beide vreten hem niet.

Mijn files zijn dus niet goed, maar volgens een hex-editor die ik van internet downloade bevatten ze wel de gewilde code. Ik denk dus dat ik me niet goed houd aan de MIDI-standaard. Mijn output lijkt wel te kloppen met wat ik op www.wotsit.org vond over MIDI, maar blijkbaar zie ik dus nog iets over het hoofd. Weet iemand hier misschien wat ik verkeerd doe?

Dit is de MIDI-output die ik maak, inclusief in commentaar wat ik denk dat het zou moeten betekenen:

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
//MIDI header
4d 54 68 64 00 00 00 06 00 00 00 01 00 78

//track header
4d 54 72 6b 00 00 00 2a

//patch setting op piano
00 c0 00

//speed settings op een kwart is 500ms
00 51 00 01 f4

//een muzieknoot en diens einde
00 90 58 40 a7 80 58 00

//een muzieknoot en diens einde
00 90 48 40 a7 80 48 00

//een muzieknoot en diens einde
00 90 68 40 a7 80 68 00

//een muzieknoot en diens einde
00 90 78 40 a7 80 78 00

//track ending
00 2f
Mocht er iemand zijn die me hiermee kan helpen: alvast bedankt!

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • niwreG
  • Registratie: Augustus 2003
  • Laatst online: 17-10-2024

niwreG

^heeft dat geschreven->

wat gebeurt er als je hem binair weg schrijft? (ik heb zelf ook geen idee maar mischein dat het helpt :))

hms ik heb @ wotsit's ook ff midi opgezocht en het zal dus niet werken :x nevermind :)

[ Voor 31% gewijzigd door niwreG op 18-02-2005 11:27 ]

^^eventueele typfouten zijn als vermaak bedoeld


  • cenix
  • Registratie: September 2001
  • Laatst online: 13-05 18:15
Ik gok maar wat (heb de spec nog niet voldoende doorgenomen, maar ik zag zo snel niets over commentaar staan), maar in het formaat heb je commentaar staan. Als dit een regelrechte kopie is van de midi file heb je daar dus ook commentaar in staan.

Misschien vinden de programma's het commentaar niet leuk.

Ander punt is in wat voor formaat is het bestand opgeslagen, ANSI, DOS, anders?

  • klinz
  • Registratie: Maart 2002
  • Laatst online: 07-03 16:48

klinz

weet van NIETS

Ik heb ooit een tooltje van Perl naar C geport, waarmee je midi-bestanden kunt analyseren. Je kunt dan zien waar het fout gaat. Wellicht dat je er iets aan hebt?

dumpmidi

  • Oogst
  • Registratie: Juli 2001
  • Laatst online: 04-01 21:29
Ah, sorrie, ik had wat duidelijker moeten zijn. MIDI is een binaire format, maar door de opbouw is het het beste leesbaar als hexadecimaal. De file bevat dan ook geen commentaar of spaties of enters of whatever. Dat was alleen maar om duidelijk te maken wat ik denk te hebben staan, want ik denk dat je zoiets lastiger te lezen is:

4d 54 68 64 00 00 00 06 00 00 00 01 00 78 4d 54 72 6b 00 00 00 2a 00 c0 00 00 51 00 01 f4 00 90 58 40 a7 80 58 00 00 90 48 40 a7 80 48 00 00 90 68 40 a7 80 68 00 00 90 78 40 a7 80 78 00 00 2f

Het is dus ook niet ANSI of zo, het is bineair. Tenminste, ANSI is voor txt-files, toch?

Die mididump-app ga ik even proberen, dat klinkt interessant. :)

edit: Ik zie in ieder geval meteen al dat er iets goed mis is: die app blijft hangen op de plek waar de file afgelopen zou moeten zijn.

[ Voor 18% gewijzigd door Oogst op 18-02-2005 18:57 ]

Devblog / portfolio
Swords & Soldiers
Awesomenauts
Proun
Cello Fortress


  • smallboy
  • Registratie: September 2000
  • Laatst online: 04-05 16:29

smallboy

N/A

Toevallig ben ik voor school een beetje bezig met het midi protocol.
Ik zie alleen zo 1,2,3 niet wat er fout gaat.

Kijk eens goed naar http://www.borg.com/~jglatt/tech/midifile.htm daar staat precies in hoe alles eruit moet zien.

Kijk ziezo even naar de meta events. Waar jij denkt dat je je speed instelt, gaat het al fout volgens mij: 00 51 00 01 f4
Speed instellen gaat met:
00 (delta time 00 -> gelijk aan het begin van de track)
FF 51 03 tt tt tt
Indicates a tempo change. The 3 data bytes of tt tt tt are the tempo in microseconds per quarter note. In other words, the microsecond tempo value tells you how long each one of your sequencer's "quarter notes" should be. For example, if you have the 3 bytes of 07 A1 20, then each quarter note should be 0x07A120 (or 500,000) microseconds long.

Hier staat een duidelijker programma om een midi naar text om te zetten (dus controller change zoveel, note zoveel bla bla)

[ Voor 68% gewijzigd door smallboy op 23-02-2005 17:58 ]

Pagina: 1