簡體   English   中英

QAudioOutput 不播放聲音

[英]QAudioOutput not playing sound

我有一個非常簡單的示例來嘗試使用 PySide2 (Qt 5.15) 在 Python3 中使用 QAudioOutput class 播放聲音。 我沒有聽到電腦發出任何聲音。

#!/bin/python3

from PySide2.QtMultimedia import QAudioDeviceInfo, QAudioOutput, QAudioFormat
from PySide2.QtCore import QFile, QIODevice

sourceFile = QFile()
sourceFile.setFileName("/home/ubuntu/sound.wav");
sourceFile.open(QIODevice.ReadOnly);

format = QAudioFormat()
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat.Endian.LittleEndian);
format.setSampleType(QAudioFormat.SampleType.UnSignedInt);

info = QAudioDeviceInfo.defaultOutputDevice();
if (info.isFormatSupported(format) != True):
    qWarning() << "Raw audio format not supported by backend, cannot play audio.";

audio = QAudioOutput(info, format);
audio.start(sourceFile);

Output:

ubuntu@ubuntu:~$ python3 test.py 
QObject::startTimer: Timers can only be used with threads started with QThread

Qt 的許多元素都需要一個事件循環,而 QAudioOutput 就是這種情況,因為它異步運行:

import sys

from PySide2.QtMultimedia import QAudioDeviceInfo, QAudioOutput, QAudioFormat
from PySide2.QtCore import QFile, QIODevice, QCoreApplication


def main():

    app = QCoreApplication()

    sourceFile = QFile("/home/ubuntu/sound.wav")
    if not sourceFile.open(QIODevice.ReadOnly):
        print(sourceFile.errorString())
        sys.exit(-1)

    fmt = QAudioFormat()
    fmt.setSampleRate(8000)
    fmt.setChannelCount(1)
    fmt.setSampleSize(8)
    fmt.setCodec("audio/pcm")
    fmt.setByteOrder(QAudioFormat.Endian.LittleEndian)
    fmt.setSampleType(QAudioFormat.SampleType.UnSignedInt)

    info = QAudioDeviceInfo.defaultOutputDevice()
    if not info.isFormatSupported(fmt):
        print("Raw audio fmt not supported by backend, cannot play audio.")
        sys.exit(-1)

    audio = QAudioOutput(info, fmt)
    audio.start(sourceFile)

    ret = app.exec_()
    sys.exit(ret)


if __name__ == "__main__":
    main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM