1

我正在使用 VB Express 2012 (VB.net) 制作具有 .wav 音效和 .mp3 背景音乐的学校教育游戏。我的代码在下面给出,并且在任何个人计算机上都可以正常工作,但是由于我使用 WMPLib.WindowsMediaPlayer 播放 mp3 的方法,未授予将文件写入/删除文件到包含应用程序执行文件的文件夹的权限的计算机遇到了障碍。由于 wmp 需要指向 mp3 文件的外部文件的 URL(为什么???),我必须将 my.resource 文件夹中的 mp3 写入客户端计算机以获得有效的 URL,然后在关闭程序时将其删除。如果未授予权限,则此操作失败。

是否有另一种方法可以使用不需要将文件写入客户端计算机的 wmp.dll 从已发布的应用程序中播放来自 my.resources 的 mp3 文件?  也许是某种流媒体?我以前从未深入过那个领域。顺便说一句,将我的 mp3 转换为 wav 文件是不合理的,因为应用程序的大小太大了。(我有很多 mp3,虽然我的代码片段仅显示一个作为示例。这是我的代码:

对于我使用的音效

My.Computer.Audio.Play(My.Resources.soundeffect, AudioPlayMode.Background) 

对于背景音乐,为了让歌曲播放不受音效干扰,我添加了 wmp.dll 引用并使用以下代码:

Dim WithEvents Player As New WMPLib.WindowsMediaPlayer
Player.settings.setMode("Loop", True)
Dim appPath As String

'get the location of application execute file
appPath = Application.StartupPath & "\" & "SongNameHere" & ".mp3"

'write the mp3 file to the folder containing the execute file so wmp accepts the URL
My.Computer.FileSystem.WriteAllBytes(appPath,My.Resources.ResourceManager.GetObject("SongNameHere"), False)

'assign the valid URL to the wmp player, it autostarts.
Player.URL = appPath

 

而且,以防万一它很重要,在 .formclosing 我使用以下代码删除歌曲:

My.Computer.FileSystem.DeleteFile(Application.StartupPath & "\" & "SongNameHere" & ".mp3")
4

1 回答 1

0

感谢 D. Digaetano 先生提供以下解决方法(关键解决方案以粗体显示):

“...没有本地方式可以使用 .NET 播放包含资源的 MP3 文件。在 C# 中甚至不允许这样做。

获取 MP3 文件的唯一方法是创建对资源进行操作的流,但 Windows Media Player ActiveX 对象不支持将流作为输入。

许多人似乎使用像 BASS 这样的外部 DLL,然后使用这些库提供的 .NET 包装代码来访问他们的 MP3。但是,我过去使用过 BASS,如果您打算出售您的软件,它不是免费使用的。此外,我使用它的代码将 MP3 解压缩到当前文件夹并从那里播放它们,这是由于文件系统限制而您想要避免的。

我不确定微软为什么会禁止这样做,但是如果您阅读此处“备注”部分的第二段,您会发现将媒体文件与可执行文件捆绑在一起存在一些阻力。

也许最简单的解决方案是将 MP3 文件写入允许写入的目录,例如临时文件夹。尝试以下操作:


Imports System.IO

Dim tempDir As String = Path.GetTempPath() and see if you can 
My.Computer.FileSystem.WriteAllBytes(tempDir, My.Resources.ResourceManager.GetObject("SongNameHere"), False)

——”

于 2014-09-09T16:35:52.373 回答