PySide6.QtMultimedia.QAudioSource¶
- class QAudioSource¶
QAudioSource类提供了一个接口,用于从音频输入设备接收音频数据。更多…概要¶
方法¶
def
__init__()def
bufferSize()def
bytesAvailable()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来创建QAudioSource。当你创建音频输入时,你还应该传入用于录制的QAudioFormat(详情请参阅QAudioFormat类描述)。要记录到文件:
QAudioSource允许您使用音频输入设备录制音频。此类的默认构造函数将使用系统的默认音频设备,但您也可以为特定设备指定一个QAudioDevice。您还需要传入您希望录制的QAudioFormat。启动
QAudioSource只需调用start()并打开一个用于写入的QIODevice。例如,要录制到文件,您可以:QFile destinationFile # Class member QAudioSource* audio # Class member destinationFile.setFileName("/tmp/test.raw") destinationFile.open( QIODevice.WriteOnly | QIODevice.Truncate ) format = QAudioFormat() # Set up the desired format, for example: format.setSampleRate(8000) format.setChannelCount(1) format.setSampleFormat(QAudioFormat.UInt8) info = QMediaDevices.defaultAudioInput() if not info.isFormatSupported(format): qWarning() << "Default format not supported, trying to use the nearest." audio = QAudioSource(format, self) audio.stateChanged.connect(self.handleStateChanged) QTimer::singleShot(3000, self.stopRecording) audio.start(destinationFile) # Records audio for 3000ms
如果输入设备支持指定的格式,这将开始录制(您可以使用
isFormatSupported()来检查)。如果遇到任何问题,请使用error()函数检查出了什么问题。我们在stopRecording()槽中停止录制。def stopRecording(self): audio.stop() destinationFile.close() del audio
在任何时间点,
QAudioSource将处于四种状态之一:活动、挂起、停止或空闲。这些状态由State枚举指定。您可以直接通过suspend()、resume()、stop()、reset()和start()请求状态更改。当前状态由state()报告。当状态发生变化时,QAudioSink也会向您发出信号(stateChanged())。QAudioSource提供了几种测量自start()录音开始以来经过的时间的方法。processedUSecs()函数返回以微秒为单位的流长度,即它排除了音频输入被暂停或空闲的时间。elapsedUSecs()函数返回自start()被调用以来经过的时间,无论QAudioSource处于何种状态。如果发生错误,您可以使用
error()获取错误原因。可能的错误原因由Error枚举描述。当遇到错误时,QAudioSource将进入StoppedState状态。连接到stateChanged()信号以处理错误:def handleStateChanged(self, newState): if newState == QAudio.StoppedState: if audio.error() != QAudio.NoError: # Error handling else: # Finished recording break elif newState == QAudio.ActiveState: # Started recording - read from IO device 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()设置的值不同。另请参阅
- bytesAvailable()¶
- Return type:
整数
返回可供读取的音频数据的字节数。
注意:返回值仅在
ActiveState或IdleState状态下有效,否则返回零。- elapsedUSecs()¶
- Return type:
整数
返回自
start()调用以来的微秒数,包括空闲和挂起状态的时间。返回错误状态。
- format()¶
- Return type:
返回正在使用的
QAudioFormat。- isNull()¶
- Return type:
布尔
如果音频源是
null,则返回true,否则返回false。- processedUSecs()¶
- Return type:
整数
返回自调用
start()以来处理的音频数据量,单位为微秒。- reset()¶
丢弃缓冲区中的所有音频数据,将缓冲区重置为零。
- resume()¶
在
suspend()之后恢复处理音频数据。将
error()设置为NoError。如果之前调用了start(QIODevice*),则将state()设置为ActiveState。如果之前调用了start(),则将state()设置为IdleState。发出stateChanged()信号。- setBufferSize(bytes)¶
- Parameters:
bytes – 整数
将音频缓冲区大小设置为
value字节。注意:此函数可以在
start()之前随时调用,在start()之后调用此函数将被忽略。不应假设设置的缓冲区大小是实际使用的缓冲区大小,在start()之后随时调用bufferSize()将返回实际使用的缓冲区大小。另请参阅
- setVolume(volume)¶
- Parameters:
volume – 浮点数
将输入音量设置为
volume。音量从
0.0(静音)线性缩放到1.0(最大音量)。超出此范围的值将被限制。如果设备不支持调整输入音量,则
volume将被忽略,输入音量将保持在1.0。默认音量为
1.0。注意:调整音量将更改此音频流的音量,而不是全局音量。
另请参阅
返回一个指向用于从系统音频输入传输数据的内部QIODevice的指针。该设备已经打开,可以直接从中读取数据。
注意
指针将在流停止后或如果您启动另一个流后变为无效。
如果
QAudioSource能够访问系统的音频设备,state()返回IdleState,error()返回NoError,并且stateChanged()信号被发出。如果在此过程中出现问题,
error()返回OpenError,state()返回StoppedState,并且发出stateChanged()信号。另请参阅
- start(device)
- Parameters:
设备 –
QIODevice
开始将系统的音频数据传输到
device。该device必须以WriteOnly、Append或ReadWrite模式打开。如果
QAudioSource能够成功获取音频数据,state()返回ActiveState或IdleState,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:
浮点数
返回输入的音量。
如果设备不支持调整输入音量,返回的值将是1.0。
另请参阅