- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好的,所以我使用mciSendString创建了一个SOUND类。我正在使用它来播放我制作的RPG风格游戏的音乐和其他声音文件。它有效,而且效果很好...但是。我的问题是,它需要声音文件的完整路径才能正常工作(不确定这是否正确)。
这是mcisendstring的一些怪癖:
Value of type '1-dimensional array of Byte' cannot be converted to 'String'
。Public Class SOUND
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _
(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer
'Command String VERY IMPORTANT
Private oName As String = Nothing
Public Property Name As String
Set(value As String)
oName = value
End Set
Get
Return oName
End Get
End Property
Public Sub Play(ByVal id As Integer, ByVal repeat As Boolean, Optional volume As Integer = 1000)
If repeat = True Then
mciSendString("Open " & GetFile(id) & " alias " & oName, CStr(0), 0, 0) 'Open the file
mciSendString("play " & oName & " repeat ", CStr(0), 0, 0) 'then play with repeating value
Else
mciSendString("Open " & GetFile(id) & " alias " & oName, CStr(0), 0, 0)
mciSendString("play " & oName, CStr(0), 0, 0)
End If
'Optionally Set Volume
mciSendString("setaudio " & oName & " volume to " & volume, CStr(0), 0, 0)
End Sub
Public Sub Kill(ByVal song As String)
mciSendString("close " & song, CStr(0), 0, 0)
oName = Nothing
End Sub
' Media Library
Private Function GetFile(ByVal id As Integer) As String
Dim path As String = ""
'mcisendstring Hates spaces, spaces will cause crash (failure to load file) - ADD QUOTES
'Dots in path can cause failure to load (only dot should be for the extention)
'Very Long Paths will cause failure to load (Max Characters allowed is 255)
'Relative paths will cause failure to load...(cannot use something like chicken.mp3 ... must use ex:[C:\chicken.mp3])
'.wav files will fail to load if repeat = true
Select Case id
Case 0 'Game Over
path = "C:\FinalFantasy7-SendaDreamIntoTheUniverse.mp3"
Case 1 'Battle Sequence
path = "C:\FinalFantasyTactics-Garland_Magic.mp3"
Case 2 'Battle Victory
path = "C:\FinalFantasyLegend2-Victory.mp3"
Case 3 'Mission Time
path = "C:\FinalFantasyAdventure-Mission.mp3"
End Select
path = Chr(34) & path & Chr(34)
'Chr(34) is quotes...cannot just use "" because it will think that it is part of the string/path itself.
Return path
End Function
Select Case id
Case 0 'Game Over
path = "C:\FinalFantasy7-SendaDreamIntoTheUniverse.mp3"
End Select
Select Case id
Case 0 'Game Over
path = My.Resources.FinalFantasyAdventure_Mission
End Select
Dim intSound As Integer = 0
Dim snd As New SOUND 'SOUND is the sound class with mcisendstring
Private Sub PlaySoundBtn_Click(sender As System.Object, e As System.EventArgs) Handles PlaySoundBtn.Click
intSound += 1
With snd
.Name = "SOUND" & intSound 'SOUND is the alias along with the number (this one is SOUND1)
.Play(3, True, 500)
'3 is the song ID, True is for the repeat, 500 is for the optional volume (Max = 1000)
End With
End Sub
最佳答案
如上所述,这是一个旧线程,但我想在Google上仍然会有人发现它(就像我今天所做的那样)。
只是一个额外的建议,有时您的音频文件不会在输出目录中,或者可能希望分发独立的可执行文件。还存在可以从输出目录中删除文件的风险,并且很容易重新创建它。另外,将资源作为可执行文件的一部分并在输出目录中占用的空间要比仅将其作为可执行文件的一部分占用更多的空间,因此有时仅将文件临时存储在磁盘上(稍后再删除)是值得的在那里拥有永久副本,以便您可以访问它。
在这些情况下,能够在运行时从资源中获取文件并将其保存到磁盘上可以访问的位置(如果要稍后删除它,可能是一个临时文件位置),这很有用。
下面的非常简单的代码可以做到这一点:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
SaveResourceObject("FinalFantasyAdventure_Mission", "C:\FinalFantasyAdventure_Mission.mp3")
End Sub
Sub SaveResourceObject(Resource as String, FileName as String)
Dim myMemStream As New System.IO.MemoryStream
My.Resources.ResourceManager.GetObject(Resource).CopyTo(myMemStream)
Dim myBytes() As Byte = myMemStream.ToArray
My.Computer.FileSystem.WriteAllBytes(FileName, myBytes, False)
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
SaveResourceObject(My.Resources.FinalFantasyAdventure_Mission, "C:\FinalFantasyAdventure_Mission.mp3")
End Sub
Dim AppDataPath as String = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ApplicationData)
Dim AppDataPath as String = GetFolderPath(SpecialFolder.ApplicationData)
关于.net - .net mcisendstring-使用资源而不是完整路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9705159/
我已经用C++编写了游戏,并且正在使用 mciSendString("play sounds/music.wav repeat", NULL, 0, NULL);。 现在,在我大学的计算机上(Wind
我一直在尝试检索我能够使用 WINMM 的函数 mciSendString() 打开和播放的音乐的歌曲长度; char szCmd[128]; char szResponse[128] = {0};
我这里有这个功能;音量设置为 500,文件名字符串设置为“test.mp3”。 void Volume(int volume, std::string filename) {
我正在尝试播放名称中包含空格的声音文件 例子:“我的 File.wav” 所以像这样发送文件: mciSendString("播放 C:\\myFile.wav",0,0,0); 会工作得很好。但是:
最近我已经问了一个类似这个问题的解决方案: Is there a way to pause/stop a mp3 file playing with mcisendstring with the "w
好的,所以我使用mciSendString创建了一个SOUND类。我正在使用它来播放我制作的RPG风格游戏的音乐和其他声音文件。它有效,而且效果很好...但是。我的问题是,它需要声音文件的完整路径才能
我正在使用 MCI 做一些与声音相关的事情,一切正常,除了我不能改变音量。我有以下代码: mciSendStringA("open res/theme.wav type waveaudio alias
感谢 Google 的帮助,我创建了一个程序,可以在我的音乐目录中播放音乐并支持空格。但是,我不想继续对歌曲名称进行硬编码,所以我想知道是否可以用变量替换文件名,并在我的程序运行时用 std::cin
当文件的路径+文件名很长时,我注意到了 PlaySound(fName.c_str(), NULL, SND_ASYNC); 有效,但无效 mciSendString((L"open \"" + fN
我正在更新一个旧的 VB6 应用程序。过去,我围绕 mciSendString 命令编写了一个包装器,以便能够录制和播放音频。那时,计算机通常只有一个声卡。 现在,许多客户拥有多个声卡(通常是一个内置
我正在尝试使用 mciSendString 函数在 Qt 中打开和关闭光盘托盘。这是代码: #include MCIERROR mciSendString(LPCTSTR lpszCommand,
我正在 Windows 10 上测试 Python 包:playsound 路径名的某些字符似乎有问题,例如“c:\sauté”和宽字符。所以它找不到文件。 Error 275 for command
我正在制作一款游戏,我正在使用 midi 文件作为背景音乐。这是我目前使用的代码: void Game::play_music() { // Start the music: if(m
我正在尝试使用 C# 和 winmm.dll 将此录制设置为可能的最低设置。我已经设置了下面的设置,但我没有听到任何区别。有谁知道我是否遗漏了什么? 我正在尝试获得尽可能低的音频设置。就像您从对讲机中
我正在尝试使用 mci 函数编写一个 mp3 播放器。(win 7 64bit,vs2010,c++) 当我尝试播放带有“wait”标志的 mp3 文件时,我可以听到该文件,但其他一切都卡住了,直到文
我正在使用Visual Basic 2008开发一个程序,要求具有不同音量的不同类型的声音。因此,My.Computer.Audio.Play不是有效的选项。 我决定改用mciSendString并发
我正在尝试记录来自调制解调器的音频输入,我已设法通过 TAPI API 进行调用。 我可以使用MciSendString进行录音,但不知道如何选择调制解调器作为音频输入设备(目前默认选择声卡)。 我也
我正在制作游戏,并尝试使用 mciSendString() 循环播放 MIDI 文件。我查看了 CProgramming.com,但该示例的窗口对象是 OWL,我无法移植它们。我也尝试查看 Brian
我正在编写一个简单的程序来播放声音文件。现在我正在使用 mciSendString 来播放声音。 我的问题是我需要返回文件的状态模式(正在播放,已暂停..)我不知道如何使用“status”命令返回它。
我正在尝试编写一些可以播放 .mp3 文件的代码。我以为我可以使用 mciSendString 调用,但我收到了一个奇怪的错误。 所以,当我有这段代码时: int rc=mciSendString(L
我是一名优秀的程序员,十分优秀!