linux: replace pactl calls with libpulse (#221)

This commit is contained in:
Kavish Devar
2025-10-02 11:25:41 +05:30
committed by GitHub
parent 120681541f
commit fe774d565d
6 changed files with 400 additions and 96 deletions

View File

@@ -0,0 +1,37 @@
#ifndef PULSEAUDIOCONTROLLER_H
#define PULSEAUDIOCONTROLLER_H
#include <QString>
#include <QObject>
#include <pulse/pulseaudio.h>
class PulseAudioController : public QObject
{
Q_OBJECT
public:
explicit PulseAudioController(QObject *parent = nullptr);
~PulseAudioController();
bool initialize();
QString getDefaultSink();
int getSinkVolume(const QString &sinkName);
bool setSinkVolume(const QString &sinkName, int volumePercent);
bool setCardProfile(const QString &cardName, const QString &profileName);
QString getCardNameForDevice(const QString &macAddress);
bool isProfileAvailable(const QString &cardName, const QString &profileName);
private:
pa_threaded_mainloop *m_mainloop;
pa_context *m_context;
bool m_initialized;
static void contextStateCallback(pa_context *c, void *userdata);
static void sinkInfoCallback(pa_context *c, const pa_sink_info *info, int eol, void *userdata);
static void cardInfoCallback(pa_context *c, const pa_card_info *info, int eol, void *userdata);
static void serverInfoCallback(pa_context *c, const pa_server_info *info, void *userdata);
bool waitForOperation(pa_operation *op);
};
#endif // PULSEAUDIOCONTROLLER_H