Ho pensato al seguente progetto che voglio perseguire:
Voglio creare un programma C ++, in grado di riprodurre audiofili e visualizzare le ampiezze delle singole bande di frequenza in tempo reale (ad es. con barre).
Ho fatto qualche ricerca su google e ho scoperto che SDL fornisce librerie che potrebbero fare il trucco. Innanzitutto leggo il formato in cui viene salvato un file audio (file WAV non compressi più specifici, poiché sembrano essere i più facili da leggere). Tuttavia, anche se ora so come posso ottenere i dati del file, non so cosa mi dice. Voglio dire, quanti byte devo leggere per ottenere un campione, come viene salvato il campione (penso che non sia una rappresentazione diretta dello spazio di frequenza), e quindi non ho davvero idea di come lavorarci. Come diretta conseguenza, non so nemmeno come riprodurre i file. Poi ho trovato SDL e ho pensato che dovrebbe essere in grado di estrarre le informazioni di cui ho bisogno. Guardando attraverso il wiki SDL non sono stato in grado di scoprire come devo procedere, però.
Ho fatto qualche programmazione di base in C ++ in passato, penso di essere su un livello abbastanza alto per farlo dal punto di vista della programmazione. Ho, tuttavia, ora lavorato con file binari finora. Inoltre ho un strong background matematico, la matematica non è affatto un problema.
L'obiettivo finale sarebbe probabilmente quello di fare l'analisi di frequenza di tutti gli output o input audio, ma ho letto che questo dipende strongmente dal sistema operativo utilizzato. Inoltre, applicare i filtri in tempo reale sarebbe una buona cosa da fare, ma questo dovrebbe essere piuttosto avanzato. Quindi solo riprodurre un file audio e visualizzare sarebbe il primo obiettivo.
Quindi, per riassumere, penso che la mia domanda sia la seguente:
Che cosa mi dicono i dati in un file audio? Come posso portarlo a uno stato tale da poter eseguire un'analisi di frequenza? Come si può fare in tempo reale mentre si riproduce il file audio? SDL è una buona scelta per questo, o c'è un modo migliore senza portare via tutto il lavoro (non vorrei usare solo un programma che fa tutto ciò di cui ho bisogno, voglio fare qualcosa di mio!)?
Qualsiasi idea e input sono molto apprezzati!
PS: Non sono sicuro di essere nel giusto stackexchange qui, ma davvero non sono riuscito a scoprire dove altro si sarebbe adattato.