PyQt5 选择将播放哪个音频设备输出

2024-04-08

这个简单的代码将有一个 GUI 按钮,按下该按钮就会播放example.mp3到默认的音频输出设备。

import sys
from PyQt5 import QtCore, QtMultimedia
from PyQt5.QtMultimedia import QAudio, QAudioDeviceInfo
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QComboBox


class SimplePlay(QWidget):
    def __init__(self):
        super().__init__()
        self.player = QtMultimedia.QMediaPlayer()
        url = QtCore.QUrl.fromLocalFile(QtCore.QDir.current().absoluteFilePath("example.mp3"))
        self.sound_file = QtMultimedia.QMediaContent(url)

        button = QPushButton("Play", self)
        button.clicked.connect(self.on_click)

        self.combo_box_devices = QComboBox(self)
        self.combo_box_devices.setGeometry(0, 50, 300, 50)
        for device in QAudioDeviceInfo.availableDevices(QAudio.AudioOutput):
            self.combo_box_devices.addItem(device.deviceName())

        self.show()

    def on_click(self):
        self.player.setMedia(self.sound_file)
        self.player.play()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = SimplePlay()
    sys.exit(app.exec_())

有没有办法用代码指定它将播放到哪个音频设备输出?或者以某种方式设置播放器默认输出设备。

具体示例是拥有 2 个播放设备、扬声器和耳机。 假设扬声器是系统的默认输出设备,我怎样才能用耳机而不是扬声器播放?我需要能够用代码来改变它。

正如您在上面的代码中看到的,有一个组合框列出了所有输出设备。我希望当您单击时,根据您选择的组合框条目,它会在所选设备上播放。

- 更新 -

根据 Chiku1022 的回答,我设法做到了这一点:

    scv: QtMultimedia.QMediaService = self.player.service()
    out: QtMultimedia.QAudioOutputSelectorControl = scv.requestControl("org.qt-project.qt.audiooutputselectorcontrol/5.0")
    out.setActiveOutput(self.combo_box_devices.currentText())
    scv.releaseControl(out)
    scv = self.player.service()

    out = scv.requestControl("org.qt-project.qt.audiooutputselectorcontrol/5.0")
    out.setActiveOutput(self.combo_box_devices.currentText())

    scv.releaseControl(out)

combo_box_devices 中的字符串只是scv.availableOutputs()

尽管有人暗示将 QT_MULTIMEDIA_PREFERRED_PLUGINS 设置为 windowsmediafoundation 对我来说不起作用,但将其保留为默认的 DirectShow 可以。


Qt5+ 如何为 QMediaPlayer 设置默认音频设备 https://stackoverflow.com/questions/28408590/qt5-how-to-set-default-audio-device-for-qmediaplayer

这就是您正在寻找的。它是用C++编写的,所以你需要想出Python的出路。没那么难。我目前不在我的电脑上,否则我会在这里编写 python 代码。

UPDATE

os.environ['QT_MULTIMEDIA_PREFERRED_PLUGINS'] = 'windowsmediafoundation'

在代码顶部添加上面的代码行。这将帮助您的媒体播放器使用 Windows 的最新媒体 API 而不是 DirectShow,因此 QAudioDeviceInfo 将正常工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyQt5 选择将播放哪个音频设备输出 的相关文章

  • 在Python3.6中调用C#代码

    由于完全不了解 C 编码 我希望在我的 python 代码中调用 C 函数 我知道有很多关于同一问题的问答 但由于一些奇怪的原因 我无法从示例 python 模块导入简单的 c 类库 以下是我所做的事情 C 类库设置 我使用的是 VS 20
  • on_delete=models.PROTECT 和 on_delete=models.CASCADE 在 Django 模型上有什么作用?

    我对 Django 很熟悉 但最近注意到有一个on delete models CASCADE and on delete models PROTECT模型的选项 on delete models CASCADE and on delete
  • python - 是否可以扩展 xml-rpc 可以序列化的事物集?

    我看到几个问题询问如何发送numpy ndarray通过 xml rpc 调用 这不能开箱即用 因为正如 xml rpc 中所述docs https docs python org 2 library xmlrpclib html 有一组固
  • 如何从 PyCharm 项目中获取我的“exe”[重复]

    这个问题在这里已经有答案了 通过 PyCharm 在 Python 上编写一些项目 我想从中获取一个exe文件 我尝试过 另存为 gt XXX exe 但是 当我尝试执行它时出现错误 此类操作系统不支持该文件 附注 我有win7 x64 它
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 可以在 TensorFlow 中使用排名相关作为成本函数吗?

    我正在处理偶尔充满异常值的极其嘈杂的数据 因此我主要依靠相关性来衡量我的神经网络的准确性 是否可以明确使用诸如等级相关性 斯皮尔曼相关系数 之类的东西作为我的成本函数 到目前为止 我主要依赖 MSE 作为相关性的代理 我现在面临三个主要障碍
  • 优化 Keras 以使用所有可用的 CPU 资源

    好吧 我真的不知道我在说什么 所以请耐心听我说 我正在使用 Theano 后端运行 Keras 以在 MNIST 图像上运行基本的神经网络 目前只是一个教程 过去 我一直使用我的旧 HP 笔记本电脑 因为我有 Windows 和 Ubunt
  • PIL Image.size 返回相反的宽度/高度

    使用PIL确定图像的宽度和高度 在特定图像上 幸运的是只有这一个 但这很麻烦 从 image size 返回的宽度 高度是相反的 图片 http storage googleapis com cookila 533ebf752b9d1f7c
  • 创建一个类似于 Tkinter 的表

    我希望创建类似于 Tkinter 中的表格的东西 但它不一定是这样的 例如 我想创建标题 Name1 Name2 Value 并在每个标题下面有几个空白行 然后 我希望稍后用我计算的值或名称的字符串值填充这些行 因此是标签 对于 Name2
  • 如何在 Python 中将彩色输出打印到终端?

    是否有与 Perl 等效的 Python 语言 print color red print
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • 如何在python中检索aws批处理参数值?

    流程 Dynamo DB gt Lambda gt 批处理 如果将角色 arn 插入动态数据库 它是从 lambda 事件中检索的 然后使用submit job角色 arn 的 API 被传递为 parameters role arn ar
  • spacy 如何使用词嵌入进行命名实体识别 (NER)?

    我正在尝试使用以下方法训练 NER 模型spaCy识别位置 人 名和组织 我试图理解如何spaCy识别文本中的实体 但我无法找到答案 从这个问题 https github com explosion spaCy issues 491在 Gi
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 在 MacO 和 Linux 上安装 win32com [重复]

    这个问题在这里已经有答案了 我的问题很简单 我可以安装吗win32com蟒蛇API pywin32特别是 在非 Windows 操作系统上 我一直在Mac上尝试多个版本pip install pywin32 都失败了 下面是一个例子 如果你
  • 如何在与应用程序初始化文件不同的文件中迭代 api 路由

    我有一个 apiroutes py 文件 其中定义了许多路由 例如 api route api read methods GET api route api write methods POST 其中 api 是导入 from import
  • Scipy 稀疏 Cumsum

    假设我有一个scipy sparse csr matrix代表下面的值 0 0 1 2 0 3 0 4 1 0 0 2 0 3 4 0 我想就地计算非零值的累积和 这会将数组更改为 0 0 1 3 0 6 0 10 1 0 0 3 0 6
  • Python 3.2 中 **kwargs 和 dict 有什么区别?

    看起来Python的很多方面都只是功能的重复 除了我在 Python 中的 kwargs 和 dict 中看到的冗余之外 还有什么区别吗 参数解包存在差异 许多人使用kwargs 并通过dict作为论据之一 使用参数解包 Prepare f
  • 来自 django 教程 was_published_recently.admin_order_field = 'pub_date'

    From Django 教程 https www jetbrains com help pycharm 2017 1 creating and running your first django project html d28041e21
  • 使用 Python 生成类似于 Messenger 或 kik 代码的圆形二维码

    我可以使用 Python 生成圆形 QR 码 就像 Facebook Messenger 或 kik 使用的那样吗 我访问了很多网站 但找不到这种类型的二维码 默认情况下 Python 生成方形 QR 码 但在我的项目中我想要圆形 QR 码

随机推荐