2010-01-20 2 views
0

나는 ZyXEL USB Omni56K 듀오 모뎀을 가지고 있고, 거기에 음성 스트림을 보내고 싶지만 적절한 품질을 얻기 위해 보통 PCM이 너무 작은 샘플링 속도를 제공하기 때문에 "ZyXEL ADPCM"인코딩을 구현해야 할 수도 있습니다. 중간 품질의 음성도 전송하며 USB를 통해서도 작동하지 않습니다 (아마도이 ​​비트 전송률이 USB 직렬 변환기에 비해 너무 높기 때문일 수 있습니다).ZyXEL ADPCM 코덱

이 신비로운 코덱은 모든 Microsoft WAV 관련 라이브러리에서 이론적으로 지원되는 많은 코덱 중 하나이지만, 구현을 찾지 못했습니다.

다른 언어로 구현되거나 일부 설명서가 제공 될 수 있습니까? 커스텀 뮤 법 디코딩 알고리즘을 쓰는 것은 나에게 문제가되지 않는다.

감사합니다.

답변

2

ZyXEL ADPCM이 ADPCM의 다른 맛과 어떻게 다른지는 모르겠지만, 여러 가지 ADPCM 구현은 일부 Google 검색에서 찾을 수 있습니다.

그러나 내 게시물의 실제 이유는 왜 ADPCM을 선택했는지입니다. ADPCM은 적응 형 차동 펄스 코드 변조입니다. 이것은 전달되는 데이터가 현재 값이 아니라 샘플의 차이라는 것을 의미합니다 (이는 또한 위대한 압축이 나타나는 이유이기도합니다). 비트 손실이없는 깨끗한 환경 (예 : 디스크 드라이브)에서는 문제가 없습니다. 그러나 스트리밍 환경에서는 일반적으로 비트가 주기적으로 맹 글링되는 것으로 가정합니다. 데이터에 약간의 손상이 발생하면 정적 또는 기타 오디오 아티팩트를 매우 빨리 그리고 보통 상당히 심하게 듣게됩니다.

ADPCM의 재설정 메커니즘은 프레임 기반이 아닙니다. 즉, 오디오 문제는 인코더에 따라 오랜 시간 지속될 수 있습니다. 리셋 코드는 대개 0으로 설정됩니다 (16 개가 마음에 들지만, 내 포트를 쓴 이후로 수년이되었습니다).

전화 통신 환경에서 ADPCM은 일반적으로 12 비트 PCM 샘플을 4 비트 ADPCM 샘플 (나쁘지 않음)로 변환합니다. 오디오 품질에 관해서는 ... 전화 대화와 말하기에는 나쁘지 않지만 대부분의 사람들은 블라인드 테스트에서 쉽게 품질 저하를 감지 할 수 있습니다.

마지막 문장에서 커브 공을 질문에 던집니다. 당신은 muLaw 언급 시작합니다. muLaw는 12 비트 샘플을 가져 와서 로그 스케일을 사용하여 8 비트 샘플로 변환하는 PCM 구현입니다. 이것은 북미 지역의 TDM (전화) 네트워크 작업을위한 일반적인 압축 메커니즘입니다 (나머지 국가 대부분은 ALaw라는 비슷한 알고리즘을 사용합니다).

그래서 실제로 찾으려고하는 내용이 혼란 스럽습니다.

Microsft 및 WAV 구현에 대해서도 언급했습니다. 아마도 WAV는 형식, 샘플링 정보, 채널, 크기 및 기타 유용한 정보를 제공하는 오디오 데이터를 둘러싼 포장지 일뿐입니다. WAV, AU 또는 기타 래퍼가 포함되지 않은 경우 muLaw 및 ADPCM은 일반적으로 원시 데이터로 표시됩니다.

ADPCM을 구현하는 경우 다른 팁 하나. 앞서 말했듯이 4 비트를 사용하여 12 비트 샘플을 나타냅니다. 그들은 승수 테이블이있는 양측에 의해이 문제를 해결합니다. 표의 사용자 위치는 4 비트 값에 따라 바뀝니다 (즉, 값은 단계 크기에 대해 여러 배가되고 새 단계 크기를 계산하는 데 사용됩니다). 나는 다양한 알고리즘이 약간 다른 테이블을 사용하는 것을 보았습니다. (이유는 모르겠지만 일반적으로 전송 된 신호와 수신 된 신호가 편향에서 벗어나 천천히 사라지는 것을 보았습니다.) 이전의 인기있는 사운드 패키지 중 하나는 내가 전화 하드웨어 공급 업체에서 일반적으로 보았던 것과 다릅니다.

그리고 더 쓸데없는 퀴즈에는 여러 가지 맛의 ADPCM이 있습니다.차이는 테이블, 소스 샘플 크기 및 대상 샘플 크기를 포함하지만 필자는 이들과 작업 할 필요가 전혀 없습니다. 전화에서 사용되는 다양한 오디오 형식에 대한 사양을 인터넷으로 검색했을 때 발견 한 맛을 문서화했습니다.

+0

아주 좋은 설명 주셔서 감사합니다. 그래서 ADPCM은 아마도 잘못된 길일 것입니다 ... 질문이 닫힙니다. – whitequark

0

ffmpeg -f u16le -i - -f wav -acodec adpcm_ms -을 통해 pcm 파이프를 연결하는 것이 좋습니다.

http://ffmpeg.org/