我已经在我的类构造函数中尝试过了,以测试windows media player是否能从.exe资源文件夹中的文件中播放声音(特别是mp3)。它正确地将文件写入临时目录,如果从WMP和VLC中的文件夹启动,则文件播放正常。
但我仍然无法在应用程序中播放声音。
class AudioPlayer
{
private static string _tempFolder;
private static string _filename;
private string _musicPath;
public WindowsMediaPlayer _wmp;
public AudioPlayer()
{
_tempFolder = Path.GetTempPath();
_filename = "Music1.mp3";
_musicPath = Path.Combine(_tempFolder,_filename);
CopyResource(_musicPath, Resources.Music1);
_wmp = new WindowsMediaPlayer();
_wmp.URL = _musicPath;
_wmp.controls.play();
}
private void CopyResource(string resourceName, byte[] file)
{
File.WriteAllBytes(resourceName, file);
}
}这会是一个线程问题吗?我不这么认为,因为这是一个创建音频播放器的表单,而不是一个控制台应用程序,所以它不会立即终止。我也没有收到指示回放问题的错误。
发布于 2016-01-29 02:42:44
我从主程序中穿出了操作和音频播放器,它工作得很好。我可能会补充说,.Wav对于文件大小来说是非常低效的,但是WMP加载.mp3文件太慢了。我想这在很大程度上与文件压缩有关,在适当的文件大小下牺牲了速度。最终解决方案是这样的。
class AudioPlayer
{
private static string _tempFolder;
private static string _filename;
private string _musicPath;
public WindowsMediaPlayer _wmp;
public AudioPlayer()
{
_tempFolder = Path.GetTempPath();
_filename = "Music1.mp3";
_musicPath = Path.Combine(_tempFolder,_filename);
CopyResource(_musicPath, Resources.Music1);
_wmp = new WindowsMediaPlayer();
_wmp.URL = _musicPath;
}
private void CopyResource(string resourceName, byte[] file)
{
File.WriteAllBytes(resourceName, file);
}
public void Play()
{
_wmp.controls.play();
}
public void Stop()
{
_wmp.controls.stop();
}
}我从程序Main调用它,就像这样。
_ap = new AudioPlayer();
_audioThread = new Thread(_ap.Play);
_audioThread.Start();我打电话给你
_ap.Stop();
_audioThread.Join();在程序执行过程中,保存并退出方法来终止它。
https://stackoverflow.com/questions/35066626
复制相似问题