【发布时间】:2018-11-14 11:25:34
【问题描述】:
我给我的代码提供了一些没有提供适当输出的音频文件。 代码:
import numpy as np
import math
import wave
import os
import struct
def note_detect(audio_file):
Detected_Note = ""
beta = 1
max_notes = 100
sampling_freq = 38050
window_size = (sampling_freq / 37)
threshold = 600
array = [440.00, 130.8, 329.6, 196]
notes = ['A4', 'C3', 'E4', 'G3' ]
Identified_Notes = []
file_length = audio_file.getnframes()
sound = np.zeros(file_length)
for i in range(file_length):
data = audio_file.readframes(1)
data = struct.unpack("<h", data)
sound[i] = int(data[0])
sound = np.divide(sound, float(2**15))
sound_square = np.square(sound)
frequency = []
dft = []
i = 0
j = 0
k = 0
while(i<=len(sound_square)-window_size):
s = 0.0
j = 0
while(j<=window_size):
s = s + sound_square[i+j]
j = j + 1
if s < threshold:
if(i-k>window_size*4):
dft = np.array(dft)
dft = np.fft(sound[k:i])
dft=np.argsort(dft)
if(dft[0]>dft[-1] and dft[1]>dft[-1]):
i_max = dft[-1]
elif(dft[1]>dft[0] and dft[-1]>dft[0]):
i_max = dft[0]
else :
i_max = dft[1]
frequency.append((i_max*sampling_freq)/(i-k))
dft = []
k = i+1
i = i + window_size
print('length',len(frequency))
print("frequency")
for i in frequency :
print(i)
idx = (np.abs(array-i)).argmin()
Identified_Notes.append(notes[idx])
print(Identified_Notes)
Detected_Note=max(Identified_Notes,key=Identified_Notes.count)
return Detected_Note
if __name__ == "__main__":
path = os.getcwd()
file_name = path + "\Task_1.1_Audio_files\Audio_4.wav"
audio_file = wave.open(file_name)
Detected_Note = note_detect(audio_file)
print("\n\tDetected Note = " + str(Detected_Note))
x = raw_input("\n\tWant to check output for all Audio Files - Y/N: ")
if x == 'Y':
Detected_Note_list = []
file_count = len(os.listdir(path + "\Task_1.1_Audio_files"))
for file_number in range(1, file_count):
file_name = path + "\Task_1.1_Audio_files\Audio_"+str(file_number)+".wav"
audio_file = wave.open(file_name)
Detected_Note = note_detect(audio_file)
Detected_Note_list.append(Detected_Note)
print("\n\tDetected Notes = " + str(Detected_Note_list))
音频文件链接: https://drive.google.com/open?id=1KVEQQUqBvwgDPf2JC_uQ0L6M_gzGDG6l
Audio_6.wav 的相应输出为 A4,Audio_4.wav 为 E4,Audio_5.wav 为 G3
【问题讨论】:
-
嗨,欢迎来到 SO。请查看Help centre。特别是,请在帖子中包含代码并解释您的问题。什么是“适当的输出”?它和你得到的有什么不同?没有人知道,除了你。
-
欢迎来到 SO ;) 请在 how to ask a good question 阅读这篇文章。这将包括对您要实现的目标的正确描述、您的代码(或相关的 sn-ps)以及显示您迄今为止尝试过的内容和可能的错误消息的努力。
-
我已经按照你的建议上传了代码。
标签: python numpy audio signal-processing wave