Nierowny timer?

0

Timer wyzwala mi co 500ms krociotkiego wave'a (tego samego) - jak typowy metronom. Ale kiedy pomacham wiecej myszka, czy otwieram DriverCombo w mojej aplikcji - zwalnia i to znaczaco. W ogole gra nierowno ;-) Jest jakis sposob na ten timer, zeby byl niezalezny od poczynan uzytkownika i po czesci systemu?

Jacek

D7PE, WinXP, 2.53GHz;

0

Odgrywaj dźwięk w oddzielnym wątku...

0

Moze DXTimer ?

0

TThreadTimer

0

A nie lepiej zrobić wava 500ms zawierającego twój wav i ciszę dopełniającą do 500ms i puścić go:

playsound('c:\a.wav', 0, SND_ASYNC or SND_LOOP);

0

Sprobuje z watkiem.

PQ - nie moge dac wave'a 500ms, bo czas timera jest zmienny, nie zawsze jest to rowne 500ms; podalem te wartosci jako przyklad.

Pozdrawiam,
Jacek

0

A rozważałeś dołączanie do Twojego krótkiego wava odpowiednio długiej ciszy w zależności od wymaganej częstości 'tykania'? To jest proste do zrobienia. Możesz nawet zrobić to w pamięci (TMemoryStream), będzie szybciej. PlaySound mozna puszczać z pamięci.

0

pq: Takie rozwiazanie nie jest dobre, moim zdaniem oczywiscie. Zrobilem z watkiem i przy obecnym stanie 'nieskomplikowatosci' ;-) aplikacji to wystarcza. Wsrod powyzszych wypowiedzi jest TThreadTimer - czy to jest komponent innej wersji ni PE? Pracuje na D7 PE. Czy chodzilo po prostu o nazwe klasy TThread?

Jacek

0

Temat ten byl juz kilkakrotnie poruszany, tylko w troche innych wydaniach :), ale wnioski byly podobne (wiem, bo sam mialem taki problem). Ogolnie DXTimer jest dokladniejszy i u mnie akurat to dzialalo lepiej niz osobny watek, jednak z praktyki wiem, ze roznie to wychodzi na roznych systemach. I tak dla systemow z rodziny na jadrze NT (win2k, xp etc) timer dziala o niebo lepiej, a np. na win98 wychodzi totalna kiszka.

0

pq: Takie rozwiazanie nie jest dobre, moim zdaniem oczywiscie.

Czemu? Tak z ciekawości pytam...

0

pq: cisze musialbym generowac w zaleznosci od tempa tykania, tworzyc nowego wave'a, budowac go z aktulanego dzwieku metronomu i tej ciszy, ktora tez musialbym utworzyc. Jesli tempo w trakcie pracy programu sie zmienia to tym samym te procedury musialbym tworzyc wielokrotnie. Chyba, ze nie o to chodzi...

Jacek

0

Chyba, ze nie o to chodzi...

Generalnie o to. Wydaje mi sie dosc proste.

Jesli istnieje dolne ograniczenie czestotliwosci, wtedy moznaby utworzyc jednego, najdluzszego mozliwego wava i podmieniac dlugosc w naglowku. Byloby jeszcze prosciej.

0

pq:
Metronom tyka sobie wg tempa poczatkowego. W trkacie np. odtwarzania wg tzw. mapy tempo zmienia sie. Z timerem wydaje sie to o tyle proste, ze zmieniam sobie tylko jego interwal. A tu musze przerobic wave'a. Kazdy sposob jest dobry.

BTW. Nie tak dawno pytalem tu na forum jak odtworzyc wave'a metoda streaming i nikt mi nie odpowiedzial, tylko odsylali mnie do bibliotek typu BASS. Standardowy PlaySound nie wystarcza w wielu sytuacjach. Moze Ty potrafisz mi pomoc? Chodzi mi o to, ze otwieram port (waveOut), potem trzeba przygotowac naglowki (waveOutPrepareHeader), wyslac go (waveOutWrite) itd. I to jest to czego nie potrafie ;-( Otworzyc jeszcze jako tako ;-) Ale dalej zima. Wiem, ze BASS i Fmod umieja, ale ja nie ;-) I chce sie nauczyc. ??

Jacek

0

TThreadTimer to darmowy komponent wraz ze zrodlem :)

0

pq:
Moze Ty potrafisz mi pomoc?

No niestety. Umiem (a przynajmniej kiedyś umiałem) odegrać wava pod DOSem, ale pod Windą nie wyszedłem poza PlaySound. Miałem ochotę poszperać więcej w temacie, ale nie starczyło czasu ani zapału...

1 użytkowników online, w tym zalogowanych: 0, gości: 1