|
1 |
| -Public Module ModMusic |
| 1 | +Imports NAudio.CoreAudioApi |
| 2 | +Imports NAudio.CoreAudioApi.Interfaces |
| 3 | + |
| 4 | +Public Module ModMusic |
2 | 5 |
|
3 | 6 | #Region "播放列表"
|
4 | 7 |
|
|
66 | 69 | ''' </summary>
|
67 | 70 | Private Sub MusicRefreshUI()
|
68 | 71 | RunInUi(
|
69 |
| - Sub() |
70 |
| - Try |
| 72 | + Sub() |
| 73 | + Try |
71 | 74 |
|
72 |
| - If Not MusicAllList.Any() Then |
73 |
| - '无背景音乐 |
74 |
| - FrmMain.BtnExtraMusic.Show = False |
75 |
| - Else |
76 |
| - '有背景音乐 |
77 |
| - FrmMain.BtnExtraMusic.Show = True |
78 |
| - Dim ToolTipText As String |
79 |
| - If MusicState = MusicStates.Pause Then |
80 |
| - FrmMain.BtnExtraMusic.Logo = Logo.IconPlay |
81 |
| - FrmMain.BtnExtraMusic.LogoScale = 0.8 |
82 |
| - ToolTipText = "已暂停:" & GetFileNameWithoutExtentionFromPath(MusicCurrent) |
83 |
| - If MusicAllList.Count > 1 Then |
84 |
| - ToolTipText += vbCrLf & "左键恢复播放,右键播放下一曲。" |
85 |
| - Else |
86 |
| - ToolTipText += vbCrLf & "左键恢复播放,右键重新从头播放。" |
87 |
| - End If |
| 75 | + If Not MusicAllList.Any() Then |
| 76 | + '无背景音乐 |
| 77 | + FrmMain.BtnExtraMusic.Show = False |
88 | 78 | Else
|
89 |
| - FrmMain.BtnExtraMusic.Logo = Logo.IconMusic |
90 |
| - FrmMain.BtnExtraMusic.LogoScale = 1 |
91 |
| - ToolTipText = "正在播放:" & GetFileNameWithoutExtentionFromPath(MusicCurrent) |
92 |
| - If MusicAllList.Count > 1 Then |
93 |
| - ToolTipText += vbCrLf & "左键暂停,右键播放下一曲。" |
| 79 | + '有背景音乐 |
| 80 | + FrmMain.BtnExtraMusic.Show = True |
| 81 | + Dim ToolTipText As String |
| 82 | + If MusicState = MusicStates.Pause Then |
| 83 | + FrmMain.BtnExtraMusic.Logo = Logo.IconPlay |
| 84 | + FrmMain.BtnExtraMusic.LogoScale = 0.8 |
| 85 | + ToolTipText = "已暂停:" & GetFileNameWithoutExtentionFromPath(MusicCurrent) |
| 86 | + If MusicAllList.Count > 1 Then |
| 87 | + ToolTipText += vbCrLf & "左键恢复播放,右键播放下一曲。" |
| 88 | + Else |
| 89 | + ToolTipText += vbCrLf & "左键恢复播放,右键重新从头播放。" |
| 90 | + End If |
94 | 91 | Else
|
95 |
| - ToolTipText += vbCrLf & "左键暂停,右键重新从头播放。" |
| 92 | + FrmMain.BtnExtraMusic.Logo = Logo.IconMusic |
| 93 | + FrmMain.BtnExtraMusic.LogoScale = 1 |
| 94 | + ToolTipText = "正在播放:" & GetFileNameWithoutExtentionFromPath(MusicCurrent) |
| 95 | + If MusicAllList.Count > 1 Then |
| 96 | + ToolTipText += vbCrLf & "左键暂停,右键播放下一曲。" |
| 97 | + Else |
| 98 | + ToolTipText += vbCrLf & "左键暂停,右键重新从头播放。" |
| 99 | + End If |
96 | 100 | End If
|
| 101 | + FrmMain.BtnExtraMusic.ToolTip = ToolTipText |
| 102 | + ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16)) |
97 | 103 | End If
|
98 |
| - FrmMain.BtnExtraMusic.ToolTip = ToolTipText |
99 |
| - ToolTipService.SetVerticalOffset(FrmMain.BtnExtraMusic, If(ToolTipText.Contains(vbLf), 10, 16)) |
100 |
| - End If |
101 |
| - If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI() |
| 104 | + If FrmSetupUI IsNot Nothing Then FrmSetupUI.MusicRefreshUI() |
102 | 105 |
|
103 |
| - Catch ex As Exception |
104 |
| - Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback) |
105 |
| - End Try |
106 |
| - End Sub) |
| 106 | + Catch ex As Exception |
| 107 | + Log(ex, "刷新背景音乐 UI 失败", LogLevel.Feedback) |
| 108 | + End Try |
| 109 | + End Sub) |
107 | 110 | End Sub
|
108 | 111 |
|
109 | 112 | ''' <summary>
|
|
223 | 226 | Public Function MusicPause() As Boolean
|
224 | 227 | If MusicState = MusicStates.Play Then
|
225 | 228 | RunInThread(
|
226 |
| - Sub() |
227 |
| - Log("[Music] 已暂停播放") |
228 |
| - MusicNAudio?.Pause() |
229 |
| - MusicRefreshUI() |
230 |
| - End Sub) |
| 229 | + Sub() |
| 230 | + Log("[Music] 已暂停播放") |
| 231 | + MusicNAudio?.Pause() |
| 232 | + MusicRefreshUI() |
| 233 | + End Sub) |
231 | 234 | Return True
|
232 | 235 | Else
|
233 | 236 | Log($"[Music] 无需暂停播放,当前状态为 {MusicState}")
|
|
243 | 246 | Return False
|
244 | 247 | Else
|
245 | 248 | RunInThread(
|
246 |
| - Sub() |
247 |
| - Log("[Music] 已恢复播放") |
248 |
| - MusicNAudio?.Play() |
249 |
| - MusicRefreshUI() |
250 |
| - End Sub) |
| 249 | + Sub() |
| 250 | + Log("[Music] 已恢复播放") |
| 251 | + MusicNAudio?.Play() |
| 252 | + MusicRefreshUI() |
| 253 | + End Sub) |
251 | 254 | Return True
|
252 | 255 | End If
|
253 | 256 | End Function
|
254 | 257 |
|
255 | 258 | #End Region
|
256 | 259 |
|
257 | 260 | ''' <summary>
|
258 |
| - ''' 当前正在播放的 NAudio.Wave.WaveOut。 |
| 261 | + ''' 当前正在播放的 NAudio.Wave.WaveOutEvent。 |
259 | 262 | ''' </summary>
|
260 | 263 | Public MusicNAudio = Nothing
|
261 | 264 | ''' <summary>
|
|
267 | 270 | ''' 在 MusicUuid 不变的前提下,持续播放某地址的音乐,且在播放结束后随机播放下一曲。
|
268 | 271 | ''' </summary>
|
269 | 272 | Private Sub MusicLoop(Optional IsFirstLoad As Boolean = False)
|
270 |
| - Dim CurrentWave As NAudio.Wave.WaveOut = Nothing |
| 273 | + Dim CurrentWave As NAudio.Wave.WaveOutEvent = Nothing |
271 | 274 | Dim Reader As NAudio.Wave.WaveStream = Nothing
|
272 | 275 | Try
|
273 | 276 | '开始播放
|
274 |
| - CurrentWave = New NAudio.Wave.WaveOut() |
| 277 | + CurrentWave = New NAudio.Wave.WaveOutEvent() |
275 | 278 | MusicNAudio = CurrentWave
|
| 279 | + CurrentWave.DeviceNumber = -1 |
276 | 280 | Reader = New NAudio.Wave.AudioFileReader(MusicCurrent)
|
277 | 281 | CurrentWave.Init(Reader)
|
278 | 282 | CurrentWave.Play()
|
|
303 | 307 | If ex.Message.Contains("Got a frame at sample rate") OrElse ex.Message.Contains("does not support changes to") Then
|
304 | 308 | Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 不支持播放音频属性在中途发生变化的音乐", HintType.Critical)
|
305 | 309 | ElseIf Not (MusicCurrent.EndsWithF(".wav", True) OrElse MusicCurrent.EndsWithF(".mp3", True) OrElse MusicCurrent.EndsWithF(".flac", True)) OrElse
|
306 |
| - ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4) |
| 310 | + ex.Message.Contains("0xC00D36C4") Then '#5096:不支持给定的 URL 的字节流类型。 (异常来自 HRESULT:0xC00D36C4) |
307 | 311 | Hint("播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & "):PCL 可能不支持此音乐格式,请将格式转换为 .wav、.mp3 或 .flac 后再试", HintType.Critical)
|
308 | 312 | Else
|
309 | 313 | Log(ex, "播放音乐失败(" & GetFileNameFromPath(MusicCurrent) & ")", LogLevel.Hint)
|
|
0 commit comments