[VB6] Midi tempo bepalen

Pagina: 1
Acties:

  • lacobo
  • Registratie: April 2000
  • Laatst online: 14-02 10:17

lacobo

Tyros2 fan

Topicstarter
Voor mijn Tyros2 (een fijn Yamaha muziekinstrument) ben ik een soort van PC-emulator aan 't bouwen in VB6. Ik wil op grafisch gebied de T2 dicht benaderen en ben al een heel eind. Zie plaatje:

Afbeeldingslocatie: http://www.lacobo.com/yamico4.jpg

De T2 werkt met Styles, dit zijn geavanceerde MIDI files die zich 100% als MIDI's laten beluisteren en bekijken (renamen naar *.mid of zo in een mediaspeler gooien en gaan).

Het tempo wordt helaas fout aangegeven. Om 't tempo te bepalen open ik de Style file met de Mabry.MIDIFileCtrl, vraag 't tempo op en sluit de Style file weer.

If Tempo = True Then
Midifile1.FileName = File1.path & "\" & File1.List(File1.ListIndex + i)
Midifile1.Open
lblTempo(i) = "T =" & IIf(Len(Str$(Round(60000000 / Midifile1.Tempo))) = 4, "", " ") & Str$(Round(60000000 / Midifile1.Tempo))
Midifile1.Close
End If


Werkt als een tierelier, maar ik krijg dan 't tempo van de eindmaat terug, en niet het algemene tempo. En omdat Styles en midi files meestal aan 't eind vertragen... krijg ik dus te lage waardes terug. Voorbeeldje: Style zit op tempo 98, zwabbert bij in- en outro omlaag en eindigt op temp 31. Display geeft dan 31 ipv 98.

Iemand een hint?

[ Voor 5% gewijzigd door lacobo op 15-07-2006 20:14 ]

LACOBO's Tyros2 site: http://www.lacobo.com


  • ThunderNet
  • Registratie: Juni 2004
  • Laatst online: 15-02 13:02

ThunderNet

Flits!

http://www.harmony-central.com/MIDI/Doc/doc.html

:) Gewoon zelf uit de midi file halen? Via die link kun je redelijk uitgebreid vinden hoe een midifile opgebouwd is :)

Heb je liever vooraf, of achteraf, dat ik zeg dat ik geen flauw idee heb wat ik doe?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Zoals je zelf al zegt kan een MIDI file verschillende tempo's hebben. Gedurende het hele nummer kunnen er zoveel tempowijzigingen zijn als de maker ervan maar wil, simpelweg door de bijbehorende bytecode in de MIDI te verwerken. Als jij niet aangeeft wat je precies wil weten voor tempo, dan kun je het ook niet opvragen zoals jij het wil. :)

Ik weet niet wat voor mogelijkheden VB6 biedt voor het uitlezen en/of bewerken van MIDI files, simpelweg omdat ik nooit met VB6 gewerkt heb. Wat ik wel weet is dat het MIDI bestandsformaat niet echt complex is, en je het dus ook zelf zou kunnen doen, zonder standaardcontrol. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • lacobo
  • Registratie: April 2000
  • Laatst online: 14-02 10:17

lacobo

Tyros2 fan

Topicstarter
ThunderNet schreef op zaterdag 15 juli 2006 @ 20:27:
http://www.harmony-central.com/MIDI/Doc/doc.html

:) Gewoon zelf uit de midi file halen? Via die link kun je redelijk uitgebreid vinden hoe een midifile opgebouwd is :)
Bedankt voor deze prachtige berg aan informatie. Toch valt het nog niet mee. Ben nu een half uurtje aan 't spitten door deze info, kom regelmatig 't woord tempo tegen, maar niet waar ik dit kan uitlezen. Ik schrik niet van Hex- of Bin codes, maar kun je m'n zoekgebied iets kleiner maken?

LACOBO's Tyros2 site: http://www.lacobo.com


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • lacobo
  • Registratie: April 2000
  • Laatst online: 14-02 10:17

lacobo

Tyros2 fan

Topicstarter

LACOBO's Tyros2 site: http://www.lacobo.com


  • lacobo
  • Registratie: April 2000
  • Laatst online: 14-02 10:17

lacobo

Tyros2 fan

Topicstarter
Ok, het werkt. Het is een indrukwekkende lap code geworden, die vast veel korter kan, maar daar ga ik wel weer een andere keer op kauwen. Voorlopig draait 't, is snel genoeg en doet 't precies wat ik wil. Bedankt voor de reacties!

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   Open File1.path & "\" & File1.List(File1.ListIndex + i) For Binary As #1
    j = 20
    Do Until hexcomb = "FF5103"
        Get #1, j, hexread
                  hexcomb = Hex(hexread)
        Get #1, j + 1, hexread
        hexcomb = hexcomb & Hex(hexread)
        Get #1, j + 2, hexread
        hexcomb = hexcomb & IIf(Len(Hex(hexread)) = 1, "0" & Hex(hexread), Hex(hexread))
        j = j + 1
    Loop
    Get #1, j + 2, hexread
              hexcomb = IIf(Len(Hex(hexread)) = 1, "0" & Hex(hexread), Hex(hexread))
    Get #1, j + 3, hexread
    hexcomb = hexcomb & IIf(Len(Hex(hexread)) = 1, "0" & Hex(hexread), Hex(hexread))
    Get #1, j + 4, hexread
    hexcomb = hexcomb & IIf(Len(Hex(hexread)) = 1, "0" & Hex(hexread), Hex(hexread))
    hexval = "&H" & hexcomb
    lblTempo(i) = "T =" & IIf(Len(Str$(Round(60000000 / Val(hexval)))) = 4, "", "  ") & Str$(Round(60000000 / Val(hexval)))
    Close #1


Zo dan!

[ Voor 102% gewijzigd door lacobo op 16-07-2006 13:56 ]

LACOBO's Tyros2 site: http://www.lacobo.com


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Post code dan ook tussen code tags. ;)
Hoe post je code? / Hoe gebruik je de code tag?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1