У меня возникли проблемы с компиляцией этой программы. .Ошибка кода на Python 2.7
Я новичок в python.I Я использую Python 2.7 (Anaconda)
Вот код:
import numpy as numpy
import scipy
from scipy.io.wavfile import read
from scipy.io.wavfile import write
def getwavdata(file):
return scipy.io.wavfile.read(file)[1]
data=getwavdata('myvoice.wav')
print data
frameDuration = 0.01
frequency = 44100
numSamplesPerFrame = int(frequency * frameDuration)
frameSize=int(frequency*frameDuration)
signalEnergy=sum([ abs(x)**2 for x in data ])
print 'signal energy',signalEnergy
threshold=signalEnergy/3
print threshold
base=0
i=0
count=0
wordNumber=0
length=len(data)
print 'length of data is', length
word=[]
while i<length:
#print 'entered while loop'
frame=data[base:frameSize]
base=base+frameSize
frameEnergy=sum([ abs(x)**2 for x in frame ])
if frameEnergy < threshold:
count=count+1
word.append(frame)
word=numpy.array(word)
else :
count=0
word=[]
if count == 4:
print 'silence expected'
wordNumber=wordNumber+1
scipy.io.wavfile.write('word%d.wav' %wordNumber,44100,word)
count=0
word=[]
i = i+1
Теперь проблему когда я первый запустил эту программу, напечатанными некоторые ожидали значения.
Он напечатан signalEnergy = некоторое значение около 3000000 и порога = некоторое значение около 1000000. (1/3 signalEnergy), но с ошибкой здесь:
scipy.io.wavfile.write('word%d.wav' %wordNumber,44100,word)
ошибка: список имеет нет массива атрибутов (что-то вроде этого. Не помню точного предложения)
Я нашел googled и обнаружил, что write() принимает массив как один аргумент.
Попытка исправить эту ошибку привела к тому, что вся программа не работает.
Теперь для signalEnergy и порога, я получаю массив из двух значений вместо одного значения.
Изменения, которые я сделал:
while (base+frameSize)<length:
#print 'entered while loop'
frame=data[base:base+frameSize]
frameEnergy=sum([ abs(x)**2 for x in frame ])
print frameEnergy
if frameEnergy.all() < threshold.all():
count=count+1
word.append(frame)
else:
count=0
word=[]
if count == 4:
print 'word detected'
wordNumber=wordNumber+1
word = numpy.array(word)
scipy.io.wavfile.write('word'+str(wordNumber)+'.wav',44100,word)
count=0
word=[]
base = base + frameSize
Error:
[-29501 24682](**this is what it is giving as signalEnergy now**)
[-9834 8227]
length of data is 122240
Traceback (most recent call last):
File "C:\Users\Nancy Semwal\Documents\Python Scripts\program2.py", line 34, in <module>
if frameEnergy < threshold:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Я понимаю ошибку, но то, что я не могу получить, что, почему это правильно баллотировался в первый раз?
В чем может быть причина? Какие изменения я должен внести?
Какая часть кода относится к вопросу? Удалите все, что не имеет значения. –