# Re: 如何改变声音的长短及音调的高低？？

Posted by Honey on February 22, 1999 at 20:44:28:

In Reply to: 如何改变声音的长短及音调的高低？？ posted by jake xu on February 20, 1999 at 22:48:22:

从简单说起当然是改变波形啦
若要改变音调的高低
举个例子
假设有个声波图形是
Y=Sin(X)
只要改成
Y=Sin(X/2)
音调就会比较高
这理论知道问题一定可以解决

若要改变声音的长短
无可避免的 得先对声
音的档头有点了解
标准的PCM音档档头长度使44Bytes,
这个部分不要修改
在档头35~36Bytes储存的是档案位元数
读取方法如下
Dim StrFileName As String '储存档名
Dim IntCost As Integer '储存 位元数
StrFileName="C:\windows\media\ding.wav _
" '设定要读取的档案
Open StrfileName For Random As #1 _
Len = 2 '设定每笔资料长度为 2 bytes
get #1,18,IntCost '取得第18笔资料 _
即档头35~36 bytes位置的"位元数"
close

若IntCost值为16表示
这是16位元的音档
若为8表示这是8位元的音档...

将这个值除以8会得到每笔资料
的长度 声音档可以看成'随机档'
位元数除以8即是每笔资料长度(bytes)
假设这值是K
再将档案开启
Open StrfileName For Random As #2 _
Len = K '设定每笔资料长度为 K bytes
一样用get从45bytes取得资料
假设取到的值是
8 , 2 , 2 , 3 ,5 ,7 ,7 .....
有两种方法可增长声音
1.改成

8,0,2,0,2,0,3,0,5,0,7,0,7,0......
中间都加上一笔资料0
2.改成
8,8,2,2,2,2,3,3,5,5,7,7.........
中间都重复一笔资料

最后由于档案长度改变了 还需要修改档头
Open strFileName For Random Access Read Write As _
#23 Len = 4
Dim LngG As Long
LngG = LOF(23)'档案长度
Put #23, 2, (LngG - 8)
Put #23, 11, (LngG - 44)
Close
这样就可以了

Follow Ups:

- Thanks for helping me. jake xu 01:33:40 2/23/99 (0)