Analyse van nuldoorgangspercentages van verschillende muziekgenretracks
Verbind je met ons

Plato verticaal zoeken

Big data

Analyse van nuldoorgangspercentages van verschillende muziekgenre-tracks

Dit artikel is gepubliceerd als onderdeel van de Data Science Blogathon. In dit artikel gaan we de Zero-crossing rates (ZCR's) van verschillende muziekgenre-tracks analyseren. Dit bericht is geïnspireerd op het werk van Valerio Valerdo. Ik moedig je ten zeerste aan om zijn YouTube-kanaal te bekijken voor zijn uitstekende werk op het gebied van ML/DL […]

De post Analyse van nuldoorgangspercentages van verschillende muziekgenre-tracks verscheen eerst op Analytics Vidhya.

Dit artikel is gepubliceerd als onderdeel van het Data Science Blogathon.

In dit artikel gaan we de Zero-crossing rates (ZCR's) van verschillende muziekgenre-tracks analyseren. Dit bericht is geïnspireerd door Valerio Valerdo's werk. Ik moedig je ten zeerste aan om zijn te bekijken Youtube kanaal voor zijn uitstekende werk op het gebied van ML/DL voor audio.

Gebruikte tools

  • Python
  • Weegschaal (librosa.feature.zero_crossing)
  • Een audioclip van 30 seconden van elk van de 10 verschillende muziekgenres (klassiek, blues, reggae, rock, jazz, pop, hiphop, country, disco en metal) van GTZAN dataset

Introductie

Zero-Crossing: Een nuldoorgang is een momentaan punt waarop de teken van een wiskundige functie verandert (bijv. van positief naar negatief). Het wordt vertegenwoordigd door een snijpunt van de as (waarde nul) in de grafiek van de functie. 

Zero Crossing-tarieven
Een nuldoorgang in een lijngrafiek van een golfvorm die de spanning in de tijd weergeeft

 

Nul-overschrijdingssnelheid: De nuldoorgangssnelheid (ZCR) is de snelheid waarmee een signaal overgaat van positief naar nul naar negatief of negatief naar nul naar positief. De waarde ervan is op grote schaal gebruikt in beide: spraakherkenning en muziek informatie ophalen voor het classificeren van percussieve geluiden.

ZCR wordt gedefinieerd als:

Nuloverschrijdingstarieven | Formule

De nuldoorgangssnelheid kan worden gebruikt als een basistoonhoogtedetectie-algoritme voor monofone toonsignalen. Voice Activity Detection (VAD), die bepaalt of menselijke spraak al dan niet aanwezig is in een audiosegment, maakt ook gebruik van zero-crossing-snelheden.

Laten we het nu eens nader bekijken met behulp van de librosa-bibliotheek. Om te beginnen zullen we alle vereiste bibliotheken importeren en de audiobestanden van verschillende muziekgenres laden met behulp van librosa.

Een korte analyse met behulp van Librosa

#Importeren van alle benodigde bibliotheken importeer matplotlib.pyplot als plt importeer numpy als np importeer librosa importeer librosa.display importeer IPython.display als ipd %matplotlib inline
#Het pad naar audiobestanden specificeren classic_music_file = "/content/drive/MyDrive/trytheseaudios/classical.00000.wav" blues_music_file = "/content/drive/MyDrive/trytheseaudios/blues.00000.wav" reggae_music_file = "/content/drive /MyDrive/trytheseaudios/reggae.00000.wav" rock_music_file = "/content/drive/MyDrive/trytheseaudios/rock.00000.wav" jazz_music_file = "/content/drive/MyDrive/trytheseaudios/jazz.00000.wav" country_music_file =" /content/drive/MyDrive/trytheseaudios/country.00000.wav" disco_music_file = "/content/drive/MyDrive/trytheseaudios/disco.00000.wav" hiphop_music_file = "/content/drive/MyDrive/trytheseaudios/hiphop.00000.wav " metal_music_file = "/content/drive/MyDrive/trytheseaudios/metal.00000.wav" pop_music_file = "/content/drive/MyDrive/trytheseaudios/pop.00000.wav"
# laad audiobestanden met librosa classic, sr = librosa.load(classical_music_file, duration=30) blues, _ = librosa.load(blues_music_file,duration=30) reggae, _ = librosa.load(reggae_music_file, duration=30) rock, _ = librosa.load(rock_music_file, duur=30) jazz, _ = librosa.load(jazz_music_file, duur=30) country,_ = librosa.load(country_music_file, duur=30) disco, _ = librosa.load(disco_music_file, duur=30) hiphop, _ = librosa.load(hiphop_music_file, duur=30) metal, _ = librosa.load(metal_music_file, duur=30) pop, _ = librosa.load(pop_music_file, duur=30)

Daarna zullen we de laagste en hoogste evalueren en vergelijken momentane ZCR-waarden, evenals de laagste en hoogste gemiddelde ZCR-waarden van verschillende muziekgenre samples.

#Bepalen van het muziekgenre met de laagste momentane waarde van ZCR min([librosa.feature.zero_crossing_rate(classical).min(), librosa.feature.zero_crossing_rate(blues).min(), librosa.feature.zero_crossing_rate(reggae). min(), librosa.feature.zero_crossing_rate(rock).min(), librosa.feature.zero_crossing_rate(jazz).min(), librosa.feature.zero_crossing_rate(country).min(), librosa.feature.zero_crossing_rate(disco ).min(), librosa.feature.zero_crossing_rate(hiphop).min(), librosa.feature.zero_crossing_rate(metal).min(), librosa.feature.zero_crossing_rate(pop).min()])

Output: 0.00585 -> dat is voor het jazzmuziekgenre-nummer!

#Bepalen van het muziekgenre met de hoogste momentane waarde van ZCR max([librosa.feature.zero_crossing_rate(classical).max(), librosa.feature.zero_crossing_rate(blues).max(), librosa.feature.zero_crossing_rate(reggae). max(), librosa.feature.zero_crossing_rate(rock).max(), librosa.feature.zero_crossing_rate(jazz).max(), librosa.feature.zero_crossing_rate(country).max(), librosa.feature.zero_crossing_rate(disco ).max(), librosa.feature.zero_crossing_rate(hiphop).max(), librosa.feature.zero_crossing_rate(metal).max(), librosa.feature.zero_crossing_rate(pop).max()])

Output: 0.67675 —-> popmuziekgenre nummer!

#Bepalen van het muziekgenre met de LAAGSTE GEMIDDELDE waarde van ZCR min([librosa.feature.zero_crossing_rate(classical).mean(), librosa.feature.zero_crossing_rate(blues).mean(), librosa.feature.zero_crossing_rate(reggae). mean(), librosa.feature.zero_crossing_rate(rock).mean(), librosa.feature.zero_crossing_rate(jazz).mean(), librosa.feature.zero_crossing_rate(country).mean(), librosa.feature.zero_crossing_rate(disco ).mean(), librosa.feature.zero_crossing_rate(hiphop).mean(), librosa.feature.zero_crossing_rate(metal).mean(), librosa.feature.zero_crossing_rate(pop).mean()])

Output: 0.07846 —> Jazz muziekgenre nummer!

#Bepalen van het muziekgenre met de HOOGSTE GEMIDDELDE waarde van ZCR max([librosa.feature.zero_crossing_rate(classical).mean(), librosa.feature.zero_crossing_rate(blues).mean(), librosa.feature.zero_crossing_rate(reggae). mean(), librosa.feature.zero_crossing_rate(rock).mean(), librosa.feature.zero_crossing_rate(jazz).mean(), librosa.feature.zero_crossing_rate(country).mean(), librosa.feature.zero_crossing_rate(disco ).mean(), librosa.feature.zero_crossing_rate(hiphop).mean(), librosa.feature.zero_crossing_rate(metal).mean(), librosa.feature.zero_crossing_rate(pop).mean()])

Output: 0.18307 -> Metal muziekgenre nummer!

Bij nader onderzoek bleek ook dat de audiosampletrack van het klassieke genre een lage ZCR heeft.

print(f"Minimum Momentane ZCR voor Klassiek Genre-nummer:{librosa.feature.zero_crossing_rate(klassiek).min()}, Maximale Momentane ZCR voor Klassiek Genre-nummer:{librosa.feature.zero_crossing_rate(klassiek).max()}, Gemiddelde ZCR voor klassiek genrenummer: {librosa.feature.zero_crossing_rate(classical).mean()}")

Output: Minimale momentane ZCR voor klassieke genre-nummer: 0.02685, maximale momentane ZCR voor klassieke genre-nummer: 0.1767, gemiddelde ZCR voor klassieke genre-nummer: 0.0982

#Bepaling van minimale momentane, maximale momentane en gemiddelde ZCR voor popmuziekgenre track print(f"Minimum momentane ZCR voor popgenre-nummer:{librosa.feature.zero_crossing_rate(pop).min()}, maximale momentane ZCR voor popgenre-nummer: {librosa.feature.zero_crossing_rate(pop).max()}, gemiddelde ZCR voor popgenre-nummer: {librosa.feature.zero_crossing_rate(pop).mean()}")

Output: Minimale momentane ZCR voor popgenre-nummer: 0.00683, maximale momentane ZCR voor pop-genre-nummer: 0.6767, gemiddelde ZCR voor pop-genre-nummer: 0.12676

Observation: Volgens de resultaten heeft de track van het jazzmuziekgenre de laagste momentane en gemiddelde ZCR. Nadere analyse wees uit dat zelfs het klassieke muziekgenre extreem lage ZCR-waarden heeft. Als gevolg hiervan kunnen we niet veralgemenen en verklaren dat nummers van het jazzmuziekgenre de laagste ZCR hebben, omdat de waarneming varieert afhankelijk van de compositie van het nummer. Bovendien hebben de audio-sampletracks van metal en popmuziek de hoogste gemiddelde ZCR.

Demystificatie via visualisatie

Laten we nu wat meer demystificeren met behulp van visuals. In dit opzicht zullen we eerst Librosa gebruiken om de nuldoorgangssnelheid voor elk muziekgenre-nummer te extraheren, en vervolgens de genormaliseerde ZCR voor elk muziekgenre plotten, gevolgd door de werkelijke (niet-genormaliseerde) ZCR voor elk muziekgenre.

#Opgeven van framegrootte en spronglengte
FRAME_SIZE = 1024 HOP_LENGTH = 512
#Zero-overschrijdingssnelheid extraheren voor elk muziekgenre-nummer met behulp van Librosa zcr_classical = librosa.feature.zero_crossing_rate(classical, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_blues = librosa.feature.zero_crossing_rate(blues, frameHOZE,=hopLENGTH) )[0] zcr_reggae = librosa.feature.zero_crossing_rate(reggae, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_rock = librosa.feature.zero_crossing_rate(rock, frame_length=FRAME_SIZE, hop_TH)[0] feature.zero_crossing_rate(jazz, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_country = librosa.feature.zero_crossing_rate(country, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_disco = librosacross.feature FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_hiphop = librosa.feature.zero_crossing_rate(hiphop, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] zcr_metal = librosa.feature.zero_crossing_rate(metal_SIZE_length(metal_SIZE_length) , hop_length=HOP_LENGTH)[0] zcr_pop = librosa.feature.zero_crossing_rate(pop, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0]
frames = bereik(len(zcr_classical)) t = librosa.frames_to_time(frames, hop_length=HOP_LENGTH)
#Visualiseren van genormaliseerde Zero-crossing rate (ZCR) van verschillende muziekgenre-nummers plt.figure(figsize=(20, 20))
ax = plt.subplot(5, 2, 1) librosa.display.waveplot(klassiek, alpha=0.5) plt.plot(t, zcr_classical, color="b") plt.ylim((-1, 1)) plt .title("Klassiek muziekgenre nummer")
plt.subplot(5, 2, 2) librosa.display.waveplot(blues, alpha=0.5) plt.plot(t, zcr_blues, color="g") plt.ylim((-1, 1)) plt.title ( "Blues Music Genre-nummer")
plt.subplot(5, 2, 3) librosa.display.waveplot(reggae, alpha=0.5) plt.plot(t, zcr_reggae, color="k") plt.ylim((-1, 1)) plt.title ("Reggaemuziekgenrenummer")
plt.subplot(5, 2, 4) librosa.display.waveplot(rock, alpha=0.5) plt.plot(t, zcr_rock, color="#E9967A") plt.ylim((-1, 1)) plt. titel ("Rockmuziek Genre-nummer")
plt.subplot(5, 2, 5) librosa.display.waveplot(jazz, alpha=0.5) plt.plot(t, zcr_jazz, color="m") plt.ylim((-1, 1)) plt.title ( "Jazz muziekgenre nummer")
plt.subplot(5, 2, 6) librosa.display.waveplot(country, alpha=0.5) plt.plot(t, zcr_country, color="y") plt.ylim((-1, 1)) plt.title ( "Country Music Genre-nummer")
plt.subplot(5, 2, 7) librosa.display.waveplot(disco, alpha=0.5) plt.plot(t, zcr_disco, color="r") plt.ylim((-1, 1)) plt.title ( "Disco Muziek Genre nummer")
plt.subplot(5, 2, 8) librosa.display.waveplot(hiphop, alpha=0.5) plt.plot(t, zcr_hiphop, color="#7FFF00") plt.ylim((-1, 1)) plt. title("Hiphop muziekgenre nummer")
plt.subplot(5, 2, 9) librosa.display.waveplot(metal, alpha=0.5) plt.plot(t, zcr_metal, color="#FFB90F") plt.ylim((-1, 1)) plt. titel ("Metal Music Genre-nummer")
plt.subplot(5, 2, 10) librosa.display.waveplot(pop, alpha=0.5) plt.plot(t, zcr_pop, color="#458B00") plt.ylim((-1, 1)) plt. title("Pop Music Genre song") plt.subplots_adjust(hspace = 0.75)
Analyse van nuldoorgangspercentages van verschillende muziekgenre-tracks
Zero Crossing-tarieven
Waveplots die de nuldoorgangssnelheden van verschillende muziekgenre-tracks illustreren

#Visualiseren van NORMALIZED Zero-crossing-snelheden van verschillende muziekgenre-tracks

plt.figure(figsize=(25, 25)) plt.plot(t, zcr_classical, color="b") plt.plot(t, zcr_blues, color="g") plt.plot(t, zcr_reggae, color= "k") plt.plot(t, zcr_rock, color="#E9967A") plt.plot(t, zcr_jazz, color="m") plt.plot(t, zcr_country, color="y") plt.plot (t, zcr_disco, color="r") plt.plot(t, zcr_hiphop, color="#7FFF00") plt.plot(t, zcr_metal, color="#FFB90F") plt.plot(t, zcr_pop, kleur ="#458B00") plt.ylim(0, 1)
Analyse van nuldoorgangspercentages van verschillende muziekgenre-tracks
Zero Crossing-tarieven
Grafiek die de GENORMALISEERDE Zero-crossing-snelheden van verschillende muziekgenre-tracks weergeeft

#Visualiseren van WERKELIJKE (NIET-GENORMALISEERDE) Zero-crossing-snelheid van verschillende muziekgenre-tracks

plt.figure(figsize=(25, 25)) plt.plot(t, zcr_classical*FRAME_SIZE, color="b") plt.plot(t, zcr_blues*FRAME_SIZE, color="g") plt.plot(t, zcr_reggae*FRAME_SIZE, color="k") plt.plot(t, zcr_rock*FRAME_SIZE, color="#E9967A") plt.plot(t, zcr_jazz*FRAME_SIZE, color="m") plt.plot(t, zcr_country *FRAME_SIZE, color="y") plt.plot(t, zcr_disco*FRAME_SIZE, color="r") plt.plot(t, zcr_hiphop*FRAME_SIZE, color="#7FFF00") plt.plot(t, zcr_metal* FRAME_SIZE, kleur = "#FFB90F") plt.plot(t, zcr_pop*FRAME_SIZE, kleur = "#458B00") plt.ylim (0, 600)
Analyse van nuldoorgangspercentages van verschillende muziekgenre-tracks
Zero Crossing-tarieven
Grafiek die de WERKELIJKE (NIET-GENORMALISEERDE) nuldoorgangsfrequenties van verschillende muziekgenre-tracks weergeeft

Conclusie

Bij wiskundig en visueel onderzoek kunnen we zeggen dat de liedjes uit het jazz- en klassieke muziekgenre lage ZCR-waarden hebben. En pop- en metalmuziekgenrenummers hebben een hoge ZCR. We kunnen deze bevindingen echter niet extrapoleren naar de hele groep op basis van de kleine steekproefomvang. De voorgaande analyse biedt ons daarentegen misschien een beknopte samenvatting, een vorm van intuïtie, over verschillende soorten muziekgenres.

Bedankt voor het lezen. Als u vragen of opmerkingen heeft, kunt u deze achterlaten in de opmerkingen hieronder. Gelukkig Aan het leren!

Lees meer artikelen op onze blog.

Link naar GitHub-opslagplaats: Klik hier!

Referenties: 1. https://www.youtube.com/watch?v=EycaSbIRx-0&t=1352s

2. https://en.wikipedia.org/wiki/Zero_crossing

3. https://en.wikipedia.org/wiki/Zero-crossing_rate

De media die in dit artikel worden getoond, zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt. 

Bron: https://www.analyticsvidhya.com/blog/2022/01/analysis-of-zero-crossing-rates-of-different-music-genre-tracks/

Geschreven Door

Gerelateerde streams

Betalingen

De VS is het dominante land geworden voor cryptomining, maar die dominantie wordt niet weerspiegeld in de cryptomining-aandelen, die blijven presteren...

Big data

Amazon Athena is een interactieve query-service die het gemakkelijk maakt om gegevens te analyseren in Amazon Simple Storage Service (Amazon S3) met behulp van standaard SQL....

EdTech

Introduction The rapid adoption of technology and emergence of data science has led to increased use of Python for data development in the IT...

EdTech

Introduction The rapid adoption of technology and emergence of data science has led to increased use of Python for data development in the IT...