글
MAD 라이브러리 라이선스가 GPL이다보니 다른 라이선스를 가진 MP3 디코더를 찾아보다가 JLayer를 적용해보았습니다.
MAD 라이브러리에비해 조금 느리기는 하지만 사용 방법이 상당히 쉬운 편이어서 어렵지 않게 적용할 수 있었습니다.
JLayer가 적용된 ringdroid는 https://github.com/wkpark/ringdroid master 브렌치에 적용하였습니다.
다음은 JLayer가 적용된 소스코드의 일부입니다.
(MAD 라이브러리와 비교했을때, JLayer는 상당히 느린편이네요)
... mFileSize = (int)mInputFile.length(); FileInputStream stream = new FileInputStream(mInputFile); Decoder decoder = new Decoder(); Bitstream bitstream = new Bitstream(stream); int pos = 0; int gain = 0; try { Header header = bitstream.readFrame(); int nChannel = (header.mode() == Header.SINGLE_CHANNEL) ? 1 : 2; mGlobalChannels = nChannel; mLayer = header.layer(); mVersion = header.version(); while (true) { if (mProgressListener != null) { boolean keepGoing = mProgressListener.reportProgress( pos * 1.0 / mFileSize); if (!keepGoing) { break; } } SampleBuffer frame = (SampleBuffer) decoder.decodeFrame(header, bitstream); short[] pcm = frame.getBuffer(); bitstream.closeFrame(); double sum = 0.0f; int k = 0; int tmp; Log.d(TAG, "pcm length = " + frame.getBufferLength()); for (int j = 0; j < frame.getBufferLength(); j++) { tmp = pcm[k] > 0 ? pcm[k] : -pcm[k]; sum += tmp / 32767.0f; k += nChannel; } gain = (int) (sum / frame.getBufferLength() * 255); ...
'안드로이드' 카테고리의 다른 글
Sonic 라이브러리 (2) | 2014.10.02 |
---|---|
ringdroid에 libmpg123 적용하기 (0) | 2014.09.15 |
ringdroid에서 mp3 waveform이 잘못 나오는 문제 수정 (0) | 2014.09.09 |
apk를 unzip으로 풀어서 다시 압축하는 경우 (0) | 2014.09.05 |
젤리빈 소스트리에서 컴파일한 native 라이브러리가 __open_2 심볼을 찾지 못해 오류나는 경우 (0) | 2014.08.30 |
RECENT COMMENT