我在我的类构造函数中试过这个来测试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);
}
}
这会是一个线程问题吗? 我想不会因为这是一个创建音频播放器而不是控制台应用程序的表单,所以它不会立即终止。我也没有错误表明播放问题。
答案 0 :(得分:0)
我从主程序中删除了操作和音频播放器,它工作正常。我可能会补充说.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();
}
}
我从主程序中这样称呼它。
_ap = new AudioPlayer();
_audioThread = new Thread(_ap.Play);
_audioThread.Start();
我打电话给
_ap.Stop();
_audioThread.Join();
在程序保存和退出方法期间终止它。