|
@@ -0,0 +1,103 @@
|
|
|
+#!/usr/bin/env python
|
|
|
+# -*- coding: utf-8 -*-
|
|
|
+
|
|
|
+# Beat tracking example
|
|
|
+# Appunti: buono per un video u po' psichedelico ci va:
|
|
|
+# <lora:bb3l15:1> an abstract circuit board design with orange yellow green and purple squares over red background in the style of bb3l15
|
|
|
+# su modello colorful_v30 (https://civitai.com/images/3024879?modelVersionId=188803&prioritizedUserIds=913950&period=AllTime&sort=Most+Reactions&limit=20 )
|
|
|
+
|
|
|
+# <lora:Ink_scenery:1> black background, sketch jungle scenery, path, dense su sd 1.5
|
|
|
+# Wilson <lora:Ink_scenery:1> black background, sketch jungle setting
|
|
|
+
|
|
|
+import os
|
|
|
+import numpy as np
|
|
|
+import librosa
|
|
|
+import math
|
|
|
+from scipy.interpolate import interp1d
|
|
|
+import matplotlib.pyplot as plt
|
|
|
+
|
|
|
+def f(t):
|
|
|
+ return 1.0025+0.002*np.sin(1.25*3.14*t/30)
|
|
|
+ #return x ** 2
|
|
|
+
|
|
|
+
|
|
|
+strength_min = 0.4
|
|
|
+strength_max = 0.6
|
|
|
+
|
|
|
+
|
|
|
+# Assuming that into "generated" directoruy U've already create "project_name" subfolder
|
|
|
+#audio_input_file = '/home/lalo/data/studio_grafica/deforum/wilson_r1_mm_sample.wav'
|
|
|
+#audio_input_file = '/home/lalo/data/studio_suono/spx/231104_001_m01.wav'
|
|
|
+#audio_input_file = '/home/lalo/data/studio_grafica/deforum/eucrasy_r1_sample.wav'
|
|
|
+#audio_input_file = '/home/lalo/data/studio_grafica/deforum/eucrasy_r1.wav'
|
|
|
+#audio_input_file = '/home/lalo/data/studio_suono/231014_002_mastered_r2_clip.WAV'
|
|
|
+audio_input_file = 'C:/Users/LucaConte/Music/lc_music/wilson_r1_mm.wav'
|
|
|
+
|
|
|
+
|
|
|
+# Store the sampling rate as `sr`
|
|
|
+
|
|
|
+fps = 24
|
|
|
+
|
|
|
+flength = 22050//fps
|
|
|
+#audio frame size is 22050/30=735
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+y, sr = librosa.load(audio_input_file)
|
|
|
+rms = librosa.feature.rms(y=y, frame_length=flength, hop_length=flength)
|
|
|
+
|
|
|
+#rms = librosa.feature.rms(y=y, frame_length=735, hop_length=735)
|
|
|
+cent = librosa.feature.spectral_centroid(y=y, sr=sr,n_fft=flength, hop_length=flength)
|
|
|
+duration = int(math.ceil(librosa.get_duration(y=y, sr=sr)))
|
|
|
+
|
|
|
+frames = duration * fps
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+print("RMS SIZE: " + str(len(rms[0])))
|
|
|
+print("CEN SIZE: " + str(len(cent[0])))
|
|
|
+print("TOTAL FRAMES: " + str(frames))
|
|
|
+
|
|
|
+# sr.len /22050 = duration
|
|
|
+# rms.len * 30 = duration
|
|
|
+# rms[i] mi da la potenza media del frame iesimo
|
|
|
+
|
|
|
+m = interp1d([rms.min(), rms.max()], [strength_min, strength_max])
|
|
|
+c = interp1d([cent.min(), cent.max()], [-0.5, 0.5])
|
|
|
+print("Cent min/max: " + str(cent.min()) + "/" + str(cent.max()))
|
|
|
+
|
|
|
+print("Audio duration in secs: " + str(duration))
|
|
|
+# Creating the sctipt file (the real unique aoutput of this script)
|
|
|
+try:
|
|
|
+ for frame in range(len(rms[0])):
|
|
|
+ print(str(frame) + ":(" + str(1-m(rms[0][frame])) + "),", end="")
|
|
|
+
|
|
|
+ print("")
|
|
|
+ print("---------------")
|
|
|
+ print("")
|
|
|
+
|
|
|
+ for frame in range(rms.size):
|
|
|
+ print(str(frame) + ":(" + str(cent[0][frame]) + "),", end="")
|
|
|
+except:
|
|
|
+ print(exception)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+x = np.array(range(200))
|
|
|
+#x = np.array(range(len(cent[0])))
|
|
|
+y = np.array(cent[0])
|
|
|
+
|
|
|
+
|
|
|
+plt.hist(cent[0], color = 'blue', edgecolor = 'black',
|
|
|
+ bins = int(cent.max()/100))
|
|
|
+
|
|
|
+
|
|
|
+plt.show()
|
|
|
+
|
|
|
+
|
|
|
+x = np.linspace(1, 4000, 4000)
|
|
|
+y = f(x)
|
|
|
+
|
|
|
+plt.plot(x, y)
|
|
|
+plt.show()
|
|
|
+
|