如何实现wav文件的减速播放
编号:QA001421
建立日期: 1999年7月29日 最后修改日期:2000年7月10日
所属类别:
xiaobai:
vb
win nt/win9x
如何使用vb实现wav文件的减速播放?(例如, 将一个2秒钟的文件用4秒钟播放)
回答:
VB干不了这个活。声音的慢放是个很复杂的问题,单纯的慢放会引起声音严重失真,前年(1997)《音像世界》的《音像博士》曾回答过这个问题,你可以查阅了解声音慢放。
RUOTONG的意见:
引入directX库:
建立command1.command2
HScroll2(取值在100,32767)
'------------------
Dim dx As New DirectX7
Dim ds As DirectSound
Dim dsb As DirectSoundBuffer
Private Sub Command1_Click()
dsb.Play 1
End Sub
Private Sub Command2_Click()
dsb.Stop
End Sub
Private Sub Form_Load()
Set ds = dx.DirectSoundCreate("")
ds.SetCooperativeLevel Me.hWnd, DSSCL_PRIORITY
loadwav
End Sub
Private Sub loadwav()
Dim desc As DSBUFFERDESC
Dim wa As WAVEFORMATEX
desc.lFlags = DSBCAPS_CTRLFREQUENCY Or DSBCAPS_CTRLPAN Or DSBCAPS_CTRLVOLUME Or DSBCAPS_STATIC
Set dsb1 = ds.CreateSoundBufferFromFile("f:\bye.wav", desc, wa)
Set dsb = ds.CreateSoundBufferFromFile("f:\welcome.wav", desc, wa)
End Sub
Private Sub HScroll2_Change()
dsb.SetFrequency HScroll2.Value
End Sub
Apple的意见:
通过修改WAV文件格式区的采样率可以实现WAV慢放,首先把DEMO.WAV调入内存,在偏移地址为18H处读出一个整型数(4 BYTES),把它除以2再写回去,同样对1CH处读出一个整型数(4 BYTES),把它除以2再写回去,播放这一段内存即可。
此问题由Kurt回答。
| |
|
|
| |
|
|