feat: output device change

This commit is contained in:
tangge233
2025-01-13 21:46:12 +08:00
parent 5034866c8f
commit 7dff62aebf
+50 -43
View File
@@ -69,44 +69,44 @@ Public Module ModMusic
''' </summary> ''' </summary>
Private Sub MusicRefreshUI() Private Sub MusicRefreshUI()
RunInUi( RunInUi(
Sub() Sub()
Try Try
If Not MusicAllList.Any() Then If Not MusicAllList.Any() Then
'无背景音乐 '无背景音乐
FrmMain.BtnExtraMusic.Show = False 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
Else Else
FrmMain.BtnExtraMusic.Logo = Logo.IconMusic '有背景音乐
FrmMain.BtnExtraMusic.LogoScale = 1 FrmMain.BtnExtraMusic.Show = True
ToolTipText = "正在播放:" & GetFileNameWithoutExtentionFromPath(MusicCurrent) Dim ToolTipText As String
If MusicAllList.Count > 1 Then If MusicState = MusicStates.Pause Then
ToolTipText += vbCrLf & "左键暂停,右键播放下一曲。" 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 If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI()
ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16))
End If
If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI()
Catch ex As Exception Catch ex As Exception
Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback) Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback)
End Try End Try
End Sub) 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() Sub()
Log("[Music] 已暂停播放") Log("[Music] 已暂停播放")
MusicNAudio?.Pause() MusicNAudio?.Pause()
MusicRefreshUI() MusicRefreshUI()
End Sub) 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() Sub()
Log("[Music] 已恢复播放") Log("[Music] 已恢复播放")
MusicNAudio?.Play() MusicNAudio?.Play()
MusicRefreshUI() MusicRefreshUI()
End Sub) 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