|
2008-3-27
vb用代码 生成 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 热门文章
推荐信息
|