[C++]Fibonacci's music
Ho realizzato questo file che consente di ascoltare una riproduzione musicale della serie di Fibonacci.Ho assegnato una frequenza ad ogni resto della divisione tra il numero della serie di Fibonacci e il numero di note scelte per la composizione.Per i numeri di F. minori al numero di note, la funzione utilizzata attribuisce come resto il numero stesso.
Ad esempio scegliendo 3 note, ai numeri 1 1 2 3 5 8 13 21 34 55 89... il resto della divisione è rispettivamente 1 1 2 0 2 2 1 0 1 1 2... se le note sono 16 il resto è rispettivamente 1 1 2 3 5 8 13 5 2 7 9...
Così scegliendo ad esempio il la=440Hz come nota fondamentale, ed avendo scelto la composizione con 3 sole note, la "canzone" sarà costituita da tre frequenze gravitanti attorno a questa nota.Ho notato, ascoltando le varie versioni musicali, che la riproduzione con 16 note, è quella che presenta una regolarità più marcata.Per regolarità intendo chei frequenze assegnate ai resti della divisione (ad esempio i primi 30) si ripetono di volta in volta, seppur con qualche irregolarità che gli attribuisce un certo pregio.La struttura di base è la stessa ma questa si ripete con qualche variante ad ogni ciclo; la cosa mi ha da subito affascinato, e ho cercato di dargli qualche spiegazione, la più plausibile è che la serie di Fibonacci prediliga il sistema numerico a base esadecimale.Pensate che ciò possa avere qualche fondamento?
Il sorgente è questo:
Il file eseguibile invece è prelevabile quì http://www.megaupload.com/?d=YY75VK6A oppure su http://www.uosew.weebly.com
Per una corretta esecuzione consiglio valori tipici di durata attorno ai 100 ms e nota fondamentale 440Hz che corrisponde alla nota LA (A nella notazione internazionale)
Chi fosse interessato al programma, al suo miglioramento, per una eventuale collaborazione o per un qualsiasi suggerimento può scrivermi all'indirizzo oneearthone@tiscali.it
Ad esempio scegliendo 3 note, ai numeri 1 1 2 3 5 8 13 21 34 55 89... il resto della divisione è rispettivamente 1 1 2 0 2 2 1 0 1 1 2... se le note sono 16 il resto è rispettivamente 1 1 2 3 5 8 13 5 2 7 9...
Così scegliendo ad esempio il la=440Hz come nota fondamentale, ed avendo scelto la composizione con 3 sole note, la "canzone" sarà costituita da tre frequenze gravitanti attorno a questa nota.Ho notato, ascoltando le varie versioni musicali, che la riproduzione con 16 note, è quella che presenta una regolarità più marcata.Per regolarità intendo chei frequenze assegnate ai resti della divisione (ad esempio i primi 30) si ripetono di volta in volta, seppur con qualche irregolarità che gli attribuisce un certo pregio.La struttura di base è la stessa ma questa si ripete con qualche variante ad ogni ciclo; la cosa mi ha da subito affascinato, e ho cercato di dargli qualche spiegazione, la più plausibile è che la serie di Fibonacci prediliga il sistema numerico a base esadecimale.Pensate che ciò possa avere qualche fondamento?
Il sorgente è questo:
#include<math.h> #include<iostream> #include<stdlib.h> #include<windows.h> using namespace :: std; int main(){ char esc; int i,primo[10000],vi,vf,num,numno; float nota[10000],s[10000],f,pause;//f è la nota di riferimento in Hertz primo[0]=primo[1]=1; cout<<"Da quale posizione della serie si vuol far partire il brano?[0-9999] "; cin>>vi; cout<<"A che posizione della serie si vuol concludere l'esecuzione?[1-10000]"; cin>>vf; cout<<"Inserire la durata di ogni nota (in millisecondi)"; cin>>pause; cout<<"Inserisci il numero di note"; cin>>numno; cout<<"inserisci la nota fondamentale [Hertz]"; cin>>f; num=vi; for(i=2;i<10000;i++){ primo[i]=primo[i-1]+primo[i-2]; s[i]=primo[i]%numno;} for(i=vi;i<vf;i++){ nota[i]=pow(2,s[i]/12)*f; num=num+1; cout<<nota[i]<<"\t\t\t"<<num<<"\n"; Beep(nota[i],pause);} cin>>esc; return 0; }
Il file eseguibile invece è prelevabile quì http://www.megaupload.com/?d=YY75VK6A oppure su http://www.uosew.weebly.com
Per una corretta esecuzione consiglio valori tipici di durata attorno ai 100 ms e nota fondamentale 440Hz che corrisponde alla nota LA (A nella notazione internazionale)
Chi fosse interessato al programma, al suo miglioramento, per una eventuale collaborazione o per un qualsiasi suggerimento può scrivermi all'indirizzo oneearthone@tiscali.it
Risposte
A parte
che andrebbe scritto come
Non penso ci sia alcuna relazione stretta, per il semplice fatto che ci sono molti aggiustamenti artificiosi per far tornare bene la melodia e in generale con 16 ottieni dei resti più ricchi che con 3. Se avessi usato 17 e con un appropriata differenza in ms e hz avresti ottenuto risultati analoghi.
primo=primo[i-1]+primo[i-2];
che andrebbe scritto come
primo[i]=primo[i-1]+primo[i-2];
Non penso ci sia alcuna relazione stretta, per il semplice fatto che ci sono molti aggiustamenti artificiosi per far tornare bene la melodia e in generale con 16 ottieni dei resti più ricchi che con 3. Se avessi usato 17 e con un appropriata differenza in ms e hz avresti ottenuto risultati analoghi.
grazie per la correzione hactor!
comunque verifica tu stesso scaricando l'eseguibile.Tra la riproduzione a 16 note e le altre non c'è niente a che "sentire" in quanto a regolarità.
comunque verifica tu stesso scaricando l'eseguibile.Tra la riproduzione a 16 note e le altre non c'è niente a che "sentire" in quanto a regolarità.
"fritjof":
grazie per la correzione hactor!
comunque verifica tu stesso scaricando l'eseguibile.Tra la riproduzione a 16 note e le altre non c'è niente a che "sentire" in quanto a regolarità.
Ho provato ad eseguire e compilare il file io stesso.
Per quel che riguarda la questione musicale ti rimando alla seguente tabella

e all'articolo su questo sito
In generale sarebbe da notare come il rapporto tra un numero della serie di fibonacci e quello successivo di 1,6180034... ecc ecc, dunque 16/10 in prima approssimazione, 161/100 e via discorrendo. Dunque numeri proporzionali a questo rapporto avranno una sequenzialità nella serie e produrranno un effetto melodico.

Ottimo link.grazie.Avevo sottovalutato la corrispondenza tra le 16 note e il rapporto 161.../100... il cosiddetto numero phi.
Invito coloro che hanno utilizzato il programma a inserire nella discussione la loro opinione!
Invito coloro che hanno utilizzato il programma a inserire nella discussione la loro opinione!
aggiorno