设置pygame混合器的输出设备

时间:2019-07-18 16:44:49

标签: python audio pygame

我需要使用pygame通过不同的音频设备播放音频文件。显然,这可以通过方法pygame.mixer.init()中的参数devicename来实现,但是没有相关文档。

我的问题:

1-如何为pygame调音台设置输出设备(或在可能的情况下设置通道/声音)?

2-如何列出所有可用的设备名称?

2 个答案:

答案 0 :(得分:0)

使用sounddevice python软件包查询设备名称。

import sounddevice

devs = sounddevice.query_devices()
print(devs) # Shows current output and input as well with "<" abd ">" tokens
    
for dev in devs:
    print(dev['name'])

在Windows 10 2020.04上,这些名称似乎具有格式

<名称>(<控制器名称>)

其中name是您可以更改的名称,控制器名称是驱动程序的显示名称。 例如。我的三星电视音频输出(通过HDMI)的名称是:

SAMSUNG TV 1(2- AMD高清晰度音频设备)

请注意,打印查询结果本身似乎具有一种怪异的表示形式,例如,对于当前的音频输出,我得到了这样的提示:

<3三星电视1(2- AMD High Defin,MME(0 in,2 out)

显然缺少全名。

答案 1 :(得分:0)

我找到了解决方案。 Pygame v2使所有这些成为可能。由于pygame使用sdl2,因此我们可以通过pygame自己的sdl2库实现来获取音频设备名称。

要获取音频设备名称:

import pygame._sdl2 as sdl2

pygame.init()
is_capture = 0  # zero to request playback devices, non-zero to request recording devices
num = sdl2.get_num_audio_devices(is_capture)
names = [str(sdl2.get_audio_device_name(i, is_capture), encoding="utf-8") for i in range(num)]
print("\n".join(names))
pygame.quit()

在我的设备上,代码返回:

HDA Intel PCH, 92HD87B2/4 Analog
HDA Intel PCH, HDMI 0
C-Media USB Headphone Set, USB Audio

并为pygame调音台设置输出音频设备:

import pygame
import time

pygame.mixer.pre_init(devicename="HDA Intel PCH, 92HD87B2/4 Analog")
pygame.mixer.init()
pygame.mixer.music.load("audio.ogg")
pygame.mixer.music.play()
time.sleep(10)
pygame.mixer.quit()