Attempt to fix snap

This commit is contained in:
Alexandre 2024-05-30 19:58:35 +02:00
parent 0fcad4174a
commit e2e207c294
1 changed files with 35 additions and 10 deletions

View File

@ -419,7 +419,6 @@ def snap(data, sample_rate, bpm, divisor, show=False):
while(t < i/sample_rate): while(t < i/sample_rate):
t = k/(bpm*divisor) t = k/(bpm*divisor)
k += 60 k += 60
''' '''
if(np.abs(i/sample_rate - k/(bpm*divisor)) > np.abs(i/sample_rate - (k-60)/(bpm*divisor))): if(np.abs(i/sample_rate - k/(bpm*divisor)) > np.abs(i/sample_rate - (k-60)/(bpm*divisor))):
k -= 60 k -= 60
@ -451,28 +450,54 @@ def snap2(data, sample_rate, bpm, first_offset=0, div=4, show=False):
bpm = float 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 k = 0
current_t = first_offset 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 k += 1
current_t = first_offset + k*60/(bpm*div) current_t = first_offset + k*60/(bpm*div)
x = int(current_t*1000) y = int(current_t*1000)
if(x < len(new)): if(y < len(new)):
new[x] = max(new[x], data[i]) new[y] = max(new[y], reduced[j])
print("Snap done")
if(show): if(show):
t = [j/1000+first_offset for j in range(len(new))] t = [j/1000+first_offset for j in range(len(new))]
beats = [0 for j in range(len(new))] beats = [0 for j in range(len(new))]
k = 0 k = 0
while((first_offset + k*60/(bpm*div)*1000 < len(new))): current_t = first_offset
beats[int(first_offset + k*60/(bpm*div)*1000)] = 16384
while(current_t < 0):
k += 1 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, beats)
plt.plot(t, new) 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) return convert_tuple(datares, frequencies)
def main(): 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(data)
print("Program finished with return 0") print("Program finished with return 0")