2016-12-12 24 views
0

メトロノームアプリケーションを作成することに決めました。だから、私は "初心者"です。私はこのプロジェクトをOOPやその他のことについて学ぶ目的で作ったのです。 私のアプリケーションはかなりうまく動作しますが、まだ問題はほとんどありません。UWPメトロノームApp - MediaPlayerElementトランスポートコントロールとパフォーマンス

私はMediaPlayerElementを使用してサウンドティックを再生しました。私はこのために、私は

mediaPlayer.MediaPlayer.SystemMediaTransportControls.IsEnabled = false; 

を書きましたが、まだ有効なメディアトランスポートコントロール、メディアトランスポートコントロールが実行時に表示されることを望んでいません。

もう1つの問題は、アプリケーションがPCでかなり機能していること(多分処理能力があります)ですが、スマートフォンではあまりうまく機能しません。 BPMが高い(190または200より大きい)場合、アプリケーションはサウンドを正しく再生せず、ほとんど常に遅れます。以下のコード:

Playerのソース

class Player 
{ 
    MediaPlayerElement mediaPlayer = new MediaPlayerElement(); 

    public void Init() 
    { 
     try 
     { 
      Uri src = new Uri("ms-appx:///Assets/beep.wav"); 
      mediaPlayer.Source = MediaSource.CreateFromUri(src); 
      mediaPlayer.MediaPlayer.SystemMediaTransportControls.IsEnabled = false; 
     } 
     catch (Exception e) 
     { 
      System.Diagnostics.Debug.WriteLine("Error!" + e); 
     } 
    } 

    public void Play() 
    { 
     mediaPlayer.MediaPlayer.Play(); 
    } 

    public Player() 
    { 
     Init(); 
    } 
} 

METRONOMEソース

class Metronome 
{ 
    private Player player = new Player(); 


    private DispatcherTimer dispTimer = new DispatcherTimer(); 
    private double interval; 

    public int Tempo { get; set; } 
    public bool IsActive { get; set; } //returns the state 

    private void Init() 
    { 
     interval = (double)60/Tempo - 0.02; 
     dispTimer.Tick += DispTimer_Tick; 
     dispTimer.Interval = TimeSpan.FromSeconds(interval); 
    } 

    private void DispTimer_Tick(object sender, object e) 
    { 
     player.Play(); 
    } 

    public void Start() 
    { 
     Init(); 
     dispTimer.Start(); 
     IsActive = true; 
    } 

    public void Stop() 
    { 
     dispTimer.Stop(); 
     IsActive = false; 
    } 
} 

私はテンポのプロパティに関連付けられているし、ユーザーを押し、スタートボタンmetronomoは、サウンドを再生したときにされたスライダーを持っています。 これは、指定された値に達するとサウンドを再生するタイマーのように機能します。

コンピュータ(Core I3)では、このアプリケーションは最大1.0%のCPUを使用していますが、Smartphone(Lumia 535)のCPU使用量はわかりません。

**私のCPUはVT-Xをサポートしていますが、私のチップセットはサポートされていません。 :p

ありがとうございました! :)

答えて

1

MediaPlayerの代わりに、BackgroundMediaPlayerを使用できます。

Uri src = new Uri("ms-appx:///Assets/beep.wav"); 
BackgroundMediaPlayer.Current.SetUriSource(src); 

また、メトロノームをInit()するたびに、追加のイベントハンドラが追加されます。私はあなたが新しいメトロノームを毎回作成していないと仮定しています。これは、開始をクリックしてから停止し、再び開始することを意味します - 各tickはplayer.Play()を2回呼び出しています。これはメモリリークを取得するための良い方法です。 Stop()のイベントから退会します。 here(MSDN)の詳細

dispTimer.Tick -= DispTimer_Tick; 

あなたの学習に幸運。

+0

バックグラウンドプレイヤーが正常に動作し、メディアトランスポートコントロールが無効になります。 SetUriSourceは廃止されました」。アプリのパフォーマンスはモバイルではまだ変わりませんが、私はこのためにいくつかのソリューションを検索します。 –

関連する問題