я использую mciSendString("play path repeat",0,0,0)
играть музыку в моем проекте
и я использую его специально для воспроизведения нескольких звуков одновременно.
Проблема в том, что я хочу поместить звуки в исполняемый путь
поэтому я использовал функцию, чтобы получить путь EXE
string ExePath() {
char buffer[MAX_PATH];
GetModuleFileName( NULL, buffer, MAX_PATH );
string::size_type pos = string( buffer ).find_last_of( "\\/" );
return string( buffer ).substr( 0, pos);
}
но mciSendString()
принимает LPCSTR
поэтому я попробовал следующее
string music_cmd="play "+ExePath()+"\\war1.mp3 repeat";
mciSendString(music_cmd.c_str(),0,0,0);
Программа работает без ошибок, но не воспроизводит звук.
Как я могу исправить эту проблему?
в пути не должно быть пробелов, если вы используете путь вроде
следующим образом: C:\music\music 2.mp3
она не будет работать.
чтобы заставить его работать, удалите пробел или создайте новый путь без пробелов, как показано ниже: C:\music\music2.mp3
Другие замечания: путь должен содержать менее 255 символов, относительный путь не будет работать (он работает при компиляции, но при запуске программы на другом компьютере не будет работать), не может иметь пробелов, в противном случае произойдет сбой.
есть обходной путь, который вы можете сделать, который прост, вы сможете играть с точками и пробелами на пути
моя выглядит следующим образом:
path = Application.StartuPath & `\whateverMusic.mp3`
path = Chr(34) & path & Chr(34)
mciSendString("Open " & path & " alias " & oName, Nothing, 0, 0)
mciSendString("Play " & oName, Nothing, 0, 0)
Public Property Name As String
Set(value as String)
oName = value
End Set
Get
Return oName
End Get
End Property
Других решений пока нет …