- class QAudioSource#
QAudioSource类提供了一个从音频输入设备接收音频数据的接口。 更多…概述#
方法#
def
__init__()def
bufferSize()定义
error()定义
format()定义
isNull()定义
reset()定义
resume()定义
setVolume()定义
start()定义
state()定义
stop()定义
suspend()定义
volume()
信号#
注意
本文档中可能包含自动从C++转换到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们
详细描述#
警告
本节包含自动从C++转换到Python的片段,可能包含错误。
您可以使用系统默认的音频输入设备来构建音频输入。您还可以创建使用特定
QAudioSource的QAudioDevice. 当您创建音频输入时,还应提供用于录音的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()报告。当状态改变时(stateChanged()),QAudioSink也会发出信号。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]])#
- 参数:
format –
QAudioFormatparent –
QObject
创建一个新的音频输入并附加到
parent。默认音频输入设备将用于输出format参数。- __init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
- 参数:
audioDeviceInfo –
QAudioDeviceformat –
QAudioFormatparent –
QObject
创建一个新的音频输入并附加到
parent。使用由audioDevice引用的设备与输入format参数一起使用。- bufferSize()#
- 返回类型:
int
返回音频缓冲区大小(以字节为单位)。
如果在调用
start()之前调用,返回平台默认值。如果在调用start()之前调用,但之前调用过setBufferSize(),则返回由setBufferSize()设置的值。如果在调用start()之后调用,则返回当前正在使用的实际缓冲区大小。这可能与之前通过setBufferSize()设置的值不同。- bytesAvailable()#
- 返回类型:
int
返回可以以字节为单位读取的音频数据量。
注意:返回值仅在处于
ActiveState或IdleState状态时有效,否则返回零。- elapsedUSecs()#
- 返回类型:
int
返回自调用
start()方法以来经过的微秒数,包括闲置和挂起状态的时间。返回错误状态。
- format()#
- 返回类型:
返回正在使用的
QAudioFormat。- isNull()#
- 返回类型:
bool
如果音频源为零,则返回
true,否则返回false。- processedUSecs()#
- 返回类型:
int
返回自调用
start()方法以来处理的音频数据量,以微秒为单位。- reset()#
丢弃缓冲区中的所有音频数据,将缓冲区重置为零。
- resume()#
在
suspend()后恢复处理音频数据。将
error()设置为NoError. 如果你之前调用过start(QIODevice*),则将state()设置为ActiveState。如果你之前调用过start(),则将state()设置为IdleState。会发出stateChanged()信号。- setBufferSize(bytes)#
- 参数:
bytes – int
设置音频缓冲区大小为
value字节。注意:此函数可以在调用
start()之前随时调用,调用start()后,对这些调用将不予理睬。不要假定设置的缓冲区大小是实际使用的缓冲区大小,调用bufferSize()在调用start()之后,将返回实际正在使用的缓冲区大小。参见
- setVolume(volume)#
- 参数:
volume – float
将输入音量设置为
volume。音量从
0.0(静音)到1.0(最大音量)是线性缩放的。值超出此范围将被限制。如果设备不支持调整输入音量,则
volume将被忽略,并且输入音量将保持在1.0。默认音量是
1.0。注意:音量调整将改变此音频流的音量,而不是全局音量。
参见
返回用于从系统的音频输入传输数据的内部QIODevice的指针。该设备已打开,可以直接从中读取数据。
注意
在流停止后或开始另一个流后,此指针将无效。
如果
QAudioSource能够访问系统音频设备,则state()返回IdleState,error()返回NoError并且会发射stateChanged()信号。如果在过程中出现问题时,
error()返回OpenError,state()返回StoppedState并会发射stateChanged()信号。参见
- start(device)
- 参数:
device –
QIODevice
从系统的音频输入开始传输音频数据到
device。该device必须以只写、追加或读写模式打开。如果
QAudioSource能够成功获取音频数据,则state()返回ActiveState或IdleState,error()返回NoError并会发射stateChanged()信号。如果在过程中出现问题时,
error()返回OpenError,state()返回StoppedState并会发射stateChanged()信号。参见
返回音频处理的状态。
当设备
状态发生变化时,将发出此信号。注意
从 Qt 6.6 及之前版本,QtAudio 命名空间曾被称为 QAudio。基于字符串的与此信号连接需要使用
QAudio::State作为参数类型:connect(source, SIGNAL(stateChanged(QAudio::State)), ...);- stop()#
停止音频输入,并从系统资源中分离。
将
error()设置为NoError,将state()设置为StoppedState并发出stateChanged()信号。- suspend)#
停止处理音频数据,保持缓冲的音频数据。
将
error()设置为NoError,将state()设置为SuspendedState并发出stateChanged()信号。- volume()#
- 返回类型:
float
返回输入音量。
如果设备不支持调整输入音量,返回值将为 1.0。
参见