让C语言演唱“渴望”

本文介绍了一个使用TURBOC实现的简易音乐播放程序。通过定义不同音符的频率,组合成歌曲并播放出来。程序利用了sound函数及硬件操作来产生特定频率的声音,实现了音乐的播放效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 程序简介:TURBOC专门提供了产生声音的函数sound,调用该函数的格式为:void sound(unsigned frequency)该函数的入口参数为产生声音的频率。
****************************************/

#include <stdio.h>
#include <dos.h>
#include <stdlib.h>
#include <time.h>
#include <bios.h>
#include <conio.h>

#define N1 64
#define N2 32
#define N4 16
#define N8 8
#define N16 4
#define END 0

enum NOTES
{
     C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,
     C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,
     C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,
     C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976,
};
typedef enum NOTES SONG;

SONG song[]={
     D0,N4,E0,N8,D0,N8,C0,N4,A10,N4,G10,N8,E10,N8,
     G10,N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,G10,N8,A0,N8,
     E0,N8,G0,N8,D0,N2,E0,N4,D0,N8,E0,N8,G0,N4,E0,N4,G10,
     N8,E10,N8,G10,N8,A10,N8,C0,N2,A10,N4,A10,N8,C0,N8,A10,
     N8,A10,N8,D10,N8,E10,N8,G10,N2,D0,N4,D0,N4,G0,N4,A0,N8,
     G0,N8,F0,N2,G0,N2,A0,N4,G0,N8,E0,N8,D0,N8,E0,N8,C0,N8,
     A10,N8,D0,N2,E0,N4,G0,N8,E0,N8,G0,N4,E0,N4,G10,N8,E10,
     N8,G10,N8,A10,N8,C0,N4,A10,N4,A10,N8,C0,N8,D0,N8,A10,
     N8,C0,N8,E0,N8,D0,N1,END,END
};

void main(void)
{
     int note=0,fre,dur,control;
     clock_t goal;
     while(song[note]!=0)
     {
          fre=song[note];
          dur=song[note+1];
          if(kbhit())
          {
               break;
          }
          if(fre)
          {
               outportb(0x43,0xb6);
               fre=(unsigned)(1193180L/fre);
               outportb(0x42,(char)fre);
               outportb(0x42,(char)(fre>>8));
               control=inportb(0x61);
               outportb(0x61,control|0x3);
          }
          goal=(clock_t)dur+clock();
          while(goal>clock());
          if(fre)
               outportb(0x61,control);
          goal=(clock_t)0;
          note+=2;
     }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值