최근 G6 Pro를 중고로 구매하면서 가지고있던 음원들을 싹 정리하였다.
하는김에 가사도 정리하려고 metaflac을 이용하여 LYRICS 태그를 추가하였음에도 가사가 뜨지 않아 apk를 추출하여 로직을 확인하게 되었다.
아래는 확인한 com.lge.music.MusicUtils 클래스의 getLyrics 메서드
public static String getLyrics(Context context) {
if (mPlayType != Defs.PLAY_TYPE_LOCAL) {
ELog.m111d("It is not Local Type.");
return null;
}
try {
String contentPath = sService.getPath();
String lyricsText = "";
if (contentPath == null) {
return lyricsText;
}
String filePath = getFilePath(context, contentPath);
String lyricsTemp = null;
if (!TextUtils.isEmpty(filePath)) {
String mimeType = getMimeTypeFromData(context, filePath);
ELog.m111d("mimeType : " + mimeType);
if ("audio/flac".equals(mimeType) || "audio/vorbis".equals(mimeType) || "application/ogg".equals(mimeType)) {
MediaExtractor mediaExtractor = new MediaExtractor();
mediaExtractor.setDataSource(filePath);
lyricsTemp = mediaExtractor.getTrackFormat(0).getString("unsynced-lyrics");
} else {
Lyrics file = new Lyrics(filePath);
if (file != null) {
lyricsTemp = file.getLyricsText();
}
}
ELog.m111d("lyricsTemp : " + lyricsTemp);
}
if (TextUtils.isEmpty(lyricsTemp)) {
return "";
}
return lyricsTemp.replace("\n\r", StringUtil.f539LF).concat(StringUtil.f539LF);
} catch (Exception e) {
ELog.m114e("Exception:: " + e.toString());
return null;
}
}
flac, vorbis 타입은 안드로이드의 MediaExtractor를 이용하여
lyricsTemp = mediaExtractor.getTrackFormat(0).getString(“unsynced-lyrics“); 를 실행하여 가사를 가져오는것으로 확인된다.
아래 metaflac 명령어를 이용하여 “UNSYNCEDLYRICS” 태그로 추가하니
metaflac --set-tag="UNSYNCEDLYRICS=TEST LYRICS
TEST LYRICS
TEST LYRICS
TEST LYRICS
TEST LYRICS" test.flac
가사가 잘 뜬다.
ps
“setprop persist.service.main.enable 1″을 하면 로그를 볼 수 있다.
삼성이나 서드파티앱에서 지원되는 LRC와 같은 싱크가사는 지원되지 않는다. ㅠ