Benvenuto, Visitatore. Per favore, effettua il login o registrati.

  Hai perso la tua email di attivazione?

Main Home Help Ricerca Login Registrati

+  Virtual Sound - FORUM
|-+  Linguaggi per la Computer Music
| |-+  Max MSP Jitter
| | |-+  non realtime audio analisi
« precedente successivo »
Pagine: [1] 2 3 Stampa
Autore Topic: non realtime audio analisi  (Letto 3277 volte)
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« il: Marzo 02, 2006, 18:03:36 »

ecco quello che vorrei fare: dato un file audio usare jit.poke per scrivere in una matrice (sto parlando di oggetti di jitter) il segnale sottoforma di valori d amplitude per poi analizzarla, per esempio la posizione in ms degli attacks o dei picchi; il tutto non in real-time cioè a velocità moltiplicata..
maurizio hai mai fatto niente del genere..
Loggato
mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #1 il: Marzo 02, 2006, 21:50:56 »

Ahimé no...
ma toglimi una curiosità, hai un motivo particolare usare jit.poke~? A occhio mi sembra che sia sufficiente poke~.
Probabilmente ti servirà average~ per ricavare l'inviluppo e poi ti toccherà trovare un modo per calcolare la pendenza dei punti culminanti (per decidere se hai un attacco percussivo o un lento crescendo), etc...
buona fortuna!  Occhiolino

m

Loggato

Maurizio Giri Home Page: http://www.giri.it
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #2 il: Marzo 02, 2006, 22:21:57 »

si hai ragione poke~ è sufficente!..questa è un idea  leafcutter john..via mail mi ha detto che lo usa gia questo metodo..che invidia! Occhiolino
Loggato
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #3 il: Marzo 02, 2006, 23:12:48 »

io avrei un idea piuttosto grossolana: usare peek per leggere i valori in un buffer a intevalli (abbastanza piccoli) e facendo la differenza tra i valori vedere dove c'è un incremento veloce del valore..se  la differenza è grande di un certo valore (che determinerebbe una specie di sensibilità dell'analisi..) ci sono buone probabilità che in quell'intervallo ci sia un attacco..
spero di essermi spiegato..
Loggato
mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #4 il: Marzo 02, 2006, 23:26:28 »

Sì, la procedura dovrebbe essere più o meno questa...
Quando ho un po' di tempo magari ci penso (se nel frattempo non hai trovato un buon metodo tu, nel qual caso rendici partecipi! Sorriso )
Loggato

Maurizio Giri Home Page: http://www.giri.it
franz
AAA1
Hero Member
*
Posts: 829


Guarda Profilo WWW
« Risposta #5 il: Marzo 03, 2006, 13:33:16 »

perchè non utilizzare semplicemente un envelope follower come quelli della libreria di Trond Lossius o negli esempi di Java in max? Chiaro che dovrai lavorare in real-time ma nessuno ti impedisce appunto di registrare un buffer~ o un poke~ e riutilizzarlo in tempo differito e leggerlo come e quando vuoi tu.  Linguaccia
Loggato

mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #6 il: Marzo 03, 2006, 14:14:18 »

si si hai ragione in realtime non è una cosa difficile, anzi ..però riuscire a farlo in non-realtime è diverso Grossa risata Grossa risata!..cioè è una mera questione un po da fanatici lo so!..riuscire a scrivere un algoritmo decente che faccia un detect di quel tipo offline (che poi non è altro che un beatslicing) sarebbe anche una bella soddisfazione Grossa risata
Loggato
franz
AAA1
Hero Member
*
Posts: 829


Guarda Profilo WWW
« Risposta #7 il: Marzo 03, 2006, 14:58:13 »

si ma voglio dire...invece di sbatterti così tanto registri in un buffer~ tramite poke~ oppure utilizzi peek~ una porzione di segnale audio in RMS // sqrt(segnale*segnale) // e poi la fai suonare direttamente alla velocità che vuoi tu tramite un oggetto wave~, il "detecting" dei picchi degli attacchi e tutto il resto a questo punto viene da se...però si riduce all'utilizzo di un loop come envelope-follower...
Se poi vuoi fare una specie di beatslicing ti fai un calcolo dei ms suddivisi in parti uguali e li fai suonare come e quando vuoi:)
In questo modo però tutto il senso di usare un envelope follower va a farsi benedire e forse non è questo il tuo scopo di utilizo a questo punto Wow
Loggato

mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #8 il: Marzo 03, 2006, 15:49:16 »

..beh dunque, il beat-slicing che dici è come quello che si può fare con patches come modsquad e simili..a me interessava uno slicing che tenesse conto degli attacchi..lo so che per questo esiste già recycle, ma mi interessava capire come poter fare una cosa simile in max, tutto qua..comunque penso che per ora farò qualcosa che usi un metodo velocizzato di peak-following
Loggato
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #9 il: Marzo 03, 2006, 16:50:54 »

ecco quà signori, questa è una patch fatta in fretta, sicuramente con dei difetti, che effettua in realtime (più o meno velocizzato) il detect degli attacchi...a me sembra confermare tutte le perplessità che avevo sul realtime..


max v2;
#N vpatcher 74 44 767 745;
#P origin 0 -5;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P hidden newex 203 99 68 196617 prepend open;
#P hidden newex 510 138 81 196617 prepend replace;
#P toggle 18 36 15 0;
#P button 367 230 32 0;
#P hidden message 566 229 51 196617 set boo 1;
#P hidden newex 527 198 62 196617 buffer~ boo;
#P user waveform~ 279 265 368 138 3 9;
#W mode select;
#W mouseoutput continuous;
#W unit ms;
#W grid 4040.;
#W ticks 0;
#W labels 0;
#W vlabels 0;
#W vticks 0;
#W bpm 120. 4.;
#W frgb 33 0 0;
#W brgb 255 255 255;
#W rgb2 0 95 255;
#W rgb3 0 0 0;
#W rgb4 0 0 0;
#W rgb5 190 137 255;
#W rgb6 0 0 0;
#W rgb7 100 100 100;
#N counter;
#X flags 0 0;
#P newobj 182 298 66 196617 counter;
#P message 17 546 33 196617 clear;
#P number 238 272 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#N coll ;
#P newobj 56 569 53 196617 coll;
#P newex 56 544 51 196617 pack 1 1.;
#P message 55 495 14 196617 0;
#P newex 18 67 40 196617 t i b b;
#N counter;
#X flags 0 0;
#P newobj 56 517 66 196617 counter;
#P flonum 103 25 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P message 103 43 48 196617 speed \$1;
#P newex 124 517 27 196617 f;
#P flonum 259 151 73 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P user number~ 167 120 269 135 9 3 3 2 0. 0. 0 0. 20 0. 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 69 474 30 196617 t b b;
#P newex 164 192 65 196617 loadmess -4;
#P user multiSlider 3 403 12 82 -1. 1. 1 2681 15 0 0 2 0 0 0;
#M frgb 0 0 0;
#M brgb 255 255 255;
#M rgb2 127 127 127;
#M rgb3 0 0 0;
#M rgb4 37 52 91;
#M rgb5 74 105 182;
#M rgb6 112 158 18;
#M rgb7 149 211 110;
#M rgb8 187 9 201;
#M rgb9 224 62 37;
#M rgb10 7 114 128;
#P window linecount 2;
#P newex 3 365 51 196617 peakamp~ 10;
#P user ezdac~ 255 25 299 58 0;
#P button 69 456 15 0;
#P window linecount 1;
#P newex 69 381 35 196617 edge~;
#P newex 69 358 32 196617 >~ 0.;
#P newex 69 336 35 196617 !-~ 1.;
#P newex 69 313 33 196617 /~ 1.;
#P flonum 164 226 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P flonum 111 169 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 69 274 85 196617 maximum~ -120.;
#P newex 69 147 39 196617 atodb~;
#P newex 69 114 30 196617 abs~;
#N sfplay~  1 60000 2 ;
#P newobj 69 67 95 196617 sfplay~ 1 60000 2;
#B color 5;
#P newex 69 222 65 196617 minimum~ 0.;
#P newex 69 182 33 196617 +~ 0.;
#P comment 109 188 29 196617 gain;
#P user dropfile 278 190 367 263 0;
#P comment 282 195 77 196617 drop a file here;
#P comment 34 38 49 196617 play once;
#P user panel 280 190 84 74;
#X brgb 191 191 191;
#X frgb 0 0 0;
#X border 1;
#X rounded 0;
#X shadow 0;
#X done;
#P window linecount 5;
#P comment 55 590 115 196617 apri la coll per vedere la posizione in ms degli attacchi... non funziona proprio un granche bene;
#P window linecount 4;
#P comment 400 212 100 196617 cliccando il puntatore dovrebbe avanzare di attacco in attacco;
#P window linecount 2;
#P comment 199 226 54 196617 aggiusta la sensibilità;
#P comment 152 32 87 196617 prova con diverse velocità..;
#P fasten 18 0 23 0 74 355 8 355;
#P connect 23 0 24 0;
#P fasten 33 2 38 0 53 541 22 541;
#P connect 44 0 33 0;
#P fasten 33 1 34 0 38 490 60 490;
#P connect 26 0 32 0;
#P connect 32 0 35 0;
#P fasten 39 0 36 0 187 564 61 564;
#P connect 38 0 36 0;
#P connect 35 0 36 0;
#P hidden connect 46 0 11 0;
#P connect 33 0 11 0;
#P connect 30 0 11 0;
#P connect 11 0 12 0;
#P connect 12 0 13 0;
#P connect 13 0 9 0;
#P connect 9 0 10 0;
#P connect 10 0 14 0;
#P connect 14 0 17 0;
#P connect 17 0 18 0;
#P connect 18 0 19 0;
#P connect 19 0 20 0;
#P connect 20 0 21 0;
#P connect 21 0 26 0;
#P connect 34 0 32 2;
#P connect 15 0 9 1;
#P fasten 16 0 17 1 169 306 97 306;
#P connect 29 0 35 1;
#P connect 31 0 30 0;
#P connect 26 1 29 0;
#P fasten 28 0 29 1 264 513 146 513;
#P fasten 16 0 14 1 169 267 149 267;
#P connect 25 0 16 0;
#P connect 11 1 27 0;
#P fasten 43 0 39 0 372 264 187 264;
#P hidden connect 7 0 46 0;
#P fasten 32 0 37 0 61 539 243 539;
#P connect 37 0 39 4;
#P hidden fasten 11 0 22 0 74 93 260 93;
#P connect 27 1 28 0;
#P hidden fasten 42 0 40 0 571 264 284 264;
#P hidden connect 36 0 40 2;
#P hidden connect 7 0 45 0;
#P hidden connect 45 0 41 0;
#P hidden connect 36 0 40 3;
#P hidden connect 41 1 42 0;
#P pop;
Loggato
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #10 il: Marzo 03, 2006, 16:55:10 »

insomma non funziona proprio bene! Triste..mi date una mano..
Loggato
mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #11 il: Marzo 03, 2006, 18:11:56 »

Mi sembra che la prima cosa da fare sia un envelope follower, e usare quello per il detect degli attacchi.
Ho fatto un piccolo e.f. non-realtime, che lavora con i normali messaggi max (non c'è quindi bisogno di impostare l'opzione "nonreal time" nella finestra dsp status), e va più veloce del tempo reale (anche se non moltissimo). Ecco la patch che estrae l'inviluppo, prova a giocarci un po'...

prima salva questo come vs.onepole (senza tilde)

#P outlet 106 224 15 0;
#P inlet 125 29 15 0;
#P inlet 40 28 15 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 125 73 64 196617 unpack 0. 0.;
#P newex 167 138 29 196617 * 0.;
#P newex 106 171 71 196617 expr $f1-$f2;
#P newex 106 129 29 196617 * 0.;
#P connect 3 1 2 1;
#P connect 2 0 1 1;
#P connect 1 0 6 0;
#P fasten 1 0 2 0 111 201 214 201 214 130 172 130;
#P connect 3 0 0 1;
#P connect 5 0 3 0;
#P connect 0 0 1 0;
#P connect 4 0 0 0;
#P window clipboard copycount 7;


e questa è la main patch:

#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 299 286 49 196617 s coeffic;
#P newex 299 259 54 196617 pack 0. 0.;
#P message 837 90 14 196617 1;
#P newex 519 74 66 196617 r loadbanged;
#P newex 635 63 66 196617 s loadbanged;
#P newex 635 36 48 196617 loadbang;
#P message 519 100 40 196617 44100;
#P window setfont "Sans Serif" 14.;
#P comment 770 123 32 196622 5);
#P window setfont "Sans Serif" 9.;
#P comment 807 123 176 196617 usa l'inviluppo con un oscillatore;
#P comment 257 56 248 196617 imposta una frequenza per envfollow 10/20 Hz;
#P window setfont "Sans Serif" 14.;
#P comment 256 73 32 196622 3);
#P comment 606 98 32 196622 4);
#P window setfont "Sans Serif" 9.;
#P newex 837 68 66 196617 r loadbanged;
#P comment 7 416 78 196617 buffer analisi;
#P window setfont "Sans Serif" 14.;
#P comment 17 114 32 196622 2);
#P window setfont "Sans Serif" 9.;
#P newex 874 294 61 196617 cycle~ 440;
#P newex 857 316 27 196617 *~;
#P comment 363 77 100 196617 Hz.;
#P window linecount 2;
#P comment 308 101 205 196617 si suppone una frequenza di campionamento di 44100 \, eventualmente cambiare;
#P flonum 299 187 63 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P window linecount 1;
#P comment 327 208 19 196617 a0;
#P comment 405 208 17 196617 b1;
#P newex 299 133 212 196617 expr sin (2. * 3.141594 * $f1 * (1. / $f2));
#P flonum 377 187 63 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 377 164 27 196617 - 1.;
#P flonum 299 75 63 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 748 328 49 196617 r coeffic;
#N vpreset 1;
#X append 1 2 25 344 857 gain~ list 111 10. \; 34 394 720 flonum float 4. \; 39 75 299 flonum float 10. \; 41 187 377 flonum float -0.998575 \; 45 187 299 flonum float 0.001425 \;;
#P preset 837 172 47 27;
#P newex 86 319 66 196617 r loadbanged;
#P newex 701 328 37 196617 abs 0.;
#P flonum 720 394 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P newex 701 420 29 196617 * 2.;
#P toggle 838 208 15 0;
#P newex 838 231 29 196617 sig~;
#P message 899 223 43 196617 loop \$1;
#P newex 857 273 83 196617 groove~ filtrato;
#P message 784 464 27 196617 stop;
#P message 784 447 67 196617 startwindow;
#P newex 857 464 29 196617 dac~;
#P user gain~ 857 344 21 89 158 0 1.071519 7.94321 10.;
#P button 604 141 39 0;
#P newex 662 254 27 196617 t i i;
#P newex 662 222 27 196617 - 1;
#P newex 662 106 61 196617 r lunghezza;
#P newex 198 216 61 196617 s lunghezza;
#P newex 632 198 40 196617 uzi;
#P newex 142 188 66 196617 mstosamps~;
#P button 60 131 15 0;
#P newex 663 445 72 196617 peek~ filtrato;
#P message 61 190 43 196617 size \$1;
#P newex 61 215 80 196617 buffer~ filtrato;
#P newex 60 156 105 196617 info~ joe;
#P newex 701 359 57 196617 vs.onepole;
#P newex 701 296 53 196617 peek~ joe;
#P message 86 350 69 196617 set filtrato 1;
#P user waveform~ 86 382 277 113 3 9;
#W mode select;
#W mouseoutput continuous;
#W unit ms;
#W grid 1000.;
#W ticks 0;
#W labels 1;
#W vlabels 0;
#W vticks 1;
#W bpm 120. 4.;
#W frgb 33 0 0;
#W brgb 60 178 173;
#W rgb2 0 95 255;
#W rgb3 0 0 0;
#W rgb4 0 0 0;
#W rgb5 190 137 255;
#W rgb6 100 100 100;
#W rgb7 100 100 100;
#P message 76 56 43 196617 replace;
#P newex 76 80 61 196617 buffer~ joe;
#P comment 78 35 100 196617 metti loop batteria;
#P comment 54 114 176 196617 cambia dimensione buffer analisi;
#P comment 601 123 46 196617 filtra!;
#P window linecount 2;
#P comment 607 325 99 196617 reso unipolare per envelope follower;
#P window linecount 1;
#P comment 183 363 45 196617 picchi;
#P window setfont "Sans Serif" 14.;
#P comment 40 32 32 196622 1);
#P window setfont "Sans Serif" 9.;
#P window linecount 2;
#P comment 739 414 59 196617 RISCALA INVILUPPO;
#P connect 17 0 13 0;
#P connect 13 6 15 0;
#P connect 15 0 14 0;
#P connect 8 0 7 0;
#P connect 36 0 10 0;
#P connect 10 0 9 0;
#P connect 13 6 18 0;
#P connect 18 1 20 0;
#P connect 39 0 42 0;
#P connect 42 0 45 0;
#P connect 45 0 63 0;
#P connect 63 0 64 0;
#P connect 41 0 63 1;
#P fasten 42 0 40 0 304 158 382 158;
#P connect 40 0 41 0;
#P connect 58 0 42 1;
#P connect 61 0 58 0;
#P connect 24 0 19 0;
#P connect 59 0 60 0;
#P connect 21 0 19 1;
#P connect 19 2 22 0;
#P connect 22 0 23 0;
#P connect 23 0 16 0;
#P connect 33 0 16 1;
#P connect 23 1 11 0;
#P connect 11 0 35 0;
#P connect 35 0 12 0;
#P connect 12 0 33 0;
#P connect 34 0 33 1;
#P connect 38 0 12 1;
#P connect 52 0 62 0;
#P connect 62 0 37 0;
#P connect 37 2 32 0;
#P connect 32 0 31 0;
#P connect 30 0 29 0;
#P connect 31 0 29 0;
#P connect 29 0 48 0;
#P connect 48 0 25 0;
#P connect 25 0 26 0;
#P connect 28 0 26 0;
#P connect 27 0 26 0;
#P connect 49 0 48 1;
#P connect 25 0 26 1;
#P fasten 62 0 30 0 842 154 904 154;
#P window clipboard copycount 65;
« Ultima modifica: Marzo 03, 2006, 18:23:24 da mauriziogiri » Loggato

Maurizio Giri Home Page: http://www.giri.it
lorbi
Full Member
***
Posts: 211


Guarda Profilo
« Risposta #12 il: Marzo 03, 2006, 19:09:14 »

ora provero' i vostri patch ma intanto vi dico le mie esperienze

io ho effettuato un peak detektor col peek e il poke..che ricerchero' e postero' volentieri, pero'...l'attacco, ahimè non è solo questione di volume.

in un suono percussivo quello da riuscire a detectare é la parte enarmonica dello spettro.
Recycle, questo lo fa benissimo.

ho un amico che ha realizzato con gli oggetti Jit'poke e compagnia un detector molto piu' interessante.
il bello di stoccare tutto in una matrice a due dimensioni è il fatto che poi pupoi facilmente effettuare delle operazioni..che in un buffer...sono difficili

si chiama JeanFraçois Charles lo trovi sulla lista max.

comunque..il motore da cui puoi partire è il motore dell'esempio dell'FFT con Jitter negli esempi audio di jitter.

besos

lorbi
Loggato
mic
Sr. Member
****
Posts: 401


Guarda Profilo
« Risposta #13 il: Marzo 03, 2006, 19:50:53 »

bella lorbi spero di poter dare un'occhiata presto alla tua patch allora!
Loggato
mauriziogiri
Amministratore
Sr. Member
*****
Posts: 348


Guarda Profilo WWW
« Risposta #14 il: Marzo 04, 2006, 12:30:53 »

lorbi, molto interessante quello che dici. Queste patch del tuo amico JeanFraçois si trovano da qualche parte? Su maxobjects.com non le ho trovate.

m
Loggato

Maurizio Giri Home Page: http://www.giri.it
Pagine: [1] 2 3 Stampa 
« precedente successivo »
Salta a:  


Login con username, password e lunghezza della sessione

Powered by MySQL Powered by PHP © Copyright 1996 - 2008 - ConTempoNet Edizioni Musicali ® - P.IVA: 05174251008
Tutti i diritti riservati - Tutti i marchi sono registrati -
È vietata la riproduzione, anche parziale, dei testi e delle immagini.
Powered by SMF 1.1.5 | SMF © 2006-2008, Simple Machines LLC
Traduzione Italiana a cura di SMItalia
XHTML 1.0 Valido! CSS Valido!