当前位置: 首页 > 面试题库 >

如何从Python中的麦克风获取声音输入,并即时处理它?

严誉
2023-03-14
问题内容

问候,

我正在尝试用Python编写一个程序,该程序每次在麦克风中被点击时都会打印一个字符串。当我说“敲击”时,是指突然的大声喧or或类似的声音。

我在SO中搜索,发现了以下信息:识别音频的音调

我认为PyAudio库可以满足我的需求,但是我不太确定如何使程序等待音频信号(实时麦克风监视),以及在获得如何处理它时(是否需要使用Fourier
Transform是在上面的帖子中指示的)?

预先感谢您能给我的任何帮助。


问题答案:

如果您使用的是LINUX,则可以使用pyALSAAUDIO。对于Windows,我们有PyAudio,还有一个名为SoundAnalyse的库。

我在这里找到了Linux的示例:

#!/usr/bin/python
## This is an example of a simple sound capture script.
##
## The script opens an ALSA pcm for sound capture. Set
## various attributes of the capture, and reads in a loop,
## Then prints the volume.
##
## To test it out, run it and shout at your microphone:

import alsaaudio, time, audioop

# Open the device in nonblocking capture mode. The last argument could
# just as well have been zero for blocking mode. Then we could have
# left out the sleep call in the bottom of the loop
inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)

# Set attributes: Mono, 8000 Hz, 16 bit little endian samples
inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)

# The period size controls the internal number of frames per period.
# The significance of this parameter is documented in the ALSA api.
# For our purposes, it is suficcient to know that reads from the device
# will return this many frames. Each frame being 2 bytes long.
# This means that the reads below will return either 320 bytes of data
# or 0 bytes of data. The latter is possible because we are in nonblocking
# mode.
inp.setperiodsize(160)

while True:
    # Read data from device
    l,data = inp.read()
    if l:
        # Return the maximum of the absolute value of all samples in a fragment.
        print audioop.max(data, 2)
    time.sleep(.001)


 类似资料:
  • 问题内容: 我正在寻找一种将文件中的音频数据馈送到麦克风的方法,因此,当第三方应用程序(例如 arecord 或Chromium的“按语音搜索”功能)使用麦克风进行音频输入时,它们会从文件中接收音频数据代替。 这是我的情况 :我编写的一个应用程序记录了来自麦克风的音频数据(使用ALSA)并将其保存到文件(audioFile0.raw)中。在将来的某个未知时间点,某些未知的第三方应用程序(例如,我没

  • 播放音符 播放声音 录制 文字转语音

  • 问题内容: 我有一个应用程序可以点击麦克风,还可以根据麦克风输入播放声音(不必同时通过tho)。下面的代码有效。但是一个问题是输出在小型顶部扬声器而不是底部真实扬声器上播放。我可以通过 在播放器开始播放之前 将3行放在下面来奇怪地解决此问题,然后我可以听到扬声器上的声音。 但是,麦克风停止收听 !即使在播放器停止播放之后。基本上麦克风不喜欢 .defaultToSpeaker 任何想法? 这里也记

  • 问题内容: 我想用Java制作一个实时的语音聊天程序,但是我对用Java录制/播放声音一无所知,因此,在Google的帮助下,我认为我能够使用以下内容将麦克风录制到字节数组中: 因此,据我所知,如果我调用out.toByteArray();,我应该已经从麦克风上录制了一个字节数组的声音。(运行上述命令没有错误,但是由于我不希望将其输出到文件中并且没有这样做,所以没有办法证明它是否实际记录了) 现在

  • js或者vue实现实时录音功能、如何实现、只录电脑系统声音、或者只录麦克风声音、用户可以自行选择录音的方式 有那些插件或者其他实现方案吗。 请求大佬指教 无

  • 问题内容: 我一直在尝试使用android模拟器上的语音识别来做某事。 最终安装了市场和Google语音搜索应用程序后,我已经非常接近使仿真器能够执行我想要的操作了- 可以识别我的语音。首先,我需要使仿真器能够记录音频,或者至少认为存在麦克风。 我相信adb曾经有-mic选项-但是我认为它不再存在。 有没有人做过,还是有人可以阐明它。 问题答案: 您看过本教程吗?看到评论: 你们还不能在模拟器中录