2011-02-28 26 views
11

Estoy desarrollando un reproductor de audio en Android. Por lo tanto, quiero agregar los detalles de la canción reproducida, es decir, el nombre del artista, la duración, la velocidad de bits y la frecuencia de muestreo. Puedo obtener el nombre del artista y la duración de un archivo de música usando MediaStore.Audio.Media library. Pero no puedo obtener la velocidad de bits y la frecuencia de muestreo del mismo archivo. Entonces, ¿cómo puedo obtener lo mismo?¿Cómo obtener la frecuencia de muestreo y la frecuencia del archivo de música (MP3) en android?

Como sé, se puede hacer mediante el uso de la biblioteca nativa. Pero no sé cómo? Entonces, ¿alguien puede ayudarme en esto?

+0

creo que para el cálculo de la frecuencia, que tiene que hacer una de Fourier transformada rápida (FFT). – RoflcoptrException

+0

Una FFT daría la distribución de frecuencia del sonido real, no la frecuencia de muestreo, ¿no? –

Respuesta

15

Puede aproximarla al dividir el tamaño del archivo por la duración de la música en cuestión de segundos, por ejemplo, de un AAC aleatorio codificado M4A en mi biblioteca:

File Size: 10.3MB (87013064 bits) 
Length: 5:16 (316 Seconds) 
Which gives: 87013064 bits/316 seconds = 273426.147 bits/sec or ~273kbps 
Actual Bitrate: 259kbps 

Como la mayoría de los archivos de audio tienen un conjunto conocido de niveles de velocidad de bits válidos, puede usar eso para subir la velocidad de bits al nivel apropiado para visualizar.

+0

Gracias Jake, puedo obtener la Velocidad de bits usando la fórmula anterior. ¿Qué hay de la frecuencia? – Sandy

+0

Eso es más difícil, ya que la velocidad de muestreo sería bastante difícil de obtener de otra información. Casi todos los audios de audio después de los CD usan muestreo a 44.1KHz, por lo que podría ser seguro suponer eso, o simplemente no mostrarlo porque tiene poca importancia para muchos usuarios. –

+0

Sí, tienes razón. Pero puedo obtener ambos usando bibliotecas nativas en Android. Pero no sé cómo usarlo. – Sandy

4

MediaMetadataRetriever ofrece METADATA_KEY_DURATION que puede dividir con el tamaño de archivo de la tasa de bits.

+1

-1, esto tampoco obtiene la frecuencia de muestreo – Brad

4

Yo sé que ha sido resuelto pero me dio mucho mejor manera de obtener respuesta precisa

MediaExtractor mex = new MediaExtractor(); 
try { 
    mex.setDataSource(path);// the adresss location of the sound on sdcard. 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

MediaFormat mf = mex.getTrackFormat(0); 

int bitRate = mf.getInteger(MediaFormat.KEY_BIT_RATE); 
int sampleRate = mf.getInteger(MediaFormat.KEY_SAMPLE_RATE); 
Cuestiones relacionadas