Red de conocimiento informático - Material del sitio web - Cómo sincronizar letras para el reproductor de música de Android

Cómo sincronizar letras para el reproductor de música de Android

Comience con los conceptos básicos de lectura de archivos de letras:

Clase pública LrcHandle {

Lista privada mWords = new ArrayList();

Lista privada mTimeList = new ArrayList ( );

Lista privada mTimeList = new ArrayList();

// Procesando archivos de letras

public void readLRC(Ruta de cadena) {

Archivo archivo = nuevo Archivo(ruta);

prueba {

FileInputStream fileInputStream = nuevo FileInputStream(archivo);

InputStreamReader inputStreamReader = new InputStreamReader(

fileInputStream, "utf-8");

BufferedReader bufferedReader = new BufferedReader(

inputStreamReader);

Cadena s = "";

mientras ((s = bufferedReader.readLine ()) != null) {

addTimeToList(s);

if ( ( s.indexOf("[ar:") != -1)| (s.indexOf("[ti:") != -1)

|| (s.indexOf("[por: ") != -1)) {

s = s.substring(s.indexOf(":") 1, s.indexOf("]"));

} else {

String ss = s.substring(s.indexOf("["), s.indexOf("]") 1);

s = s.replace( ss , "");

}

mWords.add(s);

}

bufferedReader.close();< / p>

inputStreamReader.close();

file.Reader.close()

fileInputStream.close()

} captura (FileNotFoundException y ) {

e.printStackTrace();

mWords.add("No hay archivo de letras, apúrate y descárgalo"); (IOException e) {

e.printStackTrace();

mWords.add("No se leyó la letra");

fileInputStream.close()add ( "No se lee la letra");

}

<

p>}

Lista pública getWords() {

return mWords;

}

Lista pública getTime() {

return mTimeList;

}

//Tiempo separado

private int timeHandler( String string) {

string = string.parseInt(timeData[2]);

//Calcula el tiempo entre la línea anterior y la siguiente y conviértelo a milisegundos

int currentTime = (minuto * 60 segundos ) * 1000 milisegundos * 10;

return currentTime

}

private void addTimeToList(String string) {

Matcher matcher = Pattern.compile(

"[d{1,2}:d{1,2}([.:]d{1,2})?]") .matcher(cadena);< / p>

if (matcher.find()) {

String str = matcher.group();

mTimeList.add(new LrcHandle().timeHandler(str . substring(1,

str.length()-1)));

}

}

Archivo de letras generales El formato es aproximadamente el siguiente:

[ar: nombre del artista]

[ti: nombre de la canción]

[al: nombre del álbum]

[por: Editor (refiriéndose a la persona que edita las letras de LRC)]

[desplazamiento: valor de compensación de tiempo] en milisegundos, el valor positivo significa avance general, el valor negativo es lo contrario. Se utiliza para ajustar la velocidad general de visualización.

Pero este no es siempre el caso, a veces no hay un identificador como ar: delante, por lo que aquí también proporcionamos otro método de análisis.

El formato de tiempo en los archivos de letras está más unificado: [00:00.50] etc. 00: significa minutos, 00. significa segundos, .50 significa milisegundos; por supuesto, eventualmente los convertiremos a milisegundos para facilitar el procesamiento.