글
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