Итак, я создал класс SOUND с помощью mciSendString. Я использую его для воспроизведения музыки и других звуковых файлов для игры в стиле RPG, которую я делаю. Он работает, и он работает хорошо ... однако. Моя проблема заключается в том, что для полного функционирования этого файла требуется полный путь к звуковому файлу (не уверен, что это правда)..net mcisendstring - использование ресурсов вместо полных путей
Вот некоторые из querks из mcisendstring:
- mcisendstring Ненавидит пространства, пространства вызовет сбой (сбой загрузки файла) - КАВЫЧКИ
- Многоточие в пути может вызвать сбой загрузки (только точка должен быть для расширения)
- Очень длинные пути вызовут сбой при загрузке (Макс. допустимые символы - 255)
- Относительные пути вызовут сбой при загрузке ... (не может использовать что-то вроде chicken.mp3 ... необходимо использовать C: \ chicken.mp3)
- .wav файлы не загружаются, если повтор = верно
Я попытался добавить файлы к моим ресурсам и попытался установить путь к ресурсу, однако он сказал: 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
End Class
Что мне нужно:
- мне нужно как-то получить. mp3-файлы в качестве ресурса, который можно использовать для пути, или мне нужны другие средства вместо того, чтобы эти файлы находились в корневом диске или другой полный путь к компьютеру.
пример того, что я НУЖНА
Изменить
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
P.S. Я использую XNA Graphics в своем проекте, и у меня также есть Bizark Core от NuGet. Поэтому, если я могу использовать любой из них, пожалуйста, скажите мне, как я могу использовать любой из них, чтобы делать то, что мне нужно делать. Заранее благодарю за любую помощь.
это невозможно с помощью mciSendString. Но, конечно же, возможно с XNA: http://msdn.microsoft.com/en-us/library/bb195053.aspx –
Хорошо, я посмотрел на страницу, однако это не помогло мне вообще. Как бы я мог сделать это в .net (Not C# или C++) –