2009-02-06 8 views
0

이유는 왜곡 된 출력을 얻을 수 있습니까?Libsox 인코딩

입력 파일이있다 bits_per_sample =

+0

어디서이 빠는 sox 소스 파일을 얻을 수 있고 아이폰에 대한 xCode 프로젝트에 추가하는 방법 ??? – Biranchi

답변

0

그래서 당신은 당신이 8 비트 샘플 파일로 16 비트 샘플 WAV 파일을 읽을 수 SOX에게 말을하는지 (16)? SOX에 대해 전혀 알지 못한다면 각 16 비트 샘플을 두 개의 8 비트 샘플로 읽으 리라 기대합니다. 상위 바이트와 하위 바이트는 다음과 같습니다. ... HLHLHLHLHL ...

간단히하기 위해 상위 바이트 샘플 'A'샘플을 호출합니다. 'A'샘플은 정밀도가 낮은 하위 바이트가 잘 리기 때문에 동적 범위가 더 작은 원본 사운드를 전달합니다.

하위 바이트 샘플을 "B 샘플"이라고합니다. 이것들은 대략 무작위이며 인코딩 노이즈입니다.

결과적으로 'A'샘플의 원래 사운드가 반으로 줄어 들었습니다. 이것은 'A'샘플의 비율을 반으로 줄이는 모든 'A'샘플 사이에 'B'샘플이 있기 때문입니다. 'B'샘플은 원래 사운드에 노이즈를 추가합니다. 그래서 우리는 소음과 함께 원래의 사운드를 반으로 이동시킵니다.

당신이 듣고있는 것이 맞습니까?

편집 게스트는 WAV를 8 비트 오디오로 다운 컨버전하는 것이 목표라고 말했습니다. manpage for SoX을 읽으면 sox_read()의 결과로 SoX가 메모리에서 항상 32 비트 오디오를 사용하는 것처럼 보입니다. 형식을 전달하면 해당 형식이에서 으로 변경됩니다.

즉, sox.h에서 SOX_SAMPLE_TO_SIGNED_8BIT 또는 SOX_SAMPLE_TO_UNSIGNED_8BIT를 사용하여 메모리에 하향 변환하려면

sox_format_t ft = sox_open_read("/file/blah.wav", NULL, NULL); 
if(ft) { 
    sox_ssample_t buffer[100]; 
    sox_size_t amt = sox_read(ft, buffer, sizeof(buffer)); 
    char 8bitsample = SOX_SAMPLE_TO_SIGNED_8BIT(buffer[0], ft->clips); 
} 

출력으로 하향 변환 파일을 읽을 때 대신 쓸 때 8 비트 형식을 사용합니다.

+0

샘플 당 8 비트로 변환하고 싶습니다. 내가 어떻게 그럴 수 있니? –