Другие языки программирования и технологии
Как сделать многопоточное воспроизведение звука в c#
только пожалуйста не отвечайте погугли итд)я ищу уже давно но в голове больше мыслей не прибавилось) получается воспроизвести токо 1 звук сразу,либо нажимая какую то вторую клавишу на которую повешен звук воспроизведение начинается тольк опосле окончания проигрывания первого
Я думаю что не нужно никаких потоков. Звуковая подсистема (MCI) сама обеспечивает одновременное воспроизведение звуковых файлов, причем разных форматов (зависит от установленных в системе кодеков) .
Достаточно вызвать пару API функций.
Я синтаксис С# не знаю, поэтому напишу в 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\"
'Грузим звуки и музыку в MCI
FileName = ShortFilePath(Directory & "1.mid") ' фоновая музыка
mciSendString("open " & FileName & " alias Фон", "", 0, 0)
FileName = ShortFilePath(Directory & "CLICK.WAV") ' перзарядка патронов
mciSendString("open " & FileName & " alias Патроны", "", 0, 0)
FileName = ShortFilePath(Directory & "TimerTick.wav") ' нет патронов
mciSendString("open " & FileName & " alias Клик", "", 0, 0)
FileName = ShortFilePath(Directory & "exp1.wav") ' выстрел #1
mciSendString("open " & FileName & " alias Выстрел1", "", 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("play Выстрел1 from 0", "", 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
По поводу вопроса: "Где скачать несколько октав звуков интсрументов (гитара, пианино, саксафон итд)? "
Аналогично, API-функцией можно извлекать из MCI прописанные в звуковой карте сэмплы.
Всего 256 нот из 128 инструментов, с разной динамикой (атака звука и послезвучание) . Стандарт GENERAL MIDI.
Достаточно вызвать пару API функций.
Я синтаксис С# не знаю, поэтому напишу в 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\"
'Грузим звуки и музыку в MCI
FileName = ShortFilePath(Directory & "1.mid") ' фоновая музыка
mciSendString("open " & FileName & " alias Фон", "", 0, 0)
FileName = ShortFilePath(Directory & "CLICK.WAV") ' перзарядка патронов
mciSendString("open " & FileName & " alias Патроны", "", 0, 0)
FileName = ShortFilePath(Directory & "TimerTick.wav") ' нет патронов
mciSendString("open " & FileName & " alias Клик", "", 0, 0)
FileName = ShortFilePath(Directory & "exp1.wav") ' выстрел #1
mciSendString("open " & FileName & " alias Выстрел1", "", 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("play Выстрел1 from 0", "", 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
По поводу вопроса: "Где скачать несколько октав звуков интсрументов (гитара, пианино, саксафон итд)? "
Аналогично, API-функцией можно извлекать из MCI прописанные в звуковой карте сэмплы.
Всего 256 нот из 128 инструментов, с разной динамикой (атака звука и послезвучание) . Стандарт GENERAL MIDI.
Игорь Анисимов
Вроде на C# Спрашивают!
мне приходит на ум одно решение) потоки.
http://www.rsdn.ru/article/dotnet/CSThreading1.xml
и вот еще нашел
http://forum.ixbt.com/topic.cgi?id=26:37878
http://www.rsdn.ru/article/dotnet/CSThreading1.xml
и вот еще нашел
http://forum.ixbt.com/topic.cgi?id=26:37878
Alexander Kim
спасибо)щас почитаю)я впринципи через thread и делаю ,но видимо не так делаю
Alexander Kim
вторым методом пробовал дня два назад чето особо работать он не захотел)
Сергей Гусаров
ну в потоке должн ополучиться) первую ссылку почитай, там вродь нормально описано)
Похожие вопросы
- Ребята!!Вопрос по сути...кто юзает Adobe Audition 3.0!!?есть проблемма....при воспроизведении звуки "Ш","С","Ц,"....
- как сделать де кодировщик символа в C++?
- Как сделать нарисованное поле интерактивным в C#?
- Как сделать добавление удаление редактирование EF C#
- За сколько денег программисты сделают программу преобразования звуков речи в текст?
- Запись звука с помощью DirectShow C#
- C#. Как сделать, чтобы программа проверяла тип введённой переменной?
- Не могу сделать калькулятор C++
- Как сделать Random в C#
- C# Как сделать сохранение игры и запуск сохраненной игры?