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

📄 rb_play.c

📁 redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是BASIC高级语言解释执行器。几经修改和扩展
💻 C
字号:
#include <CsAgb.h>
#include <rbasic.h>
#include <rb_stdio.h>
#include <rb_string.h>
#include <rb_mem.h>

#define rb_msc (u16 *)0x06012C00 //音符存放区0x06012C00
const float Mfreq[7][6]={
   {32.70,65.41,130.81,261.63,523.25,1046.50},//C
   {36.71,73.42,146.83,293.66,587.33,1174.66},//D
   {41.20,82.41,164.81,329.63,659.26,1318.51},//E
   {43.65,87.31,174.61,349.23,698.46,1396.91},//F
   {49.00,98.00,196.00,392.00,783.99,1567.98},//G
   {55.00,110.00,220.00,440.00,880.00,1760.00},//A
   {61.74,123.47,246.94,493.88,987.77,1975.53}//B
};//简谱频率
extern u8 is_basic_run;
extern rb_get_str(char *exp,char *str);

u8 rb_mo=2;//当前音符单调
extern void play_snd2(u16 mus);
u8 music_cnt;
u16 M_np=0;
u16 M_ep=0;
u16 *const rb_music=rb_msc;

void add_music(u16 mus)
{
   rb_music[M_ep&0x03FF]=mus;
   M_ep++;
}
void ply_music()
{
   //u16 loc;
   if (M_np==M_ep) {set_sound_off();music_cnt=0;return;}
   //loc=M_np&0x03FF;
   if ((rb_music[M_np&0x03FF]&0x000F)!=7) play_snd2(rb_music[M_np&0x03FF]);
   else set_sound_off();
   M_np++;
}
u8 is_music(char ch)
{
   int i;
   char mm[]="CDEFGABP";
   for (i=0;i<7;i++)
   {
      if (ch==mm[i]) return i+1;
   }
   return 0;
}
void rb_play(char *exp)
{
   u8 id;
   int i=0;
   //int flg=0;
   u8 yf,yd,len;
   u16 mus;
   char str[str_max_len];
   rb_get_str(exp,str);
   str_up(str);
   while (str[i]!='\0')
   {
      id=is_music(str[i]);
      if (id)
      {
         i++;
         if (str[i]<'1' || str[i]>'8') {rb_error=6;return;}
         len=str[i]-'0';
         yf=id-1;
         yd=rb_mo;
         mus=len;
         mus=(mus<<8)|(yf<<4)|yd;
         add_music(mus);//音符加入播放缓存
      }
      else if(str[i]=='O')//设置音调
      {
         i++;
         if (str[i]<'0' || str[i]>'5') {rb_error=6;return;}
         rb_mo=str[i]-'0';
      }
      else {rb_error=6;return;}
      i++;
   }
}
void music_reset()
{
   rb_mo=2;
   M_np=0;
   M_ep=0;
}

⌨️ 快捷键说明

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