1. Hello Guest, selamat datang di Forum WinPoin. Kamu bisa bertanya, berdiskusi, sharing, dan ngobrolin apapun seputar Windows, Windows Phone, PC, Gadget, atau hal seputar Teknologi lainnya. Selamat berkomunitas! ;)

Konversi Char ke Suara Menggunakan Component WINMM.DLL (VB.Net)

Discussion in 'Developer Corner' started by mabaega, May 22, 2014.

  1. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    Konversi Char ke Suara Menggunakan Component WINMM.DLL (VB.Net)

    Request dari @MegaPro1945 Mengenai Contoh menggunakan Multithreading dan component WINMM.DLL (SndPlaySound) untuk konversi char ke Suara.

    Step by Step
    Copas code dibawah sesuai dengan file dalam Project
    ModGlobal.vb
    Code:
    Module ModGlobal
    
        Public Declare Auto Function sndPlaySound Lib "WINMM.DLL" (ByVal FileName As String, ByVal Options As Int32) As Int32
    
        Public Const SND_SYNC As Long = &H0 'synchronize playback 
        Public Const SND_ASYNC As Long = &H1 ' played async
        Public Const SND_NODEFAULT As Long = &H2 ' No default 
    
        Public Function MyPath() As String
            Dim sPath As String = Application.ExecutablePath
            sPath = System.IO.Path.GetDirectoryName(sPath)
            If sPath.EndsWith("\bin\Debug") Then
                sPath = sPath.Substring(0, Len(sPath) - 10)
            ElseIf sPath.EndsWith("\bin\Release") Then
                sPath = sPath.Substring(0, Len(sPath) - 12)
            End If
            Return sPath
        End Function
    
    End Module
    
    PlayWav.vb
    Code:
    Imports System.Threading
    
    Public Class PlayWav
        Private m As New Mutex()
    
        Public Property StringtoRead As String
    
        Public Sub New()
    
        End Sub
    
        Public Sub New(ByVal str As String)
            StringtoRead = str
        End Sub
    
        Public Function Play() As Boolean
            m.WaitOne()
            Dim ret As Boolean = True
            Try
                Dim nmfile As String = ""
                Dim str As Char() = StringtoRead.Trim.ToCharArray
    
                For i As Integer = 0 To str.Length - 1
    
                    If str(i).ToString.Trim = "" Then
                        nmfile = MyPath() & "\Sounds\sp.wav"
                    Else
                        nmfile = MyPath() & "\Sounds\" & str(i).ToString.ToLower & ".wav"
                    End If
    
                    If IO.File.Exists(nmfile) Then
                        sndPlaySound(nmfile, SND_SYNC)
                    End If
    
                    sndPlaySound(MyPath() & "\Sounds\sp.wav", SND_SYNC)
    
                Next
    
            Catch ex As Exception
    
                MsgBox(ex.Message, MsgBoxStyle.Information, "Play Wav File")
                sndPlaySound(" ", SND_ASYNC And SND_NODEFAULT)
                ret = False
    
            End Try
            m.ReleaseMutex()
            Return ret
        End Function
    
    End Class
    
    Form1.vb
    Code:
    Imports System.Threading
    
    Public Class Form1
        Shared numAsyncOps As Integer
        Shared asyncOpsAreDone As New AutoResetEvent(False)
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            If TextBox1.Text.Trim.Length < 1 Then Exit Sub
            ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf PlayingSound), TextBox1.Text.Trim)
        End Sub
    
        Shared Sub PlayingSound(StrToRead As String)
            Dim pw As New PlayWav(StrToRead)
            pw.Play()
    
            If Interlocked.Decrement(numAsyncOps) = 0 Then
                asyncOpsAreDone.Set()
            End If
        End Sub
    End Class
    

    Untuk file suara (0...9 .wav + a...z .wav + sp.wav)
    Sesuaikan dengan kebutuhan. saya menggunakan sample bahasa inggris dari internet.

    Semoga bermanfaat. :kagum:

    Sources bisa di Download pada Attachment.
    Note.
    Sebelum Running Application, copy file wav dari folder compiled ke folder sounds dalam project.
     

    Attached Files:

  2. marwanto.se

    marwanto.se New Member

    Joined:
    May 7, 2013
    Messages:
    7,653
    Wah, saya bukan programmer app. :v

    But anyway, nice for sharing om... :goodjob:
     
  3. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    wkkwokwow....
    ini request dari MegaPro1945 di PM.
    Kebetulan di PM tidak bisa attachment, jadi kutulis di thread ini, sapa tahu ada yang membutuhkan.
    :ketawa:
     
  4. marwanto.se

    marwanto.se New Member

    Joined:
    May 7, 2013
    Messages:
    7,653
    Ya kalo tutorial mending di thread aja, siapa tahu ada member lain yang butuh. :v
     
  5. Yusril Ibnu

    Yusril Ibnu Winpoin Staff Staff Member

    Joined:
    May 12, 2014
    Messages:
    6,373
    wah.. nice tutorial....,
    lumayan nyimpen buat koleksi hehehe :goodjob:
     
  6. megapro1945

    megapro1945 New Member

    Joined:
    May 14, 2014
    Messages:
    11
    Thanks master untuk solve problemnya...

    btw agan tau ga ya kalau buat sistem antrian gitu kan misal dia di buat beberapa kompie, kmdian kalau di jalankan bersama2 , kok bertabrakan ya???mksdnya ketika di klik bersama sama 2 kompie itu akan menjalankan no antrian bersama2, gimana ya solvingnya untuk itu??? di vb.net dan smentara ga pakai server. bisa ga ya gan??? thx
     
  7. Yusril Ibnu

    Yusril Ibnu Winpoin Staff Staff Member

    Joined:
    May 12, 2014
    Messages:
    6,373
    buat thread baru untuk pertanyaan baru ya.... :goodjob:
     
  8. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    mainnya di database om.
    setiap perintah dari client bisa di tampung di table, dan dijalankan satu persatu oleh applikasi yang bertindak sebagai server.


    wah keliru tuch.. aku masih berfikir System Parkir.

    untuk Mesin Antri buat 3 Applikasi.
    1. Applikasi berfungsi sebagai server dengan Jobdes menerima perintah dari applikasi client dan menjalankannya
    2. Applikasi untuk mencetak nomor antri
    3. Applikasi untuk mengirimkan perintah pada server

    No.1 dan No.2 bisa dalam 1 komputer yang akan bertindak sebagai server dimana database akan disimpan
    Applikasi No.3 hanya untuk mengirim request ke Applikasi server. server akan memproses request jika request sebelumnya sudah dijalankan.

    Dengan begitu tidak akan terjadi tabrakan.
     
  9. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    ini thread share om.. bukan thread pertanyaan.
    :ketawa:
     
  10. megapro1945

    megapro1945 New Member

    Joined:
    May 14, 2014
    Messages:
    11
    Oke gan... mohon maaf... hahahaha
     
  11. Mayza MyZone

    Mayza MyZone Super Moderator Staff Member

    Joined:
    Dec 16, 2013
    Messages:
    4,945
    mANTEEPP.... :goodjob:
     
  12. megapro1945

    megapro1945 New Member

    Joined:
    May 14, 2014
    Messages:
    11
    gan tnya donk kalau mau nambah sound lg gmn ya??tapi dia dari label..

    thanks
     
  13. mabaega

    mabaega Well-Known Member

    Joined:
    Nov 9, 2013
    Messages:
    2,735
    Seperti apa misalnya?
    Untuk tambahan jenis bacaan, bisa dengan memodifikasi Class PlayWav
     

Share This Page