s644703207 发表于 2023-12-25 23:28:21

写了一个监听到声音就按键的脚本,一直报错,网上也没有解决办法

import sounddevice as sd
import keyboard

# 设置阈值和按键
threshold = 0.1# 设置声音阈值
key_to_press = 'space'# 设置要按下的按键

# 定义回调函数
def audio_callback(indata, frames, time, status):
    volume_norm = np.linalg.norm(indata) * 10# 计算音量的标准化值
    if volume_norm > threshold:
      keyboard.press(key_to_press)# 按下按键

# 打开声音输入流
stream = sd.InputStream(callback=audio_callback)
stream.start()

# 持续监听声音输入
while True:
    pass

# 停止声音输入流
stream.stop()
发生异常: PortAudioError
Error querying device -1
File "D:\python\听到声音就按键.py", line 15, in <module>
    stream = sd.InputStream(callback=audio_callback)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
sounddevice.PortAudioError: Error querying device -1
求助各位大佬,帮我看看怎么个事?

FishC 发表于 2023-12-25 23:28:36

这个错误通常是由于您没有选择正确的音频设备引起的。您可以尝试检查一下您的电脑上的音频设备是否正常工作,并在代码中指定正确的设备。

首先,您可以使用sounddevice库的query_devices函数来查看可用的音频设备列表:

import sounddevice as sd

devices = sd.query_devices()
print(devices)

然后,查看列表中的设备信息,并找到合适的输入设备的索引。例如,如果您想使用内置麦克风,则可以找到索引号,并将其添加到stream参数中:

stream = sd.InputStream(callback=audio_callback, device=input_device_index)

或者,您也可以尝试指定默认设备,使用`device='default'`作为stream参数:

stream = sd.InputStream(callback=audio_callback, device='default')

如果以上方法仍然无法解决问题,您还可以尝试更新sounddevice库和pyaudio库,确保它们是最新版本:

pip install --upgrade sounddevice pyaudio

希望这可以帮助您解决问题!如果问题仍然存在,请告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

s644703207 发表于 2023-12-25 23:34:25

   0 Microsoft 声音映射器 - Output, MME (0 in, 2 out)
<1 扬声器 (High Definition Audio Devi, MME (0 in, 2 out)
   2 PK27QA2 (NVIDIA High Definition, MME (0 in, 2 out)
   3 Digital Audio (S/PDIF) (High De, MME (0 in, 2 out)
   4 Line 1 (Virtual Audio Cable), MME (0 in, 2 out)
   5 主声音驱动程序, Windows DirectSound (0 in, 2 out)
   6 扬声器 (High Definition Audio Device), Windows DirectSound (0 in, 2 out)
   7 PK27QA2 (NVIDIA High Definition Audio), Windows DirectSound (0 in, 2 out)
   8 Digital Audio (S/PDIF) (High Definition Audio Device), Windows DirectSound (0 in, 2 out)
   9 Line 1 (Virtual Audio Cable), Windows DirectSound (0 in, 2 out)
10 扬声器 (High Definition Audio Device), Windows WASAPI (0 in, 2 out)
11 PK27QA2 (NVIDIA High Definition Audio), Windows WASAPI (0 in, 2 out)
12 Digital Audio (S/PDIF) (High Definition Audio Device), Windows WASAPI (0 in, 2 out)
13 Line 1 (Virtual Audio Cable), Windows WASAPI (0 in, 2 out)
14 Output (), Windows WDM-KS (0 in, 2 out)
15 Mic 1 (Virtual Cable 1), Windows WDM-KS (8 in, 0 out)
16 Line Out (Virtual Cable 1), Windows WDM-KS (0 in, 8 out)
17 耳机 (), Windows WDM-KS (0 in, 2 out)
18 Speakers (HD Audio Speaker), Windows WDM-KS (0 in, 6 out)
19 SPDIF Out (HD Audio SPDIF out), Windows WDM-KS (0 in, 2 out)
20 耳机 (@System32\drivers\bthhfenum.sys,#2;%1 Hands-Free%0
;(联想thinkplus-LP80)), Windows WDM-KS (0 in, 1 out)
21 耳机 (@System32\drivers\bthhfenum.sys,#2;%1 Hands-Free%0
;(联想thinkplus-LP80)), Windows WDM-KS (1 in, 0 out)
这些设备该怎么选呢,我选了正在使用的播放设备,结果还是报错

FishC 发表于 2023-12-25 23:34:39

s644703207 发表于 2023-12-25 23:34
0 Microsoft 声音映射器 - Output, MME (0 in, 2 out) ...

看起来您列出了所有可用的音频设备列表。根据列表,您可以选择具有输入功能的设备作为输入设备。请注意,某些设备可能只具有输出功能,并且无法用于输入。

如果您想使用当前正在使用的播放设备作为输入设备,可以尝试使用以下代码:

import sounddevice as sd

def audio_callback(indata, frames, time, status):
    # 处理声音回调函数的代码

# 获取当前默认音频输入设备的索引
default_input_device = sd.default.device
# 打开默认音频输入流
stream = sd.InputStream(callback=audio_callback, device=default_input_device)
stream.start()

# 持续监听声音输入
while True:
    pass

# 停止声音输入流
stream.stop()

如果上述代码仍然报错,可能是因为您的音频驱动程序或库存在问题。您可以尝试更新音频驱动程序、sounddevice库和pyaudio库来解决问题。另外,如果您使用的是Windows系统,还可以尝试以管理员权限运行代码。

希望这些建议能够帮助您解决问题!如果问题仍然存在,请告诉我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

歌者文明清理员 发表于 2023-12-25 23:37:10

不是很会sounddevice,就查了几个链接,欢迎参考:

github.com/spatialaudio/python-sounddevice/issues/89
https://blog.csdn.net/jiexijihe945/article/details/132713750

s644703207 发表于 2023-12-25 23:44:17

FishC 发表于 2023-12-25 23:34
看起来您列出了所有可用的音频设备列表。根据列表,您可以选择具有输入功能的设备作为输入设备。请注意, ...

sounddevice.PortAudioError: Error querying device -1仍然提示这个错误

FishC 发表于 2023-12-25 23:44:34

s644703207 发表于 2023-12-25 23:44
sounddevice.PortAudioError: Error querying device...

很抱歉,让您遇到了这个问题。这个错误通常是因为无法正确查询设备导致的。

有时候,您可以尝试指定具体的设备索引,而不是使用"default"或"-1"。根据您列出的设备列表,您可以看到一些设备附带有输入和输出的信息,例如:"扬声器 (High Definition Audio Device)" 和 "PK27QA2 (NVIDIA High Definition Audio)"。

您可以使用这些设备中的一个的索引号作为参数传递给`device`参数。例如,如果您想使用第一个设备作为输入设备,您可以将代码改为:

stream = sd.InputStream(callback=audio_callback, device=0)

请确保您的设备索引号是合法且存在的。

如果问题仍然存在,请尝试更新sounddevice库和pyaudio库,以及您的音频驱动程序,确保它们是最新版本。或者,您也可以尝试在其他环境下运行代码,例如使用不同的操作系统或计算机。

如果以上方法仍然无法解决问题,可能需要进一步检查您的音频设备和驱动程序是否正常工作,并查看相关错误信息。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

s644703207 发表于 2023-12-26 16:04:17

问题解决了,win11取消了立体声混音,装win10打开混音就ok了

FishC 发表于 2023-12-26 16:04:23

s644703207 发表于 2023-12-26 16:04
问题解决了,win11取消了立体声混音,装win10打开混音 ...

很高兴听到您解决了问题!是的,不同的操作系统版本可能会对立体声混音和音频设备管理方式有所不同。在某些情况下,旧版本的操作系统可能支持更多的音频功能。如果您在Windows 11上遇到了问题,而在Windows 10上没有问题,那么回退到Windows 10可能是一种解决方法。感谢您分享解决方案!如果您还有其他问题,随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

s644703207 发表于 2023-12-26 16:04:51

歌者文明清理员 发表于 2023-12-25 23:37
不是很会sounddevice,就查了几个链接,欢迎参考:

github.com/spatialaudio/python-sounddevice/issues ...

问题解决了,win11取消了立体声混音,装win10打开混音就ok了

FishC 发表于 2023-12-26 16:05:11

s644703207 发表于 2023-12-26 16:04
问题解决了,win11取消了立体声混音,装win10打开混音 ...

很高兴听到您解决了问题!是的,不同的操作系统版本可能对立体声混音和音频设备管理方式有所不同。在某些情况下,旧版本的操作系统可能支持更多的音频功能。如果您在Windows 11上遇到了问题,而在Windows 10上没有问题,那么回退到Windows 10可能是一种解决方法。感谢您分享解决方案!如果您还有其他问题,随时向我提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 写了一个监听到声音就按键的脚本,一直报错,网上也没有解决办法