当存在或移除声卡时,使用PyAudio检查声卡

时间:2015-02-11 11:30:42

标签: python pyaudio

检查特定的声卡是否与PyAudio一样正常工作,但是当我在脚本运行时移除声卡时(如下所示的节点循环),它无法检测到声卡已被物理移除。操作系统(Windows-7)识别系统更改,但是下面的get_device_info函数总是返回已删除的声卡详细信息,即使它未连接。

当然重新导入pyaudio,如下所示,你期望找不到删除的声卡的功能不应该出现?

有什么想法吗?

for x in range(100):

     get_soundcard_dev_info()
     var = raw_input("\nPress Enter - to recheck if Soundcard exsists")

def get_soundcard_dev_info():
   import pyaudio 
   pad_sc = pyaudio.PyAudio()
   max_devs = pad_sc.get_device_count()
   input_devices_index = []
   output_devices_index = []

   for i in range(max_devs):
       devinfo = pad_sc.get_device_info_by_index(i)
       if "TUSBAudio ASIO Driver" in devinfo['name']:
           input_devices_index.append(int(devinfo['index']))
           output_devices_index.append(int(devinfo['index']))

   if not input_devices_index:
      print "NONE"

   print input_devices_index

1 个答案:

答案 0 :(得分:0)

如果你反复尝试import相同的模块,Python什么都不做(因为它知道模块已经在sys.modules中),因此PortAudio库没有被重新加载而且设备列表不是更新。

因此,您可以将import pyaudio移至文件顶部。

我不太确定如果你反复拨打pyaudio.PyAudio()会发生什么(显然它没有达到预期的效果),但是可以肯定的是,你应该在get_soundcard_dev_info()结束时调用它。 :

pad_sc.terminate()

这应该正确卸载PortAudio库,下次设备列表应该是正确的。