PCM 파일에 가입하는 알고리즘이란 무엇입니까? 나는 여러 명의 PCM 파일을 가지고 있는데, 동시에 PCM 파일은 스피커가 동시에 발성하는 방식으로 결합해야한다.PCM 파일에 가입하기위한 알고리즘이란 무엇입니까?
그래서 PCM 파일에 가입 하시겠습니까?
PCM 파일에 가입하는 알고리즘이란 무엇입니까? 나는 여러 명의 PCM 파일을 가지고 있는데, 동시에 PCM 파일은 스피커가 동시에 발성하는 방식으로 결합해야한다.PCM 파일에 가입하기위한 알고리즘이란 무엇입니까?
그래서 PCM 파일에 가입 하시겠습니까?
먼저 샘플별로 샘플을 처리 한 다음 모든 스트림의 샘플을 함께 추가하십시오.
오버플로 문제가 발생합니다. 그럴 경우 결과 값을 최대/최소 샘플 값으로 클램프하십시오.
사용자에게 클램핑하기 전에 출력 크기를 조정할 수있는 옵션을 제공하고 사용자가 소리를 어느 정도 제어 할 수 있도록 몇 가지 통계를 얼마나 자주 (초당 또는 그렇게) 클램핑하는지보고 할 수도 있습니다 품질.
PCM 오디오 파일에는 헤더와 오디오 데이터의 연속 샘플이 있습니다. 헤더를 읽고 합성 (혼합) 파일 헤더에서 사용할 수 있어야합니다.
FILE *fpIn; // Input file pointer
char temp[2*FrameSize];
char inFile[]="input_1.wav" ;
char outFile[]="result.wav" ;
if ((fpIn = fopen(inFile,"rb")) == NULL)
{
printf("Can't open input file\n");
exit(0);
}
if ((fpOut = fopen(outFile,"wb")) == NULL)
{
printf("Can't open data file\n");
exit(0);
}
// Cut the wav headers 44 byte
fread(temp,sizeof(char),44,fpIn); // Remove wave header from input file
for the writing back
fwrite(temp,sizeof(char),22*2,fpOut); // Add wave header from input file2
while(fread(temp, sizeof(char),N*2,fpIn) == (unsigned short)(2*N))
{
for (i=0;i<N;i++) // Get PCM input data
{
input1[i] = (temp[2*i]&0xFF)|(temp[2*i+1]<<8);
}
// Mixing logic goes here
for (j=0, i=0;i<N;i++)
{
input[i]=0;
temp[j++] = input [i]&0xFF;
temp[j++] = (input [i]>>8)&0xFF;
}
fwrite(temp,sizeof(char),N*2,fpOut); // Save result
}
fclose(fpOut);
fclose(fpIn);
위의 코드를 읽고 WAV 파일을 작성하는 방법을 보여줍니다, 당신은 예를 들어, 등등 가중 요소와 혼합 로직을 구현해야합니다. 출력 = 알파. Input1 + (1-alpha) Input2 // 알파가 0과 1 사이에있는 위치는 입력 1과 입력 2를 더하는 방법에 따라 다릅니다. 알파 = 0.5이면 둘 다 균등하게 추가됩니다.
참조 http://stackoverflow.com/questions/1784396/how-to-mix-audio-samples –