- class QAudioSink#
QAudioSink
类提供了一个发送音频数据到音频输出设备的接口。 更多...概要#
方法#
def
__init__()
def
bufferSize()
定义
bytesFree()
定义
error()
定义
format()
定义
isNull()
定义
reset()
定义
resume()
定义
setVolume()
定义
start()
定义
state()
定义
stop()
定义
suspend()
定义
volume()
信号#
注意
本文档可能包含自动从 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
另请参阅
- __init__([format=QAudioFormat()[, parent=None]])#
- 参数:
format –
QAudioFormat
parent –
QObject
构建一个新的音频输出并将其附加到
parent
。默认音频输出设备使用输出format
参数。- __init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
- 参数:
audioDeviceInfo –
QAudioDevice
format –
QAudioFormat
parent –
QObject
构建一个新的音频输出并将其附加到
parent
。使用由audioDevice
引用的设备与输出format
参数一起使用。- bufferSize()#
- 返回类型:
int
返回音频缓冲区的大小(字节数)。
在调用
start()
之前,返回平台默认值。如果先调用start()
但之前的调用setBufferSize()
已设置,则返回setBufferSize()
设置的值。如果在调用start()
之后调用,返回正在使用的实际缓冲区大小。这可能不是之前通过setBufferSize()
设置的值。另请参阅
- bytesFree()#
- 返回类型:
int
返回音频缓冲区中可用的空闲字节数。
注意
返回值仅在处于
ActiveState
或IdleState
状态时有效,否则返回零。- elapsedUSecs()#
- 返回类型:
int
返回自从调用
start()
起以来经过的微秒数,包括Idle和Suspend状态下的时间。返回错误状态。
- format()#
- 返回类型:
返回正在使用的
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()
,以返回实际正在使用的缓冲区大小。另请参阅
- setVolume(arg__1)#
- 参数:
arg__1 - float
设置输出音量为 volume。
音量按线性比例从
0.0
(静音)到1.0
(满量)缩放。超出此范围的值将被限制。默认音量为
1.0
。注意
音量调整将改变此音频流的音量,而不是全局音量。
UI音量控件通常应使用非线性缩放。例如,使用对数尺度会产生感知响度的线性变化,这是用户从音量控制中通常期望得到的效果。有关详细信息,请参见
convertVolume()
。另请参阅
返回内部 QIODevice 的指针,用于向系统音频输出传输数据。该设备已打开,可以直接将数据写入 write()。
注意
在流停止后或开始另一个流后,此指针将失效。
如果
QAudioSink
能够访问系统的音频设备,则state()
返回IdleState
,error()
返回NoError
,并且发出stateChanged()
信号。如果在执行此过程时出现问题时,
error()
返回OpenError
,state()
返回StoppedState
,并且会触发stateChanged()
信号。另请参阅
- start(device)
- 参数:
device –
QIODevice
从
device
开始将音频数据传输到系统的音频输出。必须以只读或读写模式打开device
。如果
QAudioSink
可成功输出音频数据,state()
返回ActiveState
,error()
返回NoError
,并且会触发stateChanged()
信号。如果在执行此过程时出现问题时,
error()
返回OpenError
,state()
返回StoppedState
,并且会触发stateChanged()
信号。另请参阅
返回音频处理的状态。
当设备
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之间的音量值。
另请参阅