forked from RPCS3/rpcs3
-
Notifications
You must be signed in to change notification settings - Fork 4
/
microphone_creator.cpp
76 lines (62 loc) · 1.77 KB
/
microphone_creator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "microphone_creator.h"
#include "Utilities/StrUtil.h"
#include "3rdparty/OpenAL/include/alext.h"
constexpr auto qstr = QString::fromStdString;
microphone_creator::microphone_creator()
{
setObjectName("microphone_creator");
refresh_list();
}
// We need to recreate the localized string because the microphone creator is currently only created once.
QString microphone_creator::get_none()
{
return tr("None", "Microphone device");
}
void microphone_creator::refresh_list()
{
m_microphone_list.clear();
m_microphone_list.append(get_none());
if (alcIsExtensionPresent(NULL, "ALC_ENUMERATION_EXT") == AL_TRUE)
{
const char* devices = alcGetString(NULL, ALC_CAPTURE_DEVICE_SPECIFIER);
while (*devices != 0)
{
m_microphone_list.append(qstr(devices));
devices += strlen(devices) + 1;
}
}
else
{
// Without enumeration we can only use one device
m_microphone_list.append(qstr(alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER)));
}
}
QStringList microphone_creator::get_microphone_list()
{
return m_microphone_list;
}
std::array<std::string, 4> microphone_creator::get_selection_list()
{
return m_sel_list;
}
std::string microphone_creator::set_device(u32 num, const QString& text)
{
if (text == get_none())
m_sel_list[num - 1] = "";
else
m_sel_list[num - 1] = text.toStdString();
const std::string final_list = m_sel_list[0] + "@@@" + m_sel_list[1] + "@@@" + m_sel_list[2] + "@@@" + m_sel_list[3] + "@@@";
return final_list;
}
void microphone_creator::parse_devices(const std::string& list)
{
for (u32 index = 0; index < 4; index++)
{
m_sel_list[index] = "";
}
const auto devices_list = fmt::split(list, { "@@@" });
for (u32 index = 0; index < std::min<u32>(4, ::size32(devices_list)); index++)
{
m_sel_list[index] = devices_list[index];
}
}