Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » midi per winmm.lib - timing problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
16.06.2008, 17:43 Uhr
~spudubi
Gast


hallo,
ich arbeite mich gerade in die midi programmierung per low-level winmm ein. daten ausgeben per "midiOutShortMsg()" ist ja relativ simpel. ich möchte einen kleinen sequenzer bauen und komm da grad mit dem timing nicht weiter. wie kann ich noten mit einem >stabielen< timing versenden?
wenn ich das einfach mit den systemtimern mache, z.B. so:


C++:
    timeBeginPeriod(1);
    timer = timeGetTime() - startZeit;
    timeEndPeriod(1);

    if(timer >= 200) {
        midiOutShortMsg(outHandle, 0x00403C90);
        timeBeginPeriod(1);
        startZeit = timeGetTime();
        timeEndPeriod(1);
    }


schwankt das timing der notenausgabe hörbar. Die Benutzung von "QueryPerformanceCounter" statt "timeGetTime" bringt zwar ein wenig, das timing ist aber dennoch nicht wirklich straight.

hat jemand ahnung, wie man in c++ (visual v++ 2005, winXP 32) einen stabilen timer programmieren kann?

ich wäre über antworten sehr dankbar, da ich ein wenig in zeitdruck stehe (studienprojekt).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
16.06.2008, 18:04 Uhr
Oliver
S2-Pixelgeneral


Also der Performance Counter ist ja nun genau bis zum geht-nicht-mehr, dann liegt es wohl eher daran, dass der Code, wo du den Timer prüfst, unregelmäßig aufgerufen wird. Wo steht der denn?
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
16.06.2008, 20:31 Uhr
~spudubi
Gast


hey, ersteinmal vielen dank für die schnelle antwort.

ich prüfe den timer direkt in dem mainloop der winmain. erst check ich, ob windows irgendwelche messages schickt, und dann prüf ich den counter. ein regelmässiger aufruf als der an der stelle gibt es doch nicht, oder?

ich hatte in dem zusammenhang auch irgendwo gelesen, dass man die priorität des threads erhöhen kann. habe jedoch keine ahnung von threads und wie ich das anstellen könnte. könnte das was bringen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: