hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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
#include "qtaudio.h"
#include <QApplication>
#include <QAudioDeviceInfo>
#include <QAudioOutput>
#include <QDebug>
#include <QDesktopWidget>
 
qtAudio::qtAudio(QWidget *parent)
{
    const QRect availableGeometry = QApplication::desktop()->availableGeometry(parent);
    resize(availableGeometry.width(), availableGeometry.height());
    QFont f;
    f.setPixelSize(availableGeometry.height()/20);
    listWidget = new QListWidget();
 
    QList<QAudioDeviceInfo> alist = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
    QAudioDeviceInfo defaultinfo(QAudioDeviceInfo::defaultOutputDevice());
    qDebug() << "default device name: " << defaultinfo.deviceName();
    for(auto info : alist){
        QListWidgetItem *audioItem = new QListWidgetItem();
        audioItem->setText(info.deviceName());
        audioItem->setFont(f);
        audioItem->setFlags(audioItem->flags() | Qt::ItemIsUserCheckable);
        if(defaultinfo == info){
            audioItem->setCheckState(Qt::Checked);
        } else {
            audioItem->setCheckState(Qt::Unchecked);
        }
        qDebug() << info.deviceName();
        listWidget->addItem(audioItem);
    }
    listWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    listWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    listWidget->setMinimumHeight(listWidget->sizeHintForRow(0) * listWidget->count());
    listWidget->setMaximumHeight(listWidget->sizeHintForRow(0) * listWidget->count());
 
    slider = new QSlider(Qt::Horizontal);
    slider->setMinimum(0);
    slider->setMaximum(10);
    QAudioOutput out(defaultinfo);
    qreal v = out.volume();
    slider->setValue(qRound(v*10));
    connect(slider, SIGNAL(valueChanged(int)), this, SLOT(changeVolume(int)));
 
    vLayout = new QVBoxLayout();
    vLayout->addWidget(listWidget);
    vLayout->addWidget(slider);
    vLayout->setAlignment(Qt::AlignTop);
 
    setLayout(vLayout);
    setStyleSheet("background-color:rgb(204,228,247)");
    setObjectName("Audio");
    connect(listWidget, SIGNAL(itemClicked(QListWidgetItem *)), this, SLOT(on_itemClicked(QListWidgetItem *)));
}
 
qtAudio::~qtAudio()
{
    listWidget->clear();
    delete listWidget;
    delete slider;
    delete vLayout;
}
 
void qtAudio::on_itemClicked(QListWidgetItem *item)
{
    qDebug() << item->text();
 
}
 
void qtAudio::changeVolume(int value)
{
    QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
    QAudioOutput out(info);
    qreal linearVolume = QAudio::convertVolume(value / qreal(100.0),
                                               QAudio::LinearVolumeScale,
                                               QAudio::LogarithmicVolumeScale);
    qDebug() << value;
    qreal v = qreal(value) / qreal(10.0);
    qDebug() << v;
    out.setVolume(v);
    QApplication::beep();
}