diff --git a/Plain Craft Launcher 2/Modules/ModMusic.vb b/Plain Craft Launcher 2/Modules/ModMusic.vb index 12de669..b368691 100644 --- a/Plain Craft Launcher 2/Modules/ModMusic.vb +++ b/Plain Craft Launcher 2/Modules/ModMusic.vb @@ -69,44 +69,44 @@ Public Module ModMusic ''' Private Sub MusicRefreshUI() 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 - 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 - 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 + FrmMain.BtnExtraMusic.ToolTip = ToolTipText + ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16)) 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 ''' @@ -226,11 +226,11 @@ Public Module ModMusic Public Function MusicPause() As Boolean If MusicState = MusicStates.Play Then RunInThread( - Sub() - Log("[Music] 已暂停播放") - MusicNAudio?.Pause() - MusicRefreshUI() - End Sub) + Sub() + Log("[Music] 已暂停播放") + MusicNAudio?.Pause() + MusicRefreshUI() + End Sub) Return True Else Log($"[Music] 无需暂停播放,当前状态为 {MusicState}") @@ -246,11 +246,11 @@ Public Module ModMusic Return False Else RunInThread( - Sub() - Log("[Music] 已恢复播放") - MusicNAudio?.Play() - MusicRefreshUI() - End Sub) + Sub() + Log("[Music] 已恢复播放") + MusicNAudio?.Play() + MusicRefreshUI() + End Sub) Return True End If 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 Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 不支持播放音频属性在中途发生变化的音乐", HintType.Critical) 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) Else 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 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 Public Sub OnDeviceAdded(deviceId As String) Implements IMMNotificationClient.OnDeviceAdded