Android 는 어떻게 Lame 인 코더 로 mp3 파일 을 인 코딩 합 니까?

이 글 은 다음 세 가지 문 제 를 바탕 으로 설명 을 전개 할 것 이다.
         1,무엇이 Lame 인가?
         2.왜 Lame 을 사용 합 니까?
         3.Lame 은 Android 앱 에서 어떻게 사용 하나 요?
뭐 공부 해요?
 Lame 홈 페이지(lame.sourceforge.io/index.php)에서 보 여 준 설명 을 살 펴 보 겠 습 니 다.
   LAME is a high quality MPEG Audio Layer III (MP3) encoder licensed under the LGPL.
 LAME 는 고 품질의 MPEG 오디 오 층 III(MP3)인 코더 로 LGPL 에서 권한 을 부여 합 니 다.
  자,이제 우 리 는 Lame 이 오픈 소스 인 코더 이 고 mp3 파일 을 인 코딩 하 는 데 사용 된다 는 것 을 알 게 되 었 습 니 다.
2.왜 Lame 을 사용 합 니까?
 안 드 로 이 드 에서 녹음 기능 을 개발 한 학생 들 은 안 드 로 이 드 에서 녹음 기능 을 실현 하려 면 두 가지 방식 이 있다 는 것 을 알 아야 한다.하 나 는 AudioRecord 방식 을 사용 하고 AudioRecord 는 원본 pcm 데이터 이 며 다른 하 나 는 MediaRecord 를 사용 하여 amr,aac 형식 과 유사 한 파일 을 녹음 할 수 있 습 니 다.
 미디어 레코드 가 현재 지원 하 는 녹음 형식 을 붙 여 놓 으 면 현재 mp3 가 지원 되 지 않 는 것 을 볼 수 있 습 니 다.이때 우 리 는 mp3 파일 을 인 코딩 하려 면 lame 을 통 해 이 루어 져 야 한다.

  public final class AudioEncoder {
   /* Do not change these values without updating their counterparts
    * in include/media/mediarecorder.h!
    */
    private AudioEncoder() {}
    public static final int DEFAULT = 0;
    /** AMR (Narrowband) audio codec */
    public static final int AMR_NB = 1;
    /** AMR (Wideband) audio codec */
    public static final int AMR_WB = 2;
    /** AAC Low Complexity (AAC-LC) audio codec */
    public static final int AAC = 3;
    /** High Efficiency AAC (HE-AAC) audio codec */
    public static final int HE_AAC = 4;
    /** Enhanced Low Delay AAC (AAC-ELD) audio codec */
    public static final int AAC_ELD = 5;
    /** Ogg Vorbis audio codec */
    public static final int VORBIS = 6;
    /** @hide EVRC audio codec */
    public static final int EVRC = 10;
    /** @hide QCELP audio codec */
    public static final int QCELP = 11;
    /** @hide Linear PCM audio codec */
    public static final int LPCM = 12;
  }
3.Lame 은 Android 응용 프로그램 에서 어떻게 사용 합 니까?
 안 드 로 이 드 에 오픈 소스 코드 를 통합 하 는 경우 가 많 습 니 다.주로 소스 코드 를 다운로드 하고 관련 된 so 라 이브 러 리 를 컴 파일 한 다음 에 이 라 이브 러 리 가 제공 하 는 방법 을 호출 하 는 것 입 니 다.물론 so 라 이브 러 리 안의 방법 을 호출 하 는 것 은 jni 를 통 해 이 루어 져 야 합 니 다.
 lame 소스 코드 와 인 코딩 so 라 이브 러 리 를 다운로드 하 는 방법 은 소개 하지 않 겠 습 니 다.lame 소스 코드 를 컴 파일 한 후에 우 리 는 libmp3 lame.so 의 라 이브 러 리 파일 을 얻 을 수 있 습 니 다.이 so 라 이브 러 리 안의 방법 을 호출 하려 면 JNI 부분의 코드 를 실현 해 야 합 니 다.
 전체적인 사 고 는 응용 층 이 JNI 가 제공 하 는 native 방법 을 호출 한 다음 에 호출 하 는 것 이다. libmp3lame.so 라 이브 러 리 의 방법 으로 인 코딩 mp3 파일 을 실현 합 니 다.
 여기 서 보 여 주 는 예 는 pcm 형식의 파일 을 mp3 형식의 파일 로 인 코딩 하 는 것 입 니 다.
 코드 git 주소:github.com/yorkZJC/And…  코드 논리
  LameEncodeJniNative.java 는 로 컬 패키지 의 native 방법 으로 응용 층 에 두 가지 방법 을 제공 합 니 다.하 나 는 인 코딩 이 고 하 나 는 끝 입 니 다.이 두 가지 방법 은 c++층 의 구체 적 인 실현 에 대응 합 니 다.프로젝트 cpp/디 렉 터 리 에서 파일 의 실현 을 볼 수 있 고 cpp 파일 의 실현 도 간단 합 니 다.

코드 호출 을 사용 할 때 pcm 소스 파일 과 생 성 해 야 할 mp3 파일 경로,그리고 pcm 소스 파일 의 형식 정보(사용률,채널 수,인 코딩 데이터 자릿수)를 입력 합 니 다.

  File pcmFile = new File(getExternalFilesDir(null), "input.pcm");
  File mp3File = new File(getExternalFilesDir(null), "output.mp3");
  mLameEncoder = new LameEncodeJniNative();
  mLameEncoder.encode(pcmFile.getAbsolutePath(), mp3File.getAbsolutePath(), 44100, 2, 128);
이상 은 안 드 로 이 드 가 Lame 인 코더 로 mp3 파일 을 인 코딩 하 는 방법 에 대한 상세 한 내용 입 니 다.안 드 로 이 드 인 코딩 mp3 파일 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기