class QAudioSink#

QAudioSink 类提供了一个发送音频数据到音频输出设备的接口。 更多...

Inheritance diagram of 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() 信号报告。您可以使用此信号来更新应用程序的用户界面;一个平凡的例子是改变一个 播放/暂停 按钮的状态。您可以通过 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]])#
参数:

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

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

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

bufferSize()#
返回类型:

int

返回音频缓冲区的大小(字节数)。

在调用 start() 之前,返回平台默认值。如果先调用 start() 但之前的调用 setBufferSize() 已设置,则返回 setBufferSize() 设置的值。如果在调用 start() 之后调用,返回正在使用的实际缓冲区大小。这可能不是之前通过 setBufferSize() 设置的值。

另请参阅

setBufferSize()

bytesFree()#
返回类型:

int

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

注意

返回值仅在处于 ActiveStateIdleState 状态时有效,否则返回零。

elapsedUSecs()#
返回类型:

int

返回自从调用 start() 起以来经过的微秒数,包括Idle和Suspend状态下的时间。

error()#
返回类型:

错误

返回错误状态。

format()#
返回类型:

QAudioFormat

返回正在使用的 QAudioFormat

isNull()#
返回类型:

bool

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

processedUSecs()#
返回类型:

int

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

reset()#

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

resume()#

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

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

setBufferSize(bytes)#
参数:

bytes - int

设置音频缓冲区大小为 bytes 字节的值。

注意

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

另请参阅

bufferSize()

setVolume(arg__1)#
参数:

arg__1 - float

设置输出音量为 volume。

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

默认音量为 1.0

注意

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

UI音量控件通常应使用非线性缩放。例如,使用对数尺度会产生感知响度的线性变化,这是用户从音量控制中通常期望得到的效果。有关详细信息,请参见 convertVolume()

另请参阅

volume()

start()#
返回类型:

QIODevice

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

注意

在流停止后或开始另一个流后,此指针将失效。

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

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

另请参阅

QIODevice

start(device)
参数:

deviceQIODevice

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

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

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

另请参阅

QIODevice

state()#
返回类型:

状态

返回音频处理的状态。

stateChanged(state)#
参数:

stateState

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

注意

QtAudio 命名空间被命名为 QAudio,直到 Qt 6.6。基于字符串的连接到该信号必须使用 QAudio::State 作为参数类型:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);

stop()#

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

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

suspend()#

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

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

volume()#
返回类型:

float

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

另请参阅

setVolume()