问题描述
我是python的新手.我正在尝试做应该检测,收听,记录和写入.wav文件的麦克风文件.但是,它在尝试运行文件时给我一个错误.就是说:
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'
而且我对listen()有如下相同的问题.这是我的代码:
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) / 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
# 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 + Timeout
while current <= end:
data = rec.stream.read(chunk, execption_on_overflow=False)
if rec.rms(data) >= Threshold:
end = time.time() + Timeout
current = 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()
推荐答案
您将__init__
声明为staticmethod
,因此,当您将创建您的类的对象.
You declare your __init__
as staticmethod
and so there is no self
(or in your case rec
) argument passed into your constructor when you create an object of your class.
k = Recorder() <--- will pass a reference, typical named self, into your __init__
请看看
- this
- or this
- and this
当您要使用静态构造函数时.
when you want to use a static constructor.
这篇关于错误:__ init __()缺少1个必需的位置参数:"rec"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!