2025-11-15 20:08:52 +00:00
|
|
|
#ifndef AUDIOHANDLERRTINPUT_H
|
|
|
|
|
#define AUDIOHANDLERRTINPUT_H
|
|
|
|
|
|
|
|
|
|
#include "audiohandlerbase.h"
|
|
|
|
|
|
|
|
|
|
#ifndef Q_OS_LINUX
|
|
|
|
|
#include "RtAudio.h"
|
|
|
|
|
#else
|
|
|
|
|
#include "rtaudio/RtAudio.h"
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include "bytering.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class audioHandlerRtInput : public audioHandlerBase {
|
|
|
|
|
Q_OBJECT
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
explicit audioHandlerRtInput(QObject* parent=nullptr);
|
|
|
|
|
~audioHandlerRtInput() override { dispose(); } // ensure close on destruction
|
|
|
|
|
QString role() const override { return QStringLiteral("Input"); }
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
bool openDevice() noexcept override;
|
|
|
|
|
void closeDevice() noexcept override;
|
|
|
|
|
virtual QAudioFormat getNativeFormat() override;
|
|
|
|
|
virtual bool isFormatSupported(QAudioFormat f) override;
|
|
|
|
|
|
|
|
|
|
private slots:
|
|
|
|
|
void onReadyRead();
|
|
|
|
|
void onConverted(audioPacket pkt);
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
static int rtCallback(void* out, void* in, unsigned nFrames, double, RtAudioStreamStatus st, void* u);
|
|
|
|
|
void handleCallbackInput(const void* in, unsigned nFrames, RtAudioStreamStatus st);
|
|
|
|
|
|
|
|
|
|
private:
|
2026-03-16 10:06:45 -07:00
|
|
|
#if defined(Q_OS_LINUX)
|
|
|
|
|
RtAudio rtaudio{RtAudio::Api::LINUX_ALSA};
|
|
|
|
|
#elif defined(Q_OS_WIN)
|
|
|
|
|
RtAudio rtaudio{RtAudio::Api::WINDOWS_WASAPI};
|
|
|
|
|
#elif defined(Q_OS_MACOS)
|
|
|
|
|
RtAudio rtaudio{RtAudio::Api::MACOSX_CORE};
|
|
|
|
|
#else
|
2025-11-15 20:08:52 +00:00
|
|
|
RtAudio rtaudio;
|
2026-03-16 10:06:45 -07:00
|
|
|
#endif
|
2025-11-15 20:08:52 +00:00
|
|
|
RtAudioFormat fmt{RTAUDIO_SINT16};
|
|
|
|
|
unsigned bytesPerSample{2};
|
|
|
|
|
unsigned bytesPerFrame{2};
|
|
|
|
|
std::unique_ptr<ByteRing> inRB;
|
|
|
|
|
RtAudio::StreamParameters aParams;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif // AUDIOHANDLERRTINPUT_H
|