刘品
学以致用---博主简介:专注语音、视频数字信号处理方面的研究以及算法在手机平台上面的移植和优化。涉及语音/音频编解码,语音增强,语音识别,语音音质客观评估,VOIP语音引擎 Qos算法模块和声音变速不变调和变调不变速等功能实现。熟悉ARM 各个系列的CPU,用ARMv4,ARMv5,ARMv6 and Cortex Neon 汇编优化相关算法代码,争取perforamance 最优。目前主要Windows mobile and Android platform上做相关speech/audio算法以及应用开发, HEVC 编解码器PC 和手机上的开发与应用。(交流Email:liupin.2008@gmail.com)
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;
}
 
另外,如果只是在Symbian上实现混音,在Nokia 的官方网站上,也有一个SoundMixer的examples
http://www.forum.nokia.com/info/sw.nokia.com/id/70a2bde5-9b14-41b3-89ae-198b0d8d380d/SoundMixer_Example_v1_0.zip.html
posted on 2008-09-09 22:05  liupin  阅读(1308)  评论(2)    收藏  举报

-->