2010-02-25 4 views
12

짧은 버전 : MP3 (이상적으로는 AAC/Ogg/WMA)로 인코딩 된 데이터를 자바 배열 또는 ByteBuffer로 가져 오는 가장 좋은 방법은 무엇입니까? 그러면 나는 을 조작 할 수 있습니까?안드로이드에서 인코딩 된 오디오 데이터 (MP3 등)를 재생하지 않고

나는 느려지고 사운드 파일의 기능 중 하나로서 속도가 느린 프로그램을 함께 모으고있어. 이것은 WAV 파일에 대해 잘 작동하는데 스피커와 스피커로 보내야하는 정확한 이진 데이터입니다. 이제는 MP3 용으로 구현해야합니다 (이상적으로이 도 AAC, Ogg 및 WMA를 지원합니다). , 그 이후 덜 인기가있다 형식이 필요하지 않습니다). 안드로이드는 인터페이스를 공개하지 않고 MP3를 해독하지 않고 디코드하므로, 인터페이스를 생성해야합니다.

1) 내 자신의 디코더를 쓰기 : 내가 다른 사람에게 열려있어 비록

세 가지 옵션, 자신을 제시한다. 나는 옵션 (3)에 사용하기를 원했던 기능 프레임 검출기 을 가지고 있으며 이제는 허프만 디코딩 테이블을 구현할 때 만 사용해야합니다.

2) 디코딩을 처리하려면 JLayer 또는 이와 동등한 Java 라이브러리를 사용하십시오. 라이선스 파급 효과가 인 이유에 대해서는 명확하지 않습니다.

3) libmedia 라이브러리/MediaPlayerService에 연결하십시오. 이것은 SoundPool이하는 일이며, 그 서비스의 사용량에 따라 은 공식적으로 불안정한 반면 구현은 이 아닙니다. 이것은 서비스에 연결하기 위해 JNI 코드를 작성하는 것을 의미하지만, 나는 그것이 깊은 토끼 구멍이라는 것을 알게되었다. 표면적으로 나는 sp < 템플릿에 문제가 있습니다.

+0

이 문제가있는 행운? – twk

+0

오디오 데이터를 성공적으로 해독 했습니까? 그렇다면 어떻게하셨습니까? –

답변

1

나는 libmad와 NDK로 그렇게했다. JLayer는 속도를 늦추고 미디어 프레임 워크는 움직이는 목표입니다. 정보 및 소스 코드는 http://apistudios.com/hosted/marzec/badlogic/wordpress/?p=231

+1

libmad는 GPL 라이센스를 맺었 기 때문에 이것은 다소 제한적인 해결책처럼 보입니다. 그것을 사용하려면 GPL에 따라 라이센스를 받아야합니다. GPL은 내가 계획하고있는 것이 아니며 동일한 보트에있을 수도 있습니다. JLayer가 매력적인 이유 중 일부입니다. LGPL 라이센스입니다. 안드로이드는 Apache 라이센스를 가지고 있으므로 분명히 분명합니다. 중요한 부분은 미디어 프레임 워크가 움직이는 목표가 아닐 수 없다는 점입니다.이 시점에서 많은 상위 개체 (MediaPlayer 및 SoundPool, 대부분)에 침투하여 제거 될 것으로 의심됩니다. –

1

입니다. 시도한 적이 없지만 mp3transform은 LGPL입니다.

+2

android는 javax.sound를 지원하지 않습니다. 이 lib는 그것을 사용하므로 안드로이드에 유용하지 않습니다. – Adem

관련 문제