DirectSound播放WAV

本文介绍了一种使用DirectX在Windows平台上播放音频的方法。通过创建DirectSound实例,并设置相应的音频参数,可以实现从文件加载音频并进行循环播放的功能。文章详细展示了如何利用DirectX API进行音频初始化、播放控制及状态监测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Imports DxVBLib

Public Class DirectSound 
    Dim dx As New DxVBLib.DirectX7
    Dim ds As DxVBLib.DirectSound

    Dim Buf As DxVBLib.DirectSoundBuffer    '创建缓冲
    Dim waveformatex As Object
    Dim sdbuffer As DxVBLib.DSBUFFERDESC
    Dim wvformat As DxVBLib.WAVEFORMATEX

    Dim mHwnd As IntPtr

    Public Sub New(ByVal hwnd As IntPtr)
        mHwnd = hwnd
        ds = dx.DirectSoundCreate("")
    End Sub

    Public Sub Play()
        Call ds.SetCooperativeLevel(mHwnd, DxVBLib.CONST_DSSCLFLAGS.DSSCL_PRIORITY)

        sdbuffer.lFlags = CONST_DSBCAPSFLAGS.DSBCAPS_STICKYFOCUS

        Dim wave As String = "waveformatex"

        wvformat.nSize = wave.Length
        wvformat.nChannels = 1
        wvformat.lSamplesPerSec = 1000 ' 44100
        wvformat.nBitsPerSample = 16
        wvformat.nBlockAlign = wvformat.nBitsPerSample / 8 * wvformat.nChannels
        wvformat.lAvgBytesPerSec = wvformat.lSamplesPerSec * wvformat.nBlockAlign * 10

        '音声をバッファに貯める
        Buf = ds.CreateSoundBufferFromFile("c:/风之彩 钢琴曲.wav", sdbuffer, wvformat)
        'ここに可変のwaitを入れたいのです。

        '再生
        Call Buf.Play(CONST_DSBPLAYFLAGS.DSBPLAY_LOOPING)
        '再生終了するまで次の処理には行かない。
        Do While Buf.GetStatus = CONST_DSBSTATUSFLAGS.DSBSTATUS_PLAYING
            Application.DoEvents()
        Loop
    End Sub
End Class 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值