Estoy usando el Audio Capture sample on android.com para grabar y reproducir audio en dispositivos reales. (Teclado táctil de Motorola y Samsung Galaxy S).MediaPlayer error -2147483648 al reproducir archivos en el almacenamiento interno
Cuando defino la ruta del archivo de audio como
mFile = Environment.getExternalStorageDirectory().getAbsolutePath();
de grabación y reproducción de obras.
Pero si fijo el archivo de audio como
mFile = getFilesDir().getAbsolutePath();
mFile = getDir("media", Context.MODE_PRIVATE).getAbsolutePath();
O
mFile = getDir("media", Context.MODE_WORLD_READABLE).getAbsolutePath();
registro parece funcionar, pero la reproducción falla con
ERROR/MediaPlayer (4559): error (1, -2147483648)
Qué función devolverá el directorio correcto almacenamiento interno para guardar archivos de audio para su reproducción sólo dentro de mi aplicación?
El código en cuestión está en mi función onCreate
. (En el ejemplo, lo tienen en el constructor, pero movido a onCreate porque de lo contrario getFilesDir() y getDir() no tienen ningún contexto para trabajar.)
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
// mFile = Environment.getExternalStorageDirectory().getAbsolutePath(); // OK
// mFile = getFilesDir().getAbsolutePath(); // BAD
// mFile = getDir("media", Context.MODE_PRIVATE).getAbsolutePath(); // BAD
mFile = getDir("media", Context.MODE_WORLD_READABLE).getAbsolutePath(); // BAD
mFile += "/audiorecordtest.3gp";
Log.e(LOG_TAG,mFile);
// ...
}
Cuando grabo en almacenamiento externo (y la reproducción funciona correctamente), el registro es el siguiente:
06-17 10:07:30.890: DEBUG/AudioHardwareTegra(85): getInputBufferSize: returns 320 for rate 8000
06-17 10:07:30.900: INFO/MPEG4Writer(85): limits: 2147483647/0 bytes/us, bit rate: 12200 bps and the estimated moov size 3072 bytes
06-17 10:07:30.960: DEBUG/AudioHardwareTegra(85): setDriver_l: Analog mic? yes. Bluetooth? no.
06-17 10:07:31.100: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:07:31.100: INFO/MPEG4Writer(85): setStartTimestampUs: 86380
06-17 10:07:31.100: INFO/MPEG4Writer(85): Earliest track starting time: 86380
06-17 10:07:34.350: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:07:34.450: INFO/MPEG4Writer(85): Received total/0-length (167/0) buffers and encoded 167 frames. - audio
06-17 10:07:34.450: INFO/MPEG4Writer(85): Audio track drift time: -20309 us
06-17 10:07:34.450: DEBUG/MPEG4Writer(85): Stopping Audio track source
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Audio track stopped
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Stopping writer thread
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): 0 chunks are written in the last batch
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Writer thread stopped
06-17 10:07:34.470: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:07:34.470: WARN/MediaRecorder(4472): mediarecorder went away with unhandled events
06-17 10:07:40.310: INFO/StagefrightPlayer(85): setDataSource('/mnt/sdcard/audiorecordtest.3gp')
06-17 10:07:46.590: DEBUG/AudioHardwareTegra(85): AudioStreamOutTegra::flush()
06-17 10:07:46.670: DEBUG/AudioHardwareTegra(85): AudioStreamOutTegra::flush() returns
Cuando grabo al almacenamiento interno (y pierde), el registro es el siguiente:
06-17 10:08:28.380: DEBUG/AudioHardwareTegra(85): getInputBufferSize: returns 320 for rate 8000
06-17 10:08:28.380: INFO/MPEG4Writer(85): limits: 2147483647/0 bytes/us, bit rate: 12200 bps and the estimated moov size 3072 bytes
06-17 10:08:28.440: DEBUG/AudioHardwareTegra(85): setDriver_l: Analog mic? yes. Bluetooth? no.
06-17 10:08:28.970: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:08:28.970: INFO/MPEG4Writer(85): setStartTimestampUs: 83095
06-17 10:08:28.970: INFO/MPEG4Writer(85): Earliest track starting time: 83095
06-17 10:08:34.020: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:08:34.080: WARN/AudioFlinger(85): RecordThread: buffer overflow
06-17 10:08:34.090: INFO/MPEG4Writer(85): Received total/0-length (257/0) buffers and encoded 257 frames. - audio
06-17 10:08:34.090: INFO/MPEG4Writer(85): Audio track drift time: -385311 us
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping Audio track source
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Audio track stopped
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping writer thread
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): 0 chunks are written in the last batch
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Writer thread stopped
06-17 10:08:34.090: DEBUG/MPEG4Writer(85): Stopping Audio track
06-17 10:08:34.100: WARN/MediaRecorder(4559): mediarecorder went away with unhandled events
06-17 10:08:40.740: INFO/StagefrightPlayer(85): setDataSource('/data/data/my.record.test/files/audiorecordtest.3gp')
06-17 10:08:40.740: ERROR/MediaPlayer(4559): error (1, -2147483648)
06-17 10:08:40.740: ERROR/AudioRecordTest(4559): prepare() failed
las secciones de grabación de la mirada de registro l Argely es lo mismo para mí, así que creo que está grabando, pero no sé cómo revisar el archivo de ninguna manera además de reproducirlo. ;-)
El registro de errores es similar cuando uso getDir().
Gracias chicos por la sugerencia .close(); Acabo de agregarlo a mi respuesta. –