class QAudioSource#

QAudioSource 类提供了一个从音频输入设备接收音频数据的接口。 更多

Inheritance diagram of PySide6.QtMultimedia.QAudioSource

概述#

方法#

信号#

注意

本文档中可能包含自动从C++转换到Python的片段。我们始终欢迎对片段翻译的贡献。如果您发现翻译有问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们

详细描述#

警告

本节包含自动从C++转换到Python的片段,可能包含错误。

您可以使用系统默认的音频输入设备来构建音频输入。您还可以创建使用特定 QAudioSourceQAudioDevice . 当您创建音频输入时,还应提供用于录音的 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]])#
参数:

创建一个新的音频输入并附加到parent。默认音频输入设备将用于输出format参数。

__init__(audioDeviceInfo[, format=QAudioFormat()[, parent=None]])
参数:

创建一个新的音频输入并附加到parent。使用由audioDevice引用的设备与输入format参数一起使用。

bufferSize()#
返回类型:

int

返回音频缓冲区大小(以字节为单位)。

如果在调用start()之前调用,返回平台默认值。如果在调用start()之前调用,但之前调用过setBufferSize(),则返回由setBufferSize()设置的值。如果在调用start()之后调用,则返回当前正在使用的实际缓冲区大小。这可能与之前通过setBufferSize()设置的值不同。

bytesAvailable()#
返回类型:

int

返回可以以字节为单位读取的音频数据量。

注意:返回值仅在处于 ActiveStateIdleState 状态时有效,否则返回零。

elapsedUSecs()#
返回类型:

int

返回自调用 start() 方法以来经过的微秒数,包括闲置和挂起状态的时间。

error()#
返回类型:

错误

返回错误状态。

format()#
返回类型:

QAudioFormat

返回正在使用的 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()之后,将返回实际正在使用的缓冲区大小。

参见

bufferSize()

setVolume(volume)#
参数:

volume – float

将输入音量设置为volume

音量从0.0(静音)到1.0(最大音量)是线性缩放的。值超出此范围将被限制。

如果设备不支持调整输入音量,则volume将被忽略,并且输入音量将保持在1.0。

默认音量是1.0

注意:音量调整将改变此音频流的音量,而不是全局音量。

参见

volume()

start()#
返回类型:

QIODevice

返回用于从系统的音频输入传输数据的内部QIODevice的指针。该设备已打开,可以直接从中读取数据。

注意

在流停止后或开始另一个流后,此指针将无效。

如果 QAudioSource 能够访问系统音频设备,则 state() 返回 IdleStateerror() 返回 NoError 并且会发射 stateChanged() 信号。

如果在过程中出现问题时,error() 返回 OpenErrorstate() 返回 StoppedState 并会发射 stateChanged() 信号。

参见

QIODevice

start(device)
参数:

deviceQIODevice

从系统的音频输入开始传输音频数据到 device。该 device 必须以只写、追加或读写模式打开。

如果 QAudioSource 能够成功获取音频数据,则 state() 返回 ActiveStateIdleStateerror() 返回 NoError 并会发射 stateChanged() 信号。

如果在过程中出现问题时,error() 返回 OpenErrorstate() 返回 StoppedState 并会发射 stateChanged() 信号。

参见

QIODevice

state()#
返回类型:

状态

返回音频处理的状态。

stateChanged(state)#
参数:

状态State

当设备 状态 发生变化时,将发出此信号。

注意

从 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。

参见

setVolume()