diff --git a/sound_process.py b/sound_process.py index da8b1c6..53325a8 100755 --- a/sound_process.py +++ b/sound_process.py @@ -419,7 +419,6 @@ def snap(data, sample_rate, bpm, divisor, show=False): while(t < i/sample_rate): t = k/(bpm*divisor) k += 60 - ''' if(np.abs(i/sample_rate - k/(bpm*divisor)) > np.abs(i/sample_rate - (k-60)/(bpm*divisor))): k -= 60 @@ -451,28 +450,54 @@ def snap2(data, sample_rate, bpm, first_offset=0, div=4, show=False): bpm = float """ - new = [0 for i in range(int(1000*len(data)/sample_rate))] + song_len = int(len(data)/sample_rate) + reduced = [0 for i in range(song_len*1000)] + new = [0 for i in range(song_len*1000)] + + # build the reduced version + for i in range(len(data)): + x = int(i*1000/sample_rate) + if(x < len(reduced)): + reduced[x] = max(reduced[x], data[i]) + + + print("Build done") + # snap k = 0 current_t = first_offset - for i in range(len(data)): + while(current_t < 0): + k += 1 + current_t = first_offset + k*60/(bpm*div) - if(i/sample_rate > current_t): + for j in range(len(new)): + if(j/1000 > current_t): k += 1 current_t = first_offset + k*60/(bpm*div) - x = int(current_t*1000) - if(x < len(new)): - new[x] = max(new[x], data[i]) + y = int(current_t*1000) + if(y < len(new)): + new[y] = max(new[y], reduced[j]) + + print("Snap done") if(show): t = [j/1000+first_offset for j in range(len(new))] beats = [0 for j in range(len(new))] + k = 0 - while((first_offset + k*60/(bpm*div)*1000 < len(new))): - beats[int(first_offset + k*60/(bpm*div)*1000)] = 16384 + current_t = first_offset + + while(current_t < 0): k += 1 + current_t = first_offset + k*60/(bpm*div) + + while(1000*current_t < len(new)): + beats[int(1000*current_t)] = 16384 + + k += 1 + current_t = first_offset + k*60/(bpm*div) plt.plot(t, beats) plt.plot(t, new) @@ -532,7 +557,7 @@ def process_song(filename, bpm, offset0=0, div_len_factor=1, n_iter_2=-1, thresh return convert_tuple(datares, frequencies) def main(): - data = process_song("tetris_4.wav", 160, n_iter_2 = 64) + data = process_song("tetris_4.wav", 160, n_iter_2 = 32) #print(data) print("Program finished with return 0")