Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: SDL_mixerillä viivettä äänitiedoston toistamisessa

Sivun loppuun

tuomas11 [25.07.2008 21:00:26]

#

Eli olin tehnyt yksinkertaista peliä, jossa täytyy painaa hiirtä ruudun taustavärin vaihtuessa. Haluaisin laittaa peliin mukaan ääniä ja yksi niistä pitäisi kuulua juuri samaan aikaan kun ruudun taustaväri vaihtuu.

Äänen saan kyllä kuuluviin, mutta se kuuluu vasta noin 0,4 sekuntin päästä ruudun värin vaihtumisesta. Ääni toistetaan sen funktion ensimmäisellä rivillä, joka vaihtaa myös näytön taustavärin, eli sen ei pitäisi olla ongelma. Äänitiedostossakaan ei hiljaisia kohtia ole ollenkaan.

Lisäksi huomasin, että kun ohjelman sulkee, niin se sulkeutuu pienellä viiveellä. Alkuperäinen ohjelma ilman ääniä sulkeutuu välittömästi.

SDL_mixerin käyttöön olen ottanut oppia oppaista löytyvän SDL-oppaan viimeisestä osasta.

Osaisiko joku auttaa?

Gaxx [25.07.2008 21:28:25]

#

Ethän vain lataa äänitiedostoa joka kerta, kun toistat sen?

tuomas11 kirjoitti:

Ääni toistetaan sen funktion ensimmäisellä rivillä

Funktioita on moneen lähtöön... Koodi vois selventää, jos ei tuolla selviä.

tuomas11 [26.07.2008 17:50:37]

#

Äänitiedosto ladataan jo ohjelman käynnistyksen yhteydessä.

Funktion koodi, jolla ääni on tarkoitus toistaa on seuraava:

inline void Soita()
{
     if(Mix_PlayChannel(0, aani, 0)==-1)
     {
     fprintf(stderr, "Virhe : %s ", Mix_GetError());   // virhe
     }
}

Ja tässä sitä nyt käytetään:

void NaytaMerkki()
{
     Soita();
     nayta = true;
     aloitusaika_r = SDL_GetTicks();
ym, ym , ym...

progo [26.07.2008 20:50:34]

#

Seuraa vähän typerä mietintä: onko soitettavan äänitiedoston alussa tyhjää tai muuten hiljaista, joka voisi aiheuttaa viiveen vaikutelman?

tuomas11 [26.07.2008 23:18:06]

#

progo kirjoitti:

Seuraa vähän typerä mietintä: onko soitettavan äänitiedoston alussa tyhjää tai muuten hiljaista, joka voisi aiheuttaa viiveen vaikutelman?

Ei, kyllä siinä äänitiedostossa alkaa ääni heti.

Gaxx [27.07.2008 15:05:14]

#

Kannattaa tutkia ohjelman fps, jos kerta ohjelma myös sulkeutuu viiveellä.

Pasteamastasi koodista ei selviä koko olennaista väliä(piirtohetkestä äänentoistohetkeen), joten tuosta ei vielä voi tehdä mitään päätelmiä.

Tutkihan, kauanko kuluu aikaa piirron ja äänen toiston välillä ja vaikka kumpikin tai vain toinen mukaanlukien.

tuomas11 [27.07.2008 15:18:44]

#

Niin joo tosiaan. Kuva siis piirretään heti tuon aloitusaika_r -rivin jälkeen. Pitää nuo fps:ät yms. jutut selvittää...

os [28.07.2008 18:57:37]

#

Kannattaa tarkistaa, mikä on SDL:n äänipuskurin koko. Mitä pidempi puskuri, sitä pidempi viive. Puskurin täytyy kuitenkin niin pitkä, että ohjelman FPS riittää puskurin päivitykseen.

Kyseessä on siis Mix_OpenAudio-funktion chunksize-parametri. Kokeile esimerkiksi arvoa 512.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta