스픽스 개발자들은 이 프로젝트를 Vorbis 범용 오디오 압축 프로젝트와 상호 보완적인 것으로 본다. 스픽스는 파일 크기를 줄이기 위해 영구적으로 품질을 떨어뜨리는 손실 압축 포맷이다.
스픽스 프로젝트는 2002년 2월 13일에 시작되었다.[7] 스픽스의 첫 개발 버전은 LGPL 라이선스 하에 공개되었으나, 1.0 베타 버전과 마찬가지로 스픽스는 Xiph 재단의 개정 BSD 라이선스 하에 공개되었다.[8] 스픽스 1.0은 2003년 3월 24일에 공지되었다. 스픽스의 최종 버전 인코더와 디코더는 1.1.12이다.[2]
Xiph.Org 재단은 스픽스를 이전 버전으로 보고 있으며, 오푸스가 그것을 계승하고 있다고 본다.
스픽스는 VoIP와 파일 기반 압축에 사용할 목적으로 개발되었다. 개발 목표는 높은 품질의 음성과 낮은 비트레이트에 최적화된 코덱을 개발하는 것이었다. 이 목표를 달성하기 위해 스픽스는 다중 비트레이트를 사용하며, 초광대역(32 kHz샘플링 레이트), 광대역(16 kHz 샘플링 레이트), 협대역(전화 품질, 8 kHz 샘플링 레이트)을 지원한다. 스픽스는 휴대폰용이 아닌 VoIP용으로 만들어졌기 때문에 스픽스는 손실된 패킷에 강해야 한다. 이러한 이유로 인해 CELP가 스픽스를 위해 사용할 인코딩 기술로 채택되었다.[6] 가장 큰 이유 중 하나는 CELP가 낮은 비트레이트와 높은 비트레이트에서 작업을 잘 수행하고 크기를 잘 조정할 수 있다는 것이 오랫동안 증명됐다는 것이다.
스픽스는 주로 3 가지 샘플링 레이트로 개발되었다. 8 kHz(전화용 샘플링 레이트와 같다), 16 kHz, 32 kHz. 이것들은 각각 협대역, 광대역, 초광대역을 가리킨다.
품질
스픽스 인코딩은 0부터 10까지 범위의 품질 매개변수에 대부분의 시간을 통제받는다. 고정 비트레이트(CBR) 작동에서는 품질 매개변수가 정수이며, 가변 비트레이트(VBR) 작동에서는 품질 매개변수가 실수(부동소수점)이다.
복잡도(가변)
스픽스로, 인코더에 허용된 복잡도를 변화시키는 것이 가능하다. 이는 gzip압축의 -1에서 -9까지의 옵션과 비슷하게 1에서 10까지의 범위의 정수로 수행되는 검색 방식으로 조작된다. 일반적인 용도에서는 복잡도 1의 노이즈 레벨이 복잡도 10보다 1에서 2 dB 정도 높지만 복잡도 10의 CPU 요구조건은 복잡도 1보다 5배 높다. 실제적으로 최적의 균형은 2와 4 사이이다.[9]
가변 비트레이트(VBR)는 오디오를 인코딩하는 데에서 발생하는 어려움을 조절하기 위해 비트레이트를 동적으로 변화시킬 수 있다. 스픽스의 예를 살펴보면 모음 혹은 '높은 진폭과 짧은 지속시간을 갖는 음(high-energy transient)'은 좋은 품질을 가지기 위해 높은 비트레이트가 필요하지만, 마찰음은 더 낮은 비트레이트로도 충분하다. 이 때문에 VBR은 동일한 품질을 더 낮은 비트레이트에서 얻거나 어떤 비트레이트에서는 더 좋은 품질을 얻을 수도 있다. 이러한 이점에도 불구하고 VBR은 세 가지 문제점을 안고 있다. 첫째로 품질을 정해놓기 때문에 최종 평균 비트레이트에 대한 보장이 없다. 둘째로 음성 인터넷 프로토콜(VoIP) 같은 몇몇 실시간 소프트웨어에서는 통신 채널의 특성상 최대 비트레이트가 낮아야 하지만 그렇지 못하다. 셋째로 VBR로 인코딩한 음성을 암호화하는 것은 완전한 보안성을 유지하지 못한다.
평균 비트레이트(ABR)
평균 비트레이트는 특정 목표 비트레이트에 맞추기 위해 품질을 동적으로 조절하는 VBR의 문제를 해결하였다. 품질과 비트레이트의 비율이 실시간으로 조절되기 때문에 전체 품질이, 정확한 품질 설정을 한 VBR로 인코딩한 것보다 약간 낮다.
음성 활동 감지(VAD)
음성 활동 감지가 동작하면 오디오가 음성을 인코딩하고 있는지 혹은 무음이나 배경음을 인코딩하고 있는지를 감지할 수 있다. VAD는 VBR로 인코딩할 경우에 무조건적으로 활성화되므로 비VBR 작업에서만 작동여부를 선택할 수 있다. 이 기능이 활성화 됐을 경우 스픽스는 비음성 부분을 감지하고 배경음을 재구성하기 위해 충분한 비트로 그것들을 인코딩한다. 이것을 '안정 소음 발생'(CNG)라고 한다. VAD를 지원했던 마지막 버전은 1.1.12이며, v 1.2부터 Any Activity Detection으로 대체되었다.