gpt4 book ai didi

Python 在检测到的声音上录制音频

转载 作者:太空狗 更新时间:2023-10-30 00:32:59 25 4
gpt4 key购买 nike

我希望在后台运行一个 python 脚本,并在麦克风的阈值达到某个点时使用 pyaudio 录制声音文件。这是用于双向 radio 网络上的监视器。因此我们只想记录传输的音频。

心中的任务:

  • 在 n% 门阈值上记录音频输入

  • 静默数秒后停止录音

  • 音频后继续录音这么多秒

  • 第二阶段:将数据输入MySQL数据库进行录音查询

我在看一个类似的文件结构

/home/Recodings/2013/8/23/12-33.wav 将是 23/08/2013 @ 12:33.wav 的传输录音

我已经使用了来自

的代码

Detect and record a sound with python

我现在有点不知所措,非常感谢一些指导

谢谢

最佳答案

当前的最佳答案有点过时,仅适用于 python 2。这是为 python 3 更新的版本。它将函数包装到类中,并将所有内容打包到一个简单易用的版本中。请注意,最佳答案和我的脚本之间有一个关键区别:

顶部的脚本记录一个文件然后停止,而我的脚本会在检测到噪音时继续记录,并在记录时将记录转储到目录中。

这两个脚本的主要思想非常相似:

第 1 步:“聆听”直到 rms 变得大于阈值

第 2 步:开始录制,设置停止录制的计时器,== TIMEOUT_LENGTH

第 3 步:如果 rms 在定时器超时之前再次突破阈值,则重置定时器

第 4 步:现在计时器已到期,将录音写入目录并返回第 1 步

import pyaudio
import math
import struct
import wave
import time
import os

Threshold = 10

SHORT_NORMALIZE = (1.0/32768.0)
chunk = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
swidth = 2

TIMEOUT_LENGTH = 5

f_name_directory = r'C:\Users\Jason\PyCharmProjects\AutoRecorder\records'

class Recorder:

@staticmethod
def rms(frame):
count = len(frame) / swidth
format = "%dh" % (count)
shorts = struct.unpack(format, frame)

sum_squares = 0.0
for sample in shorts:
n = sample * SHORT_NORMALIZE
sum_squares += n * n
rms = math.pow(sum_squares / count, 0.5)

return rms * 1000

def __init__(self):
self.p = pyaudio.PyAudio()
self.stream = self.p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
output=True,
frames_per_buffer=chunk)

def record(self):
print('Noise detected, recording beginning')
rec = []
current = time.time()
end = time.time() + TIMEOUT_LENGTH

while current <= end:

data = self.stream.read(chunk)
if self.rms(data) >= Threshold: end = time.time() + TIMEOUT_LENGTH

current = time.time()
rec.append(data)
self.write(b''.join(rec))

def write(self, recording):
n_files = len(os.listdir(f_name_directory))

filename = os.path.join(f_name_directory, '{}.wav'.format(n_files))

wf = wave.open(filename, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(self.p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(recording)
wf.close()
print('Written to file: {}'.format(filename))
print('Returning to listening')



def listen(self):
print('Listening beginning')
while True:
input = self.stream.read(chunk)
rms_val = self.rms(input)
if rms_val > Threshold:
self.record()

a = Recorder()

a.listen()

关于Python 在检测到的声音上录制音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18406570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com