我想做的是播放列表框中所选项目的声音文件。例如:项目1播放“1.mp3”,项目2播放“2.mp3”
但问题是,它需要停止其他音频然后再播放。播放波形时会执行以下操作:
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == 0)
{
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "S1.mp3";
player.Play();
}
if (listBox1.SelectedIndex == 1)
{
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "S2.mp3";
player.Play();
}
if (listBox1.SelectedIndex == 2)
{
SoundPlayer player = new SoundPlayer();
player.SoundLocation = "S3.mp3";
player.Play();
}
}
但是波形太大,所以我需要替代方法。
我到处寻找解决方案,但没有任何效果:( NAudio彼此叠加播放声音,我无法找到如何使用NVorbis和oggsharp等的方法。
使用任何格式的音频都可以,我不在乎。我只是不能使用wav。
最佳答案
有一个SoundPlayer
实例,在播放下一个音频之前,请停止当前的一个。
public class Sounds
{
SoundPlayer player = new SoundPlayer();
public void Play(string file)
{
player.Stop();
player.SoundLocation = file;
player.Play();
}
}
对于MP3,可以使用WMPLib.WindowsMediaPlayer
若要以编程方式创建Windows Media Player控件,必须首先添加对wmp.dll的引用,该引用位于\ Windows \ system32文件夹中。
public class Sounds
{
WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer();
private void PlayFile(String url)
{
player.URL = url;
player.controls.play();
}
}
用法:
public class MyThing
{
Sounds sounds = new Sounds();
string SelectedFile;
public void OnPlayClick()
{
sounds.PlayFile(SelectedFile);
}
}
关于c# - C#如何一次播放一个mp3音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826508/