iPhone에서 AMR 오디오 형식을 어떻게 녹화 할 수 있습니까?
-
07-07-2019 - |
문제
음성 레코더는 압축되지 않은 선형 PCM 오디오가 필요하지 않습니다. 압축 AMR
잘할 것입니다. 오디오 녹음을 위해 구축 된 iPhone 프레임 워크는 충분히 간단하지만 Apple에서 온 오디오 형식 (Apple에서 온)을 설정하기 위해 찾은 유일한 예는 LineArpCM을 사용합니다. 나는 다양한 다른 값 조합을 시도했지만 아무것도 작동하지 않는 것 같습니다.
실제로 기록하는 코드가 있습니까? AMR
?
편집하다:AMR 형식은 데이터 유형을 설정하기위한 옵션 중 하나이지만 다른 옵션 (패킷 크기, 프레임 크기 등)은 내가 설정 한 내용에 관계없이 일치하지 않는 것 같습니다.
편집하다: PCM 버전에 대해 다음은 다음과 같습니다.
/*
If we want to use AMR instead of PCM:
AMR Format:
Sampling Frequency: 8 kHz/13-bit (160 samples for 20 ms frames), filtered to 200-3400 Hz
eight source codecs : 12.2, 1.2, 7.95, 7.40, 6.70, 5.90, 5.15, 4.75 kbit/s
generated frame length: 244, 204, 159, 148, 134, 118, 103, 95 bits per frame
*/
format->mFormatID = kAudioFormatLinearPCM;
format->mSampleRate = 8000.0; //8 kHz
format->mFramesPerPacket = 1; //1 frame per packet
format->mChannelsPerFrame = 1; //Mono
format->mBytesPerFrame = 2; //8/bits per frame (round up)
format->mBytesPerPacket = 2; //Same as bytes per frame
format->mBitsPerChannel = 16; //16-bit audio
format->mReserved = 0; //always 0
format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian |
kLinearPCMFormatFlagIsSignedInteger |
kLinearPCMFormatFlagIsPacked;
해결책
AMR 코덱은 iPhone에서 인코딩/녹음을 위해 지원되지 않지만 재생을 위해 지원됩니다. 이것이 Kaudioformatamr 상수가 존재하는 이유입니다.
공식 API 지원되는 인코딩 형식은 다음과 같습니다.
- 알락 (Apple Lossless) ~> Kaudioformatapplelossless
- ILBC (인터넷 낮은 비트 전송률 코덱, 음성) ~> kaudioformatilbc
- IMA/ADPCM (ima4) ~> Kaudioformatappleima4
- 선형 PCM ~> Kaudioformatlinearpcm
- µ-law ~> Kaudioformatulaw
- 법 ~> Kaudioformatalaw
이 형식 중 하나를 시도하거나 오픈 소스 AMR 인코더를 사용할 수 있습니다. 황금 제안.
편집하다: 공식 API 링크를 업데이트했습니다
다른 팁
Olegueret의 공식 문서 링크를 업데이트하려면 (왜이 물건을 숨기는가?)
http://developer.apple.com/library/ios/#qa/qa2008/qa1615.html
AMR Codec 형식은 iPhone Voice Recorder 앱을 지원하지 않는다고 생각합니다.
일부 오픈 소스, AMR 인코더 구현을 사과의 iPhone 응용 프로그램 프레임 워크에 통합하고 Voice Recorder를 AMR 인코딩 형식으로 저장할 수 있습니다. (NDA/라이센스로 Apple이 허용하는지 모르겠습니다).
-기원 후
압축 된 선형 PCM 버퍼 (원형 또는 링)에 오디오를 녹음하고 다른 스레드에서는 압축 오디오 데이터를 파일에 저장하기 전에 자체 AMR (또는 기타) 압축 엔진을 사용 하여이 버퍼의 데이터를 변환 할 수 있습니다.