Atraskite skaitmeninio garso pasaulį su Python. Šis išsamus vadovas apima garso analizę ir sintezę, pagrindines bibliotekas, tokias kaip Librosa ir SciPy, ir praktinius kodo pavyzdžius kūrėjams ir entuziastams.
Garso apdorojimas su Python: Gilus garso analizės ir sintezės tyrimas
Garsas yra esminė žmogaus patirties dalis. Nuo muzikos, kurią mėgstame, iki balsų, kuriuos atpažįstame, iki aplinkos triukšmų, garso duomenys yra turtingi, sudėtingi ir labai reikšmingi. Skaitmeniniame amžiuje gebėjimas manipuliuoti ir suprasti šiuos duomenis tapo labai svarbiu įgūdžiu tokiose skirtingose srityse kaip pramogos, dirbtinis intelektas ir moksliniai tyrimai. Kūrėjams ir duomenų mokslininkams Python tapo šios užduoties galia, siūlanti tvirtą bibliotekų ekosistemą skaitmeniniam signalų apdorojimui (DSP).
Garso apdorojimo esmė yra dvi papildomos disciplinos: garso analizė ir garso sintezė. Jie yra skaitmeninio garso in ir jang:
- Analizė yra dekonstrukcijos procesas. Tai apima esamo garso signalo paėmimą ir suskaidymą, siekiant išgauti prasmingą informaciją. Tai atsako į klausimą: "Iš ko susideda šis garsas?"
- Sintezė yra konstravimo procesas. Tai apima garso signalo kūrimą nuo nulio naudojant matematinius modelius ir algoritmus. Tai atsako į klausimą: "Kaip aš galiu sukurti šį garsą?"
Šis išsamus vadovas nuves jus į kelionę per abu pasaulius. Išnagrinėsime teorinius pagrindus, pristatysime pagrindinius Python įrankius ir apžvelgsime praktinius kodo pavyzdžius, kuriuos galite paleisti ir pritaikyti patys. Nesvarbu, ar esate duomenų mokslininkas, norintis analizuoti garso funkcijas, muzikantas, besidomintis algoritmine kompozicija, ar kūrėjas, kuriantis kitą puikią garso programą, šis straipsnis suteiks jums pagrindą, kurio reikia norint pradėti.
1 dalis: Dekonstravimo menas: Garso analizė su Python
Garso analizė prilygsta buvimui detektyvu. Jums duodamas įrodymas – garso failas – ir jūsų darbas yra naudoti savo įrankius, kad atskleistumėte jo paslaptis. Kokios natos buvo grojamos? Kas kalbėjo? Kokioje aplinkoje buvo įrašytas garsas? Tai yra klausimai, į kuriuos garso analizė padeda mums atsakyti.
Pagrindinės skaitmeninio garso sąvokos
Prieš analizuodami garsą, turime suprasti, kaip jis atvaizduojamas kompiuteryje. Analoginė garso banga yra nuolatinis signalas. Norėdami ją saugoti skaitmeniniu būdu, turime ją konvertuoti per procesą, vadinamą atranka.
- Atrankos dažnis: tai yra garso signalo mėginių (momentinių nuotraukų) skaičius, paimtas per sekundę. Jis matuojamas hercais (Hz). Įprastas muzikos atrankos dažnis yra 44 100 Hz (44,1 kHz), o tai reiškia, kad kas sekundę padaroma 44 100 garso amplitudės momentinių nuotraukų.
- Bitų gylis: tai nustato kiekvieno mėginio skiriamąją gebą. Didesnis bitų gylis leidžia didesnį dinaminį diapazoną (skirtumą tarp tyliausių ir garsiausių garsų). 16 bitų gylis yra standartinis CD diskams.
Šio proceso rezultatas yra skaičių seka, kurią galime pavaizduoti kaip bangos formą.
Bangos forma: Amplitudė ir laikas
Pagrindinis garso atvaizdavimas yra bangos forma. Tai dviejų dimensijų amplitudės (garsumo) diagrama pagal laiką. Pažvelgus į bangos formą, galite susidaryti bendrą įspūdį apie garso dinamiką, tačiau ji daug nepasako apie jo toninį turinį.
Spektras: Dažnis ir aukštis
Norėdami suprasti garso tonines savybes, turime pereiti iš laiko srities (bangos formos) į dažnio sritį. Tai pasiekiama naudojant algoritmą, vadinamą Greita Furjė transformacija (FFT). FFT suskaido bangos formos segmentą į sudedamąsias sinusines bangas, kurių kiekviena turi specifinį dažnį ir amplitudę. Rezultatas yra spektras, amplitudės diagrama pagal dažnį. Ši diagrama atskleidžia, kurie dažniai (ar aukščiai) yra garsu ir kokie jie stiprūs.
Tembras: Garso "spalva"
Kodėl pianinas ir gitara, grojantys tą pačią natą (tą patį pagrindinį dažnį), skamba taip skirtingai? Atsakymas yra tembras. Tembrą lemia harmonikų arba virštonų – papildomų dažnių, kurie yra sveikieji pagrindinio dažnio kartotiniai – buvimas ir intensyvumas. Unikalus šių harmonikų derinys suteikia instrumentui būdingą garso spalvą.
Pagrindinės Python bibliotekos, skirtos garso analizei
Python stiprybė slypi didelėje trečiųjų šalių bibliotekų kolekcijoje. Garso analizei išsiskiria kelios.
- Librosa: Tai pagrindinė biblioteka, skirta garso ir muzikos analizei Python kalba. Ji suteikia platų įrankių rinkinį garso įkėlimui, jo vizualizavimui ir plataus aukšto lygio funkcijų, tokių kaip tempas, tonas ir chromatinis atvaizdavimas, išgavimui.
- SciPy: Pagrindinė biblioteka moksliniame Python pakete, SciPy, turi galingą `signal` modulį. Jis puikiai tinka žemesnio lygio DSP užduotims, tokioms kaip filtravimas, Furjė transformacijos ir darbas su spektrogramomis. Ji taip pat suteikia paprastą būdą skaityti ir rašyti `.wav` failus.
- pydub: Aukšto lygio, paprastoms manipuliacijoms `pydub` yra fantastiška. Ji leidžia jums supjaustyti, sujungti, uždėti ir pritaikyti paprastus efektus garsui su labai intuityviu API. Ji puikiai tinka išankstinio apdorojimo užduotims.
- NumPy & Matplotlib: Nors ir nėra specifinės garsui, jos yra nepakeičiamos. NumPy suteikia pagrindinę duomenų struktūrą (N dimensijų masyvą) garso duomenims laikyti, o Matplotlib yra standartas braižymui ir vizualizavimui.
Praktinė analizė: Nuo bangų formų iki įžvalgų
Pasipurvinkime rankas. Pirmiausia įsitikinkite, kad turite įdiegtas reikiamas bibliotekas:
pip install librosa matplotlib numpy scipy
Taip pat jums reikės garso failo, su kuriuo dirbti. Šiems pavyzdžiams darysime prielaidą, kad turite failą, pavadintą `audio_sample.wav`.
Garso įkėlimas ir vizualizavimas
Pirmasis mūsų žingsnis visada yra įkelti garso duomenis į NumPy masyvą. Librosa tai daro neįtikėtinai paprastai.
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# Apibrėžkite kelią iki jūsų garso failo
file_path = 'audio_sample.wav'
# Įkelkite garso failą
# y yra garso laiko seka (numpy masyvas)
# sr yra atrankos dažnis
y, sr = librosa.load(file_path)
# Nubraižykite bangos formą
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr)
plt.title('Garso bangos forma')
plt.xlabel('Laikas (s)')
plt.ylabel('Amplitudė')
plt.grid(True)
plt.show()
Šis kodas įkelia jūsų garso failą ir rodo jo bangos formą. Jūs iš karto galite pamatyti garsesnes ir tylesnes įrašo dalis per laiką.
Dažnio turinio išpakavimas: Spektrograma
Bangos forma yra naudinga, tačiau spektrograma suteikia mums daug turtingesnį vaizdą. Spektrograma vizualizuoja signalo spektrą, kai jis keičiasi per laiką. Horizontali ašis atspindi laiką, vertikali ašis atspindi dažnį, o spalva atspindi konkretaus dažnio amplitudę konkrečiu laiku.
# Apskaičiuokite trumpalaikę Furjė transformaciją (STFT)
D = librosa.stft(y)
# Konvertuokite amplitudę į decibelus (intuityvesnė skalė)
DB = librosa.amplitude_to_db(np.abs(D), ref=np.max)
# Nubraižykite spektrogramą
plt.figure(figsize=(14, 5))
librosa.display.specshow(DB, sr=sr, x_axis='time', y_axis='log')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-dažnio galios spektrograma')
plt.show()
Su spektrograma jūs galite tiesiogine prasme pamatyti natas muzikos kūrinyje, formantus žmogaus kalboje arba būdingą mašinos ūžesio dažnio parašą.
Prasmingų funkcijų išgavimas
Dažnai norime distiliuoti sudėtingą garso signalą į kelis skaičius arba vektorius, kurie apibūdina pagrindines jo charakteristikas. Jie vadinami funkcijomis ir yra gyvybiškai svarbūs mašininio mokymosi modeliams garsui.
Nulio kirtimo dažnis (ZCR): Tai yra dažnis, kuriuo signalas keičia ženklą (nuo teigiamo į neigiamą arba atvirkščiai). Didelis ZCR dažnai rodo triukšmingus arba perkusinius garsus (pvz., cimbolus arba statinį), o mažas ZCR yra tipiškas toniniams, melodiniams garsams (pvz., fleitai arba dainuojamam balsiui).
zcr = librosa.feature.zero_crossing_rate(y)
print(f"Vidutinis nulio kirtimo dažnis: {np.mean(zcr)}")
Spektrinis centroidas: Ši funkcija atspindi spektro "masės centrą". Tai garso ryškumo matas. Didelis spektrinis centroidas rodo garsą su daugiau aukšto dažnio turinio (pvz., trimitu), o mažas rodo tamsesnį garsą (pvz., violončele).
spectral_centroids = librosa.feature.spectral_centroid(y=y, sr=sr)[0]
# Spektrinio centroido braižymas per laiką
frames = range(len(spectral_centroids))
t = librosa.frames_to_time(frames, sr=sr)
plt.figure(figsize=(14, 5))
librosa.display.waveshow(y, sr=sr, alpha=0.4)
plt.plot(t, spectral_centroids, color='r') # Rodyti spektrinį centroidą raudonai
plt.title('Spektrinis centroidas')
plt.show()
Mel-dažnio kepstriniai koeficientai (MFCC): Tai turbūt svarbiausia funkcija garso klasifikavimo užduotims, ypač kalbos atpažinimo ir muzikos žanro klasifikavimo. MFCC yra kompaktiškas garso trumpalaikės galios spektro atvaizdavimas, pagrįstas tiesine log galios spektro kosinuso transformacija nelinijinėje Mel dažnio skalėje. Tai sudėtingas pasakymas, tačiau pagrindinė idėja yra ta, kad jie yra sukurti modeliuoti žmogaus klausos suvokimą, todėl jie yra labai veiksmingi užduotims, kuriose pageidaujamas į žmogų panašus supratimas.
mfccs = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
# Vizualizuokite MFCC
plt.figure(figsize=(14, 5))
librosa.display.specshow(mfccs, sr=sr, x_axis='time')
plt.colorbar()
plt.title('MFCC')
plt.show()
Tono ir tempo aptikimas
Librosa taip pat suteikia aukšto lygio funkcijas muzikai specifinei analizei.
Tempas ir ritmo sekimas: Mes galime lengvai įvertinti bendrą tempą (taktais per minutę) ir nustatyti taktų pozicijas garse.
# Įvertinkite tempą ir raskite taktų kadrus
tempo, beat_frames = librosa.beat.beat_track(y=y, sr=sr)
print(f'Įvertintas tempas: {tempo:.2f} taktai per minutę')
# Konvertuokite taktų kadrus į laiką
beat_times = librosa.frames_to_time(beat_frames, sr=sr)
Tai tik ledkalnio viršūnė. Librosa siūlo daugybę funkcijų ritmui, harmonijai ir tonalumui analizuoti, todėl tai yra neįtikėtinai galingas įrankis muzikos informacijos paieškai (MIR).
2 dalis: Kūrimo amatas: Garso sintezė su Python
Jei analizė yra apie daiktų išardymą, sintezė yra apie jų kūrimą nuo nulio. Su Python jūs galite tapti skaitmeniniu liutninku, kurdamas garsus, kurie niekada anksčiau neegzistavo, visa tai su keliomis kodo eilutėmis. Pagrindinė idėja yra sugeneruoti NumPy masyvą reikšmių, kurios, atgaminamos, sukuria jūsų sukurtą garso bangą.
Pagrindinės sintezės technikos
Yra daug būdų sintezuoti garsą, kiekvienas su savo charakteriu. Štai keletas pagrindinių požiūrių.
- Adityvinė sintezė: Paprasčiausias ir intuityviausias metodas. Remiantis Furjė teorema, teigiama, kad bet kuri sudėtinga periodinė bangos forma gali būti pavaizduota kaip paprastų sinusinių bangų (harmonikų) suma. Pridedant sinusines bangas su skirtingais dažniais, amplitudėmis ir fazėmis, jūs galite sukurti neįtikėtinai turtingus ir sudėtingus tembrus.
- Subtraktyvinė sintezė: Tai yra adityvinės sintezės priešingybė. Jūs pradedate nuo harmoningai turtingos bangos formos (pvz., stačiakampės bangos arba pjūklo bangos) ir tada naudojate filtrus, kad išraižytumėte arba atimtumėte dažnius. Tai yra daugumos klasikinių analoginių sintezatorių pagrindas.
- Dažnio moduliavimo (FM) sintezė: Labai efektyvi ir galinga technika, kai vieno osciliatoriaus ("nešlio") dažnis yra moduliuojamas kito osciliatoriaus ("moduliatoriaus") išėjimu. Tai gali sukurti labai sudėtingus, dinamiškus ir dažnai metalinius arba varpo formos garsus.
Pagrindinės Python bibliotekos, skirtos garso sintezei
Sintezei mūsų įrankių rinkinys yra paprastesnis, bet ne mažiau galingas.
- NumPy: Tai yra absoliutus pagrindas. Mes naudosime NumPy, kad sukurtume ir manipuliuotume skaičių masyvais, kurie atspindi mūsų garso bangas. Jos matematinės funkcijos yra būtinos bangų formų, tokių kaip sinusinės, stačiakampės ir trikampės bangos, generavimui.
- SciPy: Mes naudosime SciPy `scipy.io.wavfile.write` funkciją, kad išsaugotume mūsų NumPy masyvus į standartinius `.wav` garso failus, kuriuos gali groti bet kuris medijos grotuvas.
Praktinė sintezė: Garso kūrimas iš kodo
Pradėkime kurti garsą. Įsitikinkite, kad turite paruoštas SciPy ir NumPy.
Gryno tono (sinusinės bangos) generavimas
Paprasčiausias garsas, kurį galime sukurti, yra grynas tonas, kuris yra tiesiog sinusinė banga tam tikru dažniu.
import numpy as np
from scipy.io.wavfile import write
# --- Sintezės parametrai ---
sr = 44100 # Atrankos dažnis
trukmė = 3.0 # sekundės
dažnis = 440.0 # Hz (A4 nata)
# Sukurkite laiko masyvą
# Tai sukuria skaičių seką nuo 0 iki 'trukmė', su 'sr' taškų per sekundę
t = np.linspace(0., trukmė, int(sr * trukmė), endpoint=False)
# Sukurkite sinusinę bangą
# Sinusinės bangos formulė yra: amplitudė * sin(2 * pi * dažnis * laikas)
amplitudė = np.iinfo(np.int16).max * 0.5 # Naudokite pusę didžiausios 16 bitų sveikojo skaičiaus reikšmės
data = amplitudė * np.sin(2. * np.pi * dažnis * t)
# Konvertuokite į 16 bitų duomenis ir įrašykite į .wav failą
write('sine_wave_440hz.wav', sr, data.astype(np.int16))
print("Sėkmingai sugeneruotas 'sine_wave_440hz.wav'.")
Jei paleisite šį kodą, jis sukurs `.wav` failą tame pačiame kataloge. Atidarykite jį ir išgirsite tobulą A4 natą!
Garso formavimas su vokais (ADSR)
Mūsų grynas tonas yra šiek tiek nuobodus; jis prasideda ir baigiasi staiga. Realaus pasaulio garsai turi dinamišką formą. Mes galime tai kontroliuoti naudodami voką. Dažniausias tipas yra ADSR vokas:
- Ataka: Laikas, per kurį garsas pakyla nuo nulio iki didžiausio lygio.
- Nuosmukis: Laikas, per kurį nukrenta nuo didžiausio iki palaikymo lygio.
- Palaikymas: Lygis, kuriame garsas laikomas, kol nata yra aktyvi.
- Atleidimas: Laikas, per kurį garsas išnyksta iki nulio po to, kai nata atleidžiama.
Pritaikykime paprastą tiesinę ataką ir atleidimą mūsų sinusinei bangai.
# --- Voko parametrai ---
atakos_laikas = 0.1 # sekundės
atleidimo_laikas = 0.5 # sekundės
# Sukurkite voką
atakos_mėginiai = int(sr * atakos_laikas)
atleidimo_mėginiai = int(sr * atleidimo_laikas)
palaikymo_mėginiai = len(t) - atakos_mėginiai - atleidimo_mėginiai
ataka = np.linspace(0, 1, atakos_mėginiai)
# Paprastumo dėlei praleisime nuosmukį ir padarysime palaikymo lygį 1
palaikymas = np.ones(palaikymo_mėginiai)
atleidimas = np.linspace(1, 0, atleidimo_mėginiai)
vokas = np.concatenate([ataka, palaikymas, atleidimas])
# Pritaikykite voką mūsų sinusinės bangos duomenims
vokuoti_duomenys = data * vokas
# Įrašykite naują garsą į failą
write('enveloped_sine_wave.wav', sr, vokuoti_duomenys.astype(np.int16))
print("Sėkmingai sugeneruotas 'enveloped_sine_wave.wav'.")
Šis naujas garsas sklandžiai išnyks ir švelniai išnyks, todėl jis skambės daug muzikaliau ir natūraliau.
Sudėtingumo kūrimas su adityvine sinteze
Dabar sukurkime turtingesnį tembrą pridedant harmonikas. Pavyzdžiui, stačiakampė banga susideda iš pagrindinio dažnio ir visų jo nelyginių harmonikų, kurių amplitudės mažėja proporcingai. Apytiksliai įvertinkime vieną.
# --- Adityvinė sintezė ---
pagrindinis_dažnis = 220.0 # A3 nata
# Pradėkite nuo pagrindinio tono
galutinė_banga = np.sin(2. * np.pi * pagrindinis_dažnis * t)
# Pridėkite nelygines harmonikas
harmonikos_skaičius = 10
for i in range(3, harmonikos_skaičius * 2, 2):
harmoningas_dažnis = pagrindinis_dažnis * i
harmoninga_amplitudė = 1.0 / i
galutinė_banga += harmoninga_amplitudė * np.sin(2. * np.pi * harmoningas_dažnis * t)
# Normalizuokite bangą, kad išvengtumėte apkarpymo (amplitudė > 1)
galutinė_banga = galutinė_banga / np.max(np.abs(galutinė_banga))
# Pritaikykite mūsų voką iš anksčiau
turtuolio_garso_duomenys = (amplitudė * galutinė_banga) * vokas
# Įrašykite į failą
write('additive_synthesis_sound.wav', sr, turtuolio_garso_duomenys.astype(np.int16))
print("Sėkmingai sugeneruotas 'additive_synthesis_sound.wav'.")
Paklausykite šio naujo failo. Jis skambės daug turtingesnis ir sudėtingesnis nei paprasta sinusinė banga, linkęs į ūžiantį stačiakampės bangos garsą. Jūs ką tik atlikote adityvinę sintezę!
3 dalis: Simbiotiniai santykiai: Kur analizė ir sintezė susilieja
Nors mes traktavome analizę ir sintezę kaip atskiras temas, jų tikroji galia atsiskleidžia, kai jos naudojamos kartu. Jos sudaro grįžtamojo ryšio kilpą, kur supratimas informuoja kūrimą, o kūrimas suteikia naujos medžiagos supratimui.
Tiltas tarp pasaulių: Resintezė
Viena iš įdomiausių sričių, kur susitinka abi, yra resintezė. Procesas veikia taip:
- Analizuoti: Paimkite realaus pasaulio garsą (pvz., smuiko įrašą) ir ištraukite pagrindines jo akustines funkcijas – jo harmoninį turinį, jo tono svyravimus, jo amplitudės voką.
- Modelis: Sukurkite matematinį modelį, pagrįstą šiomis funkcijomis.
- Sintezuoti: Naudokite savo sintezės variklį, kad sugeneruotumėte naują garsą, pagrįstą šiuo modeliu.
Tai leidžia jums sukurti labai realistiškus sintetinius instrumentus arba paimti vieno garso charakteristikas ir pritaikyti jas kitam (pvz., padaryti, kad gitara skambėtų taip, tarsi ji "kalbėtų", uždėdami žmogaus balso spektrinį voką ant jo).
Garso efektų kūrimas
Praktiškai visi skaitmeniniai garso efektai – aidas, delsa, iškraipymas, choras – yra analizės ir sintezės derinys.
- Delsa/Aidas: Tai paprastas procesas. Sistema analizuoja įeinantį garsą, saugo jį buferyje (atminties dalyje) ir tada sintezuoja jį atgal į išvesties srautą vėliau, dažnai sumažinta amplitude.
- Iškraipymas: Šis efektas analizuoja įvesties signalo amplitudę. Jei jis viršija tam tikrą slenkstį, jis sintezuoja naują išvestį pritaikydamas matematinę funkciją ("bangos formuotuvą"), kuri apkarpo arba pakeičia bangos formą, pridedant turtingas naujas harmonikas.
- Aidas: Tai imituoja fizinės erdvės garsą. Tai sudėtingas procesas, sintezuojant tūkstančius mažyčių, nykstančių aidų (atspindžių), kurie yra modeliuojami remiantis realaus kambario akustinių savybių analize.
Realaus pasaulio šios sinergijos pritaikymai
Analizės ir sintezės sąveika skatina naujoves visoje pramonėje:
- Kalbos technologija: Teksto į kalbą (TTS) sistemos sintezuoja į žmogų panašią kalbą, dažnai apmokytą remiantis gilia didelio kiekio įrašytos žmogaus kalbos analize. Priešingai, automatinės kalbos atpažinimo (ASR) sistemos analizuoja vartotojo balsą, kad jį transkribuotų į tekstą.
- Muzikos informacijos paieška (MIR): Tokios sistemos kaip Spotify naudoja gilią savo muzikos katalogo analizę, kad suprastų dainų funkcijas (tempą, žanrą, nuotaiką). Ši analizė tada gali būti naudojama naujiems grojaraščiams sintezuoti arba muzikai rekomenduoti.
- Generatyvinis menas ir muzika: Šiuolaikiniai AI modeliai gali analizuoti didžiulius muzikos ar garsų duomenų rinkinius ir tada sintezuoti visiškai naujus, originalius kūrinius tuo pačiu stiliumi. Tai yra tiesioginis analizės ir sintezės paradigmos pritaikymas.
- Žaidimų garsas: Pažangūs žaidimų garso varikliai sintezuoja garsus realiuoju laiku. Jie gali analizuoti žaidimo fizikos variklį (pvz., automobilio greitį) ir naudoti tuos parametrus atitinkamam variklio garsui sintezuoti, sukuriant puikiai reaguojančią ir dinamišką garso patirtį.
Išvada: Jūsų kelionė skaitmeniniame garse
Mes keliavome nuo dekonstrukcijos iki konstravimo, nuo garso supratimo iki jo kūrimo. Mes matėme, kad garso analizė suteikia įrankius klausytis giliai, kiekybiškai įvertinti efemeriškas garso savybes ir paversti jas duomenimis. Taip pat matėme, kad garso sintezė suteikia mums garsinių spalvų paletę, kad galėtume kurti naujus garsų pasaulius iš nieko kito, tik matematinės logikos.
Pagrindinė išvada yra ta, kad tai nėra priešingos jėgos, o dvi tos pačios monetos pusės. Geriausios garso programos, įžvalgiausi tyrimai ir kūrybingiausios meninės pastangos dažnai gyvena šių dviejų sričių sankirtoje. Funkcijos, kurias ištraukiame per analizę, tampa mūsų sintezatorių parametrais. Garsai, kuriuos kuriame su sintezatoriais, tampa mūsų analizės modelių duomenimis.
Su Python ir jo neįtikėtina bibliotekų ekosistema, tokia kaip Librosa, SciPy ir NumPy, patekimo barjeras norint tyrinėti šį žavų pasaulį niekada nebuvo žemesnis. Šiame straipsnyje pateikti pavyzdžiai yra tik atspirties taškas. Tikrasis jaudulys prasideda, kai pradedate derinti šias technikas, maitindami vieno išvestį į kito įvestį ir užduodami savo klausimus apie garso prigimtį.
Taigi, įkelkite jus dominantį garsą. Analizuokite jo spektrą. Pabandykite sintezuoti garsą, kuris jį imituoja. Tūkstančio garsų kelionė prasideda nuo vienos kodo eilutės.