00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef QMMPAUDIOENGINE_H
00022 #define QMMPAUDIOENGINE_H
00023
00024 #include <QQueue>
00025 #include <QHash>
00026 #include "abstractengine.h"
00027 #include "audioparameters.h"
00028
00029 class QIODevice;
00030 class Output;
00031 class Effect;
00032 class DecoderFactory;
00033 class StateHandler;
00034 class Decoder;
00035 class InputSource;
00036 class EffectFactory;
00037 class ReplayGain;
00038 class QmmpSettings;
00039
00043 class QmmpAudioEngine : public AbstractEngine
00044 {
00045 Q_OBJECT
00046 public:
00047 QmmpAudioEngine(QObject *parent);
00048 ~QmmpAudioEngine();
00049
00050 bool play();
00051 bool enqueue(InputSource *source);
00052 qint64 totalTime();
00053 void seek(qint64 time);
00054 void stop();
00055 void pause();
00056 void setEQ(double bands[10], double preamp);
00057 void setEQEnabled(bool on);
00058 void addEffect(EffectFactory *factory);
00059 void removeEffect(EffectFactory *factory);
00060
00061 static QmmpAudioEngine *instance();
00062
00063 private slots:
00064 void finish();
00065 void updateReplayGainSettings();
00066
00067 private:
00068 void run();
00069 void reset();
00070 void flush(bool = false);
00071 void addOffset();
00072 qint64 produceSound(char *data, qint64 size, quint32 brate, int chan);
00073 void sendMetaData();
00074 Output *createOutput(Decoder *d);
00075
00076 DecoderFactory *m_factory;
00077 QList <Effect*> m_effects;
00078 QList <Effect*> m_blockedEffects;
00079 Output *m_output;
00080
00081 bool m_eqInited;
00082 bool m_useEq;
00083 bool m_eqEnabled;
00084 bool m_done, m_finish, m_user_stop;
00085 uint m_bks;
00086 qint64 m_totalTime, m_seekTime;
00087 qint64 m_output_at;
00088 int m_bitrate, m_chan, m_bps;
00089 unsigned char *m_output_buf;
00090 Decoder *m_decoder;
00091 QQueue <Decoder*> m_decoders;
00092 QHash <Decoder*, InputSource*> m_inputs;
00093 AudioParameters m_ap;
00094 bool m_next;
00095 static QmmpAudioEngine *m_instance;
00096 ReplayGain *m_replayGain;
00097 QmmpSettings *m_settings;
00098 };
00099
00100 #endif // QMMPAUDIOENGINE_H