51 lines
		
	
	
		
			998 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			998 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| #ifndef AUDIODECODER_H
 | |
| #define AUDIODECODER_H
 | |
| 
 | |
| #include <QAudioDecoder>
 | |
| #include <QAudioFormat>
 | |
| #include <QBuffer>
 | |
| #include <QIODevice>
 | |
| #include <QPointer>
 | |
| 
 | |
| 
 | |
| class AudioDecoder :
 | |
|     public QIODevice
 | |
| {
 | |
|     Q_OBJECT
 | |
| public:
 | |
|     enum State { Decoding, Stopped };
 | |
|     explicit AudioDecoder(QObject *parent = 0);
 | |
|     ~AudioDecoder();
 | |
| 
 | |
|     bool atEnd() const override;
 | |
| 
 | |
| public slots:
 | |
|     void init(const QAudioFormat &format);
 | |
|     void start(const QString &filePath);
 | |
|     void stop();
 | |
| 
 | |
| protected:
 | |
|     qint64 readData(char* data, qint64 maxlen) override;
 | |
|     qint64 writeData(const char* data, qint64 len) override;
 | |
| 
 | |
| private:
 | |
|     State m_state;
 | |
|     QPointer<QAudioDecoder> m_decoder;
 | |
|     QBuffer m_input;
 | |
|     QBuffer m_output;
 | |
|     QByteArray m_data;
 | |
|     bool m_init;
 | |
|     bool m_isDecodingFinished;
 | |
| 
 | |
| private slots:
 | |
|     void bufferReady();
 | |
|     void finished();
 | |
|     void errored(QAudioDecoder::Error);
 | |
| 
 | |
| signals:
 | |
|     void initialized();
 | |
|     void newData(const QByteArray& data);
 | |
| };
 | |
| 
 | |
| #endif // AUDIODECODER_H
 | 
