| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 521 人关注过本帖
标题:还是蜂鸣器的问题
只看楼主 收藏
pjtyzyq
Rank: 2
等 级:论坛游民
帖 子:123
专家分:33
注 册:2016-2-14
结帖率:100%
  已结贴   问题点数:20  回复次数:19   
还是蜂鸣器的问题
哪位使用过WinIO使(win7系统)蜂鸣器发声?代码如何写?谢谢!
2018-01-04 07:41
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:版主
威 望:333
帖 子:11176
专家分:42137
注 册:2006-5-13
  得分:5 
用beep命令不行吗?
抱歉,记错了,刚才试了一下,VFP里没有这个命令。记得还有一个函数也可以发声的,但没有找到。

[此贴子已经被作者于2018-1-4 08:01编辑过]


活到老,学到老! http://www.qs98.com E-mail:hu-jj@21cn.com
2018-01-04 07:56
pjtyzyq
Rank: 2
等 级:论坛游民
帖 子:123
专家分:33
注 册:2016-2-14
  得分:0 
回复 2楼 hu9jj
网上查了一下,win7系统蜂鸣器发声下好像只能用winio,如果有其他办法也可以。
补充一下:因我这使用的电脑不能安音箱,所以只能使用蜂鸣器。

[此贴子已经被作者于2018-1-4 08:22编辑过]

2018-01-04 08:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:158
帖 子:6968
专家分:16165
注 册:2012-2-5
  得分:5 
??chr(7)

QQ:243688667
2018-01-04 10:05
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:135
帖 子:5653
专家分:24347
注 册:2014-5-20
  得分:5 
有恒心,是这个问题的继续 http://bbs.bccn.net/thread-470525-1-1.html
没用过WinIO,可能是个驱动层的应用。
抄一段C代码参考:
//使用WinIO驱动PC喇叭发声
#include "WinIo.h"
#define TIMER_FREQUENCY 1193167 //; 1,193,167 Hz
#define    OCTAVE    2
#define PITCH_C   523  // 523,25 Hz
#define PITCH_Cs  554  // 554,37 Hz
#define PITCH_D   587  // 587,33 Hz
#define PITCH_Ds  622  // 622,25 Hz
#define PITCH_E   659  // 659,25 Hz
#define PITCH_F   698  // 698,46 Hz
#define PITCH_Fs  740  // 739,99 Hz
#define PITCH_G   784  // 783,99 Hz
#define PITCH_Gs  831  // 830,61 Hz
#define PITCH_A   880  // 880,00 Hz
#define PITCH_As  988  // 987,77 Hz
#define PITCH_H  1047  //1046,50 Hz
// We are going to play c-major chord
#define    TONE_1    (TIMER_FREQUENCY/(PITCH_C*OCTAVE))
#define    TONE_2    (TIMER_FREQUENCY/(PITCH_E*OCTAVE))
#define    TONE_3    (PITCH_G*OCTAVE)
void Beep(DWORD pitch) {
    DWORD data=0;
    //Timer 8253-5 (AT: 8254.2).
    data=0xb6;
    SetPortVal(0x43,data,1);
    data=pitch&0xff;
    SetPortVal(0x42,data,1);
    data=(pitch>>8)&0xff;
    SetPortVal(0x42,data,1);
    //speaker on
    GetPortVal(0x61,&data,1);
    data|=0x03;
    SetPortVal(0x61,data,1);
    Sleep(30);
    //speaker off
    GetPortVal(0x61,&data,1);
    data&=0xFC;
    SetPortVal(0x61,data,1);
}
int main() {
    WinIoInit();//调用WinIO初始化函数
    for(int i=0;i<10;i++) {
        Beep(TONE_1);
        Beep(TONE_2);
        Beep(TONE_3);
    }
    WinIoExit();//退出WinIO库
    return 0;
}
2018-01-04 11:25
pjtyzyq
Rank: 2
等 级:论坛游民
帖 子:123
专家分:33
注 册:2016-2-14
  得分:0 
回复 5楼 吹水佬
吹版主,这个c代码我也看过,非常惭愧,实在看不懂,还请吹版主浪费点时间帮我转换成VFP,我再测试。谢谢!

[此贴子已经被作者于2018-1-4 11:40编辑过]

2018-01-04 11:38
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:135
帖 子:5653
专家分:24347
注 册:2014-5-20
  得分:0 
下了个,没用过,自己先检测一下有无问题再试用。


附件: 您没有浏览附件的权限,请 登录注册
2018-01-04 11:47
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:版主
威 望:333
帖 子:11176
专家分:42137
注 册:2006-5-13
  得分:0 
以下是引用sdta在2018-1-4 10:05:15的发言:

??chr(7)

就是这个函数,我错记为sys(7)了。

活到老,学到老! http://www.qs98.com E-mail:hu-jj@21cn.com
2018-01-05 08:01
pjtyzyq
Rank: 2
等 级:论坛游民
帖 子:123
专家分:33
注 册:2016-2-14
  得分:0 
回复 8楼 hu9jj
这个在win7下不好用了。
2018-01-05 09:56
pjtyzyq
Rank: 2
等 级:论坛游民
帖 子:123
专家分:33
注 册:2016-2-14
  得分:0 
CLEAR
DECLARE LONG InitializeWinIo IN WinIo.dll
DECLARE LONG ShutdownWinIo IN WinIo.dll
DECLARE LONG GetPortVal IN WinIo.dll;
   LONG wPortAddr,;
   LONG@ pdwPortVal,;
   LONG bSize            
DECLARE LONG SetPortVal IN WinIo.dll;
   LONG wPortAddr,;
   LONG dwPortVal,;
   LONG bSize   
  =SetPortVal(0x61,0xb6,1)
RETURN
试着做了个测试,还是没有声音,以上代码是模仿的,一定是哪里不对劲,烦各位帮看看。
系统催我结贴呢!呵呵

[此贴子已经被作者于2018-1-8 20:26编辑过]

2018-01-08 20:11







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.080319 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved