如何解决AttributeError:“列表”对象没有属性“ detect_nonsilent”
运行以下代码段:
while True:
print('recording')
myrecording = sd.rec(int(seconds * fs),samplerate=fs,channels=1,dtype=np.int16)
sd.wait() # Wait until recording is finished
write('output.wav',fs,myrecording.astype(np.int16))
sound = AudioSegment.from_file("output.wav",format="wav")
lsound = sound + 35
silence = silence.detect_nonsilent(lsound,min_silence_len=1000,silence_thresh=-15)
silence = [((start/1000),(stop/1000)) for start,stop in silence] #convert to sec
print(silence)
print(len(silence))
if len(silence) == 0:
print('silence')
else:
print('have recording')
lsound.export("loutput.wav",format='wav')
在第一次迭代中,一切正常
recording
[(0.0,0.502),(1.842,5.0)]
2
have recording
但是在下一次迭代中得到:
recording
Traceback (most recent call last):
File "sttgft.py",line 43,in <module>
silence = silence.detect_nonsilent(lsound,silence_thresh=-15)
AttributeError: 'list' object has no attribute 'detect_nonsilent'
试图用del Silence命令删除'silence',但随后获取;
Traceback (most recent call last):
File "sttgf1.py",silence_thresh=-15)
NameError: name 'silence' is not defined
不知道该怎么做
解决方法
- 如果您删除静音,则下面的代码行将抛出错误,以获取最终的
silence
,它必须已经存在。
silence = silence.detect_nonsilent(lsound,min_silence_len=1000,silence_thresh=-15)
- 现在在while循环之前检查
silence
的值是什么,因为一旦完成第一次迭代,silence
就成为列表数据类型,并且上面提到的同一行代码将执行{{1} }。这就是为什么您在第一次迭代后遇到第一个错误的原因。
愚蠢的错误。在“沉默=沉默.detect_nonsilent ...”中使用名称“沉默” 导致了错误。一旦我更改为“ silenc = silence.detect_nonsilent ...”,它就会很好地工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。