The Triggering of HügglMügg

Ein kleines Projektchen

Zunächst habe ich ein bisschen Geklopfe aufgenommen, mir dabei nicht viel Mühe gegeben.


Das habe ich dann mit einem Bandfilter gefiltert.


Code

Hohe Frequenzen sollen den Trigger bilden: 2.900 - 8.000 Hz
import librosa
from scipy.signal import butter, lfilter
from scipy.io import wavfile

def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a


def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = lfilter(b, a, data)
return y


def run():
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import freqz

# Sample rate and desired cutoff frequencies (in Hz).
data, fs = librosa.load('/home/audio2miditest.wav')
lowcut = 2900.0
highcut = 8000.0

y = butter_bandpass_filter(data, lowcut, highcut, fs, order=6)

# Convert to normalized 32 bit floating point
normalized_y = y / np.abs(y).max()
wavfile.write('/home/off_plus_noise_filtered.wav', fs, normalized_y.astype(np.float32))


run()

Und das Filterergebnis habe ich einem Peakfinder-und-Midinotewriter übergeben.

Code

import librosa  # To load the file, and get the amplitude measured with the sampling rate amplitude,
import librosa.display

#data, sr = librosa.load('/home/audio2miditest.wav')
data, sr = librosa.load('/home/off_plus_noise_filtered.wav')

print(librosa.beat.tempo(data, sr=sr))

print(type(data))
print(data)
print(sr)
print(data.shape)
print("Geschätzte Zeit:", len(data)/sr, "Sekunden")
print(librosa.get_duration(filename='/home/audio2miditest.wav'))

import matplotlib.pyplot as plt
from scipy.signal import find_peaks
import numpy as np

x = data

peaks, _ = find_peaks(x, height=0.05, distance=1000)

plt.plot(x)

plt.plot(peaks, x[peaks], "x")

plt.plot(np.zeros_like(x), "--", color="gray")

print(peaks)
plt.show()

bpm = 480

def beatnumber (peak,sr,bpm):
beatlen = 60/bpm
beatnumber = peak/sr/beatlen
return beatnumber

midinotes = []
for peak in peaks:
print(peak, peak/sr, beatnumber(peak,sr,bpm))
midinotes_tmp = (beatnumber(peak,sr,bpm),60,127,0.2)
midinotes.append(midinotes_tmp)

from miditime.miditime import MIDITime

# Instantiate the class with a tempo (120bpm is the default) and an output file destination.
mymidi = MIDITime(bpm, '/home/myfile.mid')

# Add a track with those notes
mymidi.add_track(midinotes)

# Output the .mid file
mymidi.save_midi()



Herausgekommen ist dabei dieses Midi-File:


Dann habe ich das ungefilterte + gefilterte Audio zusammen mit dem erzeugten MidiFile in Ardour geladen, BPM auf 480 eingestellt, und alles exportiert.




Klingt nun so:

Ergebnis




Da das Projekt noch ganz am Anfang steht, erläutere ich noch so gut wie nix. Unten in den Links lassen sich Quellen, die ich verwendet habe, herausfinden.
Sobald es aber mal richtig rund funzt, gebe ich natürlich gerne ausführlicher Auskunft. Selbstverständich. So mag es immerhin schon mal als kleine Anregung nützlich sein. Das Meiste ist ja eh selbsterklärend für Kenner- & KönnerInnen.

Aber für'n Anfang schon nicht schlecht, oder?
{demnächst - oder schon heute Nacht - kommt das Quantisieren dazu}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

audio-to-midi · PyPI Wirtschaft ist mehr - brand eins online Glücksmuseum in Kopenhagen: Was ist Glück? „Nichts Gutes“: Methanleck in Meeresboden wirft Fragen auf - news.ORF.at random — Generate pseudo-random numbers — Python 3.8.5 documentation ye (@kanyewest) / Twitter Deepfakes: Wie KI-manipulierte Videos den Film und Fernsehen verändern - FOCUS Online 2001: Odyssee im Weltraum – Wikipedia Helge Braun: Wer ist Angela Merkels Corona-Manager? - DER SPIEGEL Kabelanschluss: Streit ums "Nebenkostenprivileg" | heise online Kim Kardashian reacts after Kanye West’s apology for Twitter rant | Metro News Kanye West & Lil Pump feat. Adele Givens - I Love It [Video] - rap.de I Love It (Kanye-West-Lied) – Wikipedia Hanau-Anschlag: Wie es der Mutter eines Toten fünf Monate später geht - DER SPIEGEL Sex im Alter: Wenn Sie keine Lust mehr haben, kann das auf Krankheit hindeuten - FOCUS Online Hans-Jochen Vogel – Wikipedia Weimarer Tatort: Unangestrengt witzig - Medien - SZ.de Dave Eggers: "Wir leben in einer barbarischen Idiotokratie" | ZEIT ONLINE Butterworth Bandpass — SciPy Cookbook documentation American protests: Demonstrations, violent riots expected to continue throughout the country | Fox News Trump is calling protesters 'terrorists.' That puts him in the company of the world's autocrats - CNNPolitics python - How to implement band-pass Butterworth filter with Scipy.signal.butter - Stack Overflow Boxen: Der falsche Gegner für Tyson - Sport - SZ.de Create a band-pass filter via Scipy in Python? - Stack Overflow AOC reveals new details about Ted Yoho incident - CNNPolitics Hurricane Hanna heads to Texas as two other storms threaten Hawaii and the Caribbean - CNN Huge black bear spotted relaxing in a pool is one big summer mood - CNN Leipzig: Rechtsextreme mit Hakenkreuzfahne auf Schlauchboot-Tour - DER SPIEGEL Altruismus - Der Mensch in Zeiten der Katastrophe Izzy Bizu - Wikipedia Foxes (singer) - Wikipedia (1) 'You'll Love It' - Kanye West/Lil Pump Parody - YouTube I Love It (Kanye West and Lil Pump song) - Wikipedia Kanye West: Rapper fuhr wegen Angstzuständen in Klinik | STERN.de Potsdamer Konferenz: Als die USA mit „völliger Zerstörung“ drohten - WELT Israel: Polizei geht gewaltsam gegen Demonstranten vor - Politik - SZ.de Schmerzempfinden: Macht ein Neandertaler-Gen sensibler für Schmerz? - Gesundheit - SZ.de Dave Grohl, whose mom taught public school, says we need to protect America's teachers like the national treasures they are - CNN

+++++++++++++++++++++++++++++++++++++++++++++++

Dienste an der Menschheit*

Whatsapp: Bolsonaro
Twitter: Trump


What's next?





* Dienste, die erwähnte Dienste ungefragt als Zusatzdienste brachten.**
** So ungefähr. Isses verständlich?***
*** Was gemeint sein soll.

Kommentare

Beliebte Posts aus diesem Blog

·

Es brennt.

Bye, bye Nord Stream 2!