Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB .NET > Воспроизведение звука


Автор: YoD 31.12.2004, 10:42
Люди, подскажите пожалуйста, как можно программно воспроизвести звук из wav-файла? Желательно чтобы программа НЕ ждала окончания воспроизведения звука. Заранее спасибо

Автор: Dex 9.3.2005, 19:59
Вот пример проигрывания звука из ресурса. т.е wav`ка прямо в exeшнике.
Код

#If Win32 Then
    Declare Function sndPlaySound Lib "WINMM.DLL" Alias "sndPlaySoundA" _
        (ByVal lpszSoundName As Any, ByVal uFlags As Long) As Long
#Else
    Declare Function sndPlaySound Lib "MMSYSTEM.DLL" _
        (ByVal lpszSoundName As Any, ByVal wFlags As Integer) As Integer
#End If

Global Const SND_ASYNC = &H1
Global Const SND_NODEFAULT = &H2
Global Const SND_MEMORY = &H4
Global SoundBuffer As String
Sub Psound(ByVal ResourceId As Integer)
    Dim Ret As Variant
    
    #If Win32 Then
        
        SoundBuffer = StrConv(LoadResData(ResourceId, "UNIXS"), vbUnicode)
    #Else
        SoundBuffer = LoadResData(ResourceId, "UNIXS")
    #End If
    
    Ret = sndPlaySound(SoundBuffer, 1 Or 2 Or 4)
  
End Sub

Sub EndPlaySound()
    Dim Ret As Variant
    Ret = sndPlaySound(0&, 0&)
End Sub



Еестественно чтобы пример работал попробуй запихнуть в ресурс какую-нибудь вавку.
smile

Автор: Ch0bits 7.4.2005, 23:41
Это всё unsafe код! smile Не соответсвует концепции .NET! smile
Нужно истользовать DirectSound. Смотри пример в DirectX SDK. smile

Автор: Exception 11.4.2005, 17:03
Цитата(Vadim999 @ 8.4.2005, 00:41)
Это всё unsafe код!  Не соответсвует концепции .NET! 

И что с того? Как по-твоему, что быстрее, встроенные ф-ции Винта или DX?
Между прочим, в .NET половина ф-ций написана именно с помощью WinAPI. А лишний Try...Catch...Finally никогда в коде не повредит.

Цитата(Dex @ 9.3.2005, 20:59)
#If Win32 Then
       
        SoundBuffer = StrConv(LoadResData(ResourceId, "UNIXS"), vbUnicode)
    #Else
        SoundBuffer = LoadResData(ResourceId, "UNIXS")
    #End If
   

зачем #If Win32? .NET по-твоему под Linux или Win16 будет пороть?

Автор: Rusya 4.6.2005, 00:41
Вот те мой экземпл. воспроизводит .wav файлы! проблем у мя нет с ним.

Код

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
    Private Declare Function waveOutGetNumDevs Lib "winmm.dll" () As Long
    Const SND_ASYNC = &H1
    Const SND_NODEFAULT = &H2
    Dim ret As Long
    Dim Typer As String
    Private Sub Form_Load()
        Button1.Text = "Открыть"
    End Sub
    Private Sub Button1_Click1(ByVal sender As Object, ByVal e As System.EventArgs) Handles Command1.Click
        ret& = waveOutGetNumDevs
        If ret& > 0 Then
            'Set the CommonDialogBox' filter
            OpenFileDialog1.Filter = "Wave-files (*.wav)|*.wav|"
            'Set the CommonDialogBox' title
            OpenFileDialog1.Title = "Выбор файла ..."
            'Show the 'Open File'-dialog
            OpenFileDialog1.ShowDialog()
        Else
            MsgBox("No soundcard detected !")
        End If
        Typer = OpenFileDialog1.FileName.ToCharArray(OpenFileDialog1.FileName.Length - 3, 3)
        Label1.Text = "Тип файла: " + Typer.ToUpper
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        'Play the selected sound
        sndPlaySound(OpenFileDialog1.FileName, SND_ASYNC Or SND_NODEFAULT)
    End Sub


Всегда Пожалуйста smile

Автор: VavanVoronez 11.4.2008, 09:30
Подскажите пожалуйста. А можно ли из wav-файла воспроизводить часть его, указанной длины. Как при воспроизведении mp3-файла?

Автор: arcangel 2.5.2008, 02:48
А так не проще?
Код

My.Computer.Audio.Play("имя файла или ресурс", AudioPlayMode.Background)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)