PySide6.QtMultimedia.QAudioSource

class QAudioSource

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

PySide6.QtMultimedia.QAudioSource 的继承图

概要

方法

信号

注意

本文档可能包含从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

另请参阅

QAudioSink QAudioDevice

__init__([format=QAudioFormat()[, parent=None]])
Parameters:

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

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

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

bufferSize()
Return type:

整数

返回音频缓冲区的大小,单位为字节。

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

另请参阅

setBufferSize()

bytesAvailable()
Return type:

整数

返回可供读取的音频数据的字节数。

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

elapsedUSecs()
Return type:

整数

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

error()
Return type:

错误

返回错误状态。

format()
Return type:

QAudioFormat

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

另请参阅

bufferSize()

setVolume(volume)
Parameters:

volume – 浮点数

将输入音量设置为 volume

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

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

默认音量为1.0

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

另请参阅

volume()

start()
Return type:

QIODevice

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

注意

指针将在流停止后或如果您启动另一个流后变为无效。

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

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

另请参阅

QIODevice

start(device)
Parameters:

设备QIODevice

开始将系统的音频数据传输到device。该device必须以WriteOnly、Append或ReadWrite模式打开。

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

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

另请参阅

QIODevice

state()
Return type:

State

返回音频处理的状态。

stateChanged(state)
Parameters:

状态State

当设备的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。

另请参阅

setVolume()