I am new to python. I am trying to do microphone file that ought to detect, listen, record and write the .wav files. However, it is giving me an error while I am trying to run the file. It is saying:
TypeError: __init__() missing 1 required positional argument: 'rec'
And I have the same issue with listen() as below. Here is my code:
class Recorder:
# compute the rms
def rms(frame):count = len(frame) / swidthformat = "%dh" % (count)shorts = struct.unpack(format, frame)sum_squares = 0.0for sample in shorts:n = sample * SHORT_NORMALIZEsum_squares += n * nrms = math.pow(sum_squares / count, 0.5);return rms * 1000# create an interface to portaudio
@staticmethod
def __init__(rec):rec.p= pyaudio.PyAudio()rec.stream= rec.p.open(format=FORMAT, channels=CHANNELS, rate=RATE,input=True,output=True,frames_per_buffer=chunk)# record the detected sound
def record(rec):print('sound detected, record begin')frames = []current = time.time()end = current + Timeoutwhile current <= end:data = rec.stream.read(chunk, execption_on_overflow=False)if rec.rms(data) >= Threshold:end = time.time() + Timeoutcurrent = time.time()frames.append(data)rec.write(b''.join(frames))# write the recorded sound to .wav file
def write(rec, recording):files = len(os.listdir(FileNameTmp))filename = os.path.join(FileNameTmp,time.strftime('%Y_%m_%d-%H_%H_%M_%S.wav'.format(FORMAT)))filename2 = time.strftime('%Y_%m_%d-%H_%H_%M_%S.wav'.format(FORMAT))wf = wave.open(filename, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(rec.p.get_sample_size(FORMAT))wf.setframerate(RATE)wf.writeframes(recording)wf.close()print('Written to file: {}'.format(filename))print('Returning to listening')# listen to the sound
def listen(rec):print('Listening beginning')while True:input = rec.stream.read(chunk, execption_on_overflow=False)rms_val = rec.rms(input)if rms_val > Threshold:rec.record()
k = Recorder()
k.listen()