Cómo sincronizar letras para el reproductor de música de Android
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.