좋아요. 그래서 mciSendString을 사용하여 SOUND 클래스를 만들었습니다. 나는 그것을 만들고있는 RPG 스타일 게임을 위해 음악과 다른 사운드 파일을 재생하는 데 사용하고 있습니다. 그것은 효과가 있고 잘 작동하지만 .... 내 문제는 제대로 작동하는지 확인하기 위해 사운드 파일의 전체 경로가 필요하다는 것입니다. 여기 .net mcisendstring - 전체 경로 대신 리소스 사용
이 mcisendstring의 querks의 일부입니다 :- mcisendstring에 공백이 미워을, 공간 (파일을로드 실패) 충돌의 원인이됩니다 - 고장이로드 될 수 있습니다 인용문에게 경로에
- 점을 추가 (만 점
- 매우 긴 경로로 인해 오류가 발생합니다 (최대 허용 문자 수는 255 자입니다)
- 상대 경로로 인해 오류가 발생합니다 ... (chicken.mp3과 같은 것을 사용할 수 없습니다 ... 사용해야합니다. C : \ chicken.mp3) 반복 = 나는 내 자원에 파일을 추가하는 시도와 자원의 경로를 설정하려고
사실은, 그러나 그것은 말했다 경우개
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
최종 클래스 내가 무엇이 필요
: 나는 어떻게 든을 얻을 필요가
- . mp3 파일을 경로로 사용할 수있는 리소스로 사용하거나 이러한 파일을 루트 드라이브 나 일부에 두는 대신 다른 방법이 필요합니다. 다른 전체 컴퓨터 경로입니다.
뭔가 예 내가 필요해 내가 소리를 재생하는 방법
Select Case id
Case 0 'Game Over
path = My.Resources.FinalFantasyAdventure_Mission
End Select
변경
Select Case id
Case 0 'Game Over
path = "C:\FinalFantasy7-SendaDreamIntoTheUniverse.mp3"
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. 내 프로젝트에서 XNA Graphics를 사용하고 있으며 NuGet의 BizArk Core도 가지고 있습니다. 그래서 내가이 중 하나를 사용할 수 있다면, 내가해야 할 일을하기 위해이 중 하나를 어떻게 사용할 수 있는지 말해주십시오. 모든 도움을 미리 감사드립니다.
mciSendString에서는이 작업을 수행 할 수 없습니다. 그러나 확실히 XNA를 사용하여 가능합니다. http://msdn.microsoft.com/en-us/library/bb195053.aspx –
좋아요, 페이지를 보았지만, 그것이 나에게 도움이되지는 않았습니다. 어떻게 내가 .net (C# 또는 C++이 아닙니다) –