오디 오 코딩 speex 라 이브 러 리 사용 방법
오픈 소스 이지 만 아직 사용 하 는 사람 이 많 지 않 고 인터넷 자료 도 적 습 니 다. speex API 를 어떻게 사용 하 는 지 간단히 소개 해 드 리 겠 습 니 다.
1: 인 코딩 프로 세 스
Speex 의 API 함 수 를 사용 하여 오디 오 데 이 터 를 압축 인 코딩 하려 면 다음 절 차 를 거 쳐 야 합 니 다.
1. SpeexBits 형식 변수 bits 와 Speex 인 코더 상태 변수 enc 를 정의 합 니 다.state。
2, speex 호출bits_init (& bits) 에서 bits 를 초기 화 합 니 다.
3, speex 호출encoder_init (& speex nb mode) 로 enc 초기 화state。그 중 speexnb_mode 는 SpeexMode 형식의 변수 로 협 대역 모드 를 표시 합 니 다.그리고 speexwb_mode 는 광대 역 모드, speexuwb_mode 는 초고 속 광대 역 모드 를 표시 합 니 다.
4, 호출 함수 int speexencoder_ ctl (void * state, int request, void * ptr) 은 인 코더 의 인 자 를 설정 합 니 다. 그 중에서 매개 변수 state 는 인 코더 의 상 태 를 표시 합 니 다.파라미터 request 는 SPEX 와 같은 정의 할 매개 변수 유형 을 표시 합 니 다.GET_ FRAME_SIZE 는 프레임 크기 설정, SPEXSET_QUALITY 는 양 적 크기 를 나타 내 는데 이것 은 인 코딩 의 질 을 결정 한다.매개 변수 ptr 는 설정 할 값 을 표시 합 니 다.
speex 통과 가능encoder_ctl (enc state, SPEX GET FRAME SIZE, & frame size) 과 speexencoder_ctl (enc state, SPEX SET QUALITY, & quality) 은 인 코더 의 인 자 를 설정 합 니 다.
5. 초기 화 완료 후 각 프레임 의 소 리 를 다음 과 같이 처리 합 니 다: 호출 함수 speexbits_reset (& bits) 다시 SpeexBits 를 설정 하고 함수 speex 를 호출 합 니 다.encode (enc state, input frame, & bits), 매개 변수 bits 에 인 코딩 된 데이터 흐름 을 저장 합 니 다.
6, 인 코딩 종료 후 호출 함수 speexbits_destroy (&bits), speex_encoder_destroy (enc state)
디 코딩 프로 세 스
마찬가지 로 인 코딩 된 오디 오 데 이 터 를 디 코딩 하려 면 다음 절 차 를 거 쳐 야 합 니 다.
1、 SpeexBits 형식 변수 bits 와 Speex 인 코딩 상태 변수 enc 정의state。
2、 speex 호출bits_init (& bits) 에서 bits 를 초기 화 합 니 다.
3、 speex 호출decoder_init (& speex nb mode) 로 enc 초기 화state。
4、 호출 함수 speexdecoder_ctl (void * state, int request, void * ptr) 은 인 코더 의 인 자 를 설정 합 니 다.
5、 호출 함수 speexdecode (void * state, SpeexBits * bits, float * out) 는 매개 변수 bits 의 오디 오 데 이 터 를 인 코딩 하고 매개 변수 out 에 디 코딩 후의 데이터 흐름 을 저장 합 니 다.
6、 호출 함수 speexbits_destroy(&bits), speex_ decoder_ destroy (void * state) 는 SpeexBits 와 디코더 를 닫 고 소각 합 니 다.
다음은 인 스 턴 스 코드 입 니 다.
- #include <speex.h>
- #include <stdio.h>
- /* , */
- #define FRAME_SIZE 160
-
- int main(int argc, char **argv)
- {
- char *inFile;
- FILE *fin;
- short in[FRAME_SIZE];
- float input[FRAME_SIZE];
- char cbits[200];
- int nbBytes;
- /* */
- void *state;
- /* speex */
- SpeexBits bits;
- int i, tmp;
- // (narrowband)
- state = speex_encoder_init(&speex_nb_mode);
- // 8(15kbps)
- tmp=8;
- speex_encoder_ctl(state, SPEEX_SET_QUALITY, &tmp);
- inFile = argv[1];
-
- fin = fopen(inFile, "r");
- //
- speex_bits_init(&bits);
- while (1)
- {
- // 16bits
- fread(in, sizeof(short), FRAME_SIZE, fin);
- if (feof(fin))
- break;
- // 16bits float, speex
- for (i=0;i<FRAME_SIZE;i++)
- input[i]=in[i];
-
- // ,
- speex_bits_reset(&bits);
- //
- speex_encode(state, input, &bits);
- // bits char
- nbBytes = speex_bits_write(&bits, cbits, 200);
- // , sampledec ,
- fwrite(&nbBytes, sizeof(int), 1, stdout);
- //
- fwrite(cbits, 1, nbBytes, stdout);
- }
-
- //
- speex_encoder_destroy(state);
- // bit_packing
- speex_bits_destroy(&bits);
- fclose(fin);
- return 0;
- }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.