Я знаю, что этот вопрос задавался ранее, но применение ответа не решает мою проблему. Иногда я получаю сообщение об ошибке переполнения, и кажется, что может быть пустым массивом, но если я определю массив как int64 или float64, моя программа перестанет работать.
import wave
import struct
import numpy as np
myAudio = "C:\\Users\\mike\\Documents\\Correct2.wav"
def isSilence(windowPosition):
sumVal = sum( [ x*x for x in sound[windowPosition:windowPosition+windowSize+1] ] )
avg = sumVal/(windowSize)
if avg <= 0.0001:
return True
else:
return False
#read from wav file
sound_file = wave.open(myAudio, 'r')
samplerate = sound_file.getframerate()
file_length = sound_file.getnframes()
data = sound_file.readframes(file_length)
sound_file.close()
data = struct.unpack('{n}h'.format(n=file_length), data)
sound = np.array(data)
Я получаю сообщение об ошибке в строке sumVal.
если я изменю эту строку на:
sound = np.array(data,dtype="int64")
или
sound = np.array(data,dtype='float64')
ошибка исчезает, но мой код перестает работать. Я попытался преобразовать sumVal в int64 (потому что это кажется проблемой), но это не сработало (выдает ошибку типа данных), хотя я просто не понимаю, как это сделать. Любые подсказки?
Хорошо, я попробовал еще одну вещь - и это не похоже на ОЧЕНЬ большой прогресс, но это НИЧЕГО. Я сделал это:
sumVal = np.int64(1)
Что устраняет ошибку в следующей строке sumVal. Но теперь следующая строка:
avg = sumVal/(windowSize)
выдает ту же ошибку long_integer, хотя avg не должно быть целым числом. Я попытался определить windowSize таким же образом (int64), но это ничего не изменило. Так что, думаю, я запутался как никогда.