Invece di pre-registrare i file WAV e incorporarli nell'applicazione, è possibile invece generare l'audio WAV a canale diviso in memoria dal codice e quindi salvarlo come file WAV che si desidera riprodurre con SoundPool o riprodurre il audio direttamente con AudioTrack (io consiglierei quest'ultimo).
L'audio stesso è solo una matrice di numeri interi (di solito) a 2 byte. Con stereo, i campioni sinistro e destro sono intercalati in tutto l'array (quindi il campione [0] è il primo campione L, il campione [1] è il primo campione R, il campione [2] è il secondo campione L ecc.). Quindi quando la tua app si avvia, dovrai creare un array per tutto il tempo necessario (con audio di qualità CD, l'array avrà bisogno di 88200 elementi per ogni secondo di audio), quindi riempire i campioni con i valori calcolati per il tono, quindi passare l'array su AudioTrack per giocare.
Oppure si salva l'audio come file WAV e si suona con SoundPool (che potrebbe effettivamente essere migliore dal punto di vista dell'impronta di memoria).Il formato WAV è molto semplice scrivere (lettura è più complicato): solo un'intestazione 44-byte con varie proprietà, e quindi i dati audio stesso.
Penso di aver già risposto a una domanda simile a Android prima, quindi vado a vedere se ho qualche codice di base per farlo.
Non
me, ma qualche buon codice per la lettura dei file WAV e la scrittura in java:
http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java
Nel passaggio 4, penso che la frequenza sinistra e quella destra non giochino insieme. Ho bisogno di suonare la frequenza sinistra e destra insieme. –
@ NeigylR.Noval Hai provato? Finché abbiamo costruito SoundPool usando 2 come max, entrambi suoneranno insieme. –