@@ -1,4 +1,7 @@
|
|||||||
Public Module ModMusic
|
Imports NAudio.CoreAudioApi
|
||||||
|
Imports NAudio.CoreAudioApi.Interfaces
|
||||||
|
|
||||||
|
Public Module ModMusic
|
||||||
|
|
||||||
#Region "播放列表"
|
#Region "播放列表"
|
||||||
|
|
||||||
@@ -66,44 +69,44 @@
|
|||||||
''' </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>
|
||||||
@@ -223,11 +226,11 @@
|
|||||||
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}")
|
||||||
@@ -243,11 +246,11 @@
|
|||||||
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
|
||||||
@@ -255,7 +258,7 @@
|
|||||||
#End Region
|
#End Region
|
||||||
|
|
||||||
''' <summary>
|
''' <summary>
|
||||||
''' 当前正在播放的 NAudio.Wave.WaveOut。
|
''' 当前正在播放的 NAudio.Wave.WaveOutEvent。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Public MusicNAudio = Nothing
|
Public MusicNAudio = Nothing
|
||||||
''' <summary>
|
''' <summary>
|
||||||
@@ -267,12 +270,13 @@
|
|||||||
''' 在 MusicUuid 不变的前提下,持续播放某地址的音乐,且在播放结束后随机播放下一曲。
|
''' 在 MusicUuid 不变的前提下,持续播放某地址的音乐,且在播放结束后随机播放下一曲。
|
||||||
''' </summary>
|
''' </summary>
|
||||||
Private Sub MusicLoop(Optional IsFirstLoad As Boolean = False)
|
Private Sub MusicLoop(Optional IsFirstLoad As Boolean = False)
|
||||||
Dim CurrentWave As NAudio.Wave.WaveOut = Nothing
|
Dim CurrentWave As NAudio.Wave.WaveOutEvent = Nothing
|
||||||
Dim Reader As NAudio.Wave.WaveStream = Nothing
|
Dim Reader As NAudio.Wave.WaveStream = Nothing
|
||||||
Try
|
Try
|
||||||
'开始播放
|
'开始播放
|
||||||
CurrentWave = New NAudio.Wave.WaveOut()
|
CurrentWave = New NAudio.Wave.WaveOutEvent()
|
||||||
MusicNAudio = CurrentWave
|
MusicNAudio = CurrentWave
|
||||||
|
CurrentWave.DeviceNumber = -1
|
||||||
Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
|
Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
|
||||||
CurrentWave.Init(Reader)
|
CurrentWave.Init(Reader)
|
||||||
CurrentWave.Play()
|
CurrentWave.Play()
|
||||||
@@ -303,7 +307,7 @@
|
|||||||
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user