You are here
Home > articles

qtsource.

Fa ting gjort med Qt Quick / QML.

Multithreaded lyd ved hjelp av QAudioOutput.

Mens jeg jobber med en app, la jeg merke til at hvis QML-brukergrensesnittet kjorer animasjoner, og samtidig prover jeg a bruke QAudioOutput for a spille av lydeffekter, blir animasjonen uhoflig ganske enkelt, i hvert fall pa (Symbian) -enheten. Jeg antar at arsaken til problemet er at lydbehandling skjer i samme trad som kjorer hendelseslokken.

Losningen pa problemet er ganske apenbart & # 8211; Flytt lydrelaterte ting til en annen trad. Dette krever imidlertid litt tinkering, sa jeg dokumenterer losningen her hvis noen andre star overfor det samme problemet. Selvfolgelig er denne losningen pa ingen mate eksklusiv for lydutgang, det kan like godt brukes til a gjore noen (QML eller C ++-initiert) behandling i en egen trad.

I implementeringen bruker jeg to C ++-klasser, SfxPlayer og SfxThread. SfxPlayer blir utsatt for QML-siden, og den inneholder ett spor, spill (). Det eneste formalet med klassen er a inneholde et SfxThread-objekt og a jobbe som en proxy for a pakalle metoder pa den andre traden.

Saken som forarsaket en bit av riper, var hvordan man gjorde at spillerdraden faktisk gjorde behandlingen i den andre traden i stedet for den som ringer. Losningen er a ringe QObject :: moveToThread (dette); i konstruksjonen av traden.

Det er det! Du kan na utsette SfxPlayer-objektet til QML. Ringer .play (); i QML vil na bare pakalle spillemetoden til SfxThread i den nye traden som kjorer den egen hendelseslokke.

Dele denne:

I slekt.

Post navigasjon.

Legg igjen et svar Avbryt svar.

Darlig vane a navngi headerfilen SfxThread.h og a inkludere den som sfxthread.h & # 8211; Dette vil ikke fungere pa noen plattformer.

Takk for kommentaren!

I prosjektet er filene faktisk navngitt sfxthread.h etc., men av en eller annen grunn skrev filnavnene med store bokstaver nar de skrev blogginnlegget. Fast na.

Takk for dette innlegget!

Det var veldig ussefull for en app jeg jobber for tiden pa!

Men det er et problem med multithread QAudioOutput ved hjelp av, som ikke har blitt lost i et innlegg ovenfor. Det stopper og slettes av QAudioOutput-objektet. Prov a slette _ao etter exec (). Mitt program slar, nar jeg gjor det. Jeg har provd mange forskjellige arkitekturer (for eksempel din med overbelastet trad, flytting til simpe QThread med kossamtaler osv.) Jeg kan bare slette QAudioOutput fra UI-traden.

kan du gi meg proveformat som sybian kan spille? kanskje et lite fungerende eksempel med en wav-fil kan hjelpe meg mye. Takk skal du ha.

Thanx for dette innlegget! Den lille & # 8220; setBufferSize () & # 8221; hjalp meg mye! Jeg trodde, jeg matte gjore programmet mitt multithreaded, men det var ikke engang tilfelle & # 8230; matte bare oke eller sette bufferstorrelse i utgangspunktet! Thanx!

Twitter oppdateringer.

Feil: Twitter reagerte ikke. Vennligst vent noen minutter og oppdatere denne siden.

Top

Vil du spille i det mest heldige kasinoet? Vi samlet det for deg. Spill her nå!