バックグラウンドで音楽を再生する(前編)

2011年9月2日(金)
PROJECT KySS

ソリューションエクスプローラー内のMainPage.xamを展開して表示される、MainPage.xaml.vbをダブルクリックして、リスト2のコードを記述します。

ロジックコードを記述する

リスト2 (MainPage.xaml.vb)

Option Strict On

Microsoft.Phone.BackgroundAudio名前空間は、他のアプリケーションがフォアグラウンドで実行している間に、バックグラウンドでのオーディオ再生機能を提供するクラスを含む名前空間です。
  Imports Microsoft.Phone.BackgroundAudio

画像を表示するのに必要なクラスの含まれる、System.Windows.Media.Imaging名前空間をインポートします。
Imports System.Windows.Media.Imaging

Partial Public Class MainPage
  Inherits PhoneApplicationPage

  ' Constructor
  Public Sub New()
    InitializeComponent()
  End Sub

ページが読み込まれた時の処理

AddHandlerメソッドで、BackgroundAudioPlayerクラスのインスタンスのPlayStateChangedイベントに、イベントハンドラを追加します。PlayStateChangedは再生状態(PlayState)が変化した時に発生するイベントです。BackgroundAudioPlayerクラスのインスタンスのTrackプロパティに曲目が存在している場合は、曲目のタイトルと曲目のアーティスト名をTextBlockに表示します。UIで使用される画像を表示するImageShowプロシージャを実行します。
  Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    AddHandler BackgroundAudioPlayer.Instance.PlayStateChanged, Sub()
              If BackgroundAudioPlayer.Instance.Track Is Nothing = False Then
                TextBlock1.Text = BackgroundAudioPlayer.Instance.Track.Title & " by " & BackgroundAudioPlayer.Instance.Track.Artist
                ImageShow()
              Else
                Exit Sub
              End If
          End Sub
  End Sub

UIで使用される画像表示の処理

新しいBitmapImageのインスタンスmyImageオブジェクトを生成します。
  myImageオブジェクトのUriSourceプロパティに、BackgroundAudioPlayerのインスタンスの、TrackのAlbumArtを指定します。AlbumArtは各種「桜のjpg」画像を保持しています。Image1のSourceプロパティにmyImageオブジェクトを指定します。
  Private Sub ImageShow()
    Dim myImage As New BitmapImage
    myImage.UriSource = BackgroundAudioPlayer.Instance.Track.AlbumArt
    Image1.Source = myImage
  End Sub

[再生]または[休止]ボタンがクリックされた時の処理

[前へ]と[次へ]ボタンを使用可とします。曲が再生中の場合(ボタンの文字は「休止」となっている)は、画像を表示するImageShowプロシージャを実行し、BackgroundAudioPlayerのインスタンスのPauseメソッドで、曲を休止します。ボタンの文字を「再生」とします。曲が再生されていない場合(ボタンの文字は「再生」になっている)は、BackgroundAudioPlayerのインスタンスのPlayメソッドで、曲を再生し、ボタンの文字を「休止」とします。
  要は、[再生]ボタンクリック時に、曲が再生されていない場合は曲を再生して、ボタンの文字を「休止」とします。ボタンの文字が「休止」で、曲が再生されている場合は、曲を休止して、ボタンの文字を「再生」にするということです。
  Private Sub PlayButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles PlayButton.Click
    PrevButton.IsEnabled = True
    NextButton.IsEnabled = True
    If PlayState.Playing = BackgroundAudioPlayer.Instance.PlayerState Then
      ImageShow()
      BackgroundAudioPlayer.Instance.Pause()
      PlayButton.Content = "再生"
    Else
      BackgroundAudioPlayer.Instance.Play()
      PlayButton.Content = "休止"
    End If
  End Sub

[次へ]ボタンをクリックした時の処理

SkipNextメソッドで、次のトラックにスキップします。
  Private Sub NextButton_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles NextButton.Click
    BackgroundAudioPlayer.Instance.SkipNext()
  End Sub

[前へ]ボタンがクリックされた時の処理

SkipPreviousメソッドで前のトラックにスキップします。
  Private Sub PrevButton_Click(sender As Object, e As System.Windows.RoutedEventArgs) Handles PrevButton.Click
    BackgroundAudioPlayer.Instance.SkipPrevious()
  End Sub

画面の遷移で移動した時に最初に呼ばれるイベント

曲が再生中の場合は、「再生」の文字を「休止」にします。TextBlock1に曲のタイトル名とアーティスト名を表示します。Image1に画像を表示するImageShowプロシージャを実行します。
  曲が「休止」の場合は、「休止」の文字を「再生」にします。TextBlockは空にし、Image1にも画像は表示されていません。最初は「再生」の文字が表示されていますので、曲は休止の状態です。
  Protected Overrides Sub OnNavigatedTo(e As System.Windows.Navigation.NavigationEventArgs)
    If PlayState.Playing = BackgroundAudioPlayer.Instance.PlayerState Then
      PlayButton.Content = "休止"
      TextBlock1.Text = BackgroundAudioPlayer.Instance.Track.Title & " by " & BackgroundAudioPlayer.Instance.Track.Artist
      ImageShow()
    Else
      PlayButton.Content = "再生"
      TextBlock1.Text = String.Empty
      Image1.Source = Nothing
    End If
    MyBase.OnNavigatedTo(e)
  End Sub

[WenBrowser]ボタンがクリックされた時の処理

NavigationService.NavigateメソッドでWebBrowser.xamlに遷移します。
  Private Sub Button1_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button1.Click
    NavigationService.Navigate(New Uri("/WebBrowser.xaml", UriKind.Relative))
  End Sub
End Class

<後編に続きます>

四国のSOHO。薬師寺国安(VBプログラマ)と、薬師寺聖(デザイナ、エンジニア)によるコラボレーション・ユニット。1997年6月、Dynamic HTMLとDirectAnimationの普及を目的として結成。共同開発やユニット名義での執筆活動を行う。XMLおよび.NETに関する著書や連載多数。最新刊は「Silverlight実践プログラミング」両名とも、Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。http://www.PROJECTKySS.NET/

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています