加入收藏  广告服务  关于我们
 2008-3-27

vb用代码 生成 wav 文件

发表:zfc   阅读:次  关键字:wav 声音   字体:[ ]

以前在网上下载过一个老外写的 用vb代码生成 wav 文件的程序,做的很好,合成的好像是子弹声。(用到了三角函数 sin cos tan 等)
可惜我把代码给弄丢了,现在在网上也搜不到这个文件。现在正在研究语音识别技术,自己就做了一个,只是声音很难听。哪位高手有兴趣做个好听的出来?。 如果你做出来了给我发个呦! ZLZFC&tom.com
下面是我合成声音的 vb6代码
运行程序就能生成 wav 声音文件,当然你也可以把 a() 保存到磁盘上.

Private Declare Function sndPlaySoundMEM Lib "winmm.dll" Alias _
    "sndPlaySoundA" (lpszSoundName As Any, _
    ByVal uFlags As Long) As Long
   
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)


Private Type WAVInfo
a_RIFF As String * 4  '4
b_文件长度 As Long   '4
c_Wave As String * 4  '4
d_FMT As String * 4  '4
e_过渡字节 As Long  '4
f_压缩格式 As Integer  '2
g_声道数 As Integer '0 = 单声道, 1 = 立体声  '2
h_采样率 As Long  '4
j_传送速率 As Long  '4
k_数据块调整 As Integer '2
l_每个样本的数据位数 As Integer '2
m_DATA As String * 4  '4
n_语音数据长度 As Long '4
End Type
Dim Wave As WAVInfo
'函数:

Sub makewave()
Dim i As Single
Dim j As Single
Dim a() As Byte
Dim b() As Byte


ReDim a(4999 + 44)
ReDim b(4999)
Dim k As Single
Dim bl As Single
Dim m As Integer
Dim e As Integer
Dim st As Double


Wave.b_文件长度 = UBound(a) + 1
Wave.n_语音数据长度 = UBound(a) + 1 - 36

CopyMemory a(0), Wave, 44

bl = Tan(90 * 3.14 / 180)

For j = 0 To UBound(b)
    i = Tan((70 + (j Mod 19)) * 3.14 / 180)
b(j) = 128 + i * 3 - 28
Next j

For j = 44 To UBound(a)
i = b(j - 44) + Sin(j * 3.14 / 5) * 40
If i > 255 Then i = 255
If i < 0 Then i = 0
a(j) = i
Next
sndPlaySoundMEM a(0), 7&
DoEvents
End Sub

Private Sub Command1_Click()
Call makewave
End Sub


Private Sub Form_Load()
Wave.a_RIFF = "RIFF" '4
Wave.b_文件长度 = 0  '4
Wave.c_Wave = "WAVE" '4
Wave.d_FMT = "fmt "  '4
Wave.e_过渡字节 = 16  '4
Wave.f_压缩格式 = 1 ' 2
Wave.g_声道数 = 1    '2
Wave.h_采样率 = 16000 '  4
Wave.j_传送速率 = 16000 '  4
Wave.k_数据块调整 = 1 '2
Wave.l_每个样本的数据位数 = 8  '2
Wave.m_DATA = "data"  '4
Wave.n_语音数据长度 = 0  '4
End Sub

 热门文章
 推荐信息