利用中断做节奏型的时值

中断的进入时间配置为:long int tick_=(long int)(60*1000000)/tempo_speed/48;

//解释:  60*1000000是一分钟对应的微秒数;

                tempo_speed:拍子速度;

                48:将1个拍子的时间分为48份。

 user_voice_app();函数放在上述中断中即可。

//各音符对应时值,小数指的是时间差
uint8_t rhythm[rhythm_num][6]=
{
	{0,0,0,0,0,0},//0                    ♩ 
	{0,24,0,0,0,0},//0  0.5               两连音
	{0,16,32,0,0,0},//0  0.33  0.66       三连音
	{0,12,24,36,0,0},//0 0.25 0.5 0.75    四连音
	{0,24,36,0,0,0},//0  0.5  0.75    
	{0,12,24,0,0,0},//0  0.25  0.5
	{0,36,0,0,0,0},//0  0.75
	{0,12,0,0,0,0},//0  0.25
	{24,0,0,0,0,0},//0.5
};

uint8_t TickCnt=0;   //一个节奏内的时间标志位
uint8_t voiceCnt=0;//声音位置,一个节奏型的某一响

void user_voice_app(void)
{

	if(dis_flag==1)
	{
		switch(TickCnt)
		{
			case 0:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放重音
					voiceCnt++;
				}
				break;
				
			case 12:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放轻音
					voiceCnt++;
				}
				break;
				
			case 16:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放轻音
					voiceCnt++;
                }
				break;
				
			case 24:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放轻音
					voiceCnt++;
				}
				break;
				
			case 32:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放轻音
					voiceCnt++;
				}
				break;
				
			case 36:
				if(rhythm[rhythm_flag][voiceCnt]==TickCnt)
				{
					//用户函数  播放轻音
					voiceCnt++;
				}
				break;
		}
		TickCnt++;
		if(TickCnt>=47)
		{
			voiceCnt=0;
//			rhythm_flag=0;
			TickCnt=0;
		}
		
	}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值