tangge233 1 год назад
Родитель
Сommit
7dff62aebf
1 измененных файлов с 50 добавлено и 43 удалено
  1. 50 43
      Plain Craft Launcher 2/Modules/ModMusic.vb

+ 50 - 43
Plain Craft Launcher 2/Modules/ModMusic.vb

@@ -69,44 +69,44 @@ Public Module ModMusic
     ''' </summary>
     ''' </summary>
     Private Sub MusicRefreshUI()
     Private Sub MusicRefreshUI()
         RunInUi(
         RunInUi(
-        Sub()
-            Try
+            Sub()
+                Try
 
 
-                If Not MusicAllList.Any() Then
-                    '无背景音乐
-                    FrmMain.BtnExtraMusic.Show = False
-                Else
-                    '有背景音乐
-                    FrmMain.BtnExtraMusic.Show = True
-                    Dim ToolTipText As String
-                    If MusicState = MusicStates.Pause Then
-                        FrmMain.BtnExtraMusic.Logo = Logo.IconPlay
-                        FrmMain.BtnExtraMusic.LogoScale = 0.8
-                        ToolTipText = "已暂停:" & GetFileNameWithoutExtentionFromPath(MusicCurrent)
-                        If MusicAllList.Count > 1 Then
-                            ToolTipText += vbCrLf & "左键恢复播放,右键播放下一曲。"
-                        Else
-                            ToolTipText += vbCrLf & "左键恢复播放,右键重新从头播放。"
-                        End If
+                    If Not MusicAllList.Any() Then
+                        '无背景音乐
+                        FrmMain.BtnExtraMusic.Show = False
                     Else
                     Else
-                        FrmMain.BtnExtraMusic.Logo = Logo.IconMusic
-                        FrmMain.BtnExtraMusic.LogoScale = 1
-                        ToolTipText = "正在播放:" & GetFileNameWithoutExtentionFromPath(MusicCurrent)
-                        If MusicAllList.Count > 1 Then
-                            ToolTipText += vbCrLf & "左键暂停,右键播放下一曲。"
+                        '有背景音乐
+                        FrmMain.BtnExtraMusic.Show = True
+                        Dim ToolTipText As String
+                        If MusicState = MusicStates.Pause Then
+                            FrmMain.BtnExtraMusic.Logo = Logo.IconPlay
+                            FrmMain.BtnExtraMusic.LogoScale = 0.8
+                            ToolTipText = "已暂停:" & GetFileNameWithoutExtentionFromPath(MusicCurrent)
+                            If MusicAllList.Count > 1 Then
+                                ToolTipText += vbCrLf & "左键恢复播放,右键播放下一曲。"
+                            Else
+                                ToolTipText += vbCrLf & "左键恢复播放,右键重新从头播放。"
+                            End If
                         Else
                         Else
-                            ToolTipText += vbCrLf & "左键暂停,右键重新从头播放。"
+                            FrmMain.BtnExtraMusic.Logo = Logo.IconMusic
+                            FrmMain.BtnExtraMusic.LogoScale = 1
+                            ToolTipText = "正在播放:" & GetFileNameWithoutExtentionFromPath(MusicCurrent)
+                            If MusicAllList.Count > 1 Then
+                                ToolTipText += vbCrLf & "左键暂停,右键播放下一曲。"
+                            Else
+                                ToolTipText += vbCrLf & "左键暂停,右键重新从头播放。"
+                            End If
                         End If
                         End If
+                        FrmMain.BtnExtraMusic.ToolTip = ToolTipText
+                        ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16))
                     End If
                     End If
-                    FrmMain.BtnExtraMusic.ToolTip = ToolTipText
-                    ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16))
-                End If
-                If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI()
+                    If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI()
 
 
-            Catch ex As Exception
-                Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback)
-            End Try
-        End Sub)
+                Catch ex As Exception
+                    Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback)
+                End Try
+            End Sub)
     End Sub
     End Sub
 
 
     ''' <summary>
     ''' <summary>
@@ -226,11 +226,11 @@ Public Module ModMusic
     Public Function MusicPause() As Boolean
     Public Function MusicPause() As Boolean
         If MusicState = MusicStates.Play Then
         If MusicState = MusicStates.Play Then
             RunInThread(
             RunInThread(
-            Sub()
-                Log("[Music] 已暂停播放")
-                MusicNAudio?.Pause()
-                MusicRefreshUI()
-            End Sub)
+                Sub()
+                    Log("[Music] 已暂停播放")
+                    MusicNAudio?.Pause()
+                    MusicRefreshUI()
+                End Sub)
             Return True
             Return True
         Else
         Else
             Log($"[Music] 无需暂停播放,当前状态为 {MusicState}")
             Log($"[Music] 无需暂停播放,当前状态为 {MusicState}")
@@ -246,11 +246,11 @@ Public Module ModMusic
             Return False
             Return False
         Else
         Else
             RunInThread(
             RunInThread(
-            Sub()
-                Log("[Music] 已恢复播放")
-                MusicNAudio?.Play()
-                MusicRefreshUI()
-            End Sub)
+                Sub()
+                    Log("[Music] 已恢复播放")
+                    MusicNAudio?.Play()
+                    MusicRefreshUI()
+                End Sub)
             Return True
             Return True
         End If
         End If
     End Function
     End Function
@@ -308,7 +308,7 @@ Public Module ModMusic
             If ex.Message.Contains("Got a frame at sample rate") OrElse ex.Message.Contains("does not support changes to") Then
             If ex.Message.Contains("Got a frame at sample rate") OrElse ex.Message.Contains("does not support changes to") Then
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 不支持播放音频属性在中途发生变化的音乐", HintType.Critical)
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 不支持播放音频属性在中途发生变化的音乐", HintType.Critical)
             ElseIf Not (MusicCurrent.EndsWithF(".wav", True) OrElse MusicCurrent.EndsWithF(".mp3", True) OrElse MusicCurrent.EndsWithF(".flac", True)) OrElse
             ElseIf Not (MusicCurrent.EndsWithF(".wav", True) OrElse MusicCurrent.EndsWithF(".mp3", True) OrElse MusicCurrent.EndsWithF(".flac", True)) OrElse
-                ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4)
+                    ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4)
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 可能不支持此音乐格式,请将格式转换为 .wav、.mp3 或 .flac 后再试", HintType.Critical)
                 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 可能不支持此音乐格式,请将格式转换为 .wav、.mp3 或 .flac 后再试", HintType.Critical)
             Else
             Else
                 Log(ex, "播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & ")", LogLevel.Hint)
                 Log(ex, "播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & ")", LogLevel.Hint)
@@ -385,6 +385,13 @@ Public Module ModMusic
 
 
         Public Sub OnDefaultDeviceChanged(dataFlow As DataFlow, role As Role, defaultDeviceId As String) Implements IMMNotificationClient.OnDefaultDeviceChanged
         Public Sub OnDefaultDeviceChanged(dataFlow As DataFlow, role As Role, defaultDeviceId As String) Implements IMMNotificationClient.OnDefaultDeviceChanged
             container.OnDefaultDeviceChanged(dataFlow, role, defaultDeviceId)
             container.OnDefaultDeviceChanged(dataFlow, role, defaultDeviceId)
+            ' 切换到系统默认输出设备
+            If MusicNAudio IsNot Nothing Then
+                Dim target As NAudio.Wave.WaveOut = MusicNAudio
+                target.Stop()
+                target.DeviceNumber = 0
+                target.Resume()
+            End If
         End Sub
         End Sub
 
 
         Public Sub OnDeviceAdded(deviceId As String) Implements IMMNotificationClient.OnDeviceAdded
         Public Sub OnDeviceAdded(deviceId As String) Implements IMMNotificationClient.OnDeviceAdded