Imports System.ComponentModel
Imports System.IO
Imports System.Diagnostics
Public Class Form1
Private WithEvents bgWorker As New BackgroundWorker
Private ffmpegPath As String = “C:\ffmpeg-master-latest-win64-gpl-shared\bin\ffmpeg.exe” 'FMPEG 安装路径
' outputDevice 声明为类级别的私有变量
Private outputDevice As NAudio.Wave.DirectSoundOut
Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
'开音频文件选择框,选择要剪辑的音频文件
Dim openFileDialog As New OpenFileDialog()
openFileDialog.Filter = "音频文件|*.mp3;*.wav"
If openFileDialog.ShowDialog() = DialogResult.OK Then
'选择的文件路径显示在文本框中
txtFilePath.Text = openFileDialog.FileName
End If
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click
'开保存对话框,选择剪辑后的音频文件保存路径
Dim saveFileDialog As New SaveFileDialog()
saveFileDialog.Filter = "音频文件|*.mp3;*.wav"
If saveFileDialog.ShowDialog() = DialogResult.OK Then
'选择的保存路径显示在文本框中
txtSavePath.Text = saveFileDialog.FileName
End If
End Sub
Private Sub Button3_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button3.Click
'放音频
If File.Exists(txtFilePath.Text) Then
'用 SoundPlayer 或 NAudio 库播放选定的音频
'例:使用 NAudio 播放
Dim audioFile As New NAudio.Wave.WaveFileReader(txtFilePath.Text)
outputDevice = New NAudio.Wave.DirectSoundOut()
outputDevice.Init(New NAudio.Wave.WaveChannel32(audioFile))
outputDevice.Play()
Else
MessageBox.Show("请选择要播放的音频文件")
End If
End Sub
Private Sub Button4_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button4.Click
'止音频播放
'例:使用 NAudio 停止
If outputDevice IsNot Nothing Then
outputDevice.Stop()
End If
End Sub
Private Sub Button5_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button5.Click
'用 FFMPEG 剪辑音频
If File.Exists(txtFilePath.Text) Then
Dim startTime As String = NumericUpDown1.Value.ToString() '辑的开始时间
Dim endTime As String = NumericUpDown2.Value.ToString() '辑的结束时间
Dim parameters As String = "-i " & Chr(34) & txtFilePath.Text & Chr(34) & " -acodec copy -ss " & startTime & " -to " & endTime & " " & Chr(34) & txtSavePath.Text & Chr(34)
'动 FFMPEG 进程
RunFFMPEGProcess(parameters)
Else
MessageBox.Show("请选择要剪辑的音频文件")
End If
End Sub
Private Sub RunFFMPEGProcess(ByVal parameters As String)
'动 FFMPEG 进程
Dim startInfo As New ProcessStartInfo()
startInfo.FileName = ffmpegPath
startInfo.Arguments = parameters
startInfo.UseShellExecute = False
startInfo.RedirectStandardError = True
startInfo.CreateNoWindow = True
Using process As Process = Process.Start(startInfo)
Using reader As StreamReader = process.StandardError
'取 FFMPEG 输出信息
Dim result As String = reader.ReadToEnd()
Console.WriteLine(result)
End Using
End Using
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs) Handles BackgroundWorker1.DoWork
'行耗时的音频处理任务
'例:在后台线程中调用 FFMPEG 剪辑音频
Dim startTime As String = NumericUpDown1.Value.ToString() '辑的开始时间
Dim endTime As String = NumericUpDown2.Value.ToString() '辑的结束时间
Dim parameters As String = "-i " & Chr(34) & txtFilePath.Text & Chr(34) & " -acodec copy -ss " & startTime & " -to " & endTime & " " & Chr(34) & txtSavePath.Text & Chr(34)
RunFFMPEGProcess(parameters)
End Sub
Private Sub BackgroundWorker2_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted
'后台任务完成后的处理
If e.Error IsNot Nothing Then
MessageBox.Show("出现错误:" & e.Error.Message)
Else
MessageBox.Show("音频剪辑完成")
End If
End Sub
End Class