none
音效播放 AudioPlayMode.WaitToComplete的問題 RRS feed

  • 問題

  • 我的程式是從路徑裡面抓取所有.wav的檔案
    然後放在ListBox2裡,把想要聽的Add進ListBox1
    我想要從我在ListBox1裡選的那首歌一直按照順序往下播
    所以我選擇用AudioPlayMode.WaitToComplete

    但是這樣我原本2:30的歌曲,他播10秒就換下一首了

    請問該如何修改?求高手指點

    以下是我的程式碼(Button1=刪除鈕,Button2=播放鈕,Button3=新增歌曲鈕,Button4=確認路徑鈕)

     Dim a As New List(Of String)
     Dim b As New List(Of String)
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Try
                a.RemoveAt(ListBox1.SelectedIndex)
                ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
            Catch ex As Exception
            End Try
        End Sub
     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Try
                If Button2.Text = "播放" Then
                    Button2.Text = "停止"
                    For i = ListBox1.SelectedIndex To ListBox1.Items.Count - 1
                        My.Computer.Audio.Play(a(i), AudioPlayMode.WaitToComplete)
                    Next
                Else
                    Button2.Text = "播放"
                    My.Computer.Audio.Stop()
                End If
            Catch ex As Exception
            End Try
        End Sub
    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
            Try
                ListBox1.Items.Add(ListBox2.Items(ListBox2.SelectedIndex))
                a.Add(b(ListBox2.SelectedIndex))
            Catch ex As Exception
            End Try
        End Sub
    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
            Try
                ListBox2.Items.Clear()
                For Each foundFile As String In My.Computer.FileSystem.GetFiles(TextBox1.Text)
                    If foundFile Like "*.wav" Then
                        ListBox2.Items.Add(Replace(Mid(foundFile, InStrRev(foundFile, "\") + 1), ".wav", ""))
                        b.Add(foundFile)
                    End If
                Next
                ListBox1.Enabled = True
                Button2.Enabled = True
            Catch ex As Exception
                MsgBox("路徑不正確")
            End Try
        End Sub



    2015年8月30日 上午 06:30

解答

  • 我測試是播完才放下一首的. 你改過的程式碼貼上來瞧瞧.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年9月1日 下午 12:49
    版主

所有回覆

  • Play Background Music in Sequence

    http://forums.codeguru.com/showthread.php?453433-Play-Background-Music-in-Sequence

    用PlaySound API試試...


    • 已編輯 Joe Hung 2015年8月31日 上午 01:26
    2015年8月31日 上午 01:26
  • 您的Catch處理例外都沒有顯示錯誤訊息, 如果程式執行發生錯誤, 也看不到錯誤訊息
    2015年8月31日 上午 07:24
  • 不行欸,他會直接播最後一首,前面的都沒播完

    2015年8月31日 上午 11:39
  • 甚麼意思?
    2015年8月31日 上午 11:39
  • location 參數的多載,則 Play 方法會在背景 (Background) 播放音效。</sentencetext>  playMode 參數決定音效的播放方式。</sentencetext> 

    所以看來你得要傳 Stream, 或是 Byte[] 才能夠用 WaitToComplete, 請改採以下兩個多載之一

    Audio.Play Method (Byte[], AudioPlayMode)

    Audio.Play Method (Stream, AudioPlayMode)


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年8月31日 上午 11:57
    版主
  • 謝謝你的回答!

    但是我不大了解該怎麼修改@@?

    能不能請你一個範例給我?

    謝謝您!

    2015年8月31日 下午 01:33
  • 就只是先把檔案讀進一個 Byte 陣列就行啦.

    Public Class Form1
        Dim MusicPath As List(Of String)
    
        Sub New()
            ' 此為設計工具所需的呼叫。
            InitializeComponent()
    
            MusicPath = New List(Of String)
            MusicPath.Add("D:\Music\1.wav")
            MusicPath.Add("D:\Music\2.wav")
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            For Each path As String In MusicPath
                Dim bytes As Byte() = My.Computer.FileSystem.ReadAllBytes(path)
                My.Computer.Audio.Play(bytes, AudioPlayMode.WaitToComplete)
            Next
    
        End Sub
    End Class
    


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2015年8月31日 下午 02:50
    版主
  • 我已試著照著您的程式碼修改了...

    但是還是一樣10幾秒就換首了@@

    2015年9月1日 下午 12:07
  • 我測試是播完才放下一首的. 你改過的程式碼貼上來瞧瞧.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年9月1日 下午 12:49
    版主
  •  Dim MusicPath As List(Of String)
    
        Sub New()
            ' 此為設計工具所需的呼叫。
            InitializeComponent()
            MusicPath = New List(Of String)
            MusicPath.Add("C:\Documents and Settings\S.XP\桌面\新資料夾\111.wav")
            MusicPath.Add("C:\Documents and Settings\S.XP\桌面\新資料夾\(V.K.).wav")
        End Sub
    
        Private Sub Button5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button5.Click
            For Each path As String In MusicPath
                Dim bytes As Byte() = My.Computer.FileSystem.ReadAllBytes(path)
                My.Computer.Audio.Play(bytes, AudioPlayMode.WaitToComplete)
            Next
        End Sub

    2015年9月1日 下午 01:58
  • 見鬼了, 我都聽了八次完整的鹿港小鎮了.開個乾淨的空專案測試看看.

    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2015年9月1日 下午 02:08
    版主
  • 一樣欸...
    2015年9月1日 下午 02:18
  • 會不會是主機板上的時間插斷有問題,導致多媒體 API timeGetTime 不正常,就沒辦法正常播完?

    T.L. Cheng

    2015年9月12日 上午 04:15
    版主