如何为vb程序加上背景音乐?

时间:2022-12-14 05:01:07
我要在打开vb程序时播放 midi 背景音乐,
怎么加的?

7 个解决方案

#1


用mciSendString 

#2


Option Explicit

Const SND_ASYNC = &H1     ' 异步播放
Const SND_MEMORY = &H4    ' lpszSoundName 指向一个内存文件
Const SND_NODEFAULT = &H2 ' 不使用缺省声音
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Private Sub Form_Load()
    Call sndPlaySound("C:\WINNT\Media\canyon.mid", SND_ASYNC Or SND_NODEFAULT)
End Sub


你试一下,如果不好用,改变一下第二个参数,我的机器没有声卡~~

#3


' 假设要在程序启动时播放c:\123.mid文件
' PlaySound是个自定义函数,可以播放.wav  .mid  .mp3 文件

Option Explicit
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 Sub Form_Load()
PlaySound "c:\123.mid"
End Sub

' 播放指定磁盘中的音乐文件(.wav或.mid或.mp3)
' Filename 为音乐文件的路径及文件名
Function PlaySound(ByVal FileName As String) As Boolean
Dim cmd As String, exName As String
exName = Right(FileName, 3)
mciSendString "close " & exName, 0, 0, 0
cmd = "open " & FileName & " alias " & exName
mciSendString cmd, 0, 0, 0
PlaySound = mciSendString("play " & exName, 0, 0, 0)
End Function

#4


Private Sub Form_Load()
    mciSendString "close MyWav", vbNullString, 0, 0
    mciSendString "open " & MIDI文件 & " alias MyWav", vbNullString, 0, 0
    mciSendString "play MyWav", vbNullString, 0, 0
End Sub
Option Explicit

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

#5


建议使用sndPlaySound异步播放

#6


mciSendString是标准方法,当然简单一点的话,用Microsoft Multimedia Control甚至Media Player也是可以的(只是资源略有浪费)

#7


sndPlaySound用来播放wav各式的音乐,而nicExecute用来播放MIDI文件
   sndPlaySound的具体用法如下:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long 

以 及 如 下 的 标 识 常 量: 

Public Const SND_SYNC = &H0 
Public Const SND_ASYNC = &H1 
Public Const SND_NODEFAULT = &H2 
Public Const SND_MEMORY = &H4 
Public Const SND_ALIAS = &H10000 

Public Const SND_FILENAME = &H20000 
Public Const SND_RESOURCE = &H40004 
Public Const SND_ALIAS_ID = &H110000 
Public Const SND_ALIAS_START = 0 
Public Const SND_LOOP = &H8 
Public Const SND_NOSTOP = &H10 
Public Const SND_VALID = &H1F 
Public Const SND_NOWAIT = &H2000 
Public Const SND_VALIDFLAGS = &H17201F 
Public Const SND_RESERVED = &HFF000000 
Public Const SND_TYPE_MASK = &H170007 

sndPlaySound 函 数 需 要 两 个 参 数, 第 一 个 参 数soundfilename 是 要 播 放 的WAV 文 件 的 名 称。 第 二 个 参 数 是 一 个 表 明 播 放 方 式 的 标 识 常 量, 其 定 义 的 值 如 上 所 示, 通 常 所 使 用 的 标 识 意 义 如 下: 

SND_SYNC 播 放WAV 文 件, 播 放 完 毕 后 将 控 制 转 移 回 你 的 应 用 程 序 中。 
SND_ASYNC 播 放WAV 文 件, 然 后 将 控 制 立 即 转 移 回 你 的 应 用 程 序 中, 而 不 管 对WAV 文 件 的 播 放 是 否 结 束。 
SND_NODEFAULT 不 要 播 放 缺 省 的WAV 文 件, 以 免 发 生 某 些 意 外 的 错 误。 
SND_MEMORY 播 放 以 前 已 经 加 载 到 内 存 中 的WAV 文 件。 
SND_LOOP 循 环 播 放WAV 文 件。 
SND_NOSTOP 在 开 始 播 放 其 它 的WAV 文 件 之 前, 需 要 完 成 对 本WAV 文 件 的 播 放。 

注 意:SND_LOOP 标 识 通 常 需 要 同SND_ASYNC 共 同 使 用, 也 即 在 两 个 标 识 之 间 添 加 与 播 放 符, 以 免 在 对WAV 文 件 进 行 播 放 的 时 候 将 系 统 挂 起。 


为 了 播 放MIDI 文 件, 你 需 要 在 你 的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语 句: 
Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long 
mciExecute 函 数 只 需 要 一 个 参 数,CommandString, 顾 名 思 义, 它 是 一 个 命 令 字 符 串, 用 于 表 明 对 声 音 文 件 播 放 的 命 令, 例 如, 希 望 完 整 播 放 声 音 文 件, 则 该 字 符 串 就 是 字 符 串損lay" 加 上 声 音 文 件 的 路 径 以 及 文 件 名 称,

#1


用mciSendString 

#2


Option Explicit

Const SND_ASYNC = &H1     ' 异步播放
Const SND_MEMORY = &H4    ' lpszSoundName 指向一个内存文件
Const SND_NODEFAULT = &H2 ' 不使用缺省声音
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Private Sub Form_Load()
    Call sndPlaySound("C:\WINNT\Media\canyon.mid", SND_ASYNC Or SND_NODEFAULT)
End Sub


你试一下,如果不好用,改变一下第二个参数,我的机器没有声卡~~

#3


' 假设要在程序启动时播放c:\123.mid文件
' PlaySound是个自定义函数,可以播放.wav  .mid  .mp3 文件

Option Explicit
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 Sub Form_Load()
PlaySound "c:\123.mid"
End Sub

' 播放指定磁盘中的音乐文件(.wav或.mid或.mp3)
' Filename 为音乐文件的路径及文件名
Function PlaySound(ByVal FileName As String) As Boolean
Dim cmd As String, exName As String
exName = Right(FileName, 3)
mciSendString "close " & exName, 0, 0, 0
cmd = "open " & FileName & " alias " & exName
mciSendString cmd, 0, 0, 0
PlaySound = mciSendString("play " & exName, 0, 0, 0)
End Function

#4


Private Sub Form_Load()
    mciSendString "close MyWav", vbNullString, 0, 0
    mciSendString "open " & MIDI文件 & " alias MyWav", vbNullString, 0, 0
    mciSendString "play MyWav", vbNullString, 0, 0
End Sub
Option Explicit

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

#5


建议使用sndPlaySound异步播放

#6


mciSendString是标准方法,当然简单一点的话,用Microsoft Multimedia Control甚至Media Player也是可以的(只是资源略有浪费)

#7


sndPlaySound用来播放wav各式的音乐,而nicExecute用来播放MIDI文件
   sndPlaySound的具体用法如下:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long 

以 及 如 下 的 标 识 常 量: 

Public Const SND_SYNC = &H0 
Public Const SND_ASYNC = &H1 
Public Const SND_NODEFAULT = &H2 
Public Const SND_MEMORY = &H4 
Public Const SND_ALIAS = &H10000 

Public Const SND_FILENAME = &H20000 
Public Const SND_RESOURCE = &H40004 
Public Const SND_ALIAS_ID = &H110000 
Public Const SND_ALIAS_START = 0 
Public Const SND_LOOP = &H8 
Public Const SND_NOSTOP = &H10 
Public Const SND_VALID = &H1F 
Public Const SND_NOWAIT = &H2000 
Public Const SND_VALIDFLAGS = &H17201F 
Public Const SND_RESERVED = &HFF000000 
Public Const SND_TYPE_MASK = &H170007 

sndPlaySound 函 数 需 要 两 个 参 数, 第 一 个 参 数soundfilename 是 要 播 放 的WAV 文 件 的 名 称。 第 二 个 参 数 是 一 个 表 明 播 放 方 式 的 标 识 常 量, 其 定 义 的 值 如 上 所 示, 通 常 所 使 用 的 标 识 意 义 如 下: 

SND_SYNC 播 放WAV 文 件, 播 放 完 毕 后 将 控 制 转 移 回 你 的 应 用 程 序 中。 
SND_ASYNC 播 放WAV 文 件, 然 后 将 控 制 立 即 转 移 回 你 的 应 用 程 序 中, 而 不 管 对WAV 文 件 的 播 放 是 否 结 束。 
SND_NODEFAULT 不 要 播 放 缺 省 的WAV 文 件, 以 免 发 生 某 些 意 外 的 错 误。 
SND_MEMORY 播 放 以 前 已 经 加 载 到 内 存 中 的WAV 文 件。 
SND_LOOP 循 环 播 放WAV 文 件。 
SND_NOSTOP 在 开 始 播 放 其 它 的WAV 文 件 之 前, 需 要 完 成 对 本WAV 文 件 的 播 放。 

注 意:SND_LOOP 标 识 通 常 需 要 同SND_ASYNC 共 同 使 用, 也 即 在 两 个 标 识 之 间 添 加 与 播 放 符, 以 免 在 对WAV 文 件 进 行 播 放 的 时 候 将 系 统 挂 起。 


为 了 播 放MIDI 文 件, 你 需 要 在 你 的 程 序 窗 体 的 通 用 声 明 部 分 中, 或 是 标 准 模 块 中 添 加 如 下 的 声 明 语 句: 
Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (ByVal lpstrCommand As String) As Long 
mciExecute 函 数 只 需 要 一 个 参 数,CommandString, 顾 名 思 义, 它 是 一 个 命 令 字 符 串, 用 于 表 明 对 声 音 文 件 播 放 的 命 令, 例 如, 希 望 完 整 播 放 声 音 文 件, 则 该 字 符 串 就 是 字 符 串損lay" 加 上 声 音 文 件 的 路 径 以 及 文 件 名 称,