QAudioSink Class

Die Klasse QAudioSink bietet eine Schnittstelle zum Senden von Audiodaten an ein Audioausgabegerät. Mehr...

Kopfzeile: #include <QAudioSink>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
Erbt: QObject

Öffentliche Funktionen

QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)
virtual ~QAudioSink() override
qsizetype bufferSize() const
qsizetype bytesFree() 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 Audioausgang mit dem Standard-Audioausgabegerät des Systems erstellen. Es ist auch möglich, QAudioSink mit einem spezifischen QAudioDevice zu erstellen. Wenn Sie die Audioausgabe erstellen, sollten Sie auch die QAudioFormat für die Wiedergabe verwenden (siehe die Beschreibung der Klasse QAudioFormat für Details).

Um eine Datei abzuspielen:

Um die Wiedergabe eines Audiostroms zu starten, rufen Sie einfach start() mit einem QIODevice auf. QAudioSink holt dann die benötigten Daten vom io-Gerät. Das Abspielen einer Audiodatei ist also so einfach wie:

QFile sourceFile; // class member.QAudioSink* audio; // class member.{ sourceFile.setFileName("/tmp/test.raw"); sourceFile.open(QIODevice::ReadOnly);    QAudioFormat format; // Einrichten des Formats, z.B.format.setSampleRate(8000); format.setChannelCount(1); format.setSampleFormat(QAudioFormat::UInt8);    QAudioDevice info(QMediaDevices::defaultAudioOutput()); if (!info.isFormatSupported(format)) {        qWarning() << "Raw audio format not supported by backend, cannot play audio.";
       return; } audio = new QAudioSink(format, this); connect(audio, QAudioSink::stateChanged, this, &AudioInputExample::handleStateChanged);  audio->start(&sourceFile); }

Die Datei wird abgespielt, vorausgesetzt, das Audiosystem und das Ausgabegerät unterstützen dies. Wenn Sie kein Glück haben, überprüfen Sie, was mit der Funktion error() los ist.

Nachdem die Datei abgespielt wurde, müssen wir das Gerät anhalten:

void AudioOutputExample::stopAudioOutput()
{
    audio->stop();
    sourceFile.close();
    delete audio;
}

Zu jedem Zeitpunkt befindet sich QAudioSink in einem von vier Zuständen: aktiv, angehalten, gestoppt oder im Leerlauf. Diese Zustände werden durch das QtAudio::State enum beschrieben. Zustandsänderungen werden durch das Signal stateChanged() gemeldet. Sie können dieses Signal verwenden, um z. B. die grafische Benutzeroberfläche der Anwendung zu aktualisieren; das banale Beispiel hierfür ist die Änderung des Zustands einer Schaltfläche play/pause. Sie fordern eine Zustandsänderung direkt mit suspend(), stop(), reset(), resume() und start() an.

Wenn ein Fehler auftritt, können Sie die error type mit der Funktion error() abrufen. Eine Beschreibung der möglichen Fehler, die gemeldet werden, finden Sie in der Aufzählung QtAudio::Error. Wenn QtAudio::UnderrunError auftritt, wechselt der Zustand zu QtAudio::IdleState, wenn ein weiterer Fehler auftritt, wechselt der Zustand zu QtAudio::StoppedState. Sie können auf Fehler prüfen, indem Sie sich mit dem Signal stateChanged() verbinden:

void AudioOutputExample::handleStateChanged(QAudio::State newState)
{
    switch (newState) {
        case QAudio::IdleState:
            // Finished playing (no more data)
            AudioOutputExample::stopAudioOutput();
            break;

        case QAudio::StoppedState:
            // Stopped for other reasons
            if (audio->error() != QAudio::NoError) {
                // Error handling
            }
            break;

        default:
            // ... other cases as appropriate
            break;
    }
}

Siehe auch QAudioSource und QAudioDevice.

Dokumentation der Mitgliederfunktionen

[explicit] QAudioSink::QAudioSink(const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

Erstellen Sie einen neuen Audioausgang und verbinden Sie ihn mit parent. Das Standard-Audioausgabegerät wird mit den Parametern für die Ausgabe format verwendet.

[explicit] QAudioSink::QAudioSink(const QAudioDevice &audioDevice, const QAudioFormat &format = QAudioFormat(), QObject *parent = nullptr)

Konstruieren Sie einen neuen Audioausgang und verbinden Sie ihn mit parent. Das Gerät, auf das audioDevice verweist, wird mit den Parametern des Ausgangs format verwendet.

[override virtual noexcept] QAudioSink::~QAudioSink()

Zerstört diesen Audioausgang.

Dadurch werden alle verwendeten Systemressourcen und Puffer freigegeben.

qsizetype QAudioSink::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 QAudioSink::bytesFree() const

Gibt die Anzahl der im Audiopuffer verfügbaren freien Bytes zurück.

Hinweis: Der zurückgegebene Wert ist nur im Zustand QtAudio::ActiveState oder QtAudio::IdleState gültig, andernfalls wird Null zurückgegeben.

qint64 QAudioSink::elapsedUSecs() const

Gibt die Mikrosekunden seit dem Aufruf von start() zurück, einschließlich der Zeit im Leerlauf und im Suspend-Zustand.

QtAudio::Error QAudioSink::error() const

Gibt den Fehlerstatus zurück.

QAudioFormat QAudioSink::format() const

Gibt die QAudioFormat zurück, die verwendet wird.

bool QAudioSink::isNull() const

Gibt true zurück, wenn die Instanz QAudioSink null ist, andernfalls gibt sie false zurück.

qint64 QAudioSink::processedUSecs() const

Gibt die Menge der verarbeiteten Audiodaten seit dem Aufruf von start() zurück (in Mikrosekunden).

void QAudioSink::reset()

Stoppt sofort die Audioausgabe und verwirft alle Audiodaten, die sich derzeit in den Puffern befinden. Alle anstehenden Audiodaten, die an QIODevice gesendet werden, werden ignoriert.

Siehe auch stop().

void QAudioSink::resume()

Setzt die Verarbeitung von Audiodaten nach einem suspend() fort.

Setzt state() auf den Zustand, den die Senke hatte, als suspend() aufgerufen wurde, und setzt error() auf QAudioError::NoError. Diese Funktion bewirkt nichts, wenn der Zustand der Audiosenke nicht QtAudio::SuspendedState ist.

void QAudioSink::setBufferSize(qsizetype value)

Setzt die Größe des Audiopuffers auf value in Bytes.

Hinweis: Diese Funktion kann jederzeit vor start() aufgerufen werden. Nach start() werden Aufrufe dieser Funktion ignoriert. Es sollte nicht angenommen werden, dass die eingestellte Puffergröße die tatsächlich verwendete Puffergröße ist - rufen Sie bufferSize() jederzeit nach start() auf, um die tatsächlich verwendete Puffergröße zurückzugeben.

Siehe auch bufferSize().

void QAudioSink::setVolume(qreal volume)

Setzt die Ausgabelautstä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.

Die Standardlautstärke ist 1.0.

Hinweis: Anpassungen der Lautstärke ändern die Lautstärke dieses Audiostroms, nicht die globale Lautstärke.

Die Lautstärkeregler der Benutzeroberfläche sollten normalerweise nicht linear skaliert werden. Die Verwendung einer logarithmischen Skala führt beispielsweise zu linearen Änderungen der wahrgenommenen Lautstärke, was ein Benutzer normalerweise von einem Lautstärkeregler erwarten würde. Siehe QtAudio::convertVolume() für weitere Einzelheiten.

Siehe auch volume().

QIODevice *QAudioSink::start()

Gibt einen Zeiger auf das interne QIODevice zurück, das verwendet wird, um Daten an den Audioausgang des Systems zu übertragen. Das Gerät ist bereits geöffnet und write() kann Daten direkt dorthin schreiben.

Hinweis: Der Zeiger wird ungültig, wenn der Stream gestoppt wird oder wenn Sie einen anderen Stream starten.

Wenn QAudioSink 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 QAudioSink::start(QIODevice *device)

Startet die Übertragung von Audiodaten von device an den Audioausgang des Systems. device muss in den Modi ReadOnly oder ReadWrite geöffnet worden sein.

Wenn die QAudioSink erfolgreich Audiodaten ausgeben kann, gibt state() QtAudio::ActiveState 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 QAudioSink::state() const

Gibt den Status der Audioverarbeitung zurück.

[signal] void QAudioSink::stateChanged(QtAudio::State state)

Dieses Signal wird ausgesendet, wenn sich das Gerät state geändert hat. Dies ist der aktuelle Zustand des Audioausgangs.

Hinweis: Der QtAudio Namespace hieß bis einschließlich Qt 6.6 QAudio. String-basierte Verbindungen zu diesem Signal müssen QAudio::State als Parametertyp verwenden: connect(source, SIGNAL(stateChanged(QAudio::State)), ...);

void QAudioSink::stop()

Stoppt die Audioausgabe und trennt sich von der Systemressource.

Setzt error() auf QtAudio::NoError, state() auf QtAudio::StoppedState und gibt das Signal stateChanged() aus.

Hinweis: Unter Linux und Darwin wird bei diesem Vorgang der zugrunde liegende Audiopuffer synchron entleert, was zu entsprechenden Verzögerungen bei der Pufferauslastung führen kann. Um alle Puffer sofort zurückzusetzen, verwenden Sie stattdessen die Methode reset.

Siehe auch reset().

void QAudioSink::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 QAudioSink::volume() const

Liefert die Lautstärke zwischen 0,0 und 1,0 einschließlich.

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.