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 –
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()
设置的值不同。另请参阅
- 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。
另请参阅