123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- #!/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
- from scipy.interpolate import UnivariateSpline
- import matplotlib.pyplot as plt
- def plotting_stuffs():
- plt.figure(figsize=(15, 17))
- t = librosa.frames_to_time(range(rms.size), hop_length=flength)
- ax = plt.subplot(3, 1, 1)
- librosa.display.waveshow(wave, alpha=0.5)
- plt.plot(t, rms[0], color="r")
- plt.ylim((-1, 1))
- plt.title("Wave&Featurres")
- plt.show()
- x = np.linspace(1, 4000, 4000)
- y = f(x)
- #plt.plot(x, y)
- #plt.show()
- plt.hist(rms[0], color = 'red', edgecolor = 'black', bins = 10)
- plt.show()
- # Generate some example data
- data =cent[0]
- # Create a histogram
- hist, bin_edges = np.histogram(data, bins=100, density=True)
- # Calculate bin centers
- bin_centers = 0.5 * (bin_edges[:-1] + bin_edges[1:])
- # Perform spline interpolation on the histogram data
- spline = UnivariateSpline(bin_centers, hist, s=0)
- # Create a finer x-axis for plotting the interpolated function
- x_interp = np.linspace(min(bin_centers), max(bin_centers), 1000)
- y_interp = spline(x_interp)
- # Plot the histogram and the interpolated function
- plt.hist(data, bins=100, density=True, alpha=0.6, color='g', label='Histogram')
- plt.plot(x_interp, y_interp, label='Interpolated PDF', color='red')
- plt.legend()
- plt.xlabel('x')
- plt.ylabel('Probability Density')
- plt.title('Histogram and Interpolated PDF')
- # Obtain min and max values of the probability density
- min_density = np.min(hist)
- max_density = np.max(hist)
- print(f"Min Probability Density: {min_density}")
- print(f"Max Probability Density: {max_density}")
- plt.show()
- plt.show()
- def f(t):
- return 1.0025+0.002*np.sin(1.25*3.14*t/30)
- #return x ** 2
- def sig(x):
- return 1/(1 + np.exp(-12*(x-0.431)))
- 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
- wave, sr = librosa.load(audio_input_file)
- rms = librosa.feature.rms(y=wave, frame_length=flength, hop_length=flength)
- #rms = librosa.feature.rms(y=wave, frame_length=735, hop_length=735)
- cent = librosa.feature.spectral_centroid(y=wave, sr=sr,n_fft=flength, hop_length=flength)
- duration = int(math.ceil(librosa.get_duration(y=wave, sr=sr)))
- frames = duration * fps
- print("RMS SIZE: " + str(len(rms[0])))
- print("Rms min/max: " + str(rms.min()) + "/" + str(rms.max()))
- print("CEN SIZE: " + str(len(cent[0])))
- print("Cent min/max: " + str(cent.min()) + "/" + str(cent.max()))
- print("TOTAL FRAMES: " + str(frames))
- print("Audio duration in secs: " + str(duration))
- #
- # 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])
- # 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(cent.size):
- print(str(frame) + ":(" + str(cent[0][frame]) + "),", end="")
- except:
- print(exception)
- plotting_stuffs()
|