HWAVEOUT benutzen um zu einer bestimmten Stelle zu "spulen"



  • HI!
    Ich habe hier eine ganze Klasse die Recorden, Playn, Pausen, Stoppen und Resumen unterstützt. Sie benutzt HWAVEOUT/HWAVEIN als Grundlage. Leider gibt es ein Problem, und zwar möchte ich über einen Slider die Position ab der abgespielt werden soll festlegen können! Leider gibt es nur die Funktion waveOutGetPosition aber kein Gegenstück wie waveOutSetPosition 😞
    Habt ihr vielleicht irgendeine Ahnung wie man das sog. "seeking" einbauen könnte mit der Grundlage HWAVEOUT? Wäre echt super wenn das noch mit HWAVEOUT klappen würde, weil sonst die ganze Klasse umsonst wäre.

    Vielen dank schonmal

    Kevin



  • ich gehe davon aus, du benutzt das wave-api.

    wenn du ein file abspielst, dann wird in regelmässigen abständen ein buffer an den wave-treiber mittels waveOutWrite geschrieben. der trick ist jetzt, das du nicht die play position im aktuellen buffer im treiber änderst ( geht auch gar nicht ), sondern ein waveOutReset auslöst ( alle buffer ungültig ) und dich dann im file/speicher bewegst und die daten an der neuen position entsprechend wieder an den treiber rausschreibst. wenn die buffergrösser im rahmen liegt ( 2k bei 44,1/16/2 ) ist völlig ausreichend, hört man das reset nicht.

    rocknix ///



  • Danke, muss sehen ob mmioSeek nich praktischer ist 🙂



  • HI!
    Es geht leider nicht, dass ich einfach, wenn ich z.b. nur die Hälfte abspielen will, nur die Hälfte der Daten in den Buffer schreiben...da das Waveformat noch mit Samples aufgebaut ist. D.h. wenn ich nur die Hälfte abspielen will muss ich alle Samples durchgehen und bei der Mitte ca. aufhören und diese noch setzen..wisst ihr wie man durch diese Samples durchlaufen könnte? Ist nämlich ziemlich komisch..ich hatte es mit mmioSeek versucht und bei der Klasse kann man die NumSamples setzen...ging auch eigentlich ganz gut nur bei ungeraden Angaben (z.b. Seek) bekam ich nur Rauschen obwohl ich sicher die neuen Daten richtig gesetzt habe.

    Kevin



  • ging auch eigentlich ganz gut nur bei ungeraden Angaben (z.b. Seek) bekam ich nur Rauschen obwohl ich sicher die neuen Daten richtig gesetzt habe.

    das hört sich verdächtig danach an, dass du das word-allignment in 16bit pcm daten nicht eingehalten hast und du genau zwischen high und low byte gelandet bist. wenn das offset byte-alligned arbeitet darfst natürlich nur gerade werte nehmen um den zeiger zu verschieben. und wenn es ein stereo-file ist sogar nur +/-4 byte schritte gehen, da du ansonsten auch noch die kanäle tauschst.

    rocknix ///


Anmelden zum Antworten