2018-04-15

Uwp——NaiveMediaPlayer2

Github傳送門
? ? ? ?經(jīng)過上次的慘痛教訓而晒,好吧状蜗,盡管這樣我也不想直接加一個AreTransportControlsEnabled="True"讓這個播放器更美的谦秧。
? ? ? ?經(jīng)過一番思考猖腕,我非尘迹快的實現(xiàn)了滑塊修改音量的功能行楞,沒有數(shù)據(jù)綁定爬迟,也沒有反人類的按音量之后才能修改音量了剩瓶,這些智障問題就不提了番刊,不提了戚揭。

I 實現(xiàn)通過Url播放網(wǎng)絡上的歌曲

? ? ? ?第一次做的時候就了解過了,修改source為對應的url就可以了撵枢,在第一次的基礎上新添了一個按鈕
代碼如下:

 private void Play2_Click(object sender, RoutedEventArgs e)
        {
            mediaElement.Source = new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3", UriKind.Absolute);
        }

? ? ? ?同理,當藥下載某個頁面的MP3文件時精居,只要輸入url或者修改代碼中的uri就可以實現(xiàn)锄禽,如果再要實現(xiàn)用戶手動實現(xiàn)的功能就需要添加TextBox輸入文字再傳到Uri里……

II 實現(xiàn)下載歌曲保存到本地再播放

? ? ? ?核心問題就是怎么把網(wǎng)上的mp3資源(此處)下載到本地,一是資源獲取靴姿,二是存儲地址沃但。通過查資料我知道這里要用到httpclient(下載小型文件)
[HttpClient官方文檔](https://docs.microsoft.com/en-us/windows/uwp/networking/httpclient
參考代碼:

//Create an HTTP client object
Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient();

//Add a user-agent header to the GET request. 
var headers = httpClient.DefaultRequestHeaders;

//The safe way to add a header value is to use the TryParseAdd method and verify the return value is true,
//especially if the header value is coming from user input.
string header = "ie";
if (!headers.UserAgent.TryParseAdd(header))
{
    throw new Exception("Invalid header value: " + header);
}

header = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)";
if (!headers.UserAgent.TryParseAdd(header))
{
    throw new Exception("Invalid header value: " + header);
}

Uri requestUri = new Uri("http://www.contoso.com");

//Send the GET request asynchronously and retrieve the response as a string.
Windows.Web.Http.HttpResponseMessage httpResponse = new Windows.Web.Http.HttpResponseMessage();
string httpResponseBody = "";

try
{
    //Send the GET request
    httpResponse = await httpClient.GetAsync(requestUri);
    httpResponse.EnsureSuccessStatusCode();
    httpResponseBody = await httpResponse.Content.ReadAsStringAsync();
}
catch (Exception ex)
{
    httpResponseBody = "Error: " + ex.HResult.ToString("X") + " Message: " + ex.Message;
}

我的代碼:

private async void Download_Click(object sender, RoutedEventArgs e)
        {
            Windows.Web.Http.HttpClient httpClient = new Windows.Web.Http.HttpClient();
            var buffer = await httpClient.GetBufferAsync(new Uri("http://www.neu.edu.cn/indexsource/neusong.mp3"));
            if (buffer == null) return;
            //創(chuàng)建本地資源
            FileSavePicker fileSavePicker = new FileSavePicker();
            fileSavePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;
            fileSavePicker.FileTypeChoices.Add("校歌", new List<string>() { ".mp3" });
            var storageFile = await fileSavePicker.PickSaveFileAsync();
            if (storageFile == null) return;
            //寫入本地資源
            CachedFileManager.DeferUpdates(storageFile);
            await FileIO.WriteBufferAsync(storageFile, buffer);
            await CachedFileManager.CompleteUpdatesAsync(storageFile);
            MessageDialog msg = new MessageDialog("Welcome!");//.....
            //寫入MediaElement
            var stream = await storageFile.OpenAsync(FileAccessMode.Read);
            mediaElement.SetSource(stream, "");
        }

同時還要注意

image.png

這里需要勾選音樂庫,否則……
代碼中還涉及到文件路徑的問題佛吓,這里作一些解釋宵晚。
參考Files and folders in the music

StorageFolder testFolder = await StorageFolder.GetFolderFromPathAsync(@"C:\test");
StorageFile sourceFile = await testFolder.GetFileAsync("TestImage.jpg");
StorageFile destinationFile = await KnownFolders.CameraRoll.CreateFileAsync("MyTestImage.jpg");
using (var sourceStream = (await sourceFile.OpenReadAsync()).GetInputStreamAt(0))
{
    using (var destinationStream = (await destinationFile.OpenAsync(FileAccessMode.ReadWrite)).GetOutputStreamAt(0))
    {
        await RandomAccessStream.CopyAndCloseAsync(sourceStream, destinationStream);
    }
}

? ? ? ?找資料是個技術活,運氣好就成了维雇,運氣不好就沉了哎淤刃。最近有點忙,還要寫很多別的作業(yè)和項目吱型,就不再多寫了吧逸贾。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市津滞,隨后出現(xiàn)的幾起案子铝侵,更是在濱河造成了極大的恐慌,老刑警劉巖触徐,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咪鲜,死亡現(xiàn)場離奇詭異,居然都是意外死亡撞鹉,警方通過查閱死者的電腦和手機疟丙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鸟雏,“玉大人隆敢,你說我怎么就攤上這事〈藁郏” “怎么了拂蝎?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長惶室。 經(jīng)常有香客問我温自,道長玄货,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任悼泌,我火速辦了婚禮松捉,結果婚禮上,老公的妹妹穿的比我還像新娘馆里。我一直安慰自己隘世,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布鸠踪。 她就那樣靜靜地躺著丙者,像睡著了一般。 火紅的嫁衣襯著肌膚如雪营密。 梳的紋絲不亂的頭發(fā)上械媒,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音评汰,去河邊找鬼纷捞。 笑死,一個胖子當著我的面吹牛被去,可吹牛的內(nèi)容都是我干的主儡。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼惨缆,長吁一口氣:“原來是場噩夢啊……” “哼缀辩!你這毒婦竟也來了?” 一聲冷哼從身側響起踪央,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤臀玄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后畅蹂,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體健无,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年液斜,在試婚紗的時候發(fā)現(xiàn)自己被綠了累贤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡少漆,死狀恐怖臼膏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情示损,我是刑警寧澤渗磅,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響始鱼,放射性物質(zhì)發(fā)生泄漏仔掸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一医清、第九天 我趴在偏房一處隱蔽的房頂上張望起暮。 院中可真熱鬧,春花似錦会烙、人聲如沸负懦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纸厉。三九已至,卻和暖如春葫盼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背村斟。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工贫导, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蟆盹。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓孩灯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親逾滥。 傳聞我的和親對象是個殘疾皇子峰档,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)寨昙,斷路器讥巡,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • CSS是必須以HTML文檔標簽為基礎,如果沒有HTML的標簽就更談不上CSS了√蚰模現(xiàn)在CSS最新的版本是CSS3.0...
    Smi1e_閱讀 604評論 0 2
  • 書接上文欢顷。 前情回顧:Miss Li擇業(yè)記-9 莎士比亞說:“一千人眼中有一千個哈姆雷特∽皆椋”對于深圳抬驴,一千個人有一...
    仲虺閱讀 327評論 2 3
  • 馬蘭戈尼課程 本課程也將挖掘?qū)W生們固有的領導才華、職業(yè)所需的管理和組織能力缆巧,這依賴于與不同工作團體的多樣合作布持,恪守...
    xiaoma123閱讀 166評論 0 0
  • 什么是電子書包,電子書包既是數(shù)字化教材陕悬,是現(xiàn)代教育技術在教學中的應用题暖,是以先進的原筆跡手寫輸入技術為載體的數(shù)字化教...
    繪王閱讀 278評論 0 0