Hi !!!!
I am not sure weather I have fully understood your question or not, I persume that you are asking
"How can we mix two or more audio stream", If this is the question then I am explaning below the
mixing of the two audio stream (You Can Mix More Audio Stream),
Step 1,
Get the Raw data of the two files, (Example, of the sample 8bit and 8Kh, means one sample is of
8bit)
Step 2
Let the two audio signal be A and B respectively, the range is between 0 and 255. Where A and B are the
Sample Values (Each raw data) And store the resultant into the Y
If Both the samples Values are possitve
Y = A + B - A * B / 255
Where Y is the resultant signal which contains both signal A and B, merging two audio streams into single
stream by this method solves the problem of overflow and information loss to an extent.
If the range of 8-bit sampling is between -127 to 128
If both A and B are negative Y = A +B - (A * B / (-127))
Else Y = A + B - A * B / 128
Similarly for the nbit (ex 16bit data)
For n-bit sampling audio signal
If both A and B are negative Y = A + B - (A * B / (-(2 pow(n-1) -1)))
Else Y = A + B - (A * B / (2 pow(n-1))
Step 3.
Add the Header to the Resultant (mixed) data and play back.
If some thing is unclear and ambigious let me know.
Regards
Ranjeet Gupta.
还有简单C程序示意代码,但是其中包含了核心算法:
#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc,char *argv[]) {
char mixname[255];
FILE *pcm1, *pcm2, *mix;
char sample1, sample2;
int value;
pcm1 = fopen(argv[1],"r");
pcm2 = fopen(argv[2],"r");
strcpy (mixname, argv[1]);
strcat (mixname, "_temp.wav");
mix = fopen(mixname, "w");
while(!feof(pcm1)) {
sample1 = fgetc(pcm1);
sample2 = fgetc(pcm2);
if ((sample1 < 0) && (sample2 < 0)) {
value = sample1 + sample2 - (sample1 * sample2 / -(pow(2,16-1)-1));
}else{
value = sample1 + sample2 - (sample1 * sample2 / (pow(2,16-1)-1));
}
fputc(value, mix);
}
fclose(pcm1);
fclose(pcm2);
fclose(mix);
return 0;
}
本文介绍了一种用于将两个音频流混合成单一音频流的方法。该方法通过特定的数学运算来解决混合过程中可能出现的信息丢失和溢出问题,并提供了一个简单的C语言示例程序。
3391

被折叠的 条评论
为什么被折叠?



