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 –
QAudioFormat
parent –
QObject
构建一个新的音频输出并将其附加到
parent
。使用输出format
参数的默认音频输出设备。- __init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
- Parameters:
audioDeviceInfo –
QAudioDevice
format –
QAudioFormat
parent –
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之间的音量值。
另请参阅