2012-12-29 8 views
6

Il tempo reale non è necessariamente necessario, tuttavia sto creando un gioco per il mio progetto per l'ultimo anno e desidero utilizzare la potenza dell'audio per creare livelli dinamici basati esclusivamente su una traccia musicale in riproduzione. Il mio scopo è creare questo gioco per PS Vita usando PlayStation Mobile e C#, ma se voglio posso passare a C++ e PSP.Hai bisogno di una libreria di analisi audio per creare feedback in tempo reale dal file audio?

Posso usare un file WAV e, si spera, estrarre l'ampiezza della forma d'onda, oltre a calcolare altre caratteristiche come la frequenza media e il BPM approssimativo da questi dati per creare un livello.

Non ho alcuna esitazione nel provare a lavorare con questi dati grezzi, voglio solo sapere un modo in cui posso effettivamente ottenere queste informazioni prima. Se riesco a estrarre i campioni e verificare le diverse caratteristiche di questi campioni, posso memorizzarli e apportare modifiche a volume, altezza e altro per creare note, ecc.

Sto usando C#, ma se possibile, posso o usa p/invoke o cambia il mio progetto su un altro dispositivo che usa C++ al posto di C#.

Sono un po 'in preda al panico qui, perché sono davvero un po' perplesso.

Mille grazie.

risposta

3

Il problema che descrivi qui è uno di musica/audio estrazione di funzioni e esiste un corpo sostanziale di lavoro accademico su cui è possibile attingere. Un altro utile termine dell'arte con cui cercare è Music Information Retrieval (MIR).

L'elenco di "caratteristiche" che i ricercatori hanno tentato di recuperare dalle registrazioni è ampio e vario, da elementi deterministici quali altezza e tonalità per caratteristiche emotive, come "energia".

La maggior parte di questi si rivelano essere più difficile di quanto si possa immaginare, e in genere solo circa il 60-70% esatto - anche se per le vostre esigenze, questo è probabilmente adeguata.

Un buon punto di ingresso può essere scaricato Sonic Visualiser, per il quale esiste un numero elevato di plug-in di estrazione delle caratteristiche e sono open-source. Almeno avrai un'idea di ciò che è possibile.

Aggiornamento: Un altro utile termine d'arte è Rilevamento di inizio - questo in genere viene utilizzato per descrivere gli algoritmi di rilevamento del battito.

4

Purtroppo non penso che sarete in grado di usare C# per farlo - AFAIK, non esiste un compilatore JIT per questo. Ricordo di aver letto qualcosa su Mono, che lo renderebbe disponibile per l'uso con C#, ma non sono sicuro adesso.

Detto questo, vorrei andare con C++. Se si va in questo modo, è possibile utilizzare una vasta quantità di librerie di analisi audio, come CLAM (http://clam-project.org/).

Non fatevi prendere dal panico (immaginate lettere grandi e amichevoli.) Immaginate le parti necessarie per il progetto passo dopo passo, affrontate una per una, e sarete fatti in men che non si dica. =)

1

Aubio è una libreria C/C++ che fa il monitoraggio in campo, rilevamento insorgenza e bpm di monitoraggio, tra le altre cose.

Per quanto riguarda "l'estrazione dell'ampiezza della forma d'onda", la forma d'onda corrisponde all'ampiezza, ad es., puoi scegliere il campione audio con il massimo valore assoluto ogni n campioni e usare quel valore per fare la parte "ampiezza" della visualizzazione.

Here's some code che potrebbe aiutarti a iniziare a leggere i dati WAVE in C#.

Here's some information sulla scrittura di un wrapper C# per la libreria FFTW.