请教,stm32下做个混音程序,有什么可以参考

2019-12-11 18:19发布

两个WAV文件,一个做背景音乐,一个做信息播报。

想在有信息播报的时候,背景音乐不停下来,而是声音变小。

信息播报和北京语音混音,一起播出来。

想问有什么可以参考的吗??linux的声卡驱动??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
23条回答
zenith1032
1楼-- · 2019-12-13 16:46
本帖最后由 zenith1032 于 2016-7-28 10:15 编辑

实际在windows下用C++中试过,将两个wav合成一个wav。

方法1,有噪音,失真,效果不好。
方法2,噪音较少,效果可以,但不知道怎么调两个音频各自的声音大小。
方法3,方法4还没调通,出来全是噪音。

编辑原因排版。发现数组的【i】,是显示不出来的。

#if REMIX_METHORD == 1       
        //out=(ka*(DataA-128)+kb*(DataB-128))/(ka+kb)+128;                       
        write_buf【i】 = (11 * (read_buf1【i】- 32768) + 5 * (read_buf2【i】 - 32768)) / 16 + 32768;
#endif
                       
#if REMIX_METHORD == 2          
        //C = A + B - (A * B >> 0x10)
        //if (C > 32767) C = 32767;
        //else if (C < -32768) C = -32768;
        temp = read_buf1【i】 + read_buf2【i】- (read_buf1【i】 * read_buf2【i】>> 16);
        if (temp > 32767)
                temp = 32767;
        else if (temp < -32768)
                temp = -32768;
        write_buf = temp;
#endif                   

#if  REMIX_METHORD == 3            
        //if( data1 < 0 && data2 < 0)  
        //        date_mix = data1+data2 - (data1 * data2 / -(pow(2,16-1)-1));  
            //else  
        //        date_mix = data1+data2 - (data1 * data2 / (pow(2,16-1)-1));
if (read_buf1【i】< 0 && read_buf2【i】< 0)
                temp = read_buf1【i】+ read_buf2【i】 - (read_buf1【i】* read_buf2【i】 / -(pow(2, 16-1) -1));
        else
                temp = read_buf1【i】 + read_buf2【i】- (read_buf1【i】 * read_buf2【i】/ (pow(2, 16-1) -1));                     
#endif          

#if  REMIX_METHORD == 4
        alsa_mix_16(read_buf1【i】, read_buf2【i】, &date_mix);   
        write_buf【i】= date_mix;
        if(date_mix > pow(2,16-1) || date_mix < -pow(2,16-1))  
                cout << "mix error " << endl;
#endif
zenith1032
2楼-- · 2019-12-13 20:22
最后,发现这种方法混音出来效果最好。不失真,无噪音。好犀利,不明白算法。

                //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));
                    //}                                          
MegaHealth
3楼-- · 2019-12-13 22:31
 精彩回答 2  元偷偷看……
MegaHealth
4楼-- · 2019-12-14 02:18
zenith1032 发表于 2016-7-28 16:25
最后,发现这种方法混音出来效果最好。不失真,无噪音。好犀利,不明白算法。

                //if ((sample1 < 0) && ( ...

看起来您的方法只是混音的,请问频率不同的处理是如何做的?
zenith1032
5楼-- · 2019-12-14 04:12
我要的效果就是混音,不同频率是什么意思??关于算法,我也不大懂。
MegaHealth
6楼-- · 2019-12-14 09:48
zenith1032 发表于 2017-5-2 14:39
我要的效果就是混音,不同频率是什么意思??关于算法,我也不大懂。

就是sample rate,有些音频文件是48K有些是44.1K,语音还有8K的。

一周热门 更多>