项目主页网址:

https://github.com/Judylalala/en

Q1:如何播放online歌曲?

A1:我本来以为会为MediaElement设置一个单独的属性播放online音频、视频文件,后来发现用的也是Source,在Source中确定播放音频的网页地址。

播放online校歌的xaml代码如下:

 <StackPanel Orientation="Horizontal">
<MediaElement x:Name="mediaPlayer"
Source="http://www.neu.edu.cn/indexsource/neusong.mp3"
MaxWidth=""
AutoPlay="False"
AreTransportControlsEnabled="True"
Margin="78,70,100,70"/>
<Button Content="Choose" Click="Button_Click"/>
</StackPanel>

Q2:如何将在线歌曲下载到本地?

A2:我在这个网址:https://www.cnblogs.com/T-ARF/p/5886153.html

里面找到了使用下载网页的上的音频并保存的方法,代码如下:

private   async   Task<StorageFile>  GetVoiceData()
{ HttpClient httpclient = new HttpClient();
var GetData = await httpclient.GetStreamAsync(new Uri("http://dx.sc.chinaz.com/Files/DownLoad/sound1/201207/1771.mp3"));
var file = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("1771.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await file.OpenStreamForWriteAsync())
{
await GetData.CopyToAsync(stream);//将获取的HttpClient的Stream流复制到文件的stream流
await stream.FlushAsync();//异步刷新 } return This_Voice_files;
}
}

然后将网址和文件名称做了修改:

public async Task<StorageFile> Load()
{
  try
  {
    var httpClient = new HttpClient();
    var buffer = await httpClient.GetBufferAsync(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
    if (buffer != null && buffer.Length > 0u)
    {
      var file = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
      using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))
      {
        await stream.WriteAsync(buffer);
        await stream.FlushAsync();
      }
      return file;
    }
  }
  catch { }
  return null;
}

但是这个方法只是将网页上的音频文件保存到了应用程序默认进行数据存储的位置,而不是下载到音乐文件夹中。

那么:

Q3:如何定位音乐文件夹?

A3:我一开始并没有找到直接将下载文件存到音乐文件夹的办法,但我找到了打开音乐文件夹时初始定位音乐文件夹的办法,我在这个网址:https://docs.microsoft.com/zh-cn/windows/uwp/audio-video-camera/media-playback-with-mediasource

里面的“创建并播放 MediaSource”中找到了下面这段C#代码:

//Create a new picker
var filePicker = new Windows.Storage.Pickers.FileOpenPicker(); //Add filetype filters. In this case wmv and mp4.
filePicker.FileTypeFilter.Add(".wmv");
filePicker.FileTypeFilter.Add(".mp4");
filePicker.FileTypeFilter.Add(".mkv"); //Set picker start location to the video library
filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary; //Retrieve file from picker
StorageFile file = await filePicker.PickSingleFileAsync(); if (file != null)
{
mediaSource = MediaSource.CreateFromStorageFile(file);
mediaElement.SetPlaybackSource(mediaSource);
}

其中的这两行代码确定了在选择文件的时候,初始定位到哪里:

//Set picker start location to the video library
filePicker.SuggestedStartLocation = PickerLocationId.VideosLibrary;

但是这个代码定位的是视频库,所以我试着将视频库改成音频库,修改的部分如下(不要注意openPicker和filePicker名字不一样,因为找的代码里的名字和我定义的名字不一样):

//Set picker start location to the music library
openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary;

然后跑了一下,发现这次可以在选择文件夹的时候初始定位到音乐文件夹,而且我发现,虽然用户可以对这个系统自带的文件夹进行挪动和重命名,可是不论我怎么挪动它到别的磁盘、或者到桌面,也不论我把它的名字改成什么,这段代码都可以精准地初始定位到这个音乐文件夹。

那么,是不是我也可以利用MusicLibrary来将文件准确地存到音乐文件夹中,然后我在:https://docs.microsoft.com/zh-cn/windows/uwp/files/file-access-permissions

这个网址里找到了访问通过KnownFolders.MusicLibrary来访问MusicLibrary的办法。

那么问题来了:

Q4:如何保存下载的文件到音乐文件夹?

A4:我将上面那段将网页上的音频文件保存到本地文件夹的代码改了一下:

 public async Task<StorageFile> Load()
{
try
{
var httpClient = new HttpClient();
var buffer = await httpClient.GetBufferAsync(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
if (buffer != null && buffer.Length > 0u)
{
StorageFile newFile = await KnownFolders.MusicLibrary.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
//var newFile = await ApplicationData.Current.LocalCacheFolder.CreateFileAsync("neusong.mp3", CreationCollisionOption.ReplaceExisting);
using (var stream = await newFile.OpenAsync(FileAccessMode.ReadWrite))
{
await stream.WriteAsync(buffer); await stream.FlushAsync();
} return newFile;
}
}
catch { }
return null;
}

通过KnownFolders.MusicLibrary.CreateFileAsync()这个方法将校歌存到了音乐文件夹中。

与此同时,为我的应用程序增加访问音乐库的权限:

然后成功了......

最后展示一下运行结果:

初始状态是在播放一个视频文件:

点击“放校歌!”按钮后,切换到校歌:

而且程序运行后,Music文件夹中多了一个校歌音频文件:

Naïve Media Player, Part 2的更多相关文章

  1. Naïve Media Player

    我的GitHub链接:https://github.com/Joyce45/hwt 一.播放器?怎么做? 提到播放器,首先想到的就是XAML控件库里的MediaElement,于是我又大致阅读了一下该 ...

  2. 用VLC Media Player搭建简单的流媒体服务器

    VLC可以作为播放器使用,也可以搭建服务器. 在经历了Helix Server和Darwin Streaming Server+Perl的失败之后,终于找到了一个搭建流媒体简单好用的方法. 这个网址中 ...

  3. android错误之MediaPlayer用法的Media Player called in state *,androidmediaplayer

    用到Media Player,遇到几个问题,记一下 用法就不说了,使用的时候最好参考一下mediaPlayer的这张图 第一个错误是Media Player called in state 8 这个是 ...

  4. win7自带windows media player 已停止工作

    解决方法如下: 在计算机开始,菜单找到控制面板 ,然后打开程序和功能,选择打开或关闭window功能,媒体功能.再取消windows Media Center Windows MediaPlayer选 ...

  5. 转:Media Player Classic - HC 源代码分析

    VC2010 编译 Media Player Classic - Home Cinema (mpc-hc) Media Player Classic - Home Cinema (mpc-hc)播放器 ...

  6. Media Player 把光盘中的内容拷贝出来的方法

    http://jingyan.baidu.com/article/cb5d610529f0c1005c2fe0b4.html  这个链接是通过Media  Player 把光盘中的内容拷贝出来的方法h ...

  7. 20 Free Open Source Web Media Player Apps

    free Media Players (Free MP3, Video, and Music Player ...) are cool because they let web developers ...

  8. Windows Media Player安装了却不能播放网页上的视频

    前段时间遇到Windows Media Player安装了却不能播放网页上的视频的问题,在网上查找资料时,发现大部分资料都没能解决我这个问题.偶尔试了网上一牛人的方法,后来竟然解决了.现在再找那个网页 ...

  9. 如何在Windows中打开多个Windows Media Player

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:如何在Windows中打开多个Windows Media Player.

随机推荐

  1. [其它]iOS 12.2支持电信VoLTE了,中国电信教你如何开通:只要三步

    iOS 12.2支持电信VoLTE了,中国电信教你如何开通:只要三步 link :https://baijiahao.baidu.com/s?id=1629039609897267682&wf ...

  2. docker简单介绍----Dockerfile命令

    DockerFile的组成部署: 下面优先介绍下Dcokerfile的基础指令 一.CMD指令:容器启动时要莫热门运行的命令,如果有多个CMD指定,最后一个生效 使用方法: CMD ["ex ...

  3. python基础--absl.flags

    之前在tensorflow的mnist例程中看到了使用 absl.flags的方法来载入和解析参数的,出于学习的目的,就自己试验了一下, 代码如下: # *_*coding:utf-8 *_* # a ...

  4. Javascrip动态添加样式,Dom操作,获取自定义属性

    var layer=document.querySelector('.layer') 添加样式: 添加单个样式: layer.style.display="block" 添加多个样 ...

  5. python设计模式---结构型之代理模式

    主要想着nginx:) from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self) ...

  6. IIS处理并发请求设置

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态.   当发现请求明显延迟,没有被即时 ...

  7. mac抓包工具anyproxy

    本文以 mac为代理,ios手机为客户端举例. 文档地址:http://anyproxy.io/ 1.环境配置: 安装  node  :参考   https://www.jianshu.com/p/3 ...

  8. UOJ#129. 【NOI2015】寿司晚宴 动态规划

    原文链接www.cnblogs.com/zhouzhendong/p/UOJ129.html 题解 考虑把大于等于 $\sqrt n$ 的质数和小于 $\sqrt  n$ 的分开考虑: 1. 小于等于 ...

  9. 不用框架,原生使用python做注册接口/登陆接口/充值接口的测试,做的数据/代码分离

    注意充值时候,cookie的处理方法,还是原来的三种方法 1.操作数据文件  do_exclel.py # -*- conding:utr-8 -*- #@Time :2018/11/8 22:46 ...

  10. 基于centos7系统部署cobbler

    准备环境和下载cobbler 一,系统准备 虚拟机下要添加两个网卡.一个仅主机对内提供cobbler服务,一个桥接用来通外网 系统版本为:CentOS 7.5 内网ip :169.254.1.6  # ...