Если используется неуправляемый код из winmm.DLL, то я помочь не смогу. Но могу предложить альтернативу - использовать класс System.Media.SoundPlayer.
Создаём объект от этого класса конструктором без параметров, для смены звука назначаем свойство SoundLocation, для проигрывания используем метод Play(), для остановки - Stop(). На сколько я понял, в winmm.DLL тоже поддерживается только формат .wav, поэтому разницы в функциональности не будет.
Другие языки программирования и технологии
Help! С функцией PlaySound на С#!!! Как остановить воспроизведение при нажатии на кнопку? Какие параметры должны быть???
Остановить воспроизведение можно повторно вызвав функцию и передав ей вместо имени файла пустую строку.
Хотя я бы порекомендовал для воспроизведения звука и музыки использовать другую АПИ-функцию.
Главное отличие - mciSendString может воспроизводить одновременно звук и музыку в фоне.
Воспроизводить может даже с середины файла.
Вот примерчик на VB.NET Думаю с переводом на С# проблем не будет.
Public Class Form1
'*** Декларируем API функции ***
' Воспроизведение звука и музыки
Private Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uRetrunLength _
As Long, ByVal hwndCallback As Long) As Long
' Преобразование длинного имени файла в короткое (8.3) имя.
Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, _
ByVal cchBuffer As Integer) As Int32
' Загрузка формы
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Задаем каталог (звуки, курсор, музыка и проч... )
Dim Directory As String = Application.StartupPath & "\Sound\"
Dim FileName As String ' путь к файлу
'Грузим звуки и музыку в MCI
FileName = ShortFilePath(Directory & "1.mid") ' фоновая музыка
mciSendString("open " & FileName & " alias Фон", "", 0, 0)
FileName = ShortFilePath(Directory & "CLICK.WAV") ' перзарядка патронов
mciSendString("open " & FileName & " alias Патроны", "", 0, 0)
' Воспроизводим фон
mciSendString("play Фон", "", 0, 0)
End Sub
' Перезарядка патронов
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Воспроизводим звук перезарядки патронов
mciSendString("play Патроны from 0", "", 0, 0)
End Sub
' Остановка воспроизведения
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
mciSendString("stop Фон", "", 0, 0)
End Sub
'* Функция преобразования пути к файлу (длинный в короткий)
Private Function ShortFilePath(ByVal strFilePath As String) As String
Dim ShortFileName As String = Space(256) ' буфер для короткого имени
Dim Result As Int32 = GetShortPathName(strFilePath, ShortFileName, Len(ShortFileName))
ShortFilePath = Microsoft.VisualBasic.Left(ShortFileName, Result)
End Function
End Class
Хотя я бы порекомендовал для воспроизведения звука и музыки использовать другую АПИ-функцию.
Главное отличие - mciSendString может воспроизводить одновременно звук и музыку в фоне.
Воспроизводить может даже с середины файла.
Вот примерчик на VB.NET Думаю с переводом на С# проблем не будет.
Public Class Form1
'*** Декларируем API функции ***
' Воспроизведение звука и музыки
Private Declare Function mciSendString Lib "winmm.dll" _
Alias "mciSendStringA" (ByVal lpstrCommand As String, _
ByVal lpstrReturnString As String, ByVal uRetrunLength _
As Long, ByVal hwndCallback As Long) As Long
' Преобразование длинного имени файла в короткое (8.3) имя.
Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" _
(ByVal lpszLongPath As String, ByVal lpszShortPath As String, _
ByVal cchBuffer As Integer) As Int32
' Загрузка формы
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' Задаем каталог (звуки, курсор, музыка и проч... )
Dim Directory As String = Application.StartupPath & "\Sound\"
Dim FileName As String ' путь к файлу
'Грузим звуки и музыку в MCI
FileName = ShortFilePath(Directory & "1.mid") ' фоновая музыка
mciSendString("open " & FileName & " alias Фон", "", 0, 0)
FileName = ShortFilePath(Directory & "CLICK.WAV") ' перзарядка патронов
mciSendString("open " & FileName & " alias Патроны", "", 0, 0)
' Воспроизводим фон
mciSendString("play Фон", "", 0, 0)
End Sub
' Перезарядка патронов
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Воспроизводим звук перезарядки патронов
mciSendString("play Патроны from 0", "", 0, 0)
End Sub
' Остановка воспроизведения
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
mciSendString("stop Фон", "", 0, 0)
End Sub
'* Функция преобразования пути к файлу (длинный в короткий)
Private Function ShortFilePath(ByVal strFilePath As String) As String
Dim ShortFileName As String = Space(256) ' буфер для короткого имени
Dim Result As Int32 = GetShortPathName(strFilePath, ShortFileName, Len(ShortFileName))
ShortFilePath = Microsoft.VisualBasic.Left(ShortFileName, Result)
End Function
End Class
Похожие вопросы
- подскажите как зделать во Флеш(Action script), вот что - При нажатии на кнопку игровые кости должны произвольно выпадать
- как отключить имитацию нажатия правой кнопки мыши на палншете wacom intuos pen and touch?
- как сделать чтобы при нажатии на кнопку выводился заданный текст в Delphi. хелп
- Паскаль. Анимация. Как по нажатию на кнопку заставить машину ехать в обратную сторону?
- Какие параметры должны быть у ноутбука или нетбука программиста?
- QBasic - создание окошек при нажатии кнопки
- как в delphi сделать чтобы при нажатии на определенную кнопку выводился другой символ??
- Вопрос насчет объявления и параметра функции в C++
- Фреймы. Как сделать так, чтобы при нажатии кнопки, страничка открывалась в соседнем фрейме
- как к кнопке HTML присвоить функцию в ONCLICK?