elaborazione di file audio in C ++

2

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.

    
posta Pascal Engeler 16.06.2015 - 10:11
fonte

2 risposte

1

What does the data in an audio file tell me?

L'intestazione indica la frequenza di campionamento, il formato dei dati (compresso o grezzo, intero o float, quanti bit per campione), il numero di canali (mono, stereo o più canali). I dati reali descrivono l'ampiezza del segnale in funzione del tempo.

How can I get it to a state such that I can do a frequency analysis? How can this be done in real time, while playing the audio file?

Di solito si avvia un thread di background audio i / o che richiama ripetutamente la funzione di elaborazione quando è disponibile un nuovo buffer di audio in ingresso (alcuni millisecondi). In questa funzione si elabora l'audio e si può chiamare un'altra funzione della libreria audio per aggiungere un buffer alla coda di emissione audio.

Puoi anche aggiornare le tue strutture dati, come la FFT dell'ultimo x millisec. È quindi possibile contrassegnare la finestra grafica FFT 'dirty' per attivare un nuovo aggiornamento sul thread dell'interfaccia utente.

Is SDL a good choice for this, or is there a better way without taking away all the work

Raccomando JUCE dal momento che contiene tutto ciò di cui hai bisogno, dall'ingresso audio indipendente dalla piattaforma all'interfaccia utente con la grafica. C'è un'applicazione demo che mostra tutte le funzionalità e serve anche come una raccolta di esempi di codice.

    
risposta data 13.07.2015 - 01:17
fonte
0

Ecco una buona libreria per aprire e leggere un file audio. Supporta la maggior parte dei codec aperti e non è così complesso come ffmpeg. Tuttavia non supporta alcun codec chiuso come mp3. È scritto in puro C.

link

Per analizzare l'audio puoi usare fftw3 per fare un dft per analizzare l'audio.

La maggior parte delle librerie audio, ho trovato sono quasi pura C.

Oltre a questo puoi usare quello che vuoi per gestire il gui.

    
risposta data 31.12.2015 - 00:25
fonte

Leggi altre domande sui tag