荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: 让我们的电脑发声
发信站: BBS 荔园晨风站 (Wed Jan 27 17:49:43 1999), 转信


   根据一项心理学测定和估计的结果,进入人类大脑的信息绝大部分
来自眼睛,其次是来自耳朵,而只有很少一部分来自人的其它感官。由
此可见,声音对人类的发展起着何等重要的作用。特别是近几年,多媒
体技术发展迅速,能够处理声音、图像的多媒体电脑也开始步入了家
庭。能够拥有一台多媒体电脑是每个电脑爱好者的心愿,但是,目前,
一般的单位及电脑爱好者所用电脑都没有配置解压卡、声卡等处理图
像、声音的硬件设备。但所有的电脑都有一个小喇叭,即扬声器。如
果我们在软件开发或者学习过程中,通过一定的技术、方法使电脑中
的扬声器发声,那么,肯定会取得意想不到的声音效果。
    音调和频率的对应关系
    我们知道:音乐基本音调是由12个音符组成,各个音符之间相隔半
音,它们是C、#C、D、#D、E、F、#F、G、#G、A、#A、B。这12个音符
组成一个音阶,人耳可听见的声音频率可由7 个这样的音阶组成。用n
表示音符号,第一音阶,n=1,2,...12;直到第七音阶,n=78,79...84。
    音调的频率f(单位为赫兹)和音符号n之间有以下关系:
    f=61.73541×1.0594631n
    其中,n∈[1,84],f∈[65,7902]。
    当n=25、27、29、30、32、34、36、37时利用上述公式可以求出
中音音调的频率,如表1所示。常用的高级语言都有使扬声器发声语句
或函数,简述如右: 表1 音调和频率

    TURBO PROLOG语言
    TURBO PROLOG语言提供这样两个谓词:beep和sound。其中,beep
只能产生简单的高音,s ound谓词的功能比beep谓词功能更强大。利
用该谓词可以产生人类听觉范围内的所有声调。sound谓词的语法为:
sound(Duration,Frequency)。
    其中,参数Duration是以百分之一秒表示的时间数字,即持续时间
,参数Frequency是发出声调的频率,单位为赫兹,这两个参数取值均为
整数。在程序中,设计若干个不同持续周期和频率的sound谓词,便可
以让电脑的扬声器产生各种旋律。
    例如,利用beep和sound谓词可以编写这样一个演示程序。
    /* 程序:sound.pro */
    /* 用途:让扬声器发声 */
    predicates
      two_beep
      make_sound
    goal
      two_beep,
      make_sound.
    clauses
      two_beep:-
        beep,
        beep.
        make_sound:-
    /* 产生周期为1秒的B调 */
       sound(100,494),
    /* 产生调期为1秒的G调 */
       sound(100,392)。

    QUICK BASIC语言
    QUICK BASIC语言提供这样两个语句。beep语句只能使扬声器发
出简单的嘟嘟声,而sou nd语句能发出指定频率和时间长度的音调。s
ound语句的语法为:SOUND frequency,duratio n。其中,参数frequen
cy的单位为赫兹,其变化范围为37-32767;参数duration表示音长范围
为0-65535个时钟单位(1/18.2秒)。
    例如,下面是产生时间长度约为1秒,频率为262赫兹的音调,紧接
着让扬声器发出嘟嘟声的BASIC语言程序:
    sound 262,18
    beep

    TURBO PASCAL语言
    TURBO PASCAL语言提供三个过程。过程sound的语法为:sound(fr
equency),参数freque ncy表示音乐的频率,单位是赫兹。过程delay
的语法为:delay(duration),参数duration是以毫秒为单位表示的延
时时间。过程nosound用来关闭扬声器。一个简单的音乐例子是:
    program music;
    uses Crt;
    begin
      Sound(200);
      Delay(200);
      NoSound;
    end.
    这里是歌曲《我的中国心》中的一段歌谱,歌谱如下: 乐曲 《我
的中国心》
    下面是对应的TURBO PASCAL语言程序。其中,音调的频率可以参
照前面表1,表中为中音音调的频率,表中未列出音调频率可以利用所
给公式求出。例如低音6的频率就是将n=22代入公式所求得的f值为22
0。
    {我的中国心}
    {说明:本程序中一拍设计为四秒钟}
    program example;
    uses crt;
    procedure make-sound(frequency:integer;duration:real);
    degin
        sound(frequency);
        delay(trunc(1000*duration))
    end;
    {执行部分}
    begin
    {第一个参数为频率,单位:赫兹;第二个参数为节拍长度,单位:秒
}
       make_sound(220,6);make_sound(330,2);make_sound(294,2)
;
       make_sound(330,2);make_sound(262,2);make_sound(246,2)
;
       make_sound(220,12);
       make_sound(330,2);make_sound(440,4);make_sound(392,2)
; make_sound(330,2)

       make_sound(294,2);make_sound(262,2);make_sound(294,2)
;
       make_sound(330,12);make_sound(330,2);make_sound(392,2
);
       make_sound(440,6);make_sound(494,2);make_sound(440,2)
;
       make_sound(392,2);make_sound(330,2);make_sound(294,2)
;
       make_sound(262,2);make_sound(262,4);make_sound(294,2)
;make_sound(330,8)
       make_sound(294,6);make_sound(330,2);make_sound(246,2)
;
       make_sound(220,2);make_sound(195,4);
       make_sound(440,12);
       nosound
    end.
    {程序结束}

    TURBO C语言
    TURBO C语言提供这样三个函数。sound(frequency),参数freque
ncy单位为赫兹。dela y(duration),参数duration单位为毫秒。如果
想关闭扬声器,可以利用nosound函数,其语法为:nosound(),该函数没
有参数。下面是一个产生频率为512赫兹,持续时间为1秒钟的音调的
例子。
    main()
    {
        sound(512);
        delay(1000);
        nosound();
    }

    FoxPro数据库语言
    FoxPro语言提供这样两个命令。SET BELL ON|OFF和SET BELL TO
。其中,SET BELL ON| OFF命令决定当到达或超过字段末尾或是输入
了不合法的数据时,主机里的扬声器是否响。缺省状态为ON。SET BEL
L TO [<frequency>,<duration>]的参数分别为频率和持续时间。频
率的单位为赫兹,而每一个单位持续时间相当于0.549秒。频率的范围
是1-10000,持续时间的范围是1-19,缺省为512赫兹且持续时间为2个
单位,即0.549×2=1.098秒。
    值得注意的是只有当SET BELL设置为ON时,SET BELL TO后面指定
的频率和持续时间值才起作用。
    在程序设计时,合理利用这样的命令,例如,设置口令时,当口令输
入错误,响铃提示,显然能够增加程序的趣味性,对用户来讲,这样的设
计也是友善的。
    汇编语言
    汇编语言兼有机器语言和高级语言的一些主要优点,因此在软件
开发中十分有用。对于从事计算机软件开发工作者来说,掌握汇编语
言程序设计无疑将使其进入更高层的程序设计境界。
    使用DOS、BIOS提供的功能丰富的调用入口和子程序,可以让程序
完成复杂的操作。
    下面就是利用DEBUG编写的名为sound.com的文件的操作步骤。其
作用是使扬声器发出嘟嘟声。sound.com文件是可执行文件,在程序设
计时,可以将其嵌入自己的程序中,用以提醒操作者注意等。
    c:\>debug
    -n beep.com
    -a
    195F:0100 mov d1,07
    195F:0102 mov ah,02
    195F:0104 int 21
    195F:0106 int 20
    195F:0108
    -r cx
    CX 0000
    :8
    -w
    Writing 00008 bytes
    -q

    结束语
    总之,利用扬声器的场合很多,例如:当需要程序提醒操作者注意,
可以发出音响提示。在游戏程序中常常加入一些音响效果,以提高游
戏的趣味性。软件安装过程通常需要较长的一段时间,用户会觉得不
耐烦和烦躁,如果软件开发商能够在软件安装过程中插播一段旋律优
美的音乐,这无疑会拉近用户和软件开发商之间的距离。即使是一般
的程序,也可以插入一段音乐,以解除等待中的烦恼。希望广大的电脑
爱好者能够在此文所述内容的基础上开发出自己的音乐程序。

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店