Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: [C++] SDL_mixer ongelma Windowsilla

erakko- [18.08.2009 08:28:32]

#

Nyt kun koulut taas alkoivat niin minäkin pääsin kääntämään projektiani Windows XP:lle. Kotona siis työskentelen Linuxilla. Olen jo viime vuonna käännellyt projektiani Windowsille, mutta kesällä tuli lisättyä äänet ja valtavasti juttua, mutta ei mitään sellaista että pitäisi muuttaa erikseen Windowsilla käännettäessä, en ainakaan usko että pitäisi.

Käännös sujuu ilman virheitä, kaikkia warning viestejä en jaksa käydä läpi sillä ne ovat yleensä että "double ei nyt sovi intin kanssa". Sitten tietysti pitää katsoa että toimiiko ohjelma. Linuxilla kaikki toimii mainiosti.

Mitään ei tosin tapahdu, ja huomaan stderr.txt tiedoston, ja tarkastan sisällön. Näin siellä tarkalleen lukee:

lainaus:

Mix_OpenAudio: waveOutOpen(): Määritettyä muotoa ei tueta tai sitä ei voi kääntää. Määritä tuetut muodot Capabilities-komennolla.

Etsiskelin tätä "capabilities komentoa" jonkin aikaa, mutta ei mitään selvää ratkaisua löytynyt. Itselleni nyt tulisi mieleen että vika on joko asentamassani SDL_mixerissä tai sitten itse laitteistossa, joka olisi oikeastaan sääli sillä käyttöoikeudet ovat liian suppeat järjestelmän muuttamiseen koulun koneessa.

Metabolix [18.08.2009 14:34:04]

#

Kuten näet, virheilmoitus tulee WinAPI:n puolelta (waveOutOpen-funktiosta) eikä asia siis sinänsä liity SDL_mixerin asennukseen. "Capabilities-komento" viittaa luultavasti waveOutGetDevCaps-funktioon, jolla voi selvittää, mitä formaatteja (näytetaajuus, mono/stereo, bitit) laite tukee. Tälle linjalle ei kuitenkaan kannata lähteä, vaan järkevästi valitun formaatin pitäisi kyllä toimia.

Millä parametreilla kutsut Mix_OpenAudio-funktiota, kun virhe tapahtuu?

erakko- [18.08.2009 17:57:17]

#

Metabolix kirjoitti:

Millä parametreilla kutsut Mix_OpenAudio-funktiota, kun virhe tapahtuu?

if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 4, 1024) < 0)
{
	fprintf(stderr, "Mix_OpenAudio: %s\n", Mix_GetError());
	Mix_CloseAudio();
	return 1;
}

Tällä se kyllä on toiminut Linuxilla, mutta ilmeisesti tässä juuri näkee miten Linuxille ja Windowsille on kummallekkin hieman erillaista ohjelmoida.

Metabolix [18.08.2009 18:09:54]

#

Tuo ehkä selittääkin tilanteen. Kanavia on nimittäin monossa yksi ja stereossa kaksi, joten vaihdapa nelonen kakkoseksi (tai hanki jokin muu kirjasto, joka tukee surround-ääntä). Miksattavien ääniraitojen määrä taas on asetettu kirjaston lähdekoodissa (#define MIX_CHANNELS 8), joten sille ei voi mitään.

erakko- [19.08.2009 10:08:06]

#

Kiitän. Nyt toimii.

Vastaus

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

Tietoa sivustosta