2011-01-24 10 views
9

Estoy probando esto en un Samsung Galaxy S i9000.¿Por qué AudioRecord.getMinBufferSize devuelve ERROR_BAD_VALUE (-2)?

int sampleRate = 44100; 
int bufferSize = AudioRecord.getMinBufferSize(sampleRate, 
    AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT); 

Devuelve -2 ERROR_BAD_VALUE.

La frecuencia de muestreo nativo es 44100Hz, como devuelto por

AudioTrack.getNativeOutputSampleRate (AudioManager.STREAM_SYSTEM).

He intentado fijar de sampleRate a 1000, 8000, 22100 y 44100. También he intentado cambiar AudioFormat.CHANNEL_IN_MONO a AudioFormat.CHANNEL_CONFIGURATION_MONO. También probé STEREO (ambos IN_STEREO y CONFIGURATION_STEREO). También probé la codificación de 16 bits en lugar de 8 bits.

Actualización: mi Manifiesto tiene AUDIO_RECORD como permiso.

Sigo obteniendo -2 como resultado. ¿Por qué está pasando esto?

+0

Hola, ¿esto alguna vez se resolvió, o alguna idea? Gracias. –

Respuesta

17

Desde el archivo de origen plataforma AudioRecord.java:

static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat) { 
    ... 
    // PCM_8BIT is not supported at the moment 
    if (audioFormat != AudioFormat.ENCODING_PCM_16BIT) { 
     loge("getMinBufferSize(): Invalid audio format."); 
     return AudioRecord.ERROR_BAD_VALUE; 
    } 
    ... 
} 

Parece que su elección es de 16 bits o nada. : \

+1

+1. Dijo que también intentó con 16 bits, por lo que el único otro lugar en ese método donde se puede devolver ERROR_BAD_VALUE en getMinBufferSize es la línea 472-475. – McStretch

+0

Gracias por la información. McStretch es correcto, también probé ENCODING_PCM_16BIT. – Tom

+0

Esto significa que native_get_min_buff_size (sampleRateInHz, channelCount, audioFormat) devuelve 0. ¿Cómo puede suceder eso? – Tom

0

En el emulador siempre devolverá -2. Con el mismo código, funcionará bien en el móvil real.

+0

lo siento folk, devuelve -2 en dispositivo real también – IronBlossom

Cuestiones relacionadas