| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #ifndef AUDIO_QT_CAPTURER_H
- #define AUDIO_QT_CAPTURER_H
- #include <QAudioInput>
- #include <QAudioOutput>
- #include <QBuffer>
- #include <QObject>
- #include <QTimer>
- #include <memory>
- #include "iaudiocapturer.h"
- class AudioInfo : public QIODevice
- {
- Q_OBJECT
- public:
- AudioInfo(const QAudioFormat& format);
- void start();
- void stop();
- qreal level() const { return m_level; }
- qint64 readData(char* data, qint64 maxlen) override;
- qint64 writeData(const char* data, qint64 len) override;
- private:
- const QAudioFormat m_format;
- quint32 m_maxAmplitude = 0;
- qreal m_level = 0.0; // 0.0 <= m_level <= 1.0
- signals:
- void update();
- };
- class QtAudioCapturer : public QObject, public IAudioCapturer
- {
- Q_OBJECT
- public:
- explicit QtAudioCapturer(QObject* parent = nullptr);
- ~QtAudioCapturer() override;
- // IAudioCapturer接口实现
- bool Init(Type deviceType, CallBack callback, void* userInfo = nullptr) override;
- bool Start() override;
- void Stop() override;
- const AudioFormat& GetFormat() const override;
- private slots:
- void handleReadyRead();
- void processAudioData();
- void onAudioNotify();
- private:
- bool initMicrophone();
- bool initSpeaker();
- void setupAudioFormat();
- float calculateVolume(const QByteArray& data);
- private:
- Type m_deviceType;
- CallBack m_callback;
- void* m_userInfo;
- AudioFormat m_audioFormat;
- bool m_isRunning;
- // Qt音频相关
- QAudioFormat m_qtAudioFormat;
- QScopedPointer<AudioInfo> m_audioInfo;
- std::unique_ptr<QAudioInput> m_audioInput;
- QIODevice* m_audioDevice;
- QBuffer m_buffer;
- QTimer m_processTimer;
- static constexpr int PROCESS_INTERVAL_MS = 20; // 处理间隔,20ms
- };
- #endif // AUDIO_QT_CAPTURER_H
|