lettore di note musicale, prova

« Older   Newer »
  Share  
view post Posted on 29/7/2012, 18:53
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Ciao a tutti, è da un po' che manco, ma più o meno sono sempre all' "opera" :sick:

Un po' di tempo fa, ho parlato con un mio amico liutaio, è mi è venuto in mente di provare a fare un dispositivo che riuscisse
a leggere il suono e identificare la nota corrispettiva.

Non so, l'idea, sarebbe quella di far tintinnare un bicchiere di cristallo, e fargli determinare che nota emette.
Per prima cosa, mi sono procurato un diapason, che emette una nota perfetta a 440 hz spaccati, quindi un LA in quarta ottava.

Ho recuperato una capsula microfonica preamplifaicata, montato un paio di operazionali per amplificare il tutto e un terzo operazionale come comparatore.
L'amplificazione totale è molto alta: il primo stadio a 48 volte, mentre il secondo 15, per un totale di 48*15= 720 volte.
Il segnale viene squadrato ovviamente, perchè l'amplificazione è troppo e elevata in rapporto all'alimentazione, solo 5 volts (per non complicarmi la vita
con l'entrata del pic)

ho dovuto fare 2 stadi con gli operazionali, perchè amplificando di 720 volte in una botta sola, avrei ridotto parecchio la banda passante
considerando poi che gli lm358, sono scarsi.
Avevo anche dei tl081 o tl082 molto migliori in termini di slew rate ecc, ma necessitano una tensione duale...insomma l'lm358, fa il suo dovere.
lo stadio comparatore, è usato come trigger, ma è ancora in fase di studio, non capisco bene se serve o meno.

Il problema è che quando vado ad osservare la forma d'onda di certe note, vedo che le creste "fluttuano" verso il basso...un po' difficile da spiegare adesso e il trigger aiuterebbe.
Le porte del pic, sono già triggerate, ma io avrei bisogno una soglia diversa di quella di TTl, da qui l'idea di un comparatore...

Comunque, una volta fatto l'hardware esterno, ho steso il programma, abilitato la periferica per il conteggio degli impulsi, mi sono fatto una finestra temporale di 1 secondo
e ho provato.
I pin del pic adibiti ad input sono 2: uno entra nel modulo di conteggio, mentre l'altro aspetta il segnale, se non arriva nulla, la periferica non parte con il conteggio
in definitiva è :

il pin A è alto? si: parti col conteggio. No? aspetta che arrivi, nle frattempo non fare nulla.
Logicamente, come avrete capito è un polling, ma mi va bene così, senza scomodare gli interrupt.

Per ora nel programma, ho messo solo 3 ottave: la quarta, la quinta e la sesta. Quelle inferiori sono ancora d'aggiungere.
L'idea, come avrete capito, non è altro che un frequenzimetro, che al valore memorizzato, compara valori che io ho messo.
Se l'esito soddisfa determinati requisiti, la nota viene stampata a lcd.

Per fare questo, bastano delle banali sottrazioni e test sul bit C (di riporto) nel registro status
Es
frequenza entrante 540 hz

sapendo (mi sono documentato)
che il Do 4 ottava va da 523 a 554 hz
DO# 4 ottava 554 a 586

il pic legge la frequenza appunto 540 e inizia a comparare
540-523 va in negativo? no
540-554 va in negativo? si, allora non può essere ed è per forza un DO 4 ottava

e cos' via.....
Ho provato a far funzionare tutto e va abbastanza bene, riconosce le note del flauto che uso come prova.
A volte però, se non si soffia bene, la nota non viene riconosciuta in modo corretto, mi sto tirando pazzo, non riesco a capire
se c'è qualcosa che non va, oppure il flauto fa schifo.
Una prova che vorrei fare, è montare un ne555 più una piccola cassa, variare la frequenza con un trimmer, leggere con un frequenzimetro
e vedere se la nota viene restituita in modo esatto.

Comunque per il momento, mi ritengo abbastanza soddisfatto. Allego la bozza del software, per chi fosse interessato....

Download attachment
NOTE.txt ( Number of downloads: 52 )

 
Top
view post Posted on 30/7/2012, 08:34
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Io per accordare i pianoforti usavo un frequenzimetro ed una carta delle frequenze delle note. Però ogni nota ha una sua frequenza ben precisa, se fai un errore di 30 hz sul do a 523Hz lo senti eccome. Però aggiungendo un freccetta in su o in giù a seconda se la nota è calante o ascendente con un led verde che ti dice quando è OK potresti venderlo come accordatore. :)
 
Web  Top
view post Posted on 30/7/2012, 17:02
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


Si....magari arrotondo un po'....considerando gli stipendioni che porto a casa ultimamente :lol:

No, scherzi a parte errori di 30 Hz, non ne ho, col diapason, come dicevo sopra,all'lcd, leggo sempre 440 hz, non uno più, non uno meno. Logicamente, lo devi tenere un po' vicino, considerando
il basso volume (se si può dire così) che fornisce.
Per il discorso della nota calante, o ascendente, mi prendi un po' alla sprovvista: io ho fatto le varie scale e stampa DO , DO# tutto bello preciso, o almeno spero.
L'unica cosa, è che la tabella da me trovata, include anche i decimali per le note es:il Do quarta ottava è 523.04 Hz, io ho arrotondato per problemi tecnici: sarebbe un casino
mostruoso fare una risoluzione di un centesimo di hertz, anche usando il C con numeri float....
Il modulo non mi conta porzioni di hertz, dovrei aumentare il tempo presumo.

Comunque, i problemi più grossi, sono sempre quelli legati all'hardware esterno....oltretutto usando un alimentatore switch da pc non è il massimo. Con una pila già è molto meglio.
Ora voglio provare a montare il 555 e vedere se legge giusto, col flauto (quelli economici poi, da scuola media) rischio di non capirci più nulla!!!
 
Top
thermidor
view post Posted on 30/7/2012, 21:16




Ciao Gila.
Ma di fronte a una forma d' onda come questa come si comporta il tuo dispositivo.
Questa è la forma d' onda campionata di un pianoforte
gilap
By fleuril at 2012-07-30
Cioè come noterai gli attraversamenti dello 0 sono tanti.
 
Top
view post Posted on 31/7/2012, 09:43
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


Bella domanda... :unsure:
 
Web  Top
view post Posted on 31/7/2012, 18:37
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


In effetti Thermidor, questo è un po' il problema. Il fatto dell'attraversamento per lo zero, non rappresenta un problema.
Calcola che gli lm358 ad alimentazione singola partono da zero fino al valore di alimentazione o quasi.
Nel mio caso, il segnale, viene quasi squadrato. il secondo operazionale, servirebbe proprio a questo: se noti, nel tuo grafico,
hai dei picchi, quelli molto probabilmente determinano la frequenza della nota, mentre tutto il resto ne danno il timbro, differente
da strumento a strumento.
supponiamo che poco sotto al massimimo picco si abbia un valore di 4.5 volts, se io taro il comparatore ad andare a livello logico 1
solo quando questa tensione è superata, al pic, tutto quello che c'è di mezzo, verrà ignorato, contando solo la frequenza.
All'oscilloscopio, anche col mio flauto ho note con forme d'onda un po' strane, ma (a volte, è vero, le sbaglia), più o meno ci siamo.
Avrei potuto usare solo la porta d'ingresso del pic, come trigger, ma essendo una porta ttl, mi considera zero logico fino a 2 volts da 2 a 3 situazione incerta, da 3 a 5 1 logico (non sono sicuro sui dati, non ricordo bene i valori logici TTL). Comunque, non andrebbe bene al mio scopo,
da qui il comparatore dopo l'amplificatore.
Mi domando tra l'altro, se non sia necessario anche un CAG (controllo automatico del guadagno) per l'amplificatore, ma credo di no.
Comunque, devo dire, che se si controlla all'oscilloscopio la forma d'onda, solo per capire se si sta soffiando in modo deciso...o magari tremoliamo...la lettura in 4,5,6 ottava, è abbastanza corretta.
Vorrei provare davvero col piano forte, e vedere un po'. Usando bicchieri di cristallo, e cercando di colpirli più o meno sempre con la stessa forza, il risultato, si discosta sempre di poco.

Comunque, chi fosse in possesso di un 16f877a, un lcd...può provare a "buttarci" dentro il software che ho messo...per l'hardware, posso
descrivere componenete per componente...per il momento sono contento, logico non è nelle mie pretese, concludere tutto in una settimana :)

 
Top
thermidor
view post Posted on 31/7/2012, 21:06




Beh no dai Gila, ho messo questo campionamento anche per fare un po' di polemica scherzosa.
Però devo dire che nella risposta non hai sbagliato per nulla.
Diciamo subito che è scorretto porre la domanda come ho fatto io, per un motivo molto semplice, quando premi il tasto di un pianoforte percuoti tre corde a 3 ottave diverse, ma che non saranno mai perfettamente accordate tra di loro, da qui il segnale particolarmente complesso.
Infatti gli accordatori mettono dei blocchi a due delle tre corde, e ne accordano una per volta (poi in realtà sono bravissimi e spesso se ne fregano).
Comunque avevi già centrato il problema, isolare i picchi più alti.
Usare un compressore o CAG, temo ti possa introdurre ulteriori problemi, dato che tenderebbe a snaturare la tua forma d' onda, meglio una regolazione della soglia del trigger, e forse, ma non ne sono certo, una media dei valori misurati.
Una ultima cosa, invece dell' LM358, puoi provare il TLC6482 della National, è un vero rail-to-rail, quindi sfrutta tutta la dinamica.
Bel lavoro, scusa se ho cercato di fare un po' di disturbo, era solo per il piacere della conversazione.
 
Top
view post Posted on 1/8/2012, 17:02
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


CITAZIONE
Bel lavoro, scusa se ho cercato di fare un po' di disturbo, era solo per il piacere della conversazione.

Ma scherzi...?? Non mi stancherò mai di dire che sono solo un autodidatta, e che spesso arrivo a soluzioni, che hanno dei limiti, o magari fatte un po' alla buona.
Si, in effetti gli LM358, lasciano un po' a desidereare...ma per ora provo così. Anche la capsula microfonica credo non sia tra le più prestanti, chissà cosa c'è in giro,
magari ne esistono di super sensibili, e io nemmeno lo so.

Un altro problema, potrebbe essere dato dall'alimentazione: gli switch (oddio non ricordo come si scrive)....comunque, gli alimentatori da pc, non sono il massimo, intoducono dei disturbi,
una sorta di ripple...non so, forse sarebbe meglio farsi lo stadio d'alimentazione con un LM78xx , uno stabilizzatore...
Ancora, sempre sull'alimentazione, forse sarebbe meglio fare l'amplificatore alimentato a 12 V per avere un'escursione maggiore, poi il comparatore a 5 volts...ma così è un po' più difficile isolare i picchi.
Insomma, come al solito, sulla carta sembra fattibile tutto in un giorno....ma poi....

Per quanto riguarda il software invece, ci dovrei essere....il polling, non è figo ed elegante come l'interrupt, ma davvero, qui non serve, considerando che il micro fa solo quello,
tanto più che se metto tutte le ottave che ho in mente (dalla fondamentale della nota tipo LA 55hz, fino alla settima ottava), penso di arrivare al limite di memoria del pic...quindi fa solo quello
per forza....ma in fondo il mio progetto, deve fare solo quello!! :)

CITAZIONE
Bel lavoro, scusa se ho cercato di fare un po' di disturbo, era solo per il piacere della conversazione.

Grazie....e non dirlo nemmeno per scherzo....quale disturbo!!!

Ah...ultima cosa: nel grafico che hai messo, che nota è che indica? Se hai tempo e voglia, mi dici il tempo che intercorre tra le creste più alte?
Così vedo se mi tornano i calcoli
 
Top
thermidor
view post Posted on 1/8/2012, 21:00




Sai che non me lo ricordo? E' ricavato dal soundfont del general midi.
Facciamo il contrario, dimmi tu cosa misuri e poi io verifico.
Comunque io invece non sottovaluterei di lavorare in interrupt, purtroppo questo modo di impiegare i processori viene considerato una complicazione, al contrario non lo è affatto, va beh che io non sono esperto di processori e la mia opinione vale quello che vale.
 
Top
view post Posted on 2/8/2012, 08:54
Avatar

Immane Rompiball

Group:
Administrator
Posts:
18,287
Location:
Orlo esterno della cintura di Orione stella 1957

Status:


 
Web  Top
view post Posted on 2/8/2012, 17:23
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:


uhmmm....sapessi bene l'inglese! Va bhè, ci provo lo stesso.
Ma in che senso Thermidor? Come facciamo a fare il contrario, non so la scala dei tempi che intercorre tra una cresta e l'altra.

Purtroppo, ho scassato le casse del pc, altrimenti, avrei potuto scaricare un softwarino che genera suoni e provare...
Ora sono in ferie, quindi per 2 settimane, sono fermo, poi riprenderò.

Per il discorso degli interrupt,è vero, sono una grossa risorsa, ma nel mio caso, diverrebbe davvero tutto più complicato...senza benefici,
ecco il perchè: la temporizzazione di un secondo andrebbe fatta via interrupt, scomodando tmr1, tra l'altro, non basterebbero i 2
registri di tmr1, quindi dovrei farli andare in overflow più volte, per poi raggiungere 1 secondo.

Non dimentichiamo che 1 secondo per un micro è un'eternità.
quindi, solo per la finestra temporale, dovrei scomodare 1 interrupt più un modulo hardware (tmr1)
Poi, il segnale che mi arriva dall'hardware, l'ho diviso in 2: uno va a un pin adibito ad input, che rileva l'arrivo di bassa frequenza,
l'altro ramo del segnale, va al modulo t1con, che inizia a contare, solo quando il pin sopra citato va a 1.

Quindi, anche qui dovrei fare un interrupt, sul cambiamento di stato del pin "rilevatore Bf".
Ora, supponiamo appunto di avere due vettori di interrupt, allo scattare di uno di essi il programma va alla gestione interrupt; qui
ulteriore complicazione, perchè devo far capire al micro quale evento ha scatenato l'interrupt (andando a testare i vari flag relativi) ed
eseguire la porzione di codice richiesta.


Tutto, con un po' d'impegno, si può fare, ma a che scopo? Se io avessi il micro "impallato" per un secondo e dovessi svolgere altre cose, ok, non potrei fare il polling, ma qui?
Comunque davvero, gli interrupt, sono bestiali...se si sa gestirli bene...e come dare il doping al micro!! :)


Edited by GILA75 - 4/8/2012, 11:00
 
Top
thermidor
view post Posted on 4/8/2012, 21:06




Beh intendevo dire tu misura la frequenza, poi io verifico sul file Wave. Comunque credo che misurerai quella giusta.
Per quanto riguarda gli interrupt, considera che io non sono un softwarista e neanche un digitale, quindi prendi con le molle i miei consigli, che se devi sbagliare non hai bisogno del mio aiuto.
Del resto se hai un sistema che ti soddisfa, chi se ne frega di come è fatto.
 
Top
view post Posted on 14/8/2012, 17:09
Avatar

Rompiball

Group:
Appassionati
Posts:
2,612
Location:
briansa

Status:




http://fisicaondemusica.unimore.it/Flauto.html


Consultando questo link, forse per la taratura, gli strumenti a fiato, sono i meno consigliati....troppe variabili in gioco: bisogna essere certi
di suonare in modo deciso, non fare "vibrati" (mi perdonino i musucisti) strani, o gorgheggi...insomma stranezze mentre si soffia.

Magari quelli a tasto, potrebbero andare meglio no? Oppure fare prove con questo baracco :

www.youtube.com/watch?v=tUC5hGJ-65o

ah ah....ve lo ricordate???!!!! :sick: :sick: :D


PS:il bambolotto sullo sfondo....non lo uso più!!!!!!! ah ah!!!
 
Top
12 replies since 29/7/2012, 18:53   541 views
  Share