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

2019-12-11 18:19发布

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

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

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

想问有什么可以参考的吗??linux的声卡驱动??
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
23条回答
zenith1032
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

一周热门 更多>