wvpack 포팅 완료.

이것으로 (APE, FLAC, TTA, MPC, WV등)
왠만한 major 사의 mp3p 정도의 audio codec 재생 능력을 갖추게 된거다.

멀티미디어 플레이어의 framework 구조가
File I/O 쪽에 동시에 2개 open 해서 Queue 하는게
좀 그래서 일단 하이브리드 모드는 보류했다

wavpack.com

WavPack은 오디오 파일을 .wv 확장자로 압축한다. .WAV파일 형식을 가진 8비트, 16, 24 그리고 32 비트 부동소수점 오디오 파일을 압축할 수 있다. 서라운드 사운드 스트림을 지원하며, 높은 주파수의 샘플링 레이트를 지원한다. 다른 무손실 오디오 압축 코덱과 마찬가지로 압축률은 소스에 따라 변한다. 하지만, 일반적인 팝 음악 파일에 대해서 보통 30% 내지 70%의 압축률을 보여준다. 또한, 클래식 음악에는 더 좋은 압축률을 보여주고, 다이내믹 레인지가 큰 소스에 대해서도 더 나은 압축률을 보여준다.

WavPack은 "하이브리드" 모드를 지원한다. 하이브리드 모드는 손실 압축 파일 하나(.wv)와 "손실 보정용"(correction) 파일 하나(.wvc)로 이루어진다. 이 두 개의 손실 압축 파일과 손실 보정용 파일을 가지고서 완벽히 손실 없이 원음을 압축해제 할 수 있다. 아니면 비교적 작은 크기의 고품질 손실 압축 파일(.wv)만 활용할 수도 있다.

이러한 방법은 손실압축 코덱과 무손실압축 코덱의 이점을 모두 가져다 준다. 현재 이러한 "하이브리드" 기능은 OptimFROG와 WavPack만이 지원하고 있다.


다음과 같은 형식으로 기본 wave out format을

    WaveHeader.FormatTag = 1; // 1.WAVE_FORMAT_PCM 
    WaveHeader.NumChannels = num_channels;
    WaveHeader.SampleRate = GetSampleRate ();
    WaveHeader.BlockAlign = num_channels * bps;
    WaveHeader.BytesPerSecond = SampleRate * BlockAlign;
    WaveHeader.BitsPerSample = GetBitsPerSample ();

CE쪽에서는 block align과 bytes per second 순서가 살짝 다르다.
Linux 에서와의 달리 WinCE의 wave out에는 상당한 제약이 있다.

1. channel 은 1CH, 2CH (mono/stereo)
2. Sample rate 은 8.0khz, 11.025khz, 22.05khz, 44.1khz
3. Bit per sample 은 8bit와 16bit.

때문에 디코더를 셋팅에도 신경써야 하고,
해당 코덱을 이용해 오디오 파일을 디코딩하고 출력 시에
floating point 연산이 추가로 필요한 경우가 발생하기 때문에.. 
상당한 mips를 먹게된다.
(멀티 채널의 down mixing, sample rate 변환, bit per sample 변환 등.) 



+ Recent posts