Я хочу объединить два кода, но продолжаю давать мне ошибку - PullRequest
0 голосов
/ 30 апреля 2019

Привет, я новичок в python и пытаюсь записать звук, когда громкость превышает определенное значение (в коде 200).

Изначально у меня было два разных куска кода. один для записи и один для обнаружения громкости. Я хочу объединить и записать звук, когда громкость превышает 200.

Но это продолжает давать мне ошибку, поэтому мне интересно, какую часть я пропустил. Я был бы очень признателен, если бы кто-нибудь помог мне разобраться в этом.

import time
import grovepi
import os
import sys
sys.path.insert(0,'.')
from audio import soundrecord

loudness_sensor = 0

while True:
    try:
        # Read the sound level
        sensor_value = grovepi.analogRead(loudness_sensor)

        print("sensor_value = %d" %sensor_value)
        time.sleep(.5)
        if sensor_value> 200:
            soundrecord()
            time.sleep(10)

    except IOError:
        print ("Error")

Я определил приведенный ниже код записи как функцию записи звука и поместил его в тот же каталог

import pyaudio
import wave

def soundrecord():

    form_1 = pyaudio.paInt16 # 16-bit resolution
    chans = 1 # 1 channel
    samp_rate = 44100 # 44.1kHz sampling rate
    chunk = 4096 # 2^12 samples for buffer
    record_secs = 3 # seconds to record
    dev_index = 2 # device index found by p.get_device_info_by_index(ii)

    wav_output_filename = 'test1.wav' # name of .wav file


    audio = pyaudio.PyAudio() # create pyaudio instantiation

    # create pyaudio stream
    stream = audio.open(format = form_1,rate = samp_rate,channels = chans, \
                        input_device_index = dev_index,input = True, \
                        frames_per_buffer=chunk)
    print("recording")
    frames = []

    # loop through stream and append audio chunks to frame array
    for ii in range(0,int((samp_rate/chunk)*record_secs)):
        data = stream.read(chunk)
        frames.append(data)

    print("finished recording")

    # stop the stream, close it, and terminate the pyaudio instantiation
    stream.stop_stream()
    stream.close()
    audio.terminate()

    # save the audio frames as .wav file
    wavefile = wave.open(wav_output_filename,'wb')
    wavefile.setnchannels(chans)
    wavefile.setsampwidth(audio.get_sample_size(form_1))
    wavefile.setframerate(samp_rate)
    wavefile.writeframes(b''.join(frames))
    wavefile.close()

Ожидается: запись звука, когда громкость превышает 200

фактический:

sensor_value = 75
sensor_value = 268
Error
sensor_value = 360
Error
sensor_value = 48
sensor_value = 39
sensor_value = 79
...