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