PySide6.QtMultimedia.QAudioBufferInput

class QAudioBufferInput

QAudioBufferInput 类用于通过 QMediaCaptureSessionQMediaRecorder 提供自定义音频缓冲区。更多

PySide6.QtMultimedia.QAudioBufferInput 的继承图

在版本6.8中添加。

概要

方法

信号

注意

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

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QAudioBufferInput 仅在 FFmpeg 后端支持。

可以通过将QAudioBufferInputQMediaRecorder连接到QMediaCaptureSession来录制自定义音频缓冲区。对于拉取模式的实现,响应readyToSendAudioBuffer()信号调用sendAudioBuffer()。在下面的代码片段中,这是通过将信号连接到自定义媒体生成器类中的一个槽函数来实现的。该槽函数发出另一个带有新音频缓冲区的信号,该信号连接到sendAudioBuffer()

session = QMediaCaptureSession()
recorder = QMediaRecorder()
audioInput = QAudioBufferInput()
session.setRecorder(recorder)
session.setAudioBufferInput(audioInput)
MediaGenerator generator # Custom class providing audio buffers
audioInput.readyToSendAudioBuffer.connect(
        generator.nextAudioBuffer)
generator.audioBufferReady.connect(
        audioInput.sendAudioBuffer)
recorder.record()

这是一个提供音频缓冲区的最小槽函数实现:

def nextAudioBuffer(self):

    buffer = nextBuffer()
    audioBufferReady.emit(buffer)

更多详情请参见readyToSendAudioBuffer()sendAudioBuffer()

__init__([parent=None])
Parameters:

父对象QObject

使用parent构造一个新的QAudioBufferInput对象。

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

使用音频formatparent构造一个新的QAudioBufferInput对象。

指定的format将作为调用record()时初始化匹配音频编码器的提示。如果未指定格式或格式无效,音频编码器将在发送第一个音频缓冲区时初始化。

如果您提前知道要发送的音频缓冲区类型,我们建议指定格式。

captureSession()
Return type:

QMediaCaptureSession

返回此音频缓冲区输入所连接的捕获会话,如果音频缓冲区输入未连接到捕获会话,则返回nullptr

使用setAudioBufferInput()将音频缓冲区输入连接到会话。

format()
Return type:

QAudioFormat

返回在音频缓冲区输入构造时指定的音频格式。

readyToSendAudioBuffer()

表示可以将新的音频缓冲区发送到音频缓冲区输入。接收到信号后,如果您有要发送的音频数据,请调用sendAudioBuffer一次或循环调用,直到它返回false

另请参阅

sendAudioBuffer()

sendAudioBuffer(audioBuffer)
Parameters:

audioBufferQAudioBuffer

Return type:

布尔

通过QMediaCaptureSessionQAudioBuffer发送到QMediaRecorder

如果指定的audioBuffer已成功发送到目的地,则返回true。如果缓冲区未发送,则返回false,这可能发生在实例未分配给QMediaCaptureSession、会话没有媒体记录器、媒体记录器未启动或其队列已满的情况下。一旦目的地能够处理新的音频缓冲区,readyToSendAudioBuffer()信号将被发出。

发送一个空的音频缓冲区被QMediaRecorder视为输入流的结束。如果autoStoptrue并且所有输入都报告了流的结束,QMediaRecorder会自动停止录制。