1. Produkti
  2.   Audio
  3.   Python
  4.   Aubio
 
  

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.

Previous Next

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")

 Latviski