xxi*_*nxx 18 .net c# wpf media-player
我想在我的WPF应用程序中播放声音文件.目前我有以下电话:
private void PlaySound(string uriPath)
{
Uri uri = new Uri(@"pack://application:,,,/Media/movepoint.wav");
var player = new MediaPlayer();
player.Open(uri);
player.Play();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我指定Media/movepoint.wav为构建操作Content并将其作为相对或绝对文件路径加载它工作正常,所以我怀疑这与此有关Pack URI,但我不能为我的生活找出什么.
目标是将文件存储为资源,以使其在输出目录中不可用.我可以提供WAV副本或MP3副本.
Ste*_*bob 10
我尝试使用图像文件,就uri而言,它与声音文件的作用相同,因为它只是另一种资源.我使用下面的代码,它基本上与你拥有的代码相匹配.
new Uri(@"pack://application:,,,/Resources/logo.png")
Run Code Online (Sandbox Code Playgroud)
确保"Media"文件夹未嵌套在任何其他文件夹中.如果是,您还需要包含该文件夹.
使用.NET Framework 4.0,VS2012.
这个链接给出了整个"包"方案的很好的描述.
编辑
有关此主题的更多研究似乎表明,您可能无法使用音频或视频文件进行操作.以下摘录摘自本MSDN页面的备注部分.
虽然您可以使用可扩展应用程序标记语言(XAML)声明此类的实例,但无法在不使用代码的情况下加载和播放其媒体.要仅在XAML中播放媒体,请使用MediaElement.此外,如果在XAML中声明实例,唯一的实际用途是填充Player属性的属性元素语法.
在使用应用程序分发媒体时,不能将媒体文件用作项目资源.在项目文件中,您必须将媒体类型设置为Content,并将CopyToOutputDirectory设置为PreserveNewest或Always.
MediaPlayer可以在两种不同的模式下使用,具体取决于驱动播放器的内容:独立模式或时钟模式.在独立模式下,MediaPlayer类似于图像,通过Open方法打开的媒体驱动播放.在时钟模式下,MediaPlayer可以被认为是动画的目标,因此它将在时序树中具有相应的时间轴和时钟条目来控制回放.有关媒体模式的更多信息,请参阅多媒体概述.
MediaPlayer与MediaElement的不同之处在于它不是可以直接添加到应用程序的用户界面(UI)的控件.要显示使用MediaPlayer加载的媒体,必须使用VideoDrawing或DrawingContext.
以下内容似乎适用于 .NET Framework 4.5:
var sri = Application.GetResourceStream(new Uri("pack://application:,,,/MyAssemblyName;component/Resources/CameraShutter.wav"));
if (sri != null)
{
using (var s = sri.Stream)
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer(s);
player.Load();
player.Play();
}
}
Run Code Online (Sandbox Code Playgroud)
CameraShutter.wav作为资源嵌入到我的项目中(并驻留在 Resources 子文件夹内,如包 URI 中所示)。
| 归档时间: |
|
| 查看次数: |
20635 次 |
| 最近记录: |