PDA

View Full Version : [C++] Fibonacci's music


coidrok
16-01-2009, 18:05
#include<math.h>
#include<iostream.h>
#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;
}


Compilatelo e fatemi sapere le vostre opinioni
Per un ascolto ne troppo veloce ne troppo lento l'impostazione della durata delle note si aggira intorno ai 100 ms
Perchè la riproduzione con 16 note è l'unica che sembra essere regolare?:confused:

Questo è il link per scaricare il programma http://www.megaupload.com/?d=YY75VK6A

fero86
16-01-2009, 18:16
mhuamahuamahua che figata! :D

giusto un appunto, devi includere <iostream> (senza l'estensione) altrimenti non compila :D

senti, ma qual é un valore ragionevole per l'ultimo parametro? (frequenza della nota fondamentale)

bio82
16-01-2009, 18:27
mhuamahuamahua che figata! :D

giusto un appunto, devi includere <iostream> (senza l'estensione) altrimenti non compila :D

senti, ma qual é un valore ragionevole per l'ultimo parametro? (frequenza della nota fondamentale)

il LA è a 440hz, se raddoppi la frequenza hai il la dell'ottava superiore, se la dimezzi il la dell'ottava inferiore...

bio

coidrok
16-01-2009, 18:32
Io di solito imposto il Re che equivale a 293.7 [Hz]
comunque vanno bene tutte tranne quelle troppo basse o troppo alte.Un range potrebbe essere [80-500] comunque dipende dal numero di note, se le note sono molte, diciamo più di 40, e metti un valore della frequenza di riferimento che si discosta troppo dalla media del range, alcune note risulterebbero non udibili, in quanto troppo basse o troppo alte

Hai ascoltato quella a 16 note?
strano che sia l'unica ad avere una certa regolarita:rolleyes:

Don[ITA]
16-01-2009, 20:38
Ma si dovrebbe sentire qualche suono???
Perchè io non sento assolutamente nulla :cry: :cry: :cry:
Provato sia con Code::Blocks che con visual c++ 2008 express :mc:

coidrok
17-01-2009, 10:33
non sò perchè ma a volte devo cliccare sull'icona del volume per ascoltarlo

DanieleC88
17-01-2009, 12:07
Però così dovrei per forza andare su Windows per provarlo, non è giusto... facciamogli fare un .wav in output! :D

coidrok
29-01-2009, 23:12
qual'è il codice per produrre un .wav?

~FullSyst3m~
29-01-2009, 23:35
qual'è il codice per produrre un .wav?

Avevo sentito parlare di una qualche libreria. Se trovo qualcosa te lo linko.

DanieleC88
29-01-2009, 23:51
Tie': http://www.sonicspot.com/guide/wavefiles.html
Buono studio :D

~FullSyst3m~
29-01-2009, 23:57
Tie': http://www.sonicspot.com/guide/wavefiles.html
Buono studio :D

Mi sa che avevo letto proprio questo :D

D4rkAng3l
30-01-2009, 13:05
ma che figata...è intrippantissimo.... :D ma le note hanno tutte la stessa durata nel tempo?

coidrok
31-01-2009, 16:04
si, hanno tutte la stessa durata.
Se avete qualche idea per assegnare tempi diversi a note diverse fatevi avanti, potremmo iniziare con dei valori casuali.
risposta a Danielec88: nel caso in cui io riuscissi a creare un file .wav sarebbe soltanto una composizione tra le infinite possibili ascoltabili utilizzando il .exe quindi trovo meglio inserire nella discussione come creare l'exe in linux (presumo che tu utilizzi linux) anche se non sò come ciò si possa fare.Chi lo sa si faccia avanti cosicchè anche danielec88 e gli utenti del "sistema free" possano ascoltare la musica di Fibonacci.

DanieleC88
31-01-2009, 16:05
Se facciamo un codice "standard" possiamo far compilare il programma a chiunque e far generare .wav a tutte le piattaforme... :D

Chi si fa avanti? :p

coidrok
31-01-2009, 16:38
nessuno ha ancora un idea sul perchè la riproduzione con 16 note ha rispetto alle altre una regolarità più elevata?Quale potrebbe essere il motivo secondo voi?
La mia ipotesi è che forse la serie di Fibonacci prediliga il sistema numerico a base esadecimale.secondo voi questa spiegazione ha qualche fondamento?avete letto qualcosa a riguardo?

DanieleC88
31-01-2009, 16:41
Che intendi per "regolarità più elevata"? Io ancora non ho potuto provarlo.

coidrok
31-01-2009, 16:56
ripetizione simile di un intervallo di note a intervalli di tempo successivi.E la magia stà nella ripetizione similare ma NON identica... mentre per tutte le altre riproduzioni la regolarità è assai minore.

Se facciamo un codice "standard" possiamo far compilare il programma a chiunque e far generare .wav a tutte le piattaforme...

come si fà il codice standard?

DanieleC88
31-01-2009, 17:00
come si fà il codice standard?
Evitando chiamate specifiche per un certo sistema operativo ed usando ciò che il linguaggio offre. :)

coidrok
31-01-2009, 21:09
http://www.megaupload.com/?d=YY75VK6A

DanieleC88
01-02-2009, 02:35
Per divertirmi un po' ho sviluppato un piccolo codice in grado di scrivere file wave PCM/non compressi (ma è veramente minimale, è in grado solo di salvare file mono, s16le, 44100hz). Ad ogni modo dovrebbe bastare al nostro scopo - dovrebbe usare solo chiamate standard o pressapoco, quindi lo si può eventualmente riadattare per far generare un wave al programmino per la sequenza di Fibonacci. :D
Come test gli ho fatto generare un file con 10 note causali da un secondo ognuna. Enjoy! ;)

Tommo
01-02-2009, 14:40
Si potrebbe portarlo per OpenAL, per farne una versione standard.
Non dovrebbe essere difficile...

coidrok
03-02-2009, 22:51
non riesco a far partire il file fatto da danielec88.qualcuno mi può spiegare come si fà ad eseguire dei programmi che sono costituiti da più file?

DanieleC88
03-02-2009, 22:55
Se sei su Linux, basta che tu compili usando "make" nella cartella che contiene i file. Su Windows, dal tuo IDE preferito crea un progetto che sia costituito da tutti i file.

coidrok
13-02-2009, 18:56
Per migliorare questo programma ho bisogno della vostra collaborazione, quindi appena abbiate utilizzato l'eseguibile lasciate un vostro commento.Sono ben accette

Idee e proposte (Siccome siamo all'inizio, meglio se siano facilmente realizzabili,insomma, poco per volta)
versioni in altri linguaggi(magari.........)
link utili all'argomento

ma anche opinioni(grazie alle quali potremo guardare il prog.da altre prospettive)



P.S. Qualcuno è riuscito a unire i due file?

DanieleC88
13-02-2009, 18:59
P.S. Qualcuno è riuscito a unire i due file?
Che file?

coidrok
13-02-2009, 19:02
Intendevo riadattare il tuo allegato alla sequenza.

DanieleC88
13-02-2009, 19:16
Io l'ho provato a riadattare, viene una cosa un po' strana vista la mia ignoranza sui segnali audio. Magari se vi va vi allego anche le modifiche, così si può partire da un qualcosa già fatto, anche se non so quanto sia valido. :)

coidrok
27-02-2009, 23:47
Allega e sentiamo

DanieleC88
28-02-2009, 00:55
Allega e sentiamo
È una parola, ormai non posso più, mi hanno fuso (sì, è così, non chiedetemi la dinamica perché non ero in casa) l'alimentatore del PC e non ho modo di recuperare i dati che avevo di là, quindi dovrete attendere che io prenda un nuovo alimentatore... :cry:

coidrok
16-03-2009, 08:59
Procurato?

DanieleC88
16-03-2009, 16:50
No. :D (Ho optato per l'acquisto di un nuovo PC da assemblare, quindi la cosa è un po' lunga.)

Se mi gira in questi giorni faccio un piccolo codice in C++ e vi aggiorno sulle novità. :)

Tommo
16-03-2009, 17:57
L'ho provato alla fine, davvero fico :D

Non ho capito bene l'algoritmo che c'è dietro però, perchè ripete la nota base ad intervalli regolari ma in mezzo cambia sempre?

teoricamente se volessi farne un file .ogg mi basterebbe copiare nota[] nel buffer del file audio? :stordita:

Sarebbe davvero epico per un gioco indie ad 8 o 16 bit, qualcosa stile Super Metroid per intenderci :asd:
Pensate che atmosfere da paura, con la musica che cambia in tempo reale, sempre diversa e "misteriosa".
Mi stupisce che non ci abbiano pensato all'epoca, in realtà.

coidrok
18-03-2009, 00:40
Sono contento Tommo che ti sia piaciuto il mio programma
Cos'è che non ti è chiaro del codice?
La nota fondamentale è l'unica predefinita a priori, le altre sono calcolate in base ad essa e in base alle note scelte.La serie di Fib. è la corrispondenza biunivoca del flusso di note.
Lo sai che alla musica dei videogiochi ci avevo già pensato ascoltandolo, in particolare mi sono venute in mente le musichette dei primi giochini che ho utilizzato tipo supermariobros.

shinya
18-03-2009, 09:26
@tommo: forse può interessarti partire da qui:
http://en.wikipedia.org/wiki/Algorithmic_composition

DanieleC88
18-03-2009, 09:49
@tommo: forse può interessarti partire da qui:
http://en.wikipedia.org/wiki/Algorithmic_composition
:eek:

Il loop di Ballblazer è spettacolare!!! :D

Tommo
18-03-2009, 11:04
Sono contento Tommo che ti sia piaciuto il mio programma
Cos'è che non ti è chiaro del codice?
La nota fondamentale è l'unica predefinita a priori, le altre sono calcolate in base ad essa e in base alle note scelte.La serie di Fib. è la corrispondenza biunivoca del flusso di note.
Lo sai che alla musica dei videogiochi ci avevo già pensato ascoltandolo, in particolare mi sono venute in mente le musichette dei primi giochini che ho utilizzato tipo supermariobros.

Beh l'algoritmo l'ho intuito, solo non mi era evidente come quel semplice codice possa farlo :rolleyes:

Cmq spero di trovare un modo di usarla in un VG :asd:

DanieleC88
18-03-2009, 11:47
Rieccomi col vecchio programmino migliorato ed adattato all'algoritmo di coidrok.
Essendo io una pippa in quanto ai segnali e la teoria che vi gravita intorno, il codice funziona ma ogni tanto sballa (ho generato il tutto con un volume basso, ma su sequenze lunghe ci sono dei picchi con volume altissimo, non ascoltatelo con le cuffie che vi fate male, non mi ritengo responsabile di eventuali danni! :p).

Proponete idee per migliorarlo, che io non me ne intendo. :)
Dimenticavo: anche qui basta un "make" se siete su sistemi Unix. Per Windows penso sia sufficiente importare il tutto in un qualche IDE e ricompilare. :)

DanieleC88
19-03-2009, 10:49
Vi mando un nuovo aggiornamento del programmino, ora è in grado di generare quattro tipi diversi di onde (dente di sega, quadrata, sinusoidale, triangolare).

Buon divertimento! :D
P.S.: stavolta si trova in http://www.filefactory.com/file/af6gb36/n/fibonacci_zip.

Giullo
19-03-2009, 12:51
su leopard nn compila


cc1plus: error: unrecognized command line option "-std=c++0x"


al massimo potrei provare a portarlo in c o obj-c, l'idea è molto interessante e mi è venuta già in mente una sorta di app per iphone che potrebbe essere simpatica

DanieleC88
19-03-2009, 13:21
Toglila pure quell'opzione (è nel Makefile, in realtà serve solo a zittire i warning di GCC dovuti all'inclusione di stdint.h), dovrebbe compilare allegramente lo stesso.

Giullo
19-03-2009, 13:46
tolta l'opzione si incricca qui:

sawtoothWave.h:4:19: error: cstdint: No such file or directory


premesso che di c++ ne so poco o nulla, immagino manchi qualche header o libreria .. esiste un qualcosa di analogo alla c standard library per c++ che magari devo installare? o forse è solo un problema di path e ste librerie sono da qualche parte :)

~FullSyst3m~
19-03-2009, 13:50
Non conosco C/C++, ma ho una curiosità: per creare il makefile come si fa?

coidrok
19-03-2009, 14:42
al massimo potrei provare a portarlo in c o obj-c, l'idea è molto interessante e mi è venuta già in mente una sorta di app per iphone che potrebbe essere simpatica


Ottimo facci sapere come procede il progetto per iphone


per c88: ma bisogna essere registrati su filefactoru per poter scaricare il file?
se puoi mettilo direttamente nel forum come hai fatto per l'altro

Giullo
19-03-2009, 17:36
sto cercando l'equivalente di beep , ossia un qualcosa che accettando una frequenza mi suoni un tono

vediamo core audio cosa dice :)

DanieleC88
19-03-2009, 19:00
tolta l'opzione si incricca qui:

sawtoothWave.h:4:19: error: cstdint: No such file or directory
Che compilatore usi, GCC? Se sì, che versione? Io ho la 4.3.3 e compilo senza problemi.
per c88: ma bisogna essere registrati su filefactoru per poter scaricare il file?
No, non è necessario, devi solo inserire il codice CAPTCHA per confermare che non sei un automa. :D

Giullo
22-03-2009, 11:02
Che compilatore usi, GCC? Se sì, che versione? Io ho la 4.3.3 e compilo senza problemi.


imac-di-giuliano-galea:~ giulianogalea$ gcc -v
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5490~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5490)


sarà un problema di path?

shinya
22-03-2009, 11:19
Mi intriga l'idea della musica creata algoritmicamente. Ma perchè fermarsi ai numeri di Fibonacci?
Non potrebbe essere interessante avere un software in grado di generare musica in modo procedurale da varie fonti? Tipo altre serie numeriche, frattali di ogni tipo, mercato azionario (qui mi sa che salti fuori una musica molto triste e malinconica...), previsioni del meteo...chennesòio, ecc??
Poi si potrebbe esportare la "traccia" in modo da poterla usare in un altro software per il mixaggio e la composizione vera e propria...

Brian Eno pagherebbe per una cosa cosi immagino :)

DanieleC88
22-03-2009, 12:18
imac-di-giuliano-galea:~ giulianogalea$ gcc -v
Using built-in specs.
Target: i686-apple-darwin9
Configured with: /var/tmp/gcc/gcc-5490~1/src/configure --disable-checking -enable-werror --prefix=/usr --mandir=/share/man --enable-languages=c,objc,c++,obj-c++ --program-transform-name=/^[cg][^.-]*$/s/$/-4.0/ --with-gxx-include-dir=/include/c++/4.0.0 --with-slibdir=/usr/lib --build=i686-apple-darwin9 --with-arch=apple --with-tune=generic --host=i686-apple-darwin9 --target=i686-apple-darwin9
Thread model: posix
gcc version 4.0.1 (Apple Inc. build 5490)


sarà un problema di path?
Non ne ho idea, non ho mai usato Mac OS X, alle brutte puoi ridefinire int16_t come signed short (mi pare che usassi solo quello di stdint.h) e ricompilare. :)

Per rispondere a shinya, una volta avuta la sequenza il file audio lo si può rigenerare in maniera perfettamente identica a come si fa adesso. Quindi, se si fanno generare più sequenze le si può integrare immediatamente.

DanieleC88
22-03-2009, 12:19
Non conosco C/C++, ma ho una curiosità: per creare il makefile come si fa?
Lo scrivi... :asd:

Dipende dal Makefile che vuoi creare... Per una cosa semplice non ci vuole niente, per sistemi di compilazione complessi ci vuole un bel lavoro a volte.

coidrok
26-03-2009, 16:46
Interessante la tua proposta shinya
Ma chi è Brian Eno?

Tommo
26-03-2009, 16:54
Per quanto riguarda il suono algoritmico ho trovato questo middleware:
http://www.zenprobe.com/phya/
In pratica se gli si forniscono i dati sugli urti di un'engine fisica è in grado di generare ogni suono possibile a partire da 2 samples :sofico:

Tuttavia ho provato ad integrarlo nel mio gioco, ed oltre a non essere semplice NON ha alcuna documentazione :stordita:
Della serie come buttare un progetto interessante.

coidrok
15-06-2009, 23:03
up

DanieleC88
15-06-2009, 23:07
down

banryu79
16-06-2009, 09:02
left :O

~FullSyst3m~
16-06-2009, 09:11
Right :O

coidrok
16-06-2009, 11:21
center

DanieleC88
19-02-2010, 17:50
Nessuna novità?

Qualcuno ha il backup dei miei vecchi file? :D
Su FileFactory non ci sono più...

akfhalfhadsòkadjasdasd
20-02-2010, 22:40
Guarda caso ho passato gli ultimi tempi a riflettere sulle tematiche della creatività artificiale. Seguendo il link di wikipedia mi ha fondalmentalmente interessato questo paragrafo:

Grammars

Music can also be examined as a language with a distinctive grammar set. Compositions are created by first constructing a musical grammar, which is then used to create comprehensible musical pieces. Grammars often include rules for macro-level composing, for instance harmonies and rhythm, rather than single notes.
http://en.wikipedia.org/wiki/Algorithmic_composition


A livello intuitivo un buon punto di partenza è proprio questo: definire una grammatica e continuare sul livello semantico con una ontologia (sufficientemente complessa), per avere più vincoli e controllo su quanto può essere potenzialmente composto.
La fase di creatività artificiale potrebbe essere approcciata mediante catene di markov.