Ingresso audio FFT

Voglio applicare FFT su un segnale registrato da AudioRecorder e salvato in un file wav. il FFT che sto usando ha un parametro di ingresso Complesso []. Sono confuso, c'è una differenza tra la conversione da byte alla divisione comlex per 32768 e la conversione solo aggiungendo 0 alla parte immaginaria e lasciando la parte reale come un byte?

Edit:

  • come avere l'elemento di elenco avanzato in listview
  • Riconoscimento vocale offline in Android (JellyBean)
  • Come faccio a suonare l'audio facendo clic su un button in un'applicazione Android costruita utilizzando PhoneGap / Cordova?
  • Android - Dove è archiviato SQLite Database
  • Scrivere e leggere i dati json nell'archiviazione interna android
  • Overdraw e il blog di Romain Guy post Android Performance Case Study
  • public Complex[] convertToComplex(byte[] file) { int size= file.length; double[]x=new double[size]; Complex[]data= new Complex[size]; for(int i=0;i<size;i++) { x[i]=file[i]/32768.0; data[i]=new Complex(x[i],0); // Log.d("tag", "indice"+i+":"+data[i]); } return data; } 

  • Testare Android in app fatturazione acquisti reali
  • Perché la firma dell'applicazione cambia in Android dopo un cambio classpath?
  • Che cosa è onCreate (Bundle savedInstanceState)
  • Square's OkHttp. Scarica il progresso
  • Perdita di memory nell'ascoltatore di events
  • Errore: (27, 13) Imansible risolvere: com.google.firebase: firebase-core: 9.8.0
  • 2 Solutions collect form web for “Ingresso audio FFT”

    Se si sta lavorando con l'audio con una profondità di 16 bit (each campione ha 16 bit), each byte avrà solo metà di un campione. Quello che devi fare è lanciare i byte a 16 bit campioni quindi dividere il numero risultante da 32768 (Questa è la grandezza del numero più piccolo di un numero di 2 che il numero di 16 bit può memorizzare cioè 2 ^ 15) per get l'effettivo campione audio che è un numero tra -1 e 1. Si convertirà questo numero in un numero complesso impostando la sua componente immaginaria a 0.

    Un piccolo esempio di C # può essere visto sotto (codice indicativo):

      byte[] myAudioBytes = readAudio(); int numBytes = myAudioBytes.Length; var myAudioSamples = List<short>(); for( int i = 0; i < numBytes; i = i + 2) { //Cast to 16 bit audio and then add sample short sample = (short) ((myAudioBytes[i] << 8 | myAudioBytes[i + 1]) / 32768 ); myAudioSamples.Add(sample); } //Change real audio to Complex audio Complex[] complexAudio = new Complex[myAudioSamples.Length]; int i = 0; foreach(short sample in myAudioSamples) complexAudio[i++] = new Complex(){ Real = sample, Imaginary = 0 }; //Now you can proceed to getting the FFT of your Audio here 

    Speri che il codice vi ha guidato su come gestire l'audio.

    Funzioni generalizzate di FFT come lavorare con arrays di ingressi e uscite complesse. Quindi, per l'input, potrebbe essere necessario creare una serie di numbers complessi conformi alla struttura dei dati complessi che la libreria FFT desidera. Questo sarà probabilmente costituito da un componente reale e un immaginario per ciascuno. Basta impostare la porzione immaginaria su 0. La porzione reale è probabilmente un numero di virgola mobile firmato che dovrebbe essere compreso tra -1.0..1.0, per cui sei sulla buona strada con il dividendo di interi campioni PCM. Tuttavia, quando hai scritto " byte di conversione", che ha sollevato una bandiera rossa. Questi sono probabilmente firmati, piccoli endian, 16-bit interi PCM campioni, quindi assicuratevi di lanciarli di conseguenza prima di dividere 32768 (ma questo è Java, in modo che i tipi verranno applicati un po 'più rigorosamente comunque).

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.