#ifndef AUDIO_H #define AUDIO_H #include #include #include #include #include #include class AudioGenerator { public: static AudioGenerator & instance(); QAudioOutput * getAudioOutput(); void toggle(); void start(); void stop(); void writeAudio(); void stateChanged(QAudio::State state); void getOptions(qint32 & initialSilence, qint32 & silenceDelay, qint32 & volume) const; void setOptions(const qint32 initialSilence, const qint32 silenceDelay, const qint32 volume); private: typedef short int audio_t; std::queue myTicks; std::shared_ptr myAudioOutput; QAudioFormat myAudioFormat; QIODevice * myDevice; std::vector myBuffer; // options qint32 myInitialSilence; qint32 mySilenceDelay; qint16 myVolume; qint64 myStartCPUCycles; qint64 myPreviousFrameTime; qint32 myMaximum; qint32 mySilence; audio_t myPhysical; audio_t myValue; AudioGenerator(); qint64 toFrameTime(qint64 cpuCycples); void generateSamples(audio_t *data, qint64 framesToWrite); void writeEnoughSilence(const qint64 ms); void generateSilence(audio_t * begin, audio_t * end); bool isRunning(); }; #endif // AUDIO_H