Windows Phone 8.1 多媒体(3):音乐

Windows Phone 8.1
多媒体(1):相片

Windows Phone 8.1
多媒体(2):视频


(1)前台

说是前台,其实音乐的播放都是利用系统后台的 BackgroundMediaPlayer:

BackgroundMediaPlayer.Current.SetUriSource(new Uri("ms-appx:///djlang59_-_Drops_of_H2O_(_The_Filtered_Water_Treatment_).mp3"));
BackgroundMediaPlayer.Current.Play();

可以添加音乐播放状态改变事件:


BackgroundMediaPlayer.Current.CurrentStateChanged += MediaPlayerStateChanged;

private async void MediaPlayerStateChanged(MediaPlayer sender, object args
{
await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
switch( BackgroundMediaPlayer.Current.CurrentState )
{
case MediaPlayerState.Stopped:
AppBarBtnPause.IsEnabled = false;
AppBarBtnStop.IsEnabled = false;
break;
case MediaPlayerState.Playing:
AppBarBtnPause.IsEnabled = true;
AppBarBtnStop.IsEnabled = true;

BackgroundMediaPlayer.SendMessageToBackground(new ValueSet
{
{"Title", "Drops of H2O"},
{"Artist", "J.Lang"},
});
break;
case MediaPlayerState.Paused:
AppBarBtnPause.IsEnabled = false;
break;
}
});
}

其中 BackgroundMediaPlayer.SendMessageToBackground
方法可以向后台音乐播放程序发送消息,可在后台程序中添加处理事件:


BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;

private void BackgroundMediaPlayerOnMessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e)
{
systemmediatransportcontrol.DisplayUpdater.Type = MediaPlaybackType.Music;
systemmediatransportcontrol.DisplayUpdater.MusicProperties.Title = e.Data["Title"].ToString();
systemmediatransportcontrol.DisplayUpdater.MusicProperties.Artist = e.Data["Artist"].ToString();
systemmediatransportcontrol.DisplayUpdater.Update();
}

(2)后台

这里说的后台是指
SystemMediaTransportControls,也就是按下音量键后顶部弹出的控制音乐播放的控件。

1)新建 Windows Runtime Component 和继承 IBackgroundTask
的后台类

A:Run 方法中可设置 SystemMediaTransportControls
的各个按键属性以及事件的订阅(比如下一曲按钮可不可用,状态更改事件等)


public void Run(IBackgroundTaskInstance taskInstance)
{
systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView();
systemmediatransportcontrol.ButtonPressed += SystemControlsButtonPressed;
systemmediatransportcontrol.IsEnabled = true;
systemmediatransportcontrol.IsPauseEnabled = true;
systemmediatransportcontrol.IsStopEnabled = true;
systemmediatransportcontrol.IsPlayEnabled = true;

BackgroundMediaPlayer.Current.CurrentStateChanged -= BackgroundMediaPlayerCurrentStateChanged;
BackgroundMediaPlayer.MessageReceivedFromForeground -= BackgroundMediaPlayerOnMessageReceivedFromForeground;
BackgroundMediaPlayer.Current.CurrentStateChanged += BackgroundMediaPlayerCurrentStateChanged;
BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayerOnMessageReceivedFromForeground;

deferral = taskInstance.GetDeferral();
}

B:事件的处理


private void BackgroundMediaPlayerCurrentStateChanged(MediaPlayer sender, object args)
{
if (sender.CurrentState == MediaPlayerState.Playing)
{
systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Playing;
}
else if (sender.CurrentState == MediaPlayerState.Paused)
{
systemmediatransportcontrol.PlaybackStatus = MediaPlaybackStatus.Paused;
}
}

private static void SystemControlsButtonPressed(SystemMediaTransportControls sender, SystemMediaTransportControlsButtonPressedEventArgs args)
{
switch (args.Button)
{
case SystemMediaTransportControlsButton.Play:
BackgroundMediaPlayer.Current.Play();
break;
case SystemMediaTransportControlsButton.Pause:
BackgroundMediaPlayer.Current.Pause();
break;
case SystemMediaTransportControlsButton.Stop:
BackgroundMediaPlayer.Current.Pause();
BackgroundMediaPlayer.Current.Position = TimeSpan.FromSeconds(0);
break;
}
}

2)前台应用添加上一步新建的后台任务

Windows Phone 8.1 多媒体(3):音乐,布布扣,bubuko.com

时间: 2024-11-08 17:56:48

Windows Phone 8.1 多媒体(3):音乐的相关文章

Windows Phone 8.1 多媒体(1):相片

Windows Phone 8.1 多媒体(1):相片 Windows Phone 8.1 多媒体(2):视频 Windows Phone 8.1 多媒体(3):音乐 (1)拍摄相片 1)CaptureElement CaptureElement 是放在应用界面上预览拍照的控件: <Grid> <CaptureElement x:Name="capturePhotoElement"/> </Grid> <Page.BottomAppBar>

Windows Phone 8.1 多媒体(2):视频

Windows Phone 8.1 多媒体(1):相片 Windows Phone 8.1 多媒体(3):音乐 (1)拍摄视频 拍摄视频和拍摄相片的方法是基本一致的: MediaCapture mediaCapture; MediaEncodingProfile videoEncodingProperties; protected override async void OnNavigatedTo(NavigationEventArgs e) { HardwareButtons.CameraHa

go语言让windows发出声音,或者播放音乐

go语言让windows发出声音,或者播放音乐的例子:会发出alert警告的声音 ( 这是我应群员的求助写的, 如果你需要了解其中的调用原理或过程 或更多go语言调用win32api的资料,加群: 218160862 , 答案我告诉你) package main func main(){ winSound() } // golang 让windows发出警告的声音  todo 需要完善播放mp3之类 func winSound(  )  { funInDllFile, err := syscal

Python调用Windows API函数编写录音机和音乐播放器

功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: ? 运行界面: ? 原文地址:https://www.cnblogs.com/7758520lzy/p/12149931.html

Qt Quick 多媒体 - 播放音乐和视频

MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频.视频.要使用 MediaPlayer,需要引入 QtMultimedia 模块,在 QML 文档的开始加入 "import QtMultimedia 5.0" 语句.QML 中的 MediaPlayer 是 Qt C++ 中的多媒体框架在 QML 环境中的代言人,假如以 Qt QuickApp 为模板创建项目,你还需要在 pro 文件中加入语句:QT += multimedia. 一.播放音乐 先看最简单的播放音乐的

多媒体(音乐、视频播放器,相机)

1.音乐.视频 QMediaPlayer是多媒体核心类,可以播放音乐.视频.要使用MediaPlayer,需要引入QtMultimedia 5.0或以上版本.另外在pro文件中需要添加QT += multimedia 音乐播放用MediaPlayer足以满足需求,但是视频需要VedioOutput元素和MediaPlayer结合,这个VideoOutput用来渲染视频,也可以作为相机的取景器(预览窗口). 多媒体元信息:就是描述媒体的信息,包括歌曲的专辑.发行时间.艺术家,或者视频的分辨率.编码

多媒体之音乐播放

音效是比较简短的,音乐比较长,格式比较多,那就需要使用<AVFoundation/AVFoundation.h>框架,AVAudioPlayer只支持本地的 // // ViewController.m // AVFoundation // // Created by City--Online on 15/5/5. // Copyright (c) 2015年 CYW. All rights reserved. // #import "ViewController.h" #

DirectX 因素:构建用于 Windows 8 的音频振荡器

Charles Petzold 下载代码示例 我一直在制造电子乐器作为一种爱好现在大约 35 年. 我开始在晚 20 世纪 70 年代布线了 TTL 和 CMOS 芯片,于是晚得多的软件路由 - - 第一次与多媒体扩展到 1991 年的 Windows 和 Windows 演示文稿基础 (WPF) 中,和在 Silverlight 和 Windows Phone 7 的 MediaStreamSource 类 NAudio 图书馆最近. 就在去年,我专门讨论我触摸的一对夫妇分期付款 & 列去为

从Windows复制文件到Linux显示乱码问题

(1).文件名乱码 这并不是所有人都会碰到的问题,一般常见于使用putty的用户,他们使用pscp和pftp传递文件.大部分伪终端都会自带一个专门用于传递文件的端口或软件,只要设置好就不会出现此问题.如果遇到了也不要害怕,使用convmv命令可以解决你所遇到的这个问题. 我写详细一点还原真实场景,首先我来上传一个测试文件"a此文件在windows下打开正常-到linux下vim打开乱码.txt".在确保putty可以正常连接到Linux上,打开Windows上的命令提示符输入pscp命