#python #list #while-loop #pydub
#python #Список #цикл while #pydub
Вопрос:
Запуск этого фрагмента кода:
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, min_silence_len=1000, silence_thresh=-15)
AttributeError: 'list' object has no attribute 'detect_nonsilent'
Попытался удалить ‘silence’ с помощью команды del silence, но затем получил;
Traceback (most recent call last):
File "sttgf1.py", line 43, in <module>
silence = silence.detect_nonsilent(lsound, min_silence_len=1000, silence_thresh=-15)
NameError: name 'silence' is not defined
Не знаю, что попробовать
Комментарии:
1. После первой итерации вашего
while
цикла эта строкаsilence = [((start/...
создастsilence
a,list
следовательноsilence.detect_nonsilent(
, не будет работать по причине, указанной в вашем обратном отслеживании
Ответ №1:
- Если вы удалите silence, то в приведенной ниже строке кода будет выдана ошибка, поскольку для получения окончательного
silence
значения оно должно быть уже там.
silence = silence.detect_nonsilent(lsound, min_silence_len=1000, silence_thresh=-15)
- Теперь проверьте, каково значение
silence
перед циклом while, потому что после его завершения первая итерацияsilence
становится типом данных списка, и та же строка кода, упомянутая выше, выполнитlist.detect_nonsilent
. Вот почему вы получаете первую ошибку после первой итерации.
Комментарии:
1. Понять. Есть ли способ обойти это?
2. пожалуйста, укажите тип данных тишины, который задается перед циклом while, и чего это
detect_nonsilent
ожидает
Ответ №2:
Глупая ошибка. Использование имени ‘silence’ в ‘silence = silence.detect_nonsilent …’ вызвало ошибку. как только я изменил на «silenc = silence.detect_nonsilent …», это сработало отлично.