我需要使用pygame通过不同的音频设备播放音频文件。显然,这可以通过方法pygame.mixer.init()中的参数devicename
来实现,但是没有相关文档。
我的问题:
1-如何为pygame调音台设置输出设备(或在可能的情况下设置通道/声音)?
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()