Files
auto-caption/python-subprocess/sysaudio/win.py
2025-06-13 19:54:00 +08:00

53 lines
1.8 KiB
Python

"""获取 Windows 系统音频输出流"""
import pyaudiowpatch as pyaudio
def getDefaultLoopbackDevice(mic: pyaudio.PyAudio, info = True)->dict:
"""
获取默认的系统音频输出的回环设备
Args:
mic (pyaudio.PyAudio): pyaudio对象
info (bool, optional): 是否打印设备信息
Returns:
dict: 系统音频输出的回环设备
"""
try:
WASAPI_info = mic.get_host_api_info_by_type(pyaudio.paWASAPI)
except OSError:
print("Looks like WASAPI is not available on the system. Exiting...")
exit()
default_speaker = mic.get_device_info_by_index(WASAPI_info["defaultOutputDevice"])
if(info): print("wasapi_info:\n", WASAPI_info, "\n")
if(info): print("default_speaker:\n", default_speaker, "\n")
if not default_speaker["isLoopbackDevice"]:
for loopback in mic.get_loopback_device_info_generator():
if default_speaker["name"] in loopback["name"]:
default_speaker = loopback
if(info): print("Using loopback device:\n", default_speaker, "\n")
break
else:
print("Default loopback output device not found.")
print("Run `python -m pyaudiowpatch` to check available devices.")
print("Exiting...")
exit()
if(info): print(f"Output Stream Device: #{default_speaker['index']} {default_speaker['name']}")
return default_speaker
def getOutputStream():
mic = pyaudio.PyAudio()
default_speaker = getDefaultLoopbackDevice(mic, False)
stream = mic.open(
format = pyaudio.paInt16,
channels = default_speaker["maxInputChannels"],
rate = int(default_speaker["defaultSampleRate"]),
input = True,
input_device_index = default_speaker["index"]
)
return stream