-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsounddriverdialog.cpp
96 lines (83 loc) · 2.59 KB
/
sounddriverdialog.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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include "sounddriverdialog.h"
#include "ui_sounddriverdialog.h"
#include <QDebug>
#include <QSettings>
#include <QProcess>
#include <QFile>
#include <QTextStream>
QSettings settings("./settings/settings.ini", QSettings::IniFormat);
SoundDriverDialog::SoundDriverDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::SoundDriverDialog)
{
ui->setupUi(this);
// ui->comboBox->addItem("hw:0,0");
// ui->comboBox->addItem("hw:0,0");
// ui->comboBox->addItem("hw:1,0");
// ui->comboBox->addItem("hw:2,0");
// ui->comboBox->addItem("hw:0,1");
// ui->comboBox->addItem("hw:1,1");
// ui->comboBox->addItem("hw:1,2");
listdev();
ui->comboBox->addItem("plug:dmix");
ui->comboBox->addItem("pulseaudio");
//ui->comboBox->setCurrentText(settings.value("alsa_device").toString());
ui->comboBox->setItemText(0,settings.value("alsa_device").toString());
alsa = new AlsaDriver();
alsa->open((char*)ui->comboBox->currentText().toStdString().c_str(),true);
}
void SoundDriverDialog::listdev()
{
QProcess process1;
process1.start(QString("bash -c \"cat /proc/asound/devices > /tmp/listdev.000\""));
if (!process1.waitForFinished())
return ;
QFile f("/tmp/listdev.000");
if( f.open( QFile::ReadOnly | QFile::Text) )
{
QString line;
QTextStream stream(&f);
ui->comboBox->clear();
ui->comboBox->addItem("hw:0,0");
while( !stream.atEnd() )
{
QString line = stream.readLine();
if( line.contains("playback") )
{
QRegExp rx("(\\d+)[ -]+(\\d+)");
if(rx.indexIn(line)!=-1)
{
QStringList list = rx.capturedTexts();
int card = rx.cap(1).toInt();
int device = rx.cap(2).toInt();
ui->comboBox->addItem(QString("hw:%1,%2").
arg(card).arg(device));
}
}
//ui->comboBox->addItem();
}
}
}
SoundDriverDialog::~SoundDriverDialog()
{
delete ui;
}
void SoundDriverDialog::on_testButton_clicked()
{
short buf[128];
alsa->out_pcm(buf, 128);
}
void SoundDriverDialog::on_comboBox_activated(const QString &arg1)
{
//alsa->close();
if(ui->comboBox->currentText()=="pulseaudio")
{
settings.setValue("use_driver","pulse");
}
else
{
settings.setValue("use_driver","alsa");
alsa->open((char*)ui->comboBox->currentText().toStdString().c_str(), true);
settings.setValue("alsa_device", arg1);
}
}