|
@@ -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
|