mciSendString Tonklasse



  • Hallo,
    ich habe in C++ eine kleine Tonklasse geschrieben die Tracks anlegt und worüber ich den abzuspielenden Ton bevor er abgespielt wird eine Lautstärke übergeben kann.
    Ich spiele z.B. einen Ton so ab: player[1].play(Pfad+"Datei.mp3");

    Nun mein Problem. Nach gewisser Laufzeit kommt einfach kein Ton mehr. In meinem Projekt spiele ich desöfteren Töne ab, stoppe diese wieder und spiele diese irgendwann im Ablauf noch mal ab.
    Hier mal meine Klasse. Vielleicht ist dort ein Fehler den vielleicht andere sehen. Ich frage mich momentan nur wieso das passiert.

    Headerdatei:

    //---------------------------------------------------------------------------
    
    #ifndef U_TonspurH
    #define U_TonspurH
    #include <System.hpp>
    #include <Mmsystem.h>
    #include <Windows.h>
    #include <SysUtils.hpp> 
    //---------------------------------------------------------------------------
    class Track
    {
    	public:
    		Track(void);
    		~Track(void);
    		void setVolume(int volume);
    		int getVolume(void) const;
    		void play(AnsiString file);
    		void stop(void);
    	private:
    		AnsiString _alias;
    		int _volume;
    		void CloseFile(void);
    };
    class MediaPlayer
    {
    	public:
    		MediaPlayer(int TrackCount);
    		~MediaPlayer(void);
    		Track &operator[](int index);
    		void stopAll(void);
    	private:
    		Track *_tracks;
    		int _TrackCount;
    };
    #endif
    

    Cpp-Datei:

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    
    #include "U_Tonspur.h"
    //---------------------------------------------------------------------------
    
    #pragma package(smart_init)
    Track::Track(void)
    {
    	_alias = "";
    	_volume = 1000; // Anfangs mit voller Lautstärke
    }
    Track::~Track(void)
    {
    	CloseFile();
    }
    void Track::setVolume(int volume)
    {
    	_volume=volume;
    }
    int Track::getVolume(void) const
    {
    	return _volume;
    }
    void Track::stop(void)
    {
    	mciSendString(("stop "+_alias).c_str(),0,0,0);
    }
    void Track::play(AnsiString file)
    {
     /*	if(_alias != "")
    	CloseFile();   */
    	//AnsiString c;
    	int x;
    	x = random(1000000);
    	_alias = "Track" + IntToStr(x);
    	//c = "open \""+file+"\" alias "+_alias + " wait";
    	//c = "play "+_alias+" from 0";
    	//c = "setaudio "+_alias+" volume to "+IntToStr(_volume);
    	mciSendString(("open \""+file+"\" alias "+_alias + " wait").c_str(),0,0,0);
    	mciSendString(("play "+_alias+" from 0").c_str(),0,0,0);
    	mciSendString(("setaudio "+_alias+" volume to "+IntToStr(_volume)).c_str(),0,0,0);
    }
    void Track::CloseFile(void)
    {
    	mciSendString(("close "+_alias).c_str(),0,0,0);
    }
    Track &MediaPlayer::operator[](int index)
    {
    	return _tracks[index];
    }
    MediaPlayer::MediaPlayer(int TrackCount)
    {
    	_TrackCount = TrackCount;
    	_tracks = new Track[TrackCount];
    }
    MediaPlayer::~MediaPlayer(void)
    {
    	stopAll();
    	delete[]_tracks;
    }
    void MediaPlayer::stopAll(void)
    {
    	for(int i=0;i<_TrackCount;i++)
    		(*this).operator[](i).stop();
    }
    

    Teilweise genaue Einzelheiten wie manches in der Klasse genau funktioniert weiß ich teilweise nicht so ganz, da ich diese Klasse mit einem Freund zusammen entwickelt habe.

    Viele Grüße
    Henning



  • Mhh niemand ne Lösung zu dem Problem?

    Viele Grüße
    Henning


Anmelden zum Antworten