» »

Programiranje - prepoznavanje tonov

Programiranje - prepoznavanje tonov

Grizzly ::

Ker ne vem, kam bi to vprašanje sploh uvrstil, ga dam kar v to temo. Če se kdo spozna na glasbo in programiranje, mi lahko pomaga rešiti uganko - prepoznavanje glasbenih tonov. Vse skupaj sem si zamislil tako: Na računalnik bi priklopil mikrofon in zagnal program (tega bi rad izdelal) za prepoznavo glasbenih intervalov in akordov, ki bi jih zaigral na klavir. Če bi na primer zaigral tone C-E, bi program ta interval prepoznal in izpisal za kateri interval gre. Če bi na primer zaigral tone C-E-G, bi program ta akord prepoznal izpisal za kateri akord gre.
Da se sprogramirati razne guitar tunerje, ki znajo določiti frekvenco tona, vendar to ne pride v poštev, ker program pričakuje le EN SAM ton (ena tipka na klavirju). Edina možnost, ki mi pade na pamet je, da se izdela baza intervalov in akordov v obliki mp3/wav posnetkov, program pa bi potem moral ugotoviti s katerim se najbolj ujema zvok, ki je zajet preko mikrofona... kako bi se tega lotil, nimam ideje. Dejansko je princip podoben kot pri prepoznavi govora (speech recognition), le da imam namesto govora opravka z glasbo. Ne vem, če se kaj takega sploh da sprogramirati (ker se za tem skriva veliko glasbenega posluha), je pa vsaka ideja dobrodošla.

bluefish ::

Matek ::

Imaš dejansko namen za vnos uporabljati klaviaturo? Če to ni bil samo primer, si lahko omisliš kako ultra poceni MIDI klaviaturo in bo tvoj program naenkrat zelo trivialen.
Bolje ispasti glup nego iz aviona.

Grizzly ::

To s klavirjem je le začetek. V kolikor bi mi to uspelo, bi program nadgradil za ostale inštrumente: klavir --> klavirska harmonika, mogoče kitara itd. Tudi na MIDI klaviaturo sem pomislil, ampak če za primer vzamem kitarista, ni nujno, da te akorde zna zaigrati tudi na klaviaturo. Zato bi bila rešitev preko mikrofona najboljša/najučinkovitejša, saj se spremeni samo zvok - glede na inštrument.

ginekk ::

Že vse obstaja - recimo tisti zgoraj omenjen projekt je dober začetek, razen če hočeš v namen lastne možganske telovadbe narest. Imaš tudi mobilne appe, bolje kot za PC računalo, ker je mic že vgrajen.

Čisti toni za določeno uglasitev imajo znane frekvence in potem intervale lahko dobiš matematično. Upoštevat moraš toleranco netočne uglasitve, klavir in kitara zaradi dizajna recimo ne moreta bit idealno uglašena. Violina je lahko, ker primeš kjerkoli.

Najprej pretvori signal (že po A/D) v frekvenčni prostor (Fourierjeva transformacija) potem pa gledaš kakšne frevence so notri in njih razmerja.
Pa mal boš moral naštudirat specifiko inštrumentov, ker se razlikujejo glede na pojavnost in jakost posameznih harmonikov.

MrStein ::

No tako preprosto spet ni. To so delujoči izdelek naredili komaj pred nekaj leti (OK, 10 leti, glej: Melodyne).
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

ginekk ::

MrStein je izjavil:

No tako preprosto spet ni. To so delujoči izdelek naredili komaj pred nekaj leti (OK, 10 leti, glej: Melodyne).


Saj, zdaj jih pa preveč, da bi odkrival toplo vodo. Naredi en search v mobile app store ("chord recognition"), pa jih najdeš kar nekaj.

Grizzly ::

Kakšne mobilne aplikacije mi ne pridejo v poštev zaradi drugih omejitev. Dejansko pa je prepoznavanje tonov le prvi od 10 korakov do celotnega projekta, vendar če rešim prvi korak (najtežji), potem drugi niso problem. Nisem še preverjal kakšnih obstoječih rešitev - to pride danes na vrsto. Dodaten izziv je, kako ločiti med toni, intervali in akordi??? Predvidevam, da če uporabim chord recognition in zaigram C-ton, mi bo algoritem vrnil C-akord... tega recimo ne bi rad, ker me potem čakajo ročni popravki.

XLapse ::

Grizzly , take programe ponavadi delajo ekipe.. Ti maš pa res visoke cilje da boš sam to vse naredil. In vse to kar omenjaš, je že nekdo drugi naredil - Ali ti je samo izziv ?

Težko boš ločil med akordi in posameznimi notami... To je podobno koda bi hotel iz komada povleč ven samo bobne, brez kitare, a audio file pa je oboje skupaj, kajneda? - Želim ti veliko uspeha pri projektu.
alien technology

Zgodovina sprememb…

  • spremenilo: XLapse ()

Grizzly ::

XLapse je izjavil:

Grizzly , take programe ponavadi delajo ekipe.. Ti maš pa res visoke cilje da boš sam to vse naredil. In vse to kar omenjaš, je že nekdo drugi naredil - Ali ti je samo izziv ?

Težko boš ločil med akordi in posameznimi notami... To je podobno koda bi hotel iz komada povleč ven samo bobne, brez kitare, a audio file pa je oboje skupaj, kajneda? - Želim ti veliko uspeha pri projektu.


Ne vem, kako obsežen algoritem je to vse skupaj, zato pa sprašujem tukaj. Mislil sem, da je vse skupaj bolj enostavno. Ja, vem, da obstajajo orodja, ki "poslušajo" na nekem channelu (wave, mic, aux in) in ti podajo akorde, frekvence, tonaliteto itd. Ne pomaga mi, če ima takšne funkcije audacity (ali katerikoli urejevalnik zvoka), saj bi jaz podatke potreboval v svojem programu (za nadaljnjo obdelavo). Bi mi pa pomagalo, če obstaja kakšen programček spisan v pythonu, javi, C/C++ ali C# (console app ali winform app), ki bi tekel vzporedno z mojim programom in bi te podatke sproti shranjeval v datoteko. Potem bi jaz lahko z neko zakasnitvijo bral iz te datoteke in prišel do podatkov, ki jih potrebujem v programu.

Alternativa (če je prva ideja pretežka ali nemogoča za realizacijo) je priklop zunanje MIDI klaviature. Ja, lahko pridem do istega rezultata, vendar z omejitvami: potrebno je znanje klaviatur in potrebno je imeti takšno klaviaturo. To posledično zmanjša ciljno publiko, zato sem najprej preveril za končnega uporabnika najlažjo rešitev.

MrStein ::

audacity je open source, tako da lahko komot "izrežeš" del kode, ki te zanima.
Motiti se je človeško.
Motiti se pogosto je neumno.
Vztrajati pri zmoti je... oh, pozdravljen!

Mavrik ::

Grizzly je izjavil:

Kakšne mobilne aplikacije mi ne pridejo v poštev zaradi drugih omejitev. Dejansko pa je prepoznavanje tonov le prvi od 10 korakov do celotnega projekta, vendar če rešim prvi korak (najtežji), potem drugi niso problem. Nisem še preverjal kakšnih obstoječih rešitev - to pride danes na vrsto. Dodaten izziv je, kako ločiti med toni, intervali in akordi??? Predvidevam, da če uporabim chord recognition in zaigram C-ton, mi bo algoritem vrnil C-akord... tega recimo ne bi rad, ker me potem čakajo ročni popravki.


Daj pošlji kak ZS sandmat-u, ki je počel točno to :)
The truth is rarely pure and never simple.

ginekk ::

Grizzly je izjavil:

Dodaten izziv je, kako ločiti med toni, intervali in akordi???


Akordi so hkratni odigrani toni. Nekje boš postavil mejo - kako hitro je lahko odigrano zaporedje tonov, da je še akord ali pa je gremo samo za arpegio. In frekvenčno okno je časovno pomično seveda. Ne gledaš v frekvenčni prostor za čas cele skladbe ampak samo za izbrano kratko okno (recimo 10ms). Če boš recimo odčital tone v teh 10ms boš rekel da je akord, če padejo izven okna, so intervali. Mejo postaviš glede na to kaj je fizično mogoče za človeka. Recimo da tehnično vrhunski kitarist lahko še odigra šestnajstinke pri 240bpm v 4/4 tempu, to je 16 not na sekundo, to je vsakih 62.6ms ena.

Grizzly je izjavil:


Predvidevam, da če uporabim chord recognition in zaigram C-ton, mi bo algoritem vrnil C-akord... tega recimo ne bi rad, ker me potem čakajo ročni popravki.


Zakaj bi ti vrnil C-Akord? C dur recimo, vsebuje še tona E in G, ki imata drugačno osnovo in harmonike kot zgolj ton C, razliko bi moral videt iz frekvenčnega signala.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
!

Naučimo se igrati kitaro (strani: 1 2 3 413 14 15 16 )

Oddelek: Sedem umetnosti
763511782 (80459) c3p0
»

Klavir - Lestvice in akordi

Oddelek: Loža
143370 (2999) sandmat
»

guitar hero/rock band/band hero???

Oddelek: Konzole
71043 (952) St235
»

Klaviature in oktave??

Oddelek: Sedem umetnosti
104444 (4313) Spajky
»

note

Oddelek: Sedem umetnosti
97227 (7160) drevo

Več podobnih tem