赞
踩
目录
1. 程序应能够读取MP3文件,并播放其中的音频。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:本文此功能使用WindowsMediaPlayer控件
1. 程序应能够播放ogg文件。
2. 程序应能够处理可能出现的异常,如文件不存在、文件读取错误等。
3. 程序应具有良好的用户界面,方便用户进行操作。
4. 程序应具有良好的兼容性,能在不同版本的C#中正常运行。
提示:本文此功能使用Nuget程序包中的Naudi.Vorbis控件
步骤一:打开C#项目在Visual Studio 2022中,创建新项目,选择Windows窗体应用(.NET Framework)。
步骤二:左键点击常规(在工具箱中),右键点击指针“选择项” -> “com组件”->“windows media player",将其拖到窗口。
步骤三:右键点击项目(在解决方案资源管理器中),选择管理nuGet资源->”浏览“->”NAUdio.Vorbis“安装。
步骤四:拖工具箱当中的button、listbox、label控件到Form1.cs[设计]当中,添加按键。
这段代码的目的是让用户从文件系统中选择音频文件,并将这些文件的路径显示在ListBox
控件中,同时将它们存储在一个列表中供后续使用。
- openFileDialog1.Filter = "选择音频|*mp3;*.wav;*.fllac";
- openFileDialog1.Multiselect = true;
-
- if(openFileDialog1.ShowDialog() == DialogResult.OK)
- {
- listBox1.Items.Clear();
- if (files!=null)
- {
- Array.Clear(files,0, files.Length);
- }
- files =openFileDialog1.FileNames;
-
- string[] array = files;
-
- foreach(string x in array)
- {
- listBox1.Items.Add(x);
- localmusiclist.Add(x);
- }
- }
axWindowsMediaPlayer1.Ctlcontrols.stop();
此代码实现播放上一曲的功能,如果播放到第一一曲,则会从最后一曲开始播放。
- if (localmusiclist.Count > 0)
- {
- int index = listBox1.SelectedIndex;
-
- if (index < 0)
- {
- index = 0;
- }
- else
- {
- index--;
-
- if (index < 0)
- {
- index = localmusiclist.Count - 1;
- }
- }
-
- axWindowsMediaPlayer1.URL = localmusiclist[index];
- showmusic(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
-
- listBox1.SelectedIndex = index;
- }
此代码实现播放下一曲的功能,如果播放到最后一曲,则会从第一曲开始播放。
- if (localmusiclist.Count > 0)
- {
- if (listBox1.SelectedIndex + 1 > localmusiclist.Count)
- {
- axWindowsMediaPlayer1.URL = localmusiclist[0];
- }
- axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex+1];
- musicplay(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
- }
- string oggFilePath = "path_to_your_ogg_file.ogg"; // 替换为您的OGG文件路径
- OpenFileDialog openFileDialog = new OpenFileDialog();
- openFileDialog.Filter = "播放音频|*.ogg";
-
- if (openFileDialog.ShowDialog()== DialogResult.OK)
- {
- oggFilePath = openFileDialog.FileName;
- }
- using (var vorbisreader = new VorbisWaveReader(oggFilePath))
- {
- using (var outputDevice = new WaveOutEvent())
- {
- outputDevice.Init(vorbisreader);
- outputDevice.Play();
-
- // 等待播放完毕,或者您可以添加其他逻辑,比如用户输入来停止播放
- while (outputDevice.PlaybackState == PlaybackState.Playing)
- {
- System.Threading.Thread.Sleep(1000);
- }
- }
- }
- if (localmusiclist.Count > 0)
- {
- axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
- musicplay(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
- }
- private void showmusic(string filename)
- {
- string extension = Path.GetExtension(filename);
- if (extension == ".ogg")
- {
- Console.WriteLine("this is ogg file.");
- }
- else
- {
- Console.WriteLine("this is not ogg file.");
- axWindowsMediaPlayer1.Ctlcontrols.play();
- }
- }
- using NAudio.Wave;
- using NAudio.Vorbis;
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Data.SqlClient;
- using System.Drawing;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
-
- namespace WindowsMusic1
- {
- public partial class Form1 : Form
- {
- string[] files;
- List<string> localmusiclist = new List<string> { };
- public Form1()
- {
- InitializeComponent();
- }
-
- private void showmusic(string filename)
- {
- string extension = Path.GetExtension(filename);
- if (extension == ".ogg")
- {
- Console.WriteLine("this is ogg file.");
- }
- else
- {
- Console.WriteLine("this is not ogg file.");
- axWindowsMediaPlayer1.Ctlcontrols.play();
- }
- }
-
- private void button1_Click(object sender, EventArgs e)
- {
- openFileDialog1.Filter = "选择音频|*mp3;*.wav;*.fllac";
- openFileDialog1.Multiselect = true;
-
- if(openFileDialog1.ShowDialog() == DialogResult.OK)
- {
- listBox1.Items.Clear();
- if (files!=null)
- {
- Array.Clear(files,0, files.Length);
- }
- files =openFileDialog1.FileNames;
-
- string[] array = files;
-
- foreach(string x in array)
- {
- listBox1.Items.Add(x);
- localmusiclist.Add(x);
- }
- }
- }
-
- private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
- {
- if (localmusiclist.Count > 0)
- {
- axWindowsMediaPlayer1.URL = localmusiclist[listBox1.SelectedIndex];
- showmusic(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[listBox1.SelectedIndex]);
- }
- }
-
- private void trackBar1_Scroll(object sender, EventArgs e)
- {
- axWindowsMediaPlayer1.settings.volume = trackBar1.Value;
- label2.Text = trackBar1.Value + "%";
- }
-
- private void button2_Click(object sender, EventArgs e)
- {
- axWindowsMediaPlayer1.Ctlcontrols.stop();
- }
-
- private void button3_Click(object sender, EventArgs e)
- {
- if (localmusiclist.Count > 0)
- {
-
- int index = listBox1.SelectedIndex + 1;
-
- if (index >= localmusiclist.Count()) { index = 0; }
-
- axWindowsMediaPlayer1.URL = localmusiclist[index];
-
- showmusic(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
-
- listBox1.SelectedIndex = index;
-
-
- }
-
-
- }
-
- private void Form1_Load(object sender, EventArgs e)
- {
-
- }
-
- private void button4_Click(object sender, EventArgs e)
- {
- string oggFilePath = "path_to_your_ogg_file.ogg"; // 替换为您的OGG文件路径
- OpenFileDialog openFileDialog = new OpenFileDialog();
- openFileDialog.Filter = "播放音频|*.ogg";
-
- if (openFileDialog.ShowDialog()== DialogResult.OK)
- {
- oggFilePath = openFileDialog.FileName;
- }
- using (var vorbisreader = new VorbisWaveReader(oggFilePath))
- {
- using (var outputDevice = new WaveOutEvent())
- {
- outputDevice.Init(vorbisreader);
- outputDevice.Play();
-
- // 等待播放完毕,或者您可以添加其他逻辑,比如用户输入来停止播放
- while (outputDevice.PlaybackState == PlaybackState.Playing)
- {
- System.Threading.Thread.Sleep(1000);
- }
- }
- }
- }
-
- private void label2_Click(object sender, EventArgs e)
- {
-
- }
-
- private void label1_Click(object sender, EventArgs e)
- {
-
- }
-
- private void button5_Click(object sender, EventArgs e)
- {
-
- if (localmusiclist.Count > 0)
- {
- int index = listBox1.SelectedIndex;
-
- // 如果当前没有选中任何项,或者已经是第一项,可以选择播放最后一项或者保持当前项不变
- if (index < 0)
- {
- index = 0; // 或者你可以选择播放列表中的最后一项:index = localmusiclist.Count - 1;
- }
- else
- {
- index--; // 否则播放上一项
-
- // 如果现在索引是-1(即原本是第一项),可以选择播放列表中的最后一项或者保持当前项不变
- if (index < 0)
- {
- index = localmusiclist.Count - 1; // 循环到最后一项
- }
- }
-
- axWindowsMediaPlayer1.URL = localmusiclist[index];
- showmusic(axWindowsMediaPlayer1.URL);
- label1.Text = Path.GetFileNameWithoutExtension(localmusiclist[index]);
-
- listBox1.SelectedIndex = index;
- }
-
- }
- }
- }
音乐播放器已经具备了基本的播放控制功能,包括播放播放音乐(通过的button1_Click
事件处理)、停止音乐(通过的button2_Click
事件处理)、上一曲(通过button5_Click
事件处理)、播放下一曲(通过的button3_Click
事件处理)和播放ogg(通过的button4_Click
事件处理)。
播放器能够从一个包含音乐文件路径的列表中加载并播放音乐。
播放器的当前播放曲目会在一个列表框(listBox1
)中显示,并且当播放曲目变化时,列表框的选中项也会相应更新。
播放器还包含了一个标签(label1
)用于显示当前播放曲目的文件名。
播放器还包含音量的调节(label2)。
在开发过程中,我接触并学习了许多新的技术和工具,如Windows Media Player控件、ActiveX控件的使用、文件路径处理(如Path.GetFileNameWithoutExtension
)等。这些新技术和工具不仅帮助我解决了开发中的难题,也拓宽了我的技术视野。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。