Audiobeispiele im Vergleich zum Schallpegel
Dieses Beispiel zeigt die grafische Darstellung von Mikrofon-Samples im Vergleich zum Audiopegel.

Die Umsetzung dieses Beispiels basiert auf Widgets. Spezifische Informationen hierzu finden Sie unter „Erste Schritte bei der Programmierung mit Qt Widgets “. In den folgenden Abschnitten wird erläutert, wie Sie mithilfe der „ Qt Charts “-API dynamische Daten in einem Diagramm zur Darstellung von Abtastwerten im Verhältnis zum Schallpegel anzeigen können. Weitere Informationen zur Abtastung finden Sie unter „Abtastung (Signalverarbeitung)“.
Ausführen des Beispiels
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter „Qt Creator: Tutorial: Erstellen und Ausführen“.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ über „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
Abrufen der Audiodaten
Dank der Integration des Moduls „ Qt Multimedia “ in „ main.cpp “ erstellen wir ein neues „ QAudioDevice “, das das Standard-Audiogerät der Zielplattform darstellt. Außerdem prüfen wir, ob ein Audio-Eingabegerät vorhanden ist, und informieren den Benutzer, falls kein Audio-Eingabegerät verfügbar ist.
if (inputDevice.isNull()) {
QMessageBox::warning(nullptr, "audio",
"There is no audio input device available.");
return -1;
}Das Audiogerät wird anschließend über das Konstruktorargument „ w “ an das Widget „ w “ übergeben. Anschließend wird „ w.show() “ aufgerufen, um das Widget anzuzeigen.
Widget w(inputDevice);
w.resize(800, 600);
w.show();Einrichten des Diagramms
In diesem Abschnitt wird die Einrichtung des Diagramms und der Achsen behandelt.
In ` widget.cpp` übernimmt der neu implementierte Widget-Konstruktor den Großteil der Arbeit, was die Anwendungslogik betrifft. Die Objekte `QChart`, `QLineSeries` und `QChartView` werden wie folgt deklariert:
: QWidget(parent)
, m_chart(new QChart)
, m_series(new QLineSeries)
{
auto chartView = new QChartView(m_chart);
m_chart->addSeries(m_series);m_series dient zur Verwendung der Audio-Eingabedaten.
Die x-Achse „Samples“
Wir legen den Bereich von minimal bis maximal auf der x-Achse von 0 bis zum Wert von XYSeriesIODevice::sampleCount fest. (In xyseriesiodevice.h als 2000 deklariert.) Anschließend legen wir den Titeltext fest.
auto axisX = new QValueAxis;
axisX->setRange(0, XYSeriesIODevice::sampleCount);
axisX->setLabelFormat("%g");
axisX->setTitleText("Samples");Die y-Achse „Audio Level“
Wir erstellen die QValueAxis- axisY, legen ihren Bereich und den Titeltext fest.
auto axisY = new QValueAxis;
axisY->setRange(-1, 1);
axisY->setTitleText("Audio level");Einfügen der Achsen und Festlegen des Diagrammtitels
Wir fügen die Achsen hinzu, blenden die Legende aus und legen den Diagrammtitel so fest, dass er den Namen des als Audioeingang verwendeten Mikrofons enthält.
m_chart->addAxis(axisX, Qt::AlignBottom);
m_series->attachAxis(axisX);
m_chart->addAxis(axisY, Qt::AlignLeft);
m_series->attachAxis(axisY);
m_chart->legend()->hide();Das Diagramm anordnen
Hier verwenden wir eine „ QVBoxLayout “ mainLayout und fügen unsere „QChartview“ chartView zum vertikalen Layout hinzu.
m_chart->setTitle("Data from the microphone (" + deviceInfo.description() + ')');
auto mainLayout = new QVBoxLayout(this);Verwendung der Audio-Eingangsdaten
In diesem Abschnitt wird gezeigt, wie die Mikrofondaten an die `QLineSeries` m_series übergeben werden. Wie zuvor stützt sich dies auf das Modul Qt Multimedia.
Zunächst übergeben wir „deviceInfo“ an den Konstruktor von „ QAudioInput “.
mainLayout->addWidget(chartView);
m_audioInput = new QAudioInput(deviceInfo, this);
QAudioFormat formatAudio;Anschließend konfigurieren wir unsere „ QAudioFormat “ mit „ formatAudio “, der Kanalanzahl, der Abtastrate und dem Sample-Format.
formatAudio.setSampleRate(8000);
formatAudio.setChannelCount(1);Nun können wir ein ` QAudioSource ` erstellen und dessen Puffergröße festlegen.
formatAudio.setSampleFormat(QAudioFormat::UInt8);
m_audioSource = new QAudioSource(deviceInfo, formatAudio);Nun ist es an der Zeit, unsere Daten an das Diagramm anzuhängen. Dazu haben wir eine Klasse „XYSeriesIODevice“ erstellt. Wie diese implementiert ist, erfahren Sie unter „XYSeriesIODevice “.
m_audioSource->setBufferSize(200);
m_device = new XYSeriesIODevice(m_series, this);
m_device->open(QIODevice::WriteOnly);XYSeriesIODevice
XYSeriesIODevice ist in „ xyseriesiodevice.cpp “ implementiert und übernimmt die Signalabtastung. Die Funktion „ writeData “ mit einer festen Auflösung von 4 legt die Größe von „ QList “ m_buffer basierend auf der Abtastanzahl fest und füllt sie mit „QPointFs“, deren x-Wert inkrementell und deren y-Wert auf 0 gesetzt ist.
{
static const int resolution = 4;
if (m_buffer.isEmpty()) {
m_buffer.reserve(sampleCount);
for (int i = 0; i < sampleCount; ++i)
m_buffer.append(QPointF(i, 0));
}
int start = 0;Anschließend führen wir einige Abtastungen durch.
const int availableSamples = int(maxSize) / resolution;
if (availableSamples < sampleCount) {
start = sampleCount - availableSamples;
for (int s = 0; s < start; ++s)
m_buffer[s].setY(m_buffer.at(s + availableSamples).y());
}
for (int s = start; s < sampleCount; ++s, data += resolution)
m_buffer[s].setY(qreal(uchar(*data) -128) / qreal(128));
m_series->replace(m_buffer);
return (sampleCount - start) * resolution;© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.