gudan
高级用户
   
积分 605
发帖 579
注册 2007-7-20
|
#1 转载【从主板唱歌到新概念病毒的开发】
Quote: | http://bbs.hackerxfiles.net/forum-31-1.html
【从主板唱歌到新概念病毒的开发】
上次 peter08发了个主板唱歌的帖子。
在网上查了下原来是个很古老的小玩意儿了.原帖是
复制内容到剪贴板 代码 rivate Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
Function playsnd(ByVal x As Long, y As Long)
Beep x, y * 3
DoEvents
End Function
Private Sub Command1_Click()
playsnd 587, 100: playsnd 784, 100: playsnd 880, 100: playsnd 988, 100:: playsnd 988, 200: playsnd 0, 100
playsnd 988, 100: playsnd 880, 100: playsnd 988, 100: playsnd 1047, 200: playsnd 988, 100: playsnd 988, 100
playsnd 880, 100: playsnd 100, 150: playsnd 880, 100: playsnd 784, 100:: playsnd 988, 100: playsnd 0, (5)
playsnd 988, 100: playsnd 0, (5)::: playsnd 988, 100: playsnd 0, (5):::: playsnd 988, 100: playsnd 880, 100
playsnd 784, 100: playsnd 740, 100: playsnd 784, 200: playsnd 100, 200:: playsnd 784, 100: playsnd 880, 100
playsnd 784, 100: playsnd 988, 100: playsnd 0, (5)::: playsnd 988, 100:: playsnd 0, (5)::: playsnd 988, 100
playsnd 0, (5)::: playsnd 988, 100: playsnd 100, 100: playsnd 587, 100:: playsnd 784, 100: playsnd 1175, 100
playsnd 0, (5)::: playsnd 1175, 99: playsnd 988, 100: playsnd 0, (5):::: playsnd 988, 100: playsnd 0, (5)
playsnd 987, 100: playsnd 100, 100: playsnd 784, 100: playsnd 0, (5):::: playsnd 784, 100: playsnd 880, 200
playsnd 784, 100: playsnd 0, (5)::: playsnd 784, 100: playsnd 0, (5):::: playsnd 784, 50:: playsnd 659, (50)
playsnd 784, 100: playsnd 659, 100: playsnd 784, 100: playsnd 880, 100:: playsnd 100, 100: playsnd 587, 110
playsnd 784, 120: playsnd 880, 130: playsnd 740, 140: playsnd 784, 200:: playsnd 1, 1::::: playsnd 1, 1
End Sub
有一定物理常识的人都知道,音调的高低与震动频率成正比,也就是说物体震动速度越快则音调越高
do re mi fa sol la si do 频率跟do的频率比 1:1 9:8 5:4 4:3 3:2 5:3 15:8 2:1
(以下单位均为Hz)
我们设do的频率为440(标准频率)
1 do 440
2 re 495
3 mi 550
4 fa 587
5 sol 660
6 la 733
7 si 825
提一个八度
1` 880
2` 990
3` 1100
4` 1174
5` 1320
6` 1466
7` 1650
我在编歌的时候发现VB不能写出空拍,但是发现VB的允许频率是37Hz到35000Hz左右.人耳的听力范围是20Hz到20000Hz,所以37Hz的频率空拍是不可取的.那么我们可以选择高频率来空拍,只要把频率定为20000Hz就听不到了(18000Hz的频率我就听不到了).
这样一来只要有谱而且看的懂,大多数歌都可以准确的编出其音调和速度了
送上一首歌曲,希望大家喜欢。
--------------------------------------------------------------
他给的那首歌曲是 回到过去.(附件有)
----------------------------------------------------------
于是我在想如果要做其他的歌曲 难道还要一个个音符去自己转?太累了体力活就交给电脑吧
我就用c写了个把音调自动转换成主板频率的工具
源码如下:
复制内容到剪贴板代码:
#include<stdio.h>
void main()
{
char a;
while(scanf("%s",&a) && a!='0')
switch(a)
{
case '1': printf("playsnd 440,100:\n" ; break;
case '2': printf("playsnd 495,100:\n" ; break;
case '3': printf("playsnd 550,100:\n" ; break;
case '4': printf("playsnd 587,100:\n" ; break;
case '5': printf("playsnd 660,100:\n" ; break;
case '6': printf("playsnd 733,100:\n" ; break;
case '7': printf("playsnd 825,100:\n" ; break;
case 'a': printf("playsnd 880,100:\n" ; break;
case 'b': printf("playsnd 990,100:\n" ; break;
case 'c': printf("p 1100,100:\n" ; break;
case 'd': printf("p 1174,100:\n" ; break;
case 'e': printf("p 1320,100:\n" ; break;
case 'f': printf("p 1466,100:\n" ; break;
case 'g': printf("p 1650,100:\n" ; break;
default : printf("error\n" ;
}
}
编译后的软件在附件
写完后在网上随便找了个简单的谱子自己转换了一通,然后编译出另一个主板唱歌的。
结果乐音就没有那个回到过去的完美了。
回头看 回到过去 的源码。 原来频率数都不是整数。 所以用转换软件转换的频率发音出来后就显得比较干涩。
怎么解决这个问题呢?
1、难道还要把音符划分的更细?代码量就可想而知的大啊..
下面是重点.
2、主板的能发出的最高频率是多少?最低频率是多少?
众人皆知,高频声音和低频声音都会对人体造成负面影响。有的甚至会让人呕吐头晕。
于是我又有了新的想法.
我们在编写病毒的时候,是否可以加入以上主板发声的代码.
把频率设置特高.主板发音很高,如果长时间发音的话是否会造成主板的硬件损伤?烧坏?同时对人体造成伤害?
这样是否就算是一种新型的病毒?
-----对软件系统以外的东西造成伤害的病毒?
破坏硬件和人体的病毒?
能力有限,时间有限,所以还没有加以实践。再此我只是抛砖引玉,欢迎有兴趣的朋友来讨论.文章有理论上错误的地方希望大家及时指出。 |
|
|
※ ※ ※ 本文纯属【gudan】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 相思无用 唯别而已
别期若有定
千般煎熬又何如
莫道黯然销魂
何处柳暗花明 |
 |
|