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}
Tuosta on vähän vaikea vielä arvata kaatumisen syytä.
Kokeile lisätä koodiin tarkastukset että funktiot OpenDevice tai OpenSound eivät palauta nullia.
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?
Kyllä se pitää aina tarkistaa.
if (sound) { sound->play(); // ... } else { std::cout << "Virhe!\n"; }
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).
Haen tiedostonnimen ncursesin getch()-härpäkkeellä joten ei ole tota välilyöntiongelmaa.
Mutta kuuluuko tuosta tulla streamin arvoksi nolla?
OutputStreamPtr stream;
Kopioin aika kovasti tosta:
https://www.ohjelmointiputka.net/koodivinkit/
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.
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
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.)
Aihe on jo aika vanha, joten et voi enää vastata siihen.