최근 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와 같은 싱크가사는 지원되지 않는다. ㅠ