Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Muistialueen ylitys Audiere

Sivun loppuun

ankzilla [05.05.2010 15:54:04]

#

Oon jo aika pitkälle koodaillut musasoitinta C++/Audierella...
Nyt kun päätin suorittaa niin meni hyvin kääntäjästä läpi, mutta kun alan biisiä soittamaan niin tulee vain tyly "Muistialueen ylitys" viesti. :(

Omaa koodiani en kehtaa pastea koska siinä on kaikkea ylimääräistä, mutta samaan lopputulokseen päädyin kun kokeilin tuota:

#include <string>
#include <iostream>
#include "audiere.h"
using namespace audiere;

using namespace std;

int main(void)
{

	// This audio player is written in C++, using the Audiere API and classes.
	// If you have any questions or suggestions, email rohitchauhan802@sancharnet.in
	// or supernatural132003@yahoo.com

  	string filename;
	cout << "Enter the filename of the audio file you want to play: " << endl;
	cin >> filename;

	AudioDevicePtr device(OpenDevice());
	OutputStreamPtr sound(OpenSound(device, filename.c_str(), false));

	sound->play();
	sound->setRepeat(true);
	sound->setVolume(1.0f);

	getchar();
	return 0;
}

Ja käännös:

g++ audiere_test.cpp -o audiere_test -lncurses -laudiere

Edit: Voi vittu meni väärälle alueelle.. SORI

Mod. edit: Aina palveluksessanne o\ -Naapurin ystävällinen moderaattori

Edit: Kiitän, en ollut ihan hereillä kun tuli vahingossa tuota Ohjelmointiputka-linkkiä klikattua ja painettua samantien End-nappulaa x}

Sisuaski [05.05.2010 16:29:17]

#

Tuosta on vähän vaikea vielä arvata kaatumisen syytä.
Kokeile lisätä koodiin tarkastukset että funktiot OpenDevice tai OpenSound eivät palauta nullia.

ankzilla [05.05.2010 16:34:06]

#

Tuo palauttaa nullin:

stream = OutputStreamPtr(OpenSound(device, song.c_str(), 0));

Biisi kyllä löytyy, mutta ei kai tuota kaatumista pitäisi tapahtua toisessakaan tapauksessa?

Metabolix [05.05.2010 16:40:31]

#

Kyllä se pitää aina tarkistaa.

if (sound) {
  sound->play(); // ...
} else {
  std::cout << "Virhe!\n";
}

Sisuaski [05.05.2010 16:42:05]

#

No jos OpenSound palauttaa nullin niin tokihan tuo kaatuu siinä vaiheessa kun kutsutaan sound->play().
En nyt näe tuon audieren apista että miten siltä saa tietää mikä meni pieleen tiedoston avauksessa mutta varmista ainakin että sille antamasi tiedosto on jotain sen tukemaa formaattia ja että tiedostonimessä ei ole esim. välilyöntejä (koska cin>>filename lukee vain ensimmäiseen välilyöntiin asti).

ankzilla [05.05.2010 17:41:35]

#

Haen tiedostonnimen ncursesin getch()-härpäkkeellä joten ei ole tota välilyöntiongelmaa.

Mutta kuuluuko tuosta tulla streamin arvoksi nolla?

OutputStreamPtr stream;

ankzilla [05.05.2010 21:20:30]

#

Kopioin aika kovasti tosta:
https://www.ohjelmointiputka.net/koodivinkit/24457-cpp-audiere-musiikkisoitin

Metabolix [05.05.2010 22:33:25]

#

ankzilla kirjoitti:

Mutta kuuluuko tuosta tulla streamin arvoksi nolla?

OutputStreamPtr stream;

Siis tuohan on osoitin, joten tietenkin siitä tulee nolla (NULL, jos haluat), jos se alustaa itsensä. Ei kai se nyt voi automaattisesti mitään tiedostoa avata.

ankzilla [06.05.2010 19:47:55]

#

Jooh, nyt sain viimeinkin toimimaan. :}
En tiennyt että polun pitää olla tässä kokonainen, joten siihen se koko homma tyssäsi.

np: Scorpions - Raised on rock [Playank]

Kiitän avusta

Metabolix [06.05.2010 19:50:46]

#

Ei sen varmasti tarvitsisikaan. Luultavasti olet vain tehnyt jonkin klassisen virheen sen suhteen, mikä on ohjelman työhakemisto. (Tämän selvittämiseen melko yksinkertainen keino on katsoa, minkä hakemiston sisällön system("dir") tulostaa.)


Sivun alkuun

Vastaus

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

Tietoa sivustosta