Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
PyQt5==5.15.11
PyQt5_sip==12.17.0
PyAudioWPatch==0.2.12.7
openai==1.68.2
openai-whisper==20240930
markdown2==2.5.3
Expand All @@ -12,4 +11,5 @@ torch==2.6.0
tqdm==4.67.1
numpy==2.1.3
requests==2.32.3
pyaudiowpatch==0.2.12.7
pyaudiowpatch==0.2.12.7; sys_platform == 'win32'
pyaudio==0.2.14; sys_platform != 'win32'
92 changes: 53 additions & 39 deletions src/audio_capture.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# audio_capture.py
import pyaudiowpatch as pyaudio
import sys
if sys.platform == "win32":
import pyaudiowpatch as pyaudio
else:
import pyaudio
import wave
import os
import configparser
Expand Down Expand Up @@ -38,7 +42,10 @@ def _get_device(self):
self.p = pyaudio.PyAudio()
try:
if self.device_index is None:
self.device_info = self.p.get_default_wasapi_loopback()
if sys.platform == "win32":
self.device_info = self.p.get_default_wasapi_loopback()
else:
self.device_info = self.p.get_default_input_device_info()
else:
self.device_info = self.p.get_device_info_by_index(self.device_index)

Expand Down Expand Up @@ -120,47 +127,54 @@ def stop_recording(self):
@staticmethod
def list_devices():
"""设备列表查询(直接使用官方推荐方式)"""
with pyaudio.PyAudio() as p:
# 打印默认输入设备信息
print("\n=== 默认输入设备 ===")
try:
default = p.get_default_input_device_info()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认输入设备")
p = pyaudio.PyAudio()
# with pyaudio.PyAudio() as p:
# 打印默认输入设备信息
print("\n=== 默认输入设备 ===")
try:
default = p.get_default_input_device_info()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认输入设备")

# 打印默认输出设备信息
print("\n=== 默认输出设备 ===")
try:
default = p.get_default_output_device_info()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认输出设备")
# 打印默认输出设备信息
print("\n=== 默认输出设备 ===")
try:
default = p.get_default_output_device_info()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认输出设备")

print("\n=== 默认Loopback设备 ===")
try:
default = p.get_default_wasapi_loopback()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认loopback设备")
print("\n=== 默认Loopback设备 ===")
try:
if sys.platform == "win32":
device = p.get_default_wasapi_loopback()
else:
device = p.get_default_input_device_info()
print(f"* 默认设备: [{default['index']}] {default['name']}")
except Exception as e:
print("! 未找到默认loopback设备")

print("\n所有含有InputChannel的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev["maxInputChannels"] > 0:
print(f"[{dev['index']}] {dev['name']} (输入通道: {dev['maxInputChannels']})")
print("\n所有含有InputChannel的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev["maxInputChannels"] > 0:
print(f"[{dev['index']}] {dev['name']} (输入通道: {dev['maxInputChannels']})")

print("\n所有含有OutputChannel的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev["maxOutputChannels"] > 0:
print(f"[{dev['index']}] {dev['name']} (输出通道: {dev['maxOutputChannels']})")

print("\n所有含有Loopback的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev.get("isLoopbackDevice") != None and dev["isLoopbackDevice"] > 0:
print(f"[{dev['index']}] {dev['name']} (Loopback: {dev['maxInputChannels']})")

p.terminate()

print("\n所有含有OutputChannel的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev["maxOutputChannels"] > 0:
print(f"[{dev['index']}] {dev['name']} (输出通道: {dev['maxOutputChannels']})")

print("\n所有含有Loopback的设备:")
for i in range(p.get_device_count()):
dev = p.get_device_info_by_index(i)
if dev["isLoopbackDevice"] > 0:
print(f"[{dev['index']}] {dev['name']} (Loopback: {dev['maxInputChannels']})")
if __name__ == "__main__":
# 列出设备
LoopbackRecorder.list_devices()
Expand Down