2009-09-19 27 views
20

Quali sono le mie opzioni per riprodurre l'audio simultaneo su un dispositivo Android con la minore quantità di latenza? Prenderò qualcosa di decente dall'SDK in scatola, o è chiedere troppo? La documentazione afferma che la classe SoundPool è in grado di riprodurre più suoni contemporaneamente con prestazioni relativamente buone, ma dopo aver eseguito alcuni test nell'emulatore e su un dispositivo fisico sembra piuttosto debole. C'è forse un trucco, o devo andare ad un livello molto più basso per questo genere di cose? Ho provato a utilizzare un singolo pool audio con più campioni caricati e ho provato più pool di suoni ciascuno gestendo un singolo campione. Sto eseguendo il precaricamento di tutto, in modo che quando tento di riprodurre non venga eseguito alcun codice aggiuntivo oltre alla chiamata a SoundPool.play().Api audio a bassa latenza per Android?

risposta

4

Non ho esperienza Android, ma ho scritto cose simili per Windows Mobile. I dispositivi stessi sono certamente in grado di mixare più suoni in tempo reale con una bassa latenza (meno di 25 ms), sebbene con "multiple" intendo forse 4 o 5 (e non da 30 a 40). Tuttavia, sono stato in grado di ottenere questo risultato soddisfacentemente solo scrivendo il mio codice che ha effettuato il missaggio internamente e ho avuto accesso all'API di riproduzione audio di basso livello solo per riprodurre l'output misto finale. I modi più alti di suonare i suoni nel .Net Compact Framework sono teoricamente capaci di polifonia, ma in pratica funzionano in modo orribile (un sacco di problemi, balbuzie e distorsioni).

Sospetto che l'SDK audio Android abbia lo stesso problema, quindi potrebbe essere necessario scriverne uno proprio.

+0

Sono disposto a provare ciò che hai suggerito qui per registrazione/riproduzione audio a bassa latenza. Ma penso di aver bisogno di più indicazioni rispetto alla risposta attuale. Potresti descrivere di più quello che hai fatto per WinPhone? –

6

Un numero di persone è interessato all'audio a bassa latenza su Andriod. Qui ci sono i fili che sto seguendo sul tema: argomenti correlati

  • Un wave copertura audio da conferenza I/O di quest'anno.
  • Un Android issue sul supporto per l'audio a bassa latenza nell'NDK.

Questo post suggerisce che i dispositivi Android hanno driver ALSA (capaci di audio a bassa latenza) - ma sembra che la funzionalità a bassa latenza non è esposta alle applicazioni tramite il NDK.

Non ho esperienza diretta con Android, ma da quello che ho letto, bassa latenza (meno di < 10 ms circa) non è ancora una realtà. Si prega di inviare qualsiasi esperienza in contrario!

6

Android 2.3 ora supporta l'accesso nativo alle API audio (tramite OpenSL) per applicazioni a bassa latenza.

Tuttavia, non tutti i dispositivi hardware avranno un profilo di funzionalità audio a bassa latenza. Così le applicazioni che richiedono dispositivi di filtraggio shouuld audio a bassa latenza non lo sostengono nel mercato Android specificando quanto segue nel manifesto:

<uses-feature android:name="android.hardware.audio.low_latency"/> 
+0

Ho un telefono con 2,2 ora e una CPU da 1 GHz, e ho visto un sacco di app fare un lavoro decente.Dopo aver fatto qualche ricerca, sono abbastanza sicuro che stanno decodificando i dati PCM da file audio e scrivendoli direttamente su AudioTrack, e che è abbastanza bassa latenza per un sequencer/player audio base – Rich

+0

@Rich: ho provato con 2.2 e un telefono da 1 GHz e la dimensione minima del buffer che Audiotrack mi dà sono 1400 quando in 8kHz, Mono. Quello è 175 ms. Per la mia funzionalità desiderata, è quella di rallentare. – AudioDroid

+7

È un espediente di marketing: far credere a qualcuno che stia al passo con la mela. Avrebbe dovuto essere chiamato "latenza media". Non penso che ci siano troppi casi d'uso che possono beneficiare della latenza di 50 ms. È troppo lento per un respsonse audio adeguato e un requisito non necessario per qualsiasi altra cosa. –

1

Si prega di vedere la mia risposta a Android: sound API (deterministic, low latency).

La latenza di un dispositivo Android dipende meno dall'API e più dall'hardware e dai driver per quel particolare dispositivo. L'attivazione della riproduzione a bassa latenza consuma più energia e aumenta le probabilità di problemi audio, quindi molti OEM amplieranno intenzionalmente i buffer di riproduzione.

Problemi correlati