Historique des modifications - Message

Message #11056

Sujet: C++ Utiliser le système de fichier d'Irrlicht dans Irrklang


Type Date Auteur Contenu
Dernière modification 26-01-2016 21:17:18 johnplayer
Ce petit bout de code sert à charger des fichiers dans Irrklang grâce au système de fichier d'Irrlicht.
Pourquoi? Parce que les fichiers présents dans les archives ouvertes avec Irrlicht ne sont pas accessibles avec Irrklang.

Code c++ :


class SoundFileInArchive: public irrklang::IFileReader
{
public:
    //! constructeur
	SoundFileInArchive ( io::IReadFile* file )
	: File(file)
	{
	}
	//! destructeur
	virtual ~SoundFileInArchive () { File->drop(); }

	virtual irrklang::ik_s32 read(void* buffer, irrklang::ik_u32 sizeToRead) { return File->read( buffer, sizeToRead ); }
	virtual bool seek(irrklang::ik_s32 finalPos, bool relativeMovement = false) { return File->seek( finalPos, relativeMovement ); }
	virtual irrklang::ik_s32 getSize(){ return File->getSize(); }
	virtual irrklang::ik_s32 getPos()	{return File->getPos(); }
	virtual const irrklang::ik_c8* getFileName() { return File->getFileName().c_str(); }

protected:
    //! MEMBRES
	io::IReadFile* File;
};


class CMyFileFactory : public irrklang::IFileFactory
{
public:
    //! constructeur
    CMyFileFactory(io::IFileSystem* fileSys)
    : FileSys(fileSys)
    {
    }

    //! Ouvre un fichier sinon retourne NULL
    virtual irrklang::IFileReader* createFileReader(const irrklang::ik_c8* filename)
    {
        io::IReadFile* file = FileSys->createAndOpenFile(filename);
        if(file) return new SoundFileInArchive(file);
        else return NULL;
    }
protected:
    //! MEMBRES
    io::IFileSystem* FileSys;
};


Pour l'utiliser, rien de plus simple.^^

Code c++ :



ISoundEngine* SoundEngine = createIrrKlangDevice();

// création de la liaison au système de fichier d'Irrlicht
CMyFileFactory* factory = new CMyFileFactory( irrDevice->getFileSystem() );
SoundEngine->addFileFactory(factory);
factory->drop();

// chargement du fichier zip (qui contient le fichier "musique.mp3")
Device->getFileSystem()->addFileArchive("monfichierzip.zip");

// lecture du fichier son
SoundEngine->play2D("musique.mp3", false, false, true);

// libère irrklang (avant irrlicht à cause du système de fichier)
SoundEngine->drop();
// libère Irrlicht
Device->drop();

Création du message 05-01-2013 17:37:21 johnplayer
Ce petit bout de code sert à charger des fichiers dans Irrklang grâce au système de fichier d'Irrlicht.
Pourquoi? Parce que les fichiers présents dans les archives ouvertes avec Irrlicht ne sont pas accessibles avec Irrklang.

Code c++ :


class SoundFileInArchive: public irrklang::IFileReader
{
public:
    //! constructeur
	SoundFileInArchive ( io::IReadFile* file )
	: File(file)
	{
	}
	//! destructeur
	virtual ~SoundFileInArchive () { File->drop(); }

	virtual irrklang::ik_s32 read(void* buffer, irrklang::ik_u32 sizeToRead) { return File->read( buffer, sizeToRead ); }
	virtual bool seek(irrklang::ik_s32 finalPos, bool relativeMovement = false) { return File->seek( finalPos, relativeMovement ); }
	virtual irrklang::ik_s32 getSize(){ return File->getSize(); }
	virtual irrklang::ik_s32 getPos()	{return File->getPos(); }
	virtual const irrklang::ik_c8* getFileName() { return File->getFileName().c_str(); }

protected:
    //! MEMBRES
	io::IReadFile* File;
};


class CMyFileFactory : public irrklang::IFileFactory
{
public:
    //! constructeur
    CMyFileFactory(io::IFileSystem* fileSys)
    : FileSys(fileSys)
    {
    }

    //! Ouvre un fichier sinon retourne NULL
    virtual irrklang::IFileReader* createFileReader(const irrklang::ik_c8* filename)
    {
        io::IReadFile* file = FileSys->createAndOpenFile(filename);
        if(file) return new SoundFileInArchive(file);
        else return NULL;
    }
protected:
    //! MEMBRES
    io::IFileSystem* FileSys;
};


Pour l'utiliser, rien de plus simple.^^

Code c++ :



ISoundEngine* SoundEngine = createIrrKlangDevice();

// création de la liaison au système de fichier d'Irrlicht
CMyFileFactory* factory = new CMyFileFactory( irrDevice->getFileSystem() );
SoundEngine->addFileFactory(factory);
factory->drop();

// chargement du fichier zip (qui contient le fichier "musique.mp3")
Device->getFileSystem()->addFileArchive("monfichierzip.zip");

// lecture du fichier son
SoundEngine->play2D("musique.mp3", false, false, true);

// libère irrklang (avant irrlicht à cause du système de fichier)
SoundEngine->drop();
// libère Irrlicht
Device->drop();


Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
493 invités en ligne
membre en ligne: -
RSS Feed