PySide6.QtMultimedia.QAudioSink¶
- class QAudioSink¶
QAudioSink类提供了一个接口,用于将音频数据发送到音频输出设备。更多…概要¶
方法¶
def
__init__()def
bufferSize()def
bytesFree()def
elapsedUSecs()def
error()def
format()def
isNull()def
processedUSecs()def
reset()def
resume()def
setBufferSize()def
setVolume()def
start()def
state()def
stop()def
suspend()def
volume()
信号¶
def
stateChanged()
注意
本文档可能包含从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
另请参阅
- __init__([format=QAudioFormat()[, parent=None]])¶
- Parameters:
format –
QAudioFormatparent –
QObject
构建一个新的音频输出并将其附加到
parent。使用输出format参数的默认音频输出设备。- __init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
- Parameters:
audioDeviceInfo –
QAudioDeviceformat –
QAudioFormatparent –
QObject
构建一个新的音频输出并将其附加到
parent。使用audioDevice引用的设备与输出format参数一起使用。- bufferSize()¶
- Return type:
整数
返回音频缓冲区的大小,单位为字节。
如果在
start()之前调用,返回平台默认值。如果在start()之前调用,但之前调用了setBufferSize(),则返回由setBufferSize()设置的值。如果在start()之后调用,则返回实际使用的缓冲区大小。这可能与之前由setBufferSize()设置的值不同。另请参阅
- bytesFree()¶
- Return type:
整数
返回音频缓冲区中可用的空闲字节数。
注意
返回值仅在
ActiveState或IdleState状态下有效,否则返回零。- elapsedUSecs()¶
- Return type:
整数
返回自
start()调用以来的微秒数,包括空闲和挂起状态的时间。返回错误状态。
- format()¶
- Return type:
返回正在使用的
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()以返回实际使用的缓冲区大小。另请参阅
- setVolume(volume)¶
- Parameters:
volume – 浮点数
将输出音量设置为
volume。音量从
0.0(静音)线性缩放到1.0(最大音量)。超出此范围的值将被限制。默认音量为
1.0。注意
调整音量将改变此音频流的音量,而不是全局音量。
UI音量控制通常应该以非线性方式缩放。例如,使用对数比例将产生感知音量的线性变化,这是用户通常期望的音量控制效果。有关更多详细信息,请参见
convertVolume()。另请参阅
返回一个指向用于将数据传输到系统音频输出的内部QIODevice的指针。该设备已经打开,可以直接使用write()写入数据。
注意
指针将在流停止后或如果您启动另一个流后变为无效。
如果
QAudioSink能够访问系统的音频设备,state()返回IdleState,error()返回NoError,并且stateChanged()信号被发出。如果在此过程中出现问题,
error()返回OpenError,state()返回StoppedState,并且发出stateChanged()信号。另请参阅
- start(device)
- Parameters:
设备 –
QIODevice
开始将音频数据从
device传输到系统的音频输出。device必须以只读或读写模式打开。如果
QAudioSink能够成功输出音频数据,state()返回ActiveState,error()返回NoError,并且会发出stateChanged()信号。如果在此过程中出现问题,
error()返回OpenError,state()返回StoppedState,并且发出stateChanged()信号。另请参阅
返回音频处理的状态。
当设备的
state发生变化时,会发出此信号。这是音频输出的当前状态。注意
QtAudio 命名空间在 Qt 6.6 及之前版本中被称为 QAudio。基于字符串的连接到此信号必须使用
QAudio::State作为参数类型:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);- stop()¶
停止音频输出,从系统资源中分离。
将
error()设置为NoError,将state()设置为StoppedState并发出stateChanged()信号。- suspend()¶
停止处理音频数据,保留缓冲的音频数据。
将
error()设置为NoError,将state()设置为SuspendedState,并发出stateChanged()信号。- volume()¶
- Return type:
浮点数
返回介于0.0和1.0之间的音量值。
另请参阅