⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mzpokeysnd.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 4 页
字号:
        if(flags & SND_BIT16)        {            filter_data = filter_22;            filter_size = filter_size_22;        }        else        {            filter_data = filter_22_8;            filter_size = filter_size_22_8;        }        pokey_frq = 1786050; /* 0.2% off ideal */        audible_frq = 10000; /* 30db filter attenuation */        break;    case 11025:        if(flags & SND_BIT16)        {            filter_data = filter_11;            filter_size = filter_size_11;        }        else        {            filter_data = filter_11_8;            filter_size = filter_size_11_8;        }        pokey_frq = 1786050; /* 0.2% off ideal */        audible_frq = 4500; /* 30db filter attenuation */        break;    case 48000:        if(flags & SND_BIT16)        {            filter_data = filter_48;            filter_size = filter_size_48;        }        else        {            filter_data = filter_48_8;            filter_size = filter_size_48_8;        }        pokey_frq = 1776000; /* 0.7% off ideal */        audible_frq = 20000; /* ultrasound */        break;    case 8000:        if(flags & SND_BIT16)        {            filter_data = filter_8;            filter_size = filter_size_8;        }        else        {            filter_data = filter_8_8;            filter_size = filter_size_8_8;        }        pokey_frq = 1792000; /* 0.1% off ideal */        audible_frq = 4000; /* Nyquist, also 30db attn, should be 50 */        break;#endif
    default: //TCPMP precalced filter table 44100hz 16bit
		{
			#include "filter.h"
			memset(filter_data,0,sizeof(filter_data));
            memcpy(filter_data,filter_44,sizeof(filter_44));
            filter_size = sizeof(filter_44)/sizeof(filter_44[0]);
			pokey_frq = 1808100;
			audible_frq = 20947;
			break;
        }
/*    default:        pokey_frq = (int)(((double)pokey_frq_ideal/sample_rate) + 0.5)          * sample_rate;	filter_size = remez_filter_table((double)sample_rate/pokey_frq,					 &cutoff, quality);	audible_frq = (unsigned) (cutoff * pokey_frq);
	{
		#include <stdio.h>
		int i;
		FILE* f = fopen("\\filter.h","w+");
		fprintf(f,"static const double filter_44[%d] = {\n",filter_size);
		for (i=0;i<filter_size;++i)
			fprintf(f,"%13.13f,\n",filter_data[i]);
		fprintf(f,"};\n");
		fclose(f);
	}
*/    }    build_poly4();    build_poly5();    build_poly9();    build_poly17();#ifdef __PLUS	if (clear_regs)#endif	{		ResetPokeyState(pokey_states);		ResetPokeyState(pokey_states + 1);	}	num_cur_pokeys = num_pokeys;	return 0; /* OK */}/*****************************************************************************//* Function: Update_pokey_sound()                                            *//*                                                                           *//* Inputs:  addr - the address of the parameter to be changed                *//*          val - the new value to be placed in the specified address        *//*          gain - specified as an 8-bit fixed point number - use 1 for no   *//*                 amplification (output is multiplied by gain)              *//*                                                                           *//* Outputs: Adjusts local globals - no return value                          *//*                                                                           *//*****************************************************************************/static void Update_readout_0(PokeyState* ps){    if(ps->c0vo)        ps->readout_0 = readout0_vo;    else if(ps->c0sw4)        ps->readout_0 = readout0_hipass;    else        ps->readout_0 = readout0_normal;}static void Update_readout_1(PokeyState* ps){    if(ps->c1vo)        ps->readout_1 = readout1_vo;    else if(ps->c1sw4)        ps->readout_1 = readout1_hipass;    else        ps->readout_1 = readout1_normal;}static void Update_readout_2(PokeyState* ps){    if(ps->c2vo)        ps->readout_2 = readout2_vo;    else        ps->readout_2 = readout2_normal;}static void Update_readout_3(PokeyState* ps){    if(ps->c3vo)        ps->readout_3 = readout3_vo;    else        ps->readout_3 = readout3_normal;}static void Update_event0(PokeyState* ps){    if(ps->c0sw3)    {        if(ps->c0sw2)            ps->event_0 = event0_pure;        else        {            if(ps->c0sw1)                ps->event_0 = event0_p4;            else                ps->event_0 = event0_p917;        }    }    else    {        if(ps->c0sw2)            ps->event_0 = event0_p5;        else        {            if(ps->c0sw1)                ps->event_0 = event0_p4_p5;            else                ps->event_0 = event0_p917_p5;        }    }}static void Update_event1(PokeyState* ps){    if(ps->c1sw3)    {        if(ps->c1sw2)            ps->event_1 = event1_pure;        else        {            if(ps->c1sw1)                ps->event_1 = event1_p4;            else                ps->event_1 = event1_p917;        }    }    else    {        if(ps->c1sw2)            ps->event_1 = event1_p5;        else        {            if(ps->c1sw1)                ps->event_1 = event1_p4_p5;            else                ps->event_1 = event1_p917_p5;        }    }}static void Update_event2(PokeyState* ps){    if(ps->c2sw3)    {        if(ps->c2sw2)            ps->event_2 = event2_pure;        else        {            if(ps->c2sw1)                ps->event_2 = event2_p4;            else                ps->event_2 = event2_p917;        }    }    else    {        if(ps->c2sw2)            ps->event_2 = event2_p5;        else        {            if(ps->c2sw1)                ps->event_2 = event2_p4_p5;            else                ps->event_2 = event2_p917_p5;        }    }}static void Update_event3(PokeyState* ps){    if(ps->c3sw3)    {        if(ps->c3sw2)            ps->event_3 = event3_pure;        else        {            if(ps->c3sw1)                ps->event_3 = event3_p4;            else                ps->event_3 = event3_p917;        }    }    else    {        if(ps->c3sw2)            ps->event_3 = event3_p5;        else        {            if(ps->c3sw1)                ps->event_3 = event3_p4_p5;            else                ps->event_3 = event3_p917_p5;        }    }}static void Update_c0divstart(PokeyState* ps){    if(ps->c1_f0)    {        if(ps->c0_hf)        {            ps->c0divstart = 256;            ps->c0divstart_p = ps->c0diva + 7;        }        else        {            ps->c0divstart = 256 * ps->mdivk;            ps->c0divstart_p = (ps->c0diva+1)*ps->mdivk;        }    }    else    {        if(ps->c0_hf)            ps->c0divstart = ps->c0diva + 4;        else            ps->c0divstart = (ps->c0diva+1) * ps->mdivk;    }}static void Update_c1divstart(PokeyState* ps){    if(ps->c1_f0)    {        if(ps->c0_hf)            ps->c1divstart = ps->c0diva + 256*ps->c1diva + 7;        else            ps->c1divstart = (ps->c0diva + 256*ps->c1diva + 1) * ps->mdivk;    }    else        ps->c1divstart = (ps->c1diva + 1) * ps->mdivk;}static void Update_c2divstart(PokeyState* ps){    if(ps->c3_f2)    {        if(ps->c2_hf)        {            ps->c2divstart = 256;            ps->c2divstart_p = ps->c2diva + 7;        }        else        {            ps->c2divstart = 256 * ps->mdivk;            ps->c2divstart_p = (ps->c2diva+1)*ps->mdivk;        }    }    else    {        if(ps->c2_hf)            ps->c2divstart = ps->c2diva + 4;        else            ps->c2divstart = (ps->c2diva+1) * ps->mdivk;    }}static void Update_c3divstart(PokeyState* ps){    if(ps->c3_f2)    {        if(ps->c2_hf)            ps->c3divstart = ps->c2diva + 256*ps->c3diva + 7;        else            ps->c3divstart = (ps->c2diva + 256*ps->c3diva + 1) * ps->mdivk;    }    else        ps->c3divstart = (ps->c3diva + 1) * ps->mdivk;}static void Update_audctl(PokeyState* ps, unsigned char val){    unsigned char nc0_hf,nc2_hf,nc1_f0,nc3_f2,nc0sw4,nc1sw4,new_divk;    unsigned char recalc0=0;    unsigned char recalc1=0;    unsigned char recalc2=0;    unsigned char recalc3=0;    unsigned int cnt0 = 0;    unsigned int cnt1 = 0;    unsigned int cnt2 = 0;    unsigned int cnt3 = 0;    nc0_hf = (val & 0x40) != 0;    nc2_hf = (val & 0x20) != 0;    nc1_f0 = (val & 0x10) != 0;    nc3_f2 = (val & 0x08) != 0;    nc0sw4 = (val & 0x04) != 0;    nc1sw4 = (val & 0x02) != 0;    if(val & 0x01)        new_divk = 114;    else        new_divk = 28;    if(new_divk != ps->mdivk)    {        recalc0 = recalc1 = recalc2 = recalc3 = 1;    }    if(nc1_f0 != ps->c1_f0)    {        recalc0 = recalc1 = 1;    }    if(nc3_f2 != ps->c3_f2)    {        recalc2 = recalc3 = 1;    }    if(nc0_hf != ps->c0_hf)    {        recalc0 = 1;        if(nc1_f0)            recalc1 = 1;    }    if(nc2_hf != ps->c2_hf)    {        recalc2 = 1;        if(nc3_f2)            recalc3 = 1;    }    if(recalc0)    {        if(ps->c0_hf)            cnt0 = ps->c0divpos;        else            cnt0 = ps->c0divpos/ps->mdivk;    }    if(recalc1)    {        if(ps->c1_f0)        {            if(ps->c0_hf)                cnt1 = ps->c1divpos/256;            else                cnt1 = ps->c1divpos/256/ps->mdivk;        }        else        {            cnt1 = ps->c1divpos/ps->mdivk;        }    }    if(recalc2)    {        if(ps->c2_hf)            cnt2 = ps->c2divpos;        else            cnt2 = ps->c2divpos/ps->mdivk;    }    if(recalc3)    {        if(ps->c3_f2)        {            if(ps->c2_hf)                cnt3 = ps->c3divpos/256;            else                cnt3 = ps->c3divpos/256/ps->mdivk;        }    }    if(recalc0)    {        if(nc0_hf)            ps->c0divpos = cnt0;        else            ps->c0divpos = cnt0*new_divk;    }    if(recalc1)    {        if(nc1_f0)        {            if(nc0_hf)                ps->c1divpos = cnt1*256+cnt0;            else                ps->c1divpos = (cnt1*256+cnt0)*new_divk;        }        else        {            ps->c1divpos = cnt1*new_divk;        }    }    if(recalc2)    {        if(nc2_hf)            ps->c2divpos = cnt2;        else            ps->c2divpos = cnt2*new_divk;    }    if(recalc3)    {        if(nc3_f2)        {            if(nc2_hf)                ps->c3divpos = cnt3*256+cnt2;            else                ps->c3divpos = (cnt3*256+cnt2)*new_divk;        }    }    ps->c0_hf = nc0_hf;    ps->c2_hf = nc2_hf;    ps->c1_f0 = nc1_f0;    ps->c3_f2 = nc3_f2;    ps->c0sw4 = nc0sw4;    ps->c1sw4 = nc1sw4;    ps->mdivk = new_divk;}static void Update_c0stop(PokeyState* ps){    unsigned long lim = pokey_frq/2/audible_frq;    unsigned char hfa = 0;    ps->c0stop = 0;    if(ps->c0vo || ps->vol0 == 0)        ps->c0stop = 1;    else if(!ps->c0sw4 && ps->c0sw3 && ps->c0sw2) /* If channel 0 is a pure tone... */    {        if(ps->c1_f0)        {            if(ps->c1divstart <= lim)            {                ps->c0stop = 1;                hfa = 1;            }        }        else        {            if(ps->c0divstart <= lim)            {                ps->c0stop = 1;                hfa = 1;            }        }    }    else if(!ps->c0sw4 && ps->c0sw3 && !ps->c0sw2 && ps->c0sw1) /* if channel 0 is poly4... */    {        /* period for poly4 signal is 15 cycles */        if(ps->c1_f0)        {            if(ps->c1divstart <= lim*2/15) /* all poly4 signal is above Nyquist */            {                ps->c0stop = 1;                hfa = 1;            }        }        else        {            if(ps->c0divstart <= lim*2/15)            {                ps->c0stop = 1;                hfa = 1;            }        }    }    ps->outvol_0 = 2*ps->readout_0(ps);    if(hfa)        ps->outvol_0 = ps->vol0;}static void Update_c1stop(PokeyState* ps){    unsigned long lim = pokey_frq/2/audible_frq;    unsigned char hfa = 0;    ps->c1stop = 0;    if(!ps->c1_f0 && (ps->c1vo || ps->vol1 == 0))        ps->c1stop = 1;    else if(!ps->c1sw4 && ps->c1sw3 && ps->c1sw2 && ps->c1divstart <= lim) /* If channel 1 is a pure tone */    {        ps->c1stop = 1;        hfa = 1;    }    else if(!ps->c1sw4 && ps->c1sw3 && !ps->c1sw2 && ps->c1sw1 && ps->c1divstart <= lim*2/15)  /* all poly4 signal is above Nyquist */    {        ps->c1stop = 1;        hfa = 1;    }    ps->outvol_1 = 2*ps->readout_1(ps);    if(hfa)        ps->outvol_1 = ps->vol1;}static void Update_c2stop(PokeyState* ps){    unsigned long lim = pokey_frq/2/audible_frq;    unsigned char hfa = 0;    ps->c2stop = 0;    if(!ps->c0sw4 && (ps->c2vo || ps->vol2 == 0))        ps->c2stop = 1;    /* If channel 2 is a pure tone and no filter for c0... */    else if(ps->c2sw3 && ps->c2sw2 && !ps->c0sw4)    {        if(ps->c3_f2)        {            if(ps->c3divstart <= lim)            {                ps->c2stop = 1;                hfa = 1;            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -