diff --git a/audio.wav b/audio.wav index bbec4bf..e12b9b6 100644 Binary files a/audio.wav and b/audio.wav differ diff --git a/cleaned_sp.py b/cleaned_sp.py index ee33a94..487d973 100644 --- a/cleaned_sp.py +++ b/cleaned_sp.py @@ -30,7 +30,7 @@ def retrieve_dominant_freqs(song_name, offset, songlen, segsize): maxfreq = 440*6 # cutting the song to only keep the one we're interested in - subprocess.run(["ffmpeg", "-ss", str(offset), "-t", str(songlen+offset), "-i", song_name, "crop.wav"], shell=False) + subprocess.run(["ffmpeg", "-ss", str(offset), "-t", str(songlen), "-i", song_name, "crop.wav"], shell=False) subprocess.run(["clear"]) # extracting data from cropped song @@ -206,13 +206,14 @@ def void_freq_clean(song_name, offset, songlen, segsize, minfreq, maxfreq, ampth res = np.array(res) wavfile.write(output_name, sample_rate, res) -def retrieve_dominant_amps(song_name, offset, songlen, segsize, percent): +def retrieve_dominant_amps(song_name, offset, songlen, segsize, percent, divlen): # returns a list with the percent% peak amplitudes alongside the sample rate # /!\ song_name is specified to be a list, NOT a list of couples (aka song is mono) # segsize is in seconds + # divlen is in seconds # cutting the song to only keep the one we're interested in - subprocess.run(["ffmpeg", "-ss", str(offset), "-t", str(songlen+offset), "-i", song_name, "crop.wav"], shell=False) + subprocess.run(["ffmpeg", "-ss", str(offset), "-t", str(songlen), "-i", song_name, "crop.wav"], shell=False) subprocess.run(["clear"]) # extracting data from cropped song @@ -238,12 +239,24 @@ def retrieve_dominant_amps(song_name, offset, songlen, segsize, percent): is_locked = [False for i in range(len(song_data))] x = int((len(song_data)*percent)//100) - print("Retreiving the", int(x), "/", len(song_data), "highest values") - elements = heapq.nlargest(int(x), enumerate(song_data), key=lambda x: x[1]) - #returns a list of couples [id, value] + # length of segments + seglen = int(divlen*sample_rate) - for idx in range(len(elements)): - is_locked[elements[idx][0]] = True + # current offset + curptr = 0 + + print("Retreiving the", int(x), "/", len(song_data), "highest values") + while(curptr < len(song_data)): + left = curptr + right = min(len(song_data), curptr+seglen) + + #returns a list of couples [id, value] + elements = heapq.nlargest(int(x), enumerate(song_data[left:right]), key=lambda x: x[1]) + + for idx in range(len(elements)): + is_locked[elements[idx][0]+left] = True + + curptr += seglen for r in range(len(song_data)): if(is_locked[r] == False): @@ -290,7 +303,7 @@ def convert_to_wav(song_name:str, output_file="audio.wav") -> str: return output_file return song_name -def retrieve_all_from_song(filename, t0, t1, dta=0.001, dtf=0.01, threshold=0.1, show=True): +def retrieve_all_from_song(filename, t0, t1, bpm, dta=0.001, dtf=0.01, threshold=0.06, show=True): # dt = sample interval # threshold is in percent @@ -301,20 +314,14 @@ def retrieve_all_from_song(filename, t0, t1, dta=0.001, dtf=0.01, threshold=0.1, # converts format to .wav new_fn = convert_to_wav(filename) - # crop the song to the part that will be mapped - subprocess.run(["ffmpeg", "-ss", str(t0), "-t", str(t1), "-i", new_fn, "crop0.wav"], shell=False) - subprocess.run(["clear"]) - - sample_rate, _ = wavfile.read("crop0.wav") - print("Filtering song...") #void_freq_clean(new_fn, t0, t1-t0, dt, 200, 2500, 0.05, "crop1.wav") print("Now retrieving the frequencies") - (maxlist, maxamps) = retrieve_dominant_freqs(new_fn, t0, t1-t0, dtf) + (maxlist, maxamps) = retrieve_dominant_freqs(new_fn, t0, t1, dtf) print("Now retrieving the amplitudes") - amps = retrieve_dominant_amps(new_fn, t0, t1-t0, dta, threshold) + amps = retrieve_dominant_amps(new_fn, t0, t1, dta, threshold, 4/(bpm/60)) print("Len of freqs : ", len(maxlist), "|", len(maxamps)) print("Len of amps : ", len(maxlist), "|", len(amps)) @@ -336,11 +343,9 @@ def retrieve_all_from_song(filename, t0, t1, dta=0.001, dtf=0.01, threshold=0.1, plt.show() # free() - subprocess.run(["rm", "crop0.wav"], shell=False) -retrieve_all_from_song("tetris_4.wav", 0, 5, dtf=0.375/2) +retrieve_all_from_song("ctype.mp3", 0, 5, 149.3, dtf=1/(149.3/60)/8) print("yipee") -print(1/(160/60)); diff --git a/crop.wav b/crop.wav index 417d66b..e3ef10d 100644 Binary files a/crop.wav and b/crop.wav differ diff --git a/ctype.mp3 b/ctype.mp3 new file mode 100644 index 0000000..21c6751 Binary files /dev/null and b/ctype.mp3 differ diff --git a/tetris_2.wav b/tetris_2.wav new file mode 100755 index 0000000..ae56c39 Binary files /dev/null and b/tetris_2.wav differ