wav.c

来自「redboy for gba 是BPNS为GBA编写的一个小软件。软件的邹形是B」· C语言 代码 · 共 49 行

C
49
字号
#include <CsAgb.h>
#include <rb_string.h>
#include <string.h>
#include <rb_stdio.h>
void play_wave(u32 srate,u32 loc);
u16 is_play_wav=0;
typedef struct //wave文件头信息
{
   char type[4];//"RIFF"
   u32 flen;//文件大小
   char flg[4];//"WAVE"
   char id[4];//"fmt "最后一个为空格
   u32 size;//数据大小
   u16 format;//1:无压缩
   u16 channels;//声道
   u32 sample_rate;//采样率
   u32 cnt;//每秒播放数据 =rate为8位采样
   u16 wBlockAlign;
   u16 bit;//几位采样
   char xxx[14];//???
   char data[4];//="date"
   u32 dat_cnt;//数据大小
} wav_head;//58个字符长度

int open_wav(u32 loc)
{
   int i;
   char *str=(char *)loc;
   char *temp;//[sizeof(wav_head)];
   wav_head head;
   temp=(char *)&head;
   for (i=0;i<sizeof(wav_head);i++) temp[i]=str[i];
   head.type[3]='\0';
   head.flg[3]='\0';
   head.id[3]='\0';
   str_up(head.type);
   str_up(head.flg);
   str_up(head.id);
   if (strcmp(head.type,"RIF")!=0 || strcmp(head.flg,"WAV")!=0
         || strcmp(head.id,"FMT")!=0) return 1;//检查是否为wav文件
   if (head.format!=1 || head.bit!=8) return 1;//检查是否为压缩格式与8位采样
   stop_dsound();
   is_play_wav=0;
   is_play_wav=4*(head.flen/head.sample_rate);
   show_float(is_play_wav,RGB(30,30,30));
   play_wave(head.sample_rate,loc+sizeof(wav_head));//播放音乐
   return 0;//返回
}

⌨️ 快捷键说明

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