View Full Version : [c++] Programma analizzare segnale audio
allora ragazzi premetto che io non ne so molto di programmazione e so che quello che sto per proporvi è un programma abbastanza complicato ma non vi preoccupate verrò aiutato da una persona + esperta di me. Sono qua per chiedervi se avete delle idee da darmi... il programma che vorrei realizzare è un programma in grado di analizzare un segnale audio in uscita dalla scheda audio (per intenderci una canzone) e dirmi che genere di canzone sia se:
rock/metal , pop , classica , colonna sonora , country. La mia prof mi ha suggerito di fare un programma in grado di riconoscere determinati attributi di un segnale audio e a seconda degli attributi della canzone sapermi dire il genere.
Cosa ne dite? avete idee, suggerimenti?
anche il + piccolo comemnto è di vitale importanza. Grazie in anticipo a tutti
variabilepippo
14-10-2008, 15:02
Puoi cercare di farlo dopo aver classificato i generi in base alle componenti in frequenza tipiche di ogni genere, ma non è una cosa banalissima da implementare (anche per un programmatore non propriamente alle prime armi) e soprattutto non è facile avere un buon livello di affidabilità.
Imho è impossibile ottenere un successo al 100%. Mi spiego: non esiste una catalogazione assoluta dei generi nemmeno per un ascoltatore qualunque, quindi non può esistere per un computer.
Fra le categorie metti tra l'altro "colonna sonora", che non è una categoria possibile in quanto una colonna sonora può essere una canzone di uno qualsiasi degli altri generi.
L'unica possibilità è quella di isolare gli strumenti musicali in modo da classificarne il tipo, ma anche qui non c'è una classificazione assoluta, una chitarra distorta ci può essere anche nelle canzoni pop.
Poi ci sta che la classificazione possa essere anche fatta per caratteristiche collaterali del mixeraggio o del tipo di musica: saturazione molto alta nelle canzoni metal, spiccata polifonia per la musica classica, voce che risalta più sul resto degli strumenti per il pop...insomma ci sarebbe da analizzare molti brani per trovare caretteristiche in comune.
Però mi piacerebbe dare in pasto ad una bella rete neurale una completa libreria musicale e poi vedere cosa succede :D
in parole semplici semplici secondo voi quale sarebbe l' idea + semplice ed affidabile da realizzare?
variabilepippo
14-10-2008, 20:10
in parole semplici semplici secondo voi quale sarebbe l' idea + semplice ed affidabile da realizzare?
Chiedere alla tua prof come lei intende classificare i generi da un punto di vista "tecnico", poi cercare di implementare le idee della professoressa.
Fai la trasformata di fourier di un certo numero (alto) di periodi temporali (piccoli) del segnale.
Per ogni periodo conoscerai la distribuzione delle varie frequenze.
Fai al pari di come fanno i software antispam una specie di apprendimento manuale su un certo numero di canzoni.
A quel punti utilizzi un filtro di bayes per valutare la probabilità che in un certo genere musicale si trovi la combinazione di certe frequenze a certe ampiezze.
Credo che comunque sia un po' complicato. Di certo un minimo di esperienza di programmazione la devi avere.
in parole semplici semplici secondo voi quale sarebbe l' idea + semplice ed affidabile da realizzare?
leggere il genere dal tag id3v2 dell'mp3 che devi analizzare :D
Ho cercato un po' in giro e ho trovato questo software: Tunatic.
Se ho capito bene, secondo quanto dice il sito, basta dargli in pasto un brano audio qualunque(anche preso dal microfono, ma non cantato dall'utente), e lui ti restituisce i tag ID3 se avviene il riconoscimento.
http://www.wildbits.com/tunatic/
Spero di esserti stato utile, almeno nel farti sapere che è possibile (sarebbe bello capire come si fa :D ).
Offtopic: Mi sembra che sta prof. sia un po' schizzata (spero che tu sia all'università come minimo, se si permette di fare queste domande :asd: )
Ho cercato un po' in giro e ho trovato questo software: Tunatic.
Se ho capito bene, secondo quanto dice il sito, basta dargli in pasto un brano audio qualunque(anche preso dal microfono, ma non cantato dall'utente), e lui ti restituisce i tag ID3 se avviene il riconoscimento.
http://www.wildbits.com/tunatic/
Spero di esserti stato utile, almeno nel farti sapere che è possibile (sarebbe bello capire come si fa :D ).
Offtopic: Mi sembra che sta prof. sia un po' schizzata (spero che tu sia all'università come minimo, se si permette di fare queste domande :asd: )
Ma Tunatic fa una cosa diversa: è semplicemente basato su un server dove sono memorizzate tutte le canzoni e i relativi tag.
ok grazie mille a tutti per le risposte... comunque non ho bisogno proprio che distingua esattamente i generi, mi basta che distingua le canzoni dove non c' è il cantante da quelle con un ritmo un po' + acceso come rock/ metal a quelle con un ritmo + rilassato come pop, classica ok?
su mi accontentassi di questo sarebbe + facile da fare il programma?
grazie in anticipo
Ma Tunatic fa una cosa diversa: è semplicemente basato su un server dove sono memorizzate tutte le canzoni e i relativi tag.
Si ma in un certo senso mi pare di aver capito che analizza il segnale audio della canzone, e poi lo confronta con le impronte che ha nel db, ricavando i tag.
tomminno
15-10-2008, 15:37
allora ragazzi premetto che io non ne so molto di programmazione e so che quello che sto per proporvi è un programma abbastanza complicato ma non vi preoccupate verrò aiutato da una persona + esperta di me. Sono qua per chiedervi se avete delle idee da darmi... il programma che vorrei realizzare è un programma in grado di analizzare un segnale audio in uscita dalla scheda audio (per intenderci una canzone) e dirmi che genere di canzone sia se:
rock/metal , pop , classica , colonna sonora , country. La mia prof mi ha suggerito di fare un programma in grado di riconoscere determinati attributi di un segnale audio e a seconda degli attributi della canzone sapermi dire il genere.
Cosa ne dite? avete idee, suggerimenti?
anche il + piccolo comemnto è di vitale importanza. Grazie in anticipo a tutti
E' stato l'argomento della mia tesi... durata 1 anno.
Conoscenze matematiche coinvolte tante, perfino troppe.
I parametri base sono quelli energetici (che non servono a niente), poi c'è il cepstrum in tutte le sue varianti, poi gli HMM, filtri adattativi...
Devi implementarti come minimo anche un algoritmo di beat tracking.
tomminno
15-10-2008, 15:40
ok grazie mille a tutti per le risposte... comunque non ho bisogno proprio che distingua esattamente i generi, mi basta che distingua le canzoni dove non c' è il cantante da quelle con un ritmo un po' + acceso come rock/ metal a quelle con un ritmo + rilassato come pop, classica ok?
su mi accontentassi di questo sarebbe + facile da fare il programma?
grazie in anticipo
Per identificare la presenza di un cantante basta eseguire un effetto karaoke (banalmente sottrazione tra i 2 canali) ed andare ad analizzare l'energia sottratta al segnale originale e le bande in cui questa avviene.
Per quanto riguarda il ritmo, gli algoritmi di beat tracking non sono proprio facilissimi da implementare, inoltre possono essere computazionalmente assai onerosi
Come te la cavi con l'inglese?
Male? Allora imparalo che è fondamentale in questo lavoro. :D
Altrimenti vedi qui. http://www.dspguide.com
Ottima guida, con codice di esempio.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.