软件混音的实现
来源:互联网 发布:哔哩哔哩mac版 编辑:程序博客网 时间:2024/05/23 19:20
软件混音的实现
声明:这篇文章是我从一个网站上看到的,收藏到这里以备将来需要!
Symbian 6.1上实现的混音是个比较麻烦的问题,因为程序只能同时播放一个音乐,实现混音就需要程序自己来实现。下面是我从newlc上找到的一个关于PCM脉冲编码的音频信号的混音实现,其中包含了一个关键的混音算法!
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;
}
- 软件混音的实现
- 软件混音的实现
- 软件混音的实现
- 软件混音的实现
- 软件混音的实现
- 软件混音的实现
- 软件混音的实现
- 实现软件的可用性
- 软件实现的施密特触发器
- 软件管理器的实现
- 软件项目的实现
- 软件实现的施密特触发器
- 软件的实现过程
- 要实现的软件
- 行情软件的实现
- 软件自动更新的实现
- 画图软件的实现
- mina 实现的聊天软件
- js 身份证验证
- python decorator
- 只读过4年书赚16亿身家的李桂莲(1)
- 谷歌Chrome操作系统对应用程序商店并无威胁
- LDAP概论
- 软件混音的实现
- wince Data Abort
- FMD_OEMIoControl::Not supported IOCtl : 0x10303FF
- c# new 关键字
- 只读过4年书赚16亿身家的李桂莲(2)
- asp.net解压缩文件夹
- 客户端和Table服务器间的接口协议
- struct tm 和 time_t
- 专家答疑:解析JAVA中常见异常类型与原因