Skip to content

Commit 13ae06b

Browse files
committed
Add PulseAudio support for auto-switch
1 parent 308e5b7 commit 13ae06b

File tree

6 files changed

+44
-3
lines changed

6 files changed

+44
-3
lines changed

src/audio/pulseaudio/PulseAudioService.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "PulsePipelineManager.h"
22

33
#include "PulseAudioService.h"
4+
#include "PulseDevice.h"
45

56
#include "PulseAppManager.h"
67
#include "Utils.h"
@@ -42,6 +43,8 @@ PulseAudioService::PulseAudioService()
4243

4344
/* Register sink change handler */
4445
mgr.get()->getPulseManager()->sink_changed.connect([&](const std::shared_ptr<mySinkInfo>& info) {
46+
sinks[info->index] = *info;
47+
4548
if (info->name == mgr.get()->getPulseManager()->server_info.default_sink_name) {
4649
Glib::signal_timeout().connect_seconds_once(
4750
[=]() {
@@ -61,7 +64,7 @@ PulseAudioService::PulseAudioService()
6164

6265
if (dev_name != last_sink_dev_name) {
6366
last_sink_dev_name = dev_name;
64-
emit outputDeviceChanged(QString::fromStdString(dev_name), QString::fromStdString(dev_name));
67+
emit outputDeviceChanged(QString::fromStdString(current_info->description), QString::fromStdString(current_info->name));
6568
}
6669
}
6770
}
@@ -70,6 +73,14 @@ PulseAudioService::PulseAudioService()
7073
}
7174
});
7275

76+
mgr.get()->getPulseManager()->sink_added.connect([&](const std::shared_ptr<mySinkInfo>& info) {
77+
sinks[info->index] = *info;
78+
});
79+
mgr.get()->getPulseManager()->sink_removed.connect([&](uint id) {
80+
sinks.erase(id);
81+
});
82+
83+
7384
/* Launch audio processing thread */
7485
apt = new PulseAudioProcessingThread(mgr);
7586
apt->start();
@@ -121,7 +132,12 @@ IAppManager *PulseAudioService::appManager()
121132

122133
std::vector<IOutputDevice> PulseAudioService::sinkDevices()
123134
{
124-
return std::vector<IOutputDevice>();
135+
std::vector<IOutputDevice> devices;
136+
for(const auto& [id, sink] : sinks)
137+
{
138+
devices.push_back(PulseDevice(sink));
139+
}
140+
return devices;
125141
}
126142

127143
DspStatus PulseAudioService::status()

src/audio/pulseaudio/PulseAudioService.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public slots:
3737
PulseAudioProcessingThread* apt;
3838

3939
std::string last_sink_dev_name;
40+
std::map<uint, mySinkInfo> sinks;
4041

4142
};
4243

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#include "PulseDevice.h"
2+
3+
PulseDevice::PulseDevice(const mySinkInfo &info)
4+
{
5+
id = info.index;
6+
name = info.name;
7+
description = info.description;
8+
}

src/audio/pulseaudio/PulseDevice.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#ifndef PULSEDEVICE_H
2+
#define PULSEDEVICE_H
3+
4+
#include "PulseDataTypes.h"
5+
6+
#include <IOutputDevice.h>
7+
8+
class PulseDevice : public IOutputDevice
9+
{
10+
public:
11+
PulseDevice(const mySinkInfo& info);
12+
};
13+
14+
#endif // PULSEDEVICE_H

src/audio/pulseaudio/PulseaudioCore.pri

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ SOURCES += \
44
$$PWD/PulseAppManager.cpp \
55
$$PWD/PulseAudioProcessingThread.cpp \
66
$$PWD/PulseAudioService.cpp \
7+
$$PWD/PulseDevice.cpp \
78
$$PWD/PulseManager.cpp \
89
$$PWD/PulsePipelineManager.cpp \
910
$$PWD/RealtimeKit.cpp \
@@ -20,6 +21,7 @@ HEADERS += \
2021
$$PWD/PulseAudioProcessingThread.h \
2122
$$PWD/PulseAudioService.h \
2223
$$PWD/PulseDataTypes.h \
24+
$$PWD/PulseDevice.h \
2325
$$PWD/PulseManager.h \
2426
$$PWD/PulsePipelineManager.h \
2527
$$PWD/RealtimeKit.h \

src/config/AppConfig.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ AppConfig::AppConfig()
3838
DEFINE_KEY(AudioOutputUseDefault, true);
3939
DEFINE_KEY(AudioOutputDevice, "");
4040
DEFINE_KEY(AudioAppBlocklist, QStringList());
41-
DEFINE_KEY(AudioAppBlocklistInvert, true);
41+
DEFINE_KEY(AudioAppBlocklistInvert, false);
4242

4343
DEFINE_KEY(AeqPlotDarkMode, false);
4444

0 commit comments

Comments
 (0)