PySide6.QtMultimedia.QAudioSink

class QAudioSink

QAudioSink 类提供了一个接口,用于将音频数据发送到音频输出设备。更多

PySide6.QtMultimedia.QAudioSink 的继承图

概要

方法

信号

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

你可以使用系统的默认音频输出设备来构建一个音频输出。也可以使用特定的QAudioDevice来创建QAudioSink。当你创建音频输出时,你还应该传入用于播放的QAudioFormat(详情请参阅QAudioFormat类描述)。

播放文件:

开始播放音频流只需使用QIODevice调用start()QAudioSink然后会从io设备中获取所需的数据。因此,播放音频文件就像这样简单:

QFile sourceFile # class member.
QAudioSink* audio # class member.
sourceFile.setFileName("/tmp/test.raw")
sourceFile.open(QIODevice.ReadOnly)
format = QAudioFormat()
# Set up the format, eg.
format.setSampleRate(8000)
format.setChannelCount(1)
format.setSampleFormat(QAudioFormat.UInt8)
info = QAudioDevice(QMediaDevices.defaultAudioOutput())
if not info.isFormatSupported(format):
    qWarning() << "Raw audio format not supported by backend, cannot play audio."
    return

audio = QAudioSink(format, self)
audio.connect(QAudioSink::stateChanged, self.handleStateChanged)
audio.start(sourceFile)

文件将开始播放,假设音频系统和输出设备支持它。如果运气不佳,请检查error()函数的情况。

文件播放完毕后,我们需要停止设备:

def stopAudioOutput(self):

    audio.stop()
    sourceFile.close()
    del audio

在任何给定时间,QAudioSink 将处于四种状态之一:活动、挂起、停止或空闲。这些状态由 State 枚举描述。状态变化通过 stateChanged() 信号报告。您可以使用此信号来更新应用程序的 GUI;这里的平凡示例是更改 play/pause 按钮的状态。您可以直接通过 suspend()stop()reset()resume()start() 请求状态更改。

如果发生错误,您可以使用error()函数获取error type。请参阅Error枚举以了解可能报告的错误描述。当遇到UnderrunError时,状态将更改为IdleState,当遇到其他错误时,状态将更改为StoppedState。您可以通过连接到stateChanged()信号来检查错误:

def handleStateChanged(self, newState):


        if newState == QAudio.IdleState:
            # Finished playing (no more data)
            AudioOutputExample::stopAudioOutput()
            break
        elif newState == QAudio.StoppedState:
            # Stopped for other reasons
            if audio.error() != QAudio.NoError:
                # Error handling

            break
        else:
            # ... other cases as appropriate
            break

另请参阅

QAudioSource QAudioDevice

__init__([format=QAudioFormat()[, parent=None]])
Parameters:

构建一个新的音频输出并将其附加到parent。使用输出format参数的默认音频输出设备。

__init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
Parameters:

构建一个新的音频输出并将其附加到parent。使用audioDevice引用的设备与输出format参数一起使用。

bufferSize()
Return type:

整数

返回音频缓冲区的大小,单位为字节。

如果在start()之前调用,返回平台默认值。如果在start()之前调用,但之前调用了setBufferSize(),则返回由setBufferSize()设置的值。如果在start()之后调用,则返回实际使用的缓冲区大小。这可能与之前由setBufferSize()设置的值不同。

另请参阅

setBufferSize()

bytesFree()
Return type:

整数

返回音频缓冲区中可用的空闲字节数。

注意

返回值仅在ActiveStateIdleState状态下有效,否则返回零。

elapsedUSecs()
Return type:

整数

返回自start()调用以来的微秒数,包括空闲和挂起状态的时间。

error()
Return type:

错误

返回错误状态。

format()
Return type:

QAudioFormat

返回正在使用的QAudioFormat

isNull()
Return type:

布尔

如果 QAudioSink 实例是 null,则返回 true,否则返回 false

processedUSecs()
Return type:

整数

返回自调用start()以来处理的音频数据量(以微秒为单位)。

reset()

丢弃缓冲区中的所有音频数据,将缓冲区重置为零。

resume()

suspend()之后恢复处理音频数据。

state()设置为调用suspend()时接收器的状态,并将error()设置为QAudioError::NoError。如果音频接收器的状态不是SuspendedState,则此函数不执行任何操作。

setBufferSize(bytes)
Parameters:

bytes – 整数

将音频缓冲区大小设置为value字节。

注意

此函数可以在start()之前随时调用。在start()之后调用此函数将被忽略。不应假设设置的缓冲区大小是实际使用的缓冲区大小 - 在start()之后随时调用bufferSize()以返回实际使用的缓冲区大小。

另请参阅

bufferSize()

setVolume(volume)
Parameters:

volume – 浮点数

将输出音量设置为 volume

音量从0.0(静音)线性缩放到1.0(最大音量)。超出此范围的值将被限制。

默认音量为1.0

注意

调整音量将改变此音频流的音量,而不是全局音量。

UI音量控制通常应该以非线性方式缩放。例如,使用对数比例将产生感知音量的线性变化,这是用户通常期望的音量控制效果。有关更多详细信息,请参见convertVolume()

另请参阅

volume()

start()
Return type:

QIODevice

返回一个指向用于将数据传输到系统音频输出的内部QIODevice的指针。该设备已经打开,可以直接使用write()写入数据。

注意

指针将在流停止后或如果您启动另一个流后变为无效。

如果QAudioSink能够访问系统的音频设备,state()返回IdleStateerror()返回NoError,并且stateChanged()信号被发出。

如果在此过程中出现问题,error() 返回 OpenErrorstate() 返回 StoppedState,并且发出 stateChanged() 信号。

另请参阅

QIODevice

start(device)
Parameters:

设备QIODevice

开始将音频数据从device传输到系统的音频输出。device必须以只读或读写模式打开。

如果 QAudioSink 能够成功输出音频数据,state() 返回 ActiveStateerror() 返回 NoError,并且会发出 stateChanged() 信号。

如果在此过程中出现问题,error() 返回 OpenErrorstate() 返回 StoppedState,并且发出 stateChanged() 信号。

另请参阅

QIODevice

state()
Return type:

State

返回音频处理的状态。

stateChanged(state)
Parameters:

状态State

当设备的state发生变化时,会发出此信号。这是音频输出的当前状态。

注意

QtAudio 命名空间在 Qt 6.6 及之前版本中被称为 QAudio。基于字符串的连接到此信号必须使用 QAudio::State 作为参数类型:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);

stop()

停止音频输出,从系统资源中分离。

error()设置为NoError,将state()设置为StoppedState并发出stateChanged()信号。

注意

在Linux和Darwin系统上,此操作会同步清空底层音频缓冲区,这可能会根据缓冲区的负载导致相应的延迟。要立即重置所有缓冲区,请改用reset方法。

另请参阅

reset()

suspend()

停止处理音频数据,保留缓冲的音频数据。

error()设置为NoError,将state()设置为SuspendedState,并发出stateChanged()信号。

volume()
Return type:

浮点数

返回介于0.0和1.0之间的音量值。

另请参阅

setVolume()