Reāllaika audio un mūzikas analīze, izmantojot bezmaksas Python bibliotēku
Aubio ir atvērtā koda Python audio apstrādes bibliotēka, ko programmatūras izstrādātāji izmanto tonas noteikšanai, taktu izsekošanai, MFCC izvilkšanai un reāllaika audio apstrādei.
Kas ir Aubio?
Mūsdienīgām audio lietojumprogrammām — piemēram, mūzikas producēšanas rīkiem, audio analīzes platformām un reāllaika skaņas apstrādes sistēmām — ir nepieciešami efektīvi veidi, kā analizēt skaņas signālus. Viens populārs atvērtā koda risinājums šim nolūkam ir Aubio, viegla, bet spēcīga bibliotēka, kas paredzēta, lai izgūtu nozīmīgu informāciju no audio signāliem. Aubio ir atvērtā koda bibliotēka, kas paredzēta, lai izvilktu anotācijas un muzikālos rādītājus no audio signāliem. Tā analizē audio plūsmas un identificē notikumus, piemēram, notu sākumus, toņa augstumu, takts sitienus un tempu. Tā ir galvenokārt rakstīta C valodā, lai nodrošinātu augstu veiktspēju, un darbojas Linux, macOS un Windows operētājsistēmās.
Bibliotēka ir ļoti viegli lietojama un atbalsta reāllaika audio apstrādi. Bibliotēka var noteikt muzikālus notikumus, piemēram, kad notiek dūšu trieciena, muzikālās nots frekvenci un celiņa tempu vai ritmu. Tā var darboties gan bezsaistē (audio faili), gan reāllaika audio straumēs, padarot to piemērotu audio redaktoriem, digitāliem instrumentiem un skaņas analīzes rīkiem. Ar atbalstu tonācijas noteikšanai, taktu izsekošanai, sākuma notikumu noteikšanai, MFCC izvilkšanai un reāllaika signālu apstrādei, tā nodrošina izstrādātājiem rīkus, kas nepieciešami, lai izveidotu progresīvas audio lietojumprogrammas.
Sākšana ar Aubio
Visvieglākais veids, kā instalēt Aubio, ir izmantot Python pakotņu indeksu (PyPI). Lūdzu, izmantojiet šādu komandu pilnīgai instalācijai.
Instalēt, izmantojot Aubio
pip install aubio Instalēt Aubio no GitHub
go get -u github.com/aubio/aubio.git Sākuma noteikšana ar Python
Viena no visnoderīgākajām Aubio bibliotēkas funkcijām ir sākuma noteikšana, kas identificē, kad sākas mūzikas nots vai skaņas notikums. Sākuma noteikšana atrod precīzu brīdi, kad sākas jauna skaņa vai mūzikas nots. Mūzikā "sākums" ir nots uzbrukums — brīdis, kad tiek sitts bungas, plukstota ģitāra vai balss sāk izrunāt zilbi. Aubio ietver vairākus sākuma noteikšanas algoritmus dažādiem lietojumiem. Zemāk esošais piemērs parāda, kā noteikt sākumus audio failā, izmantojot Python kodu.
Kā noteikt notikumu sākumus audio failā, izmantojot Python bibliotēku?
import aubio
import numpy as np
# Configuration
filename = "audio_sample.wav"
win_s = 512 # FFT window size
hop_s = 256 # Hop size (frames between analysis windows)
# Open the audio source
src = aubio.source(filename, hop_size=hop_s)
samplerate = src.samplerate
# Create the onset detector (using 'complex' method)
onset = aubio.onset("complex", win_s, hop_s, samplerate)
# Set detection threshold (0.0 to 1.0 — lower = more sensitive)
onset.set_threshold(0.3)
onsets = []
# Process audio frame by frame
while True:
samples, read = src() # Read one hop of audio
if onset(samples): # Returns True when onset detected
print(f"Onset at: {onset.get_last_s():.3f} seconds")
onsets.append(onset.get_last_s())
if read < hop_s: # End of file
break
print(f"\nTotal onsets detected: {len(onsets)}")
Tonācijas noteikšanas atbalsts
Pikseļa noteikšana ir vēl viena svarīga atvērta koda Aubio bibliotēkas iespēja. Pikseļa noteikšana identificē skaņas pamats frekvenci (F0) — būtībā, "kāds mūzikas nots tas ir?" Tas ir jebkura tuner, melodijas izvilkšanas vai vokālo analīžu rīka pamats. Aubio atbalsta vairākus pikseļa noteikšanas algoritmus, piemēram, yin, yinfft, mcomb, fcomb un citus. Šeit ir vienkāršs piemērs, kas parāda, kā veikt reāllaika pikseļa noteikšanu Python lietojumprogrammās.
Kā veikt reāllaika toņa augstuma noteikšanu, izmantojot Python?
import aubio
import numpy as np
samplerate = 44100
win_s = 1024
hop_s = 512
pitch_o = aubio.pitch("yin", win_s, hop_s, samplerate)
pitch_o.set_unit("Hz")
pitch_o.set_silence(-40)
samples = np.random.rand(hop_s).astype(np.float32)
pitch = pitch_o(samples)
print("Detected pitch:", pitch)
Tempora izsekošana un taktu noteikšana ar Python
Atvērtā koda bibliotēka Aubio var analizēt ritmiskos modeļus un noteikt sitienus un tempu mūzikā Python lietojumprogrammās. Aubio var klausīties audio un saskarties — noteikt tempu BPM (sitieni minūtē) un precīzi noteikt atsevišķu sitienu laika zīmes. Tas ir nenovērtējami noderīgs visam, sākot no DJ programmatūras līdz mūzikas sinhronizācijai. Bibliotēka nosaka sitienu vietas, analizējot spektrālos pārmaiņus un ritmiskos modeļus audio signālā.
Skaņas failu lasīšana un rakstīšana ar Python
Python bibliotēka Aubio aptver audio failu I/O caur saviem avota un izvada objektiem, atbalstot vairākus formātus (WAV, FLAC, OGG, MP3 caur libav vai ffmpeg) un automātiski pārvaldot paraugu frekvences konvertēšanu. Šeit ir vienkāršs piemērs, kas parāda, kā programmatūras izstrādātāji var veikt audio failu lasīšanu, apstrādi un rakstīšanu, izmantojot Python komandas.
Kā nolasīt, apstrādāt un rakstīt audio failus, izmantojot Python?
import aubio
import numpy as np
input_file = "input.wav"
output_file = "output.wav"
target_samplerate = 22050 # Downsample to 22.05 kHz
hop_s = 512
# Open source — resamples automatically to target samplerate
src = aubio.source(input_file, samplerate=target_samplerate, hop_size=hop_s)
actual_sr = src.samplerate
num_channels = src.channels
# Open sink for writing
sink = aubio.sink(output_file, actual_sr, channels=1)
while True:
samples, read = src()
# Write mono (sink expects 1D array for mono output)
if num_channels > 1:
mono = samples.reshape(num_channels, -1).mean(axis=0)
else:
mono = samples
sink(mono[:read], read)
if read < hop_s:
break
del sink # Flushes and closes file
print(f"Written {output_file} at {actual_sr} Hz")