📄 编写多媒体播器时,怎样才能实现遁环播放.txt
字号:
一 个 专 用 的 API函 数 ,SndPlaySound(), 此 函 数 是 一 个 可 独 立 播 放 WAV 语 音 文 件 的 函 数 , 使 用 相 对 来 说 较 为 简 单 ,无 需 使 用 MMControl, 下 面 的 例 子 可 直 接 播 放 TEST.WAV文 件 :
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
i=SndPlaySound("test.wav",SND_LOOP), 最 后 一 个 参 数 可 设 置 。 SND_LOOP表 示 遁 环 播 放 。 更 具 体 的 说 明 可 查 阅 MSDN, 成 功 的 话 返 回 true。
利 用 多 媒 体 的 mciSendString API 函 数 , 再 搭 配 mci(multimedia control interface) 指 令 , 即 可 播 放 .wav 声 音 文 件 , 细 节 如 下 :
1. API 的 声 明 :
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
注 : 如 果 以 上 的 声 明 放 在 「 一 般 模 块 」 底 下 , 应 将 Private 保 留 字 去 掉 。
2. 程 序 范 例 :
'自 定 义 过 程 PlaySound
Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyWav", 0, 0, 0) ' MyWav 这 个 名 称 可 依 需 要 来 修 改
cmd = "open " & filename & " type WAVEAudio alias MyWav"
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyWav", 0, 0, 0)
End Sub
' 假 设 要 播 放 "c:\windows\Tada.wav"
PlaySound "c:\windows\Tada.wav"
在 表 单 上 布 置 一 个 Timer 控 制 文 件 、 将
Interval 属 性 设 定 成 100(表 示 0.1 秒 ), 然 后 撰 写
Timer1_Timer 事 件 程 序 , 如 下 :
Private Sub Timer1_Timer()
Dim retStr As String * 80
Call mciSendString("status MyWav mode", retStr, 80, 0)
If Left(retStr, 7) = "stopped" Then ' 如 果 停 止 了
PlaySound "c:\windows\Tada.wav" ' 重 复 播 放
End If
End Sub
主 持 人 注 : 实 际 上 有 更 简 单 的 方 法 , 只 要 使 用 API函 数 mciSendCommand时 在 命 令 后 加 上 repeat就 可 以 实 现 遁 环 播 放 。 如
mciSendString "play mov notify repeat", 0, 0, hWnd
就 可 以 实 现 重 复 放 映 电 影 。
<END>
MMControl在 媒 体 文 件 播 放 完 毕 之 后 会 产 生 一 个 ONNotify事 件 , 你 可 以 把 重 播 的 代 码 写 到 该 事 件 中 。
<END>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -