2011-12-02 8 views
3

에 나는 어떻게 든이 tutorial느린 MP3 디코딩은 안드로이드

에서 기반의 안드로이드 MP3 디코딩 작업을 봤는데, 내 경우에는 완전히 받아 들일 수 4:30 시간 노래를 디코딩하는 데 1 분 이상 소요됩니다. 나는 그 문제가 무엇인지 알아 내고 속도를 향상시키는 방법을 찾고 있었다. 며칠 동안 인터넷을 통해 검색 중이며 리소스가 매우 제한되어 있기 때문에 이유를 파악하지 못했습니다. 나는 연구에서 아무 것도 얻을 수 없었기 때문에 여기서 완전히 갇혀 있다고 생각합니다.

Android에서 MP3 파일 처리에 대한 정보를 누군가가 지적 할 수 있습니까? Libmad를 사용하여 MP3 파일을 디코딩하고 NDK로 Android에 포팅합니다. 어쩌면 누군가 MP3 디코딩을위한 대안을 지적 할 수 있습니다. 그것에 대해 어떤 정보를 주셔서 감사합니다. 대단히 감사합니다.

+0

의 찬성을 포기했다는 말을하고 난 내 안드로이드 응용 프로그램에서 MP3 파일을 연결 작업입니다. 두 개 이상의 mp3 파일을 디코딩하고 하나의 파일로 인코딩하는 방법을 설명해 주시겠습니까? 나는 많이 검색했지만 도움이되는 것을 찾지 못했습니다. 안드로이드에서 mp3 인코딩 및 디코딩을 해본 적이 있다고하셨습니다. 코드 스 니펫을 공유 할 수 있습니까? 그것은 큰 도움이 될 것입니다. 고맙습니다 – Harsh

답변

1

당신이 찾고있는 모든 답변은 이미 튜토리얼 페이지에 있습니다. 그는이 문서에서 설명 하듯이

는 데 걸리는 시간은 정상적인 것 같다 : 192kbps로 인코딩 된 47 분 길이 노래 :

내가 6 인 도구에 의해 노래 "분열"로 그것을 테스트. 파일 크기가 9.31MB로 꽤 크다 mp3 imo ... 어떤 최적화 (엄지 코드, -O0, -DFPM_DEFAULT == libmad의 표준 고정 소수점 수학, 팔 조립자 최적화 된 fp 수학)가 없으면 완전한 내 마일스톤에서 파일을 가져 오는 데 184 초가 걸립니다.

그런 다음 그는 어떻게 최적화했는지 설명합니다. 같은 단계를 따라야합니다.

신성한 똥, 배트맨! 내가 buffer.get (샘플) 호출을 제거하면 이 44 초가됩니다. 놀랄 만한. 지금 나는 여전히 그것이 최적화를 추가하기 시작했기 때문에 느린 것이라고 라고 생각했다. 내가 한 첫 번째 일은 으로 엄지 코드 대신 직선 팔로 컴파일하는 것입니다. 당신은 Android.mk 파일에이를 배치하여 그렇게 할 수있는 NDK 툴체인을 알 수 있습니다 :이

LOCAL_ARM_MODE := arm 

디코딩 36 초 정도 걸립니다 가능. 내가 한 다음은 -O3을 CFLAG로 통한 적극적인 최적화였습니다. 그건 단지 2 더 초를 면도 했으므로 아무 것도 쓸 수 없습니다. 마지막 최적화는 libmad specific입니다. 위에 링크 된 config.h 파일은 libmad가 사용해야하는 고정 소수점 연산 모드 을 정의하지 않습니다. 이제, libmad의 fixed.h에서 을 보았을 때 고정 소수점 수학을위한 몇 가지 옵션을 조용하게 볼 수 있습니다. 또한 팔 프로세서를위한 전용 옵션이 있습니다. 은 무거운 작업을 수행하기 위해 멋진 작은 팔 어셈블러 코드를 사용합니다. 은 -DFPM_ARM을 CFLAG로 전달하여이 기능을 활성화 할 수 있습니다. 이제 그 일은 놀라운 일이되었습니다! 나는 지금 디코딩을 위해 20 초 동안 mp3 인코딩 된 407 초를 오디오로 내려 간다. 그것은 대략 20x 실시간으로 나에게 완전히 괜찮습니다. 내가 선택한 노래 노래 길이 스펙트럼의 끝 부분에 나는 내 다음 오디오 게임 프로젝트에서 처리해야합니다. 사용자가 사용하는 노래는 번 처리되며 그 20 초를 기다리는 것은 내 책에서 괜찮습니다.

그리고 가장 중요한 부분은 온다 :

나는 내가 그것을 엉망 약간의 로 이식 된 오디오 프레임 워크의 소스를 공개하지 않으며 필요가 두려워 일부는 정리 작업을합니다.

그리고 많은 라이브러리에 대한 코멘트 호언 장담에 사람들은 내가 안드로이드에 새로운 오전 libmpg123

+0

나는 그가 한 모든 일을 실제로 따라갔습니다. 변화가 없습니다. 그물에 다른 참조가 없기 때문에 나는이 모든 것을 따랐다. 그래서이 튜토리얼 만 나의 유일한 근원이다. 나는 그의 것보다 더 빠른 안드로이드를 사용하기조차하기 때문에 기술적으로 디코딩은 내 컴퓨터에서 더 빨라야한다. –

+0

메모와 그의 사례는 약간 다릅니다. 그의 경우는 독립형 오디오 응용 프로그램 인 것처럼 보이지만 광산은 응용 프로그램 내부의 하위 응용 프로그램입니다. 이것이 내 처리 속도에 영향을 미치는지 확실하지 않습니다. –

+1

아마도 버퍼 크기를 늘리고 차이가 있는지 확인하려고 할 수 있습니다. – Caner

관련 문제