QAudioSource Class
Die Klasse QAudioSource bietet eine Schnittstelle für den Empfang von Audiodaten von einem Audio-Eingabegerät. Mehr...
Kopfzeile: | #include <QAudioSource> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake: | QT += multimedia |
Erbt: | QObject |
Öffentliche Funktionen
QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr) | |
virtual | ~QAudioSource() override |
qsizetype | bufferSize() const |
qsizetype | bytesAvailable() const |
qint64 | elapsedUSecs() const |
QtAudio::Error | error() const |
QAudioFormat | format() const |
bool | isNull() const |
qint64 | processedUSecs() const |
void | reset() |
void | resume() |
void | setBufferSize(qsizetype value) |
void | setVolume(qreal volume) |
QIODevice * | start() |
void | start(QIODevice *device) |
QtAudio::State | state() const |
void | stop() |
void | suspend() |
qreal | volume() const |
Signale
void | stateChanged(QtAudio::State state) |
Detaillierte Beschreibung
Sie können einen Audioeingang mit dem Standard-Audioeingangsgerät des Systems erstellen. Es ist auch möglich, QAudioSource mit einem bestimmten QAudioDevice zu erstellen. Wenn Sie den Audioeingang erstellen, sollten Sie auch die QAudioFormat für die Aufnahme verwenden (siehe die QAudioFormat Klassenbeschreibung für Details).
Um in eine Datei aufzunehmen:
Mit QAudioSource können Sie Audio mit einem Audio-Eingabegerät aufnehmen. Der Standardkonstruktor dieser Klasse verwendet das Standard-Audiogerät des Systems, aber Sie können auch ein QAudioDevice für ein bestimmtes Gerät angeben. Sie müssen auch die QAudioFormat übergeben, in der Sie aufnehmen möchten.
Um die QAudioSource zu starten, müssen Sie lediglich start() mit einem zum Schreiben geöffneten QIODevice aufrufen. Um zum Beispiel in eine Datei aufzunehmen, können Sie:
QFile destinationFile; // KlassenmitgliedQAudioSource* audio; // Klassenmitglied{ destinationFile.setFileName("/tmp/test.raw"); destinationFile.open( QIODevice::WriteOnly | QIODevice::Truncate ); QAudioFormat format; // Einstellen des gewünschten Formats, zum Beispiel:format.setSampleRate(8000); format.setChannelCount(1); format.setSampleFormat(QAudioFormat::UInt8); QAudioDevice info = QMediaDevices::defaultAudioInput(); if (!info.isFormatSupported(format)) { qWarning() << "Default format not supported, trying to use the nearest."; } audio = new QAudioSource(format, this); connect(audio, &QAudioSource::stateChanged, this, &AudioInputExample::handleStateChanged); QTimer::singleShot(3000, this, &AudioInputExample::stopRecording); audio->start(&destinationFile); // Nimmt Audio für 3000ms auf}
Die Aufnahme wird gestartet, wenn das angegebene Format vom Eingabegerät unterstützt wird (Sie können dies mit QAudioDevice::isFormatSupported() überprüfen). Falls es irgendwelche Probleme gibt, können Sie mit der Funktion error() überprüfen, was schief gelaufen ist. Wir beenden die Aufzeichnung im Slot stopRecording()
.
void AudioInputExample::stopRecording() { audio->stop(); destinationFile.close(); delete audio; }
Zu jedem Zeitpunkt befindet sich QAudioSource in einem von vier Zuständen: aktiv, angehalten, gestoppt oder im Leerlauf. Diese Zustände werden durch das QtAudio::State enum angegeben. Sie können einen Zustandswechsel direkt über suspend(), resume(), stop(), reset() und start() anfordern. Der aktuelle Zustand wird von state() gemeldet. QAudioSink signalisiert Ihnen auch, wenn sich der Zustand ändert (stateChanged()).
QAudioSource bietet mehrere Möglichkeiten, die Zeit zu messen, die seit dem start() der Aufnahme vergangen ist. Die Funktion processedUSecs()
gibt die Länge des Streams in geschriebenen Mikrosekunden zurück, d.h. sie lässt die Zeiten aus, in denen die Audioeingabe unterbrochen oder inaktiv war. Die Funktion elapsedUSecs() gibt die Zeit zurück, die seit dem Aufruf von start() verstrichen ist, unabhängig davon, in welchem Zustand sich die QAudioSource befunden hat.
Sollte ein Fehler auftreten, können Sie mit error() die Ursache dafür abfragen. Die möglichen Fehlerursachen werden durch das QtAudio::Error enum beschrieben. Die QAudioSource geht in den StoppedState, wenn ein Fehler auftritt. Verbinden Sie sich mit dem Signal stateChanged(), um den Fehler zu behandeln:
void AudioInputExample::handleStateChanged(QAudio::State newState) { switch (newState) { case QAudio::StoppedState: if (audio->error() != QAudio::NoError) { // Error handling } else { // Finished recording } break; case QAudio::ActiveState: // Started recording - read from IO device break; default: // ... other cases as appropriate break; } }
Siehe auch QAudioSink und QAudioDevice.
Dokumentation der Mitgliederfunktionen
[explicit]
QAudioSource::QAudioSource(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Konstruieren Sie einen neuen Audioeingang und verbinden Sie ihn mit parent. Das Standard-Audioeingangsgerät wird mit den Parametern des Ausgangs format verwendet.
[explicit]
QAudioSource::QAudioSource(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
Konstruieren Sie einen neuen Audioeingang und schließen Sie ihn an parent an. Das Gerät, auf das audioDevice verweist, wird mit den Parametern des Eingangs format verwendet.
[override virtual noexcept]
QAudioSource::~QAudioSource()
Zerstören Sie diesen Audioeingang.
qsizetype QAudioSource::bufferSize() const
Gibt die Größe des Audiopuffers in Bytes zurück.
Wenn vor start() aufgerufen, wird der Standardwert der Plattform zurückgegeben. Wenn vor start() aufgerufen, aber zuvor setBufferSize() aufgerufen wurde, wird der durch setBufferSize() festgelegte Wert zurückgegeben. Wenn nach start() aufgerufen, wird die tatsächlich verwendete Puffergröße zurückgegeben. Dies ist möglicherweise nicht der Wert, der zuvor durch setBufferSize() gesetzt wurde.
Siehe auch setBufferSize().
qsizetype QAudioSource::bytesAvailable() const
Gibt die Menge der zum Lesen verfügbaren Audiodaten in Bytes zurück.
Hinweis: Der zurückgegebene Wert ist nur im Zustand QtAudio::ActiveState oder QtAudio::IdleState gültig, ansonsten wird Null zurückgegeben.
qint64 QAudioSource::elapsedUSecs() const
Gibt die Mikrosekunden seit dem Aufruf von start() zurück, einschließlich der Zeit im Idle- und Suspend-Zustand.
QtAudio::Error QAudioSource::error() const
Gibt den Fehlerstatus zurück.
QAudioFormat QAudioSource::format() const
Gibt die QAudioFormat zurück, die verwendet wird.
bool QAudioSource::isNull() const
Gibt true
zurück, wenn die Audioquelle null
ist, andernfalls wird false
zurückgegeben.
qint64 QAudioSource::processedUSecs() const
Gibt die Menge der verarbeiteten Audiodaten seit dem Aufruf von start() in Mikrosekunden zurück.
void QAudioSource::reset()
Verwirft alle Audiodaten in den Puffern, setzt die Puffer auf Null zurück.
void QAudioSource::resume()
Setzt die Verarbeitung von Audiodaten nach einem suspend() fort.
Setzt error() auf QtAudio::NoError. Setzt state() auf QtAudio::ActiveState, wenn Sie zuvor start(QIODevice*) aufgerufen haben. Setzt state() auf QtAudio::IdleState, wenn Sie zuvor start() aufgerufen haben. gibt das Signal stateChanged() aus.
void QAudioSource::setBufferSize(qsizetype value)
Setzt die Größe des Audiopuffers auf value bytes.
Hinweis: Diese Funktion kann jederzeit vor start() aufgerufen werden, Aufrufe nach start() werden ignoriert. Es sollte nicht davon ausgegangen werden, dass die eingestellte Puffergröße die tatsächlich verwendete Puffergröße ist. Der Aufruf von bufferSize() zu einem beliebigen Zeitpunkt nach start() gibt die tatsächlich verwendete Puffergröße zurück.
Siehe auch bufferSize().
void QAudioSource::setVolume(qreal volume)
Setzt die Eingangslautstärke auf volume.
Die Lautstärke wird linear von 0.0
(Stille) bis 1.0
(volle Lautstärke) skaliert. Werte, die außerhalb dieses Bereichs liegen, werden geklammert.
Wenn das Gerät die Einstellung der Eingangslautstärke nicht unterstützt, wird volume ignoriert und die Eingangslautstärke bleibt bei 1,0.
Die Standardlautstärke ist 1.0
.
Hinweis: Anpassungen der Lautstärke ändern die Lautstärke dieses Audiostroms, nicht die globale Lautstärke.
Siehe auch volume().
QIODevice *QAudioSource::start()
Gibt einen Zeiger auf das interne QIODevice zurück, das zur Übertragung von Daten vom Audioeingang des Systems verwendet wird. Das Gerät ist bereits geöffnet und read() kann Daten direkt von ihm lesen.
Hinweis: Der Zeiger wird ungültig, wenn der Stream gestoppt wird oder wenn Sie einen anderen Stream starten.
Wenn QAudioSource auf das Audiogerät des Systems zugreifen kann, gibt state() QtAudio::IdleState zurück, error() gibt QtAudio::NoError zurück und das Signal stateChanged() wird ausgegeben.
Tritt während dieses Vorgangs ein Problem auf, gibt error() QtAudio::OpenError zurück, state() gibt QtAudio::StoppedState zurück und das Signal stateChanged() wird ausgegeben.
Siehe auch QIODevice.
void QAudioSource::start(QIODevice *device)
Beginnt mit der Übertragung von Audiodaten vom Audioeingang des Systems zum device. Der device muss in den Modi WriteOnly, Append oder ReadWrite geöffnet worden sein.
Wenn QAudioSource erfolgreich Audiodaten abrufen kann, gibt state() entweder QtAudio::ActiveState oder QtAudio::IdleState zurück, error() gibt QtAudio::NoError zurück und das Signal stateChanged() wird ausgegeben.
Tritt während dieses Vorgangs ein Problem auf, gibt error() QtAudio::OpenError zurück, state() gibt QtAudio::StoppedState zurück und das Signal stateChanged() wird ausgegeben.
Siehe auch QIODevice.
QtAudio::State QAudioSource::state() const
Gibt den Status der Audioverarbeitung zurück.
[signal]
void QAudioSource::stateChanged(QtAudio::State state)
Dieses Signal wird ausgegeben, wenn sich das Gerät state geändert hat.
Hinweis: Der Namespace QtAudio wurde bis einschließlich Qt 6.6 QAudio genannt. String-basierte Verbindungen zu diesem Signal müssen QAudio::State
als Parametertyp verwenden: connect(source, SIGNAL(stateChanged(QAudio::State)), ...);
void QAudioSource::stop()
Stoppt den Audioeingang und trennt sich von der Systemressource.
Setzt error() auf QtAudio::NoError, state() auf QtAudio::StoppedState und gibt das Signal stateChanged() aus.
void QAudioSource::suspend()
Beendet die Verarbeitung von Audiodaten und bewahrt gepufferte Audiodaten.
Setzt error() auf QtAudio::NoError, state() auf QtAudio::SuspendedState und gibt das Signal stateChanged() aus.
qreal QAudioSource::volume() const
Gibt die Eingangslautstärke zurück.
Wenn das Gerät die Einstellung der Eingangslautstärke nicht unterstützt, ist der zurückgegebene Wert 1.0.
Siehe auch setVolume().
© 2025 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.