Sound design e programmazione

  • maxpiano69
  • Membro: Staff
  • Risp: 24541
  • Loc: Torino
  • Thanks: 3347  

25-02-22 08.52

@ anonimo
wildcat80 ha scritto:
domarlo non è così semplice


avrà gli stessi problemi a suon di matematiche che sperimento io emo
Niente matematica, il Minimoog/Model D è un real analog al 100% -> pura fisica emo

25-02-22 09.23

wildcat80 ha scritto:
Però tira delle bombe che domarlo non è così semplice eh

Dipende, da dove escono le bombe?
emo
emo
Momento ilare anni '80-'90.
  • anonimo
  • Membro: Senior
  • Risp: 685
  • Loc:
  • Thanks: 130  

26-02-22 10.49

Mima, questo è il grafico della nota A0 di un piano reale: ce la facciamo?

emo
  • mima85
  • Membro: Supporter
  • Risp: 12173
  • Loc: Como
  • Thanks: 1415  

26-02-22 12.32

@ anonimo
Mima, questo è il grafico della nota A0 di un piano reale: ce la facciamo?

emo
Devi prendere il tuo campione e farne la trasformata di Fourier. Spezza il tuo campione in segmenti di tot punti (per esempio 2048 punti), esegui la trasformata di ogni segmento e poi, mettendo per così dire "in fila" i risultati delle FFT di ogni segmento, analizza le variazioni dell'intensità di ogni parziale del suono (in parole povere, di quanto e come oscilla nel tempo l'ampiezza dei picchi di ogni parziale).

Per farti capire visivamente cosa intendo, guarda questo video. Nel grafico tridimensionale che viene generato, sull'asse X si ha la frequenza, sull'Y l'intensità e sullo Z sono allineati uno dietro l'altro i segmenti risultanti dalle analisi FFT di ogni spezzone del campione, a rappresentare come il suono cambia nel tempo. Quello che devi ricavare è il movimento di ogni parziale del tuo suono.

Ipotizzando che il tuo suono abbia 10 parziali, dovrai poi costruirti una tabella con 10 colonne (una per ogni parziale) e tante righe tanti quanti sono i segmenti in cui hai diviso il tuo campione. Ammettendo che tuo campione duri 5 secondi, abbia una frequenza di campionamento di 44'100 Hz e la lunghezza di segmento che hai scelto è di 2048 campioni, il numero di segmenti, e di conseguenza il numero di righe che la tua tabella dovrà avere, è: 44'100 Hz * 5 secondi / 2048 campioni =~ 108 (arrotondato per eccesso). Nelle 10 celle di ognuna di queste righe devi inserire l'ampiezza di ogni armonica che hai ricavato analizzando il risultato della FFT di ogni segmento.

Per rigenerare il suono, devi ricostruire questi 108 segmenti di campione eseguendo per ognuno una serie di Fourier composta da 10 termini, uno per ogni armonica, dove l'ampiezza di ogni armonica (cioè il coefficiente con cui moltiplicare il risultato di ogni funzione seno) la ricaverai dalla relativa riga della tabella fatta in precedenza. Quindi per la serie del primo segmento andrai a ricavare le ampiezze dalla prima riga, per il secondo segmento dalla seconda, e via fino al 108esimo segmento. Mano a mano che generi i segmenti li metti in fila, e alla fine avrai il tuo campione ri-sintetizzato.

Va da se che questo è un concetto generale buono per fare un po' di esperimenti, ma non credo sia adeguato per dissezionare e ricostruire un suono in tempo reale, posto che fare questa cosa abbia una qualche utilità al di fuori dello smanettare un po' con audio e matematica. Per procedure più ottimizzate e più intelligenti devo cedere per forza il passo a chi ne sa più di me in matematica (e non ci vuole molto, sono abbastanza una frana in matematica). Come d_phatt per esempio, che è un matematico. D_phatt, se leggi questo thread, se la cosa ti interessa batti un colpo emo
  • anonimo
  • Membro: Senior
  • Risp: 685
  • Loc:
  • Thanks: 130  

26-02-22 13.02

-
  • d_phatt
  • Membro: Guru
  • Risp: 4600
  • Loc: Perugia
  • Thanks: 1002  

26-02-22 15.39

Presente, o meglio, assente visto che stavo seguendo poco il forum e questa discussione mi era sfuggita.
Grazie della considerazione, anche se non la merito perché non sono un esperto di DSP, anche se prima o poi un tuffo per approfondire l'argomento lo devo fare visto che vi si intrecciano quasi tutte le cose che mi interessano...

Ho riletto sommariamente, analizzate un campionamento di una nota A0, mi sfugge però l'obiettivo: modellare un suono di pianoforte?
  • d_phatt
  • Membro: Guru
  • Risp: 4600
  • Loc: Perugia
  • Thanks: 1002  

26-02-22 15.41

@ maxpiano69
Niente matematica, il Minimoog/Model D è un real analog al 100% -> pura fisica emo
Ma la fisica è solo matematica travestita no? emo
  • mima85
  • Membro: Supporter
  • Risp: 12173
  • Loc: Como
  • Thanks: 1415  

26-02-22 16.02

d_phatt ha scritto:
Ho riletto sommariamente, analizzate un campionamento di una nota A0, mi sfugge però l'obiettivo: modellare un suono di pianoforte?


Noname vuole estrapolare il comportamento di un suono campionato (un pianoforte in questo caso, ma in realtà la cosa si applica per qualsiasi suono) per rigenerarlo tramite sintesi additiva. Perlomeno questo è quel che ho capito.

Per me "estrapolare il comportamento di un suono" significa scomporlo con la FFT nelle sue componenti in frequenza (i parziali, armonici o meno che siano), analizzare come si muovono lungo tutta la durata del campione ed utilizzare le informazioni per rigenerare quel suono tramite sintesi additiva con le serie di Fourier. Ma sicuramente ci sono anche altri approcci, solo che con le mie limitate conoscenze di matematica non li conosco e/o non riesco ad immaginarli.
  • d_phatt
  • Membro: Guru
  • Risp: 4600
  • Loc: Perugia
  • Thanks: 1002  

26-02-22 17.04

@ mima85
d_phatt ha scritto:
Ho riletto sommariamente, analizzate un campionamento di una nota A0, mi sfugge però l'obiettivo: modellare un suono di pianoforte?


Noname vuole estrapolare il comportamento di un suono campionato (un pianoforte in questo caso, ma in realtà la cosa si applica per qualsiasi suono) per rigenerarlo tramite sintesi additiva. Perlomeno questo è quel che ho capito.

Per me "estrapolare il comportamento di un suono" significa scomporlo con la FFT nelle sue componenti in frequenza (i parziali, armonici o meno che siano), analizzare come si muovono lungo tutta la durata del campione ed utilizzare le informazioni per rigenerare quel suono tramite sintesi additiva con le serie di Fourier. Ma sicuramente ci sono anche altri approcci, solo che con le mie limitate conoscenze di matematica non li conosco e/o non riesco ad immaginarli.
Ah ok! Messa così, beh mi sembra che il tuo approccio sia perfettamente sensato. Anche perché se poniamo come vincolo l'utilizzo della sintesi additiva, ci vogliono le parziali, e quindi la trasformata di Fourier, insomma (parlando a posteriori) mi sembra la cosa più logica, in effetti.

Invece rileggendo il primo intervento di noname, che si chiedeva come trovare l'equazione matematica che genera un determinato campionamento di un suono di cui si è in possesso, una risposta la posso dare anche io: interpolando.

L'interpolazione serve proprio a questo, partire da un insieme dato di n nodi xk con relativi valori yk, e trovare una funzione f tale f(xk) = yk, per ogni k = 1, ..., n. In pratica vogliamo trovare una funzione il cui grafico passi per tutti i punti (xk, yk). Ovviamente possiamo supporre senza perdita di generalità che gli xk siano già ordinati, e k va letto come un pedice.

Con il campionamento di un suono i nodi sono gli istanti di tempo in cui avviene il campionamento e i singoli sample gli yk. Abbiamo due importanti semplificazioni, innanzitutto siamo nel caso reale e quindi ogni xk (anche se forse in questo caso sarebbe meglio chiamarli tk visto che sono istanti di tempo) e ogni yk è un numero reale, e poi gli xk (o meglio tk) possiamo considerarli equispaziati essendo il campionamento del suono eseguito a intervalli di tempo teoricamente costanti.

A questo punto c'è l'imbarazzo della scelta, esistono vari approcci per l'interpolazione in quanto la funzione che soddisfa le condizioni più generali del problema è tutt'altro che unica. Infatti devo dire che interpolando non si trova l'esatta funzione che ha generato quei sample, ma una delle (tante) funzioni che passano per quei punti del piano (cioè le coppie istante tk e sample yk). In corrispondenza dei nodi tutte queste funzioni assumono gli stessi valori, nei punti intermedi tra un nodo e l'altro no, e queste differenze (insieme alle esigenze in termini di tempi di calcolo) orientano la scelta dell'approccio/algoritmo da utilizzare.

Quindi a questo punto gli approcci (e quindi gli algoritmi) per trovare una funzione siffatta sono molteplici, interpolazione lineare, polinomiale, spline... e anche trigonometrica, il che ci riporta a Fourier, alla fine.

Queste cose è possibile trovarle in qualsiasi libro/corso sufficientemente approfondito di Analisi Numerica.

Ovviamente così facendo troviamo una funzione che se valutata in corrispondenza dei nodi genera quegli stessi sample, e quindi quella stessa forma d'onda campionata, niente di più. E ovviamente, al netto di errori di calcolo in virgola mobile o fissa che sia.

Poi ci permette di provare a determinare dei valori intermedi tra un nodo e l'altro, ma niente di più, usata così in maniera basilare non possiamo utilizzarla per generare altre forma d'onda. Ma magari impiegando la fantasia...per esempio se hai due forme d'onda campionate puoi ottenerne una terza interpolando su valori intermedi (per esempio la media) tra i sample delle due....

Ma perché fate parlare a me, adesso arriva ziokiller e rimanda a scuola tutti emo
  • anonimo
  • Membro: Senior
  • Risp: 685
  • Loc:
  • Thanks: 130  

26-02-22 17.20

l'oggetto della discussione è questo
  • d_phatt
  • Membro: Guru
  • Risp: 4600
  • Loc: Perugia
  • Thanks: 1002  

26-02-22 19.37

@ anonimo
l'oggetto della discussione è questo
Ah poi scusa, mi sono dimenticato di aggiungere una cosa fondamentale, l'approccio dell'interpolazione qui funziona finché si tratta di esperimenti "teorici" diciamo, chiaro che con un campionamento lungo diversi secondi anche solo a 44100 Hz i nodi diventano centinaia di migliaia in un batter d'occhio, quindi computazionalmente l'approccio diventa sempre più pesante più è lungo il campione, ma per fare qualche esperimento non in realtime può andare, con forme d'onda più corte...magari puoi saltare dei sample e prenderne uno ogni n, tanto è di esperimenti che si parla, per ora, no?

Comunque in rete si trova molta roba introduttiva sul DSP, se vuoi approfondire puoi trovare qualcosa.
  • anonimo
  • Membro: Senior
  • Risp: 685
  • Loc:
  • Thanks: 130  

26-02-22 20.27

@ d_phatt
Ah poi scusa, mi sono dimenticato di aggiungere una cosa fondamentale, l'approccio dell'interpolazione qui funziona finché si tratta di esperimenti "teorici" diciamo, chiaro che con un campionamento lungo diversi secondi anche solo a 44100 Hz i nodi diventano centinaia di migliaia in un batter d'occhio, quindi computazionalmente l'approccio diventa sempre più pesante più è lungo il campione, ma per fare qualche esperimento non in realtime può andare, con forme d'onda più corte...magari puoi saltare dei sample e prenderne uno ogni n, tanto è di esperimenti che si parla, per ora, no?

Comunque in rete si trova molta roba introduttiva sul DSP, se vuoi approfondire puoi trovare qualcosa.
ci sto litigando emo

01-03-22 08.36

@ d_phatt
Ah ok! Messa così, beh mi sembra che il tuo approccio sia perfettamente sensato. Anche perché se poniamo come vincolo l'utilizzo della sintesi additiva, ci vogliono le parziali, e quindi la trasformata di Fourier, insomma (parlando a posteriori) mi sembra la cosa più logica, in effetti.

Invece rileggendo il primo intervento di noname, che si chiedeva come trovare l'equazione matematica che genera un determinato campionamento di un suono di cui si è in possesso, una risposta la posso dare anche io: interpolando.

L'interpolazione serve proprio a questo, partire da un insieme dato di n nodi xk con relativi valori yk, e trovare una funzione f tale f(xk) = yk, per ogni k = 1, ..., n. In pratica vogliamo trovare una funzione il cui grafico passi per tutti i punti (xk, yk). Ovviamente possiamo supporre senza perdita di generalità che gli xk siano già ordinati, e k va letto come un pedice.

Con il campionamento di un suono i nodi sono gli istanti di tempo in cui avviene il campionamento e i singoli sample gli yk. Abbiamo due importanti semplificazioni, innanzitutto siamo nel caso reale e quindi ogni xk (anche se forse in questo caso sarebbe meglio chiamarli tk visto che sono istanti di tempo) e ogni yk è un numero reale, e poi gli xk (o meglio tk) possiamo considerarli equispaziati essendo il campionamento del suono eseguito a intervalli di tempo teoricamente costanti.

A questo punto c'è l'imbarazzo della scelta, esistono vari approcci per l'interpolazione in quanto la funzione che soddisfa le condizioni più generali del problema è tutt'altro che unica. Infatti devo dire che interpolando non si trova l'esatta funzione che ha generato quei sample, ma una delle (tante) funzioni che passano per quei punti del piano (cioè le coppie istante tk e sample yk). In corrispondenza dei nodi tutte queste funzioni assumono gli stessi valori, nei punti intermedi tra un nodo e l'altro no, e queste differenze (insieme alle esigenze in termini di tempi di calcolo) orientano la scelta dell'approccio/algoritmo da utilizzare.

Quindi a questo punto gli approcci (e quindi gli algoritmi) per trovare una funzione siffatta sono molteplici, interpolazione lineare, polinomiale, spline... e anche trigonometrica, il che ci riporta a Fourier, alla fine.

Queste cose è possibile trovarle in qualsiasi libro/corso sufficientemente approfondito di Analisi Numerica.

Ovviamente così facendo troviamo una funzione che se valutata in corrispondenza dei nodi genera quegli stessi sample, e quindi quella stessa forma d'onda campionata, niente di più. E ovviamente, al netto di errori di calcolo in virgola mobile o fissa che sia.

Poi ci permette di provare a determinare dei valori intermedi tra un nodo e l'altro, ma niente di più, usata così in maniera basilare non possiamo utilizzarla per generare altre forma d'onda. Ma magari impiegando la fantasia...per esempio se hai due forme d'onda campionate puoi ottenerne una terza interpolando su valori intermedi (per esempio la media) tra i sample delle due....

Ma perché fate parlare a me, adesso arriva ziokiller e rimanda a scuola tutti emo
emo
emo
emo
emo
emo
emo
emo
emo
  • pianola
  • Membro: Senior
  • Risp: 415
  • Loc: Latina
  • Thanks: 16  

01-03-22 22.49

mima85 ha scritto:
Ma sicuramente ci sono anche altri approcci, solo che con le mie limitate conoscenze di matematica non li conosco e/o non riesco ad immaginarli.

Ciao un altro modo in effetti ci sarebbe, per analizzare il suono: la sintesi granulare di Dannis Gabor.
Ho letto un articolo, molto interessante, qui
  • mima85
  • Membro: Supporter
  • Risp: 12173
  • Loc: Como
  • Thanks: 1415  

02-03-22 19.52

@ pianola
mima85 ha scritto:
Ma sicuramente ci sono anche altri approcci, solo che con le mie limitate conoscenze di matematica non li conosco e/o non riesco ad immaginarli.

Ciao un altro modo in effetti ci sarebbe, per analizzare il suono: la sintesi granulare di Dannis Gabor.
Ho letto un articolo, molto interessante, qui
Articolo molto interessante, grazie e thanks emo
  • pianola
  • Membro: Senior
  • Risp: 415
  • Loc: Latina
  • Thanks: 16  

02-03-22 20.22

mima85 ha scritto:
Articolo molto interessante, grazie e thanks

Prego!emo
  • ilviandante
  • Membro: Senior
  • Risp: 345
  • Loc:
  • Thanks: 69  

07-03-22 10.46

ciao,
dicesi sincronicità per chi sa cosa intendo e mi sono iscritto per questo motivo emo

Sto studiando la FFT e mi è parso di capire che le incognite sono ampiezza e frequenza quindi, se voglio risalire alla matematica di un certo suono devo:
1) spostarmi dal dominio del tempo al dominio delle frequenze
2) da questo nuovo dominio si determina ampiezza e frequenza utili a scoprire i parametri delle 'n' sinusoidi che copongono il suono di interesse
3) trovata la matematica (le formule o sinusoidi che creano quel suono complesso) si può generare i suoni desiderati a piacimento

emo
  • maxpiano69
  • Membro: Staff
  • Risp: 24541
  • Loc: Torino
  • Thanks: 3347  

07-03-22 11.33

@ ilviandante
ciao,
dicesi sincronicità per chi sa cosa intendo e mi sono iscritto per questo motivo emo

Sto studiando la FFT e mi è parso di capire che le incognite sono ampiezza e frequenza quindi, se voglio risalire alla matematica di un certo suono devo:
1) spostarmi dal dominio del tempo al dominio delle frequenze
2) da questo nuovo dominio si determina ampiezza e frequenza utili a scoprire i parametri delle 'n' sinusoidi che copongono il suono di interesse
3) trovata la matematica (le formule o sinusoidi che creano quel suono complesso) si può generare i suoni desiderati a piacimento

emo
Ciao e benvenuto,

quella che descrivi si chiama "sintesi additiva" e sebbene teoricamente le cose stiano come scrivi, ma non è che di qualsiasi suono naturale sia così semplice individuare il modello matematico che ne descrive il comportamento dinamico di tutte sue componenti frequenziali nel tempo (altrimenti avremmo già mandato in pensione il campionamento e qualsiasi altro metodo di sintesi digitale da tempo) nè, ammesso che lo si trovi, che tale modello sia implementabile per la generazione sonora in real-time (quella che serve per i synt) senza che richieda una potenza di calcolo ad oggi non disponibile.

Per questo motivo la sintesi a modelli fisici si basa piuttosto sull'analisi del fenomeno fisico che genera il suono e cerca di modellare quella matematicamente, accettando ovviamente un adeguato grado di approssimazione (un po' come succede per le immagini e le tecniche di ray-tracing e similari).

Se non lo hai già fatto, rileggi tutta questa discussione dall'inizio così troverai alcune considerazioni al riguardo.
  • d_phatt
  • Membro: Guru
  • Risp: 4600
  • Loc: Perugia
  • Thanks: 1002  

07-03-22 12.09

@ MarcezMonticus
emo
emo
emo
emo
emo
emo
emo
emo
Posso capire lo smarrimento di chi non è addetto a questo tipo di lavori, ma ti assicuro che non è niente di trascendentale, è solo la presentazione di un insieme di metodi rigorosi e formalizzati matematicamente per...collegare una sequenza di punti con una linea, per dirla semplicemente. In realtà non ho detto nulla di speciale, questa è la "prima pagina" sull'argomento, quando si vanno ad analizzare i metodi in sé si scende davvero nel tecnico, o quando si affrontano certi problemi sulla migliore scelta dei nodi. Era più che altro una curiosità teorica con cui rispondevo a noname, senza la pretesa di fornire soluzioni pratiche efficienti.

E comunque è uno smarrimento molto simile a quello che provano i matematici di fronte a un argomento nuovo emo
  • ilviandante
  • Membro: Senior
  • Risp: 345
  • Loc:
  • Thanks: 69  

07-03-22 12.33

@ maxpiano69
Ciao e benvenuto,

quella che descrivi si chiama "sintesi additiva" e sebbene teoricamente le cose stiano come scrivi, ma non è che di qualsiasi suono naturale sia così semplice individuare il modello matematico che ne descrive il comportamento dinamico di tutte sue componenti frequenziali nel tempo (altrimenti avremmo già mandato in pensione il campionamento e qualsiasi altro metodo di sintesi digitale da tempo) nè, ammesso che lo si trovi, che tale modello sia implementabile per la generazione sonora in real-time (quella che serve per i synt) senza che richieda una potenza di calcolo ad oggi non disponibile.

Per questo motivo la sintesi a modelli fisici si basa piuttosto sull'analisi del fenomeno fisico che genera il suono e cerca di modellare quella matematicamente, accettando ovviamente un adeguato grado di approssimazione (un po' come succede per le immagini e le tecniche di ray-tracing e similari).

Se non lo hai già fatto, rileggi tutta questa discussione dall'inizio così troverai alcune considerazioni al riguardo.
innanzitutto grazie per il benvenuto.
Ho letto le risposte e se non ricordo male, tu hai scritto che con la FFT non si va veloci in temini di computazione realtime (seno e coseno pesano), meglio scegliere la strada della wavetable una volta individuata la matematicanecessaria.

Dicendo "sintesi a modelli fisici" mi cogli impreparato.
Però se ho capito bene: con la FFT riesci ad avvicinarti in modo più preciso al suono che vuoi "clonare", con quello a modelli fisici ti accontenti di una approssimazione, ma per la seconda soluzione, si guadagna in termini computazionali.