原来的LS和RS经过滤波处理以后得到四组数据,这样就需要重新定义数组对结果进行存储 内容来自www.paper51.com
typedef struct stream_samples_srs_s 内容来自www.paper51.com {float channel[8][512]; 内容来自论文无忧网 www.paper51.com } stream_samples_srs_t; http://www.paper51.com 现在的数据存储规则变为: copyright paper51.com samples_srs-> channel[0][512] 对应 左L声道 内容来自论文无忧网 www.paper51.com
samples_srs-> channel[1][512] 对应 中央C声道 内容来自论文无忧网 www.paper51.com
samples_srs-> channel[2][512] 对应 右R声道 内容来自www.paper51.com
samples_srs-> channel[3][512] 对应 http://www.paper51.com samples_srs-> channel[4][512] 对应 *LS copyright paper51.com samples_srs-> channel[5][512] 对应 内容来自论文无忧网 www.paper51.com
samples_srs-> channel[6][512] 对应 *RS http://www.paper51.com samples_srs-> channel[7][512] 对应 低频LFE声道 内容来自论文无忧网 www.paper51.com 5.3.2 子函数Downmix paper51.com 由于原来的六声道变成了现在的八声道,所以在把多声道信息向下混合成两声道信息的部分downmix也需要做相应的调整[18]。只需要利用式(4-1),把各声道数据相加,就可以混合成两声道的音频。其程序如下 内容来自www.paper51.com voidmix321to20( stream_samples_srs_t *samples, sint_16 *out_samples ) paper51.com
{ int i; copyright paper51.com sint_32 left, 内容来自论文无忧网 www.paper51.com center, 内容来自论文无忧网 www.paper51.com right, paper51.com rear_ls_alpha1, http://www.paper51.com rear_ls_beta1, http://www.paper51.com rear_rs_alpha1, paper51.com rear_rs_beta1, 内容来自论文无忧网 www.paper51.com lfe; 内容来自论文无忧网 www.paper51.com sint_16 Acc1, Acc2; /*累加器 */ 内容来自www.paper51.com /* AC3 5.1 channel downmix, 3front, 2 rear channels */ copyright paper51.com for ( i=0; i < 256; ++i ) 内容来自论文无忧网 www.paper51.com { left = samples->channel[0][i] * 32000.0; 内容来自论文无忧网 www.paper51.com center= samples->channel[1][i] * 0.707 * 32000.0; paper51.com right= samples->channel[2][i] * 32000.0; 内容来自论文无忧网 www.paper51.com rear_ls_alpha1= samples->channel[3][i] * 32000.0; http://www.paper51.com rear_ls_beta1= samples->channel[4][i] * 32000.0; 内容来自论文无忧网 www.paper51.com rear_rs_alpha1= samples->channel[5][i] * 32000.0; http://www.paper51.com rear_rs_beta1= samples->channel[6][i] * 32000.0; http://www.paper51.com lfe= samples->channel[7][i] * 0.707 * 32000.0; paper51.com Acc1= ( 2 + left + center + rear_ls_alpha1 + rear_rs_beta1 + lfe ) >> 1; 内容来自论文无忧网 www.paper51.com Acc2= ( 2 + right + center + rear_ls_beta1 + rear_rs_alpha1 + lfe ) >> 1; 内容来自www.paper51.com out_samples[(i<<1) ] = Acc1; paper51.com out_samples[(i<<1)+1 ] = Acc2; 内容来自论文无忧网 www.paper51.com
} paper51.com } paper51.com 5.4结论分析 内容来自论文无忧网 www.paper51.com
本章用C语言在VC环境下编程实现AC3的虚拟环绕声系统,本设计是在AC3解码C语言程序的基础上,在其子程序IMDCT后面,对分离出来的环绕声道数据进行虚拟滤波处理,然后把结果混同其他声道数据送入Downmix子程序进行混合,生成两声道的虚拟环绕声。原解码程序经编译、组建,生成可执行的EXE文件,运行后,生成一个名为“Title04_interpreter_18_34_test.wav”的音频文件。而修改后的程序运行得到一个名为“Title04_interpreter_18_34_srs.wav”的音频文件,其波形如图5-6。两个文件数据长度相等,均为2.93MB。在水平位置,如图2-3所示,以人圆心,r=1.4m为半径的圆周上,在前方的位置布置两个左、右扬声器,重放时在圆心处试听,“Title04_interpreter_18_34_srs.wav”比“Title04_interpreter_18_34_test.wav”有明显的空间感和立体感,给人身临其境的感觉。 内容来自www.paper51.com 内容来自论文无忧网 www.paper51.com 图5-6“Title04_interpreter_18_34_srs.wav”的波形 paper51.com |