2016-12-12 2 views
0

Я решил создать приложение Metronome. Итак, я «начинающий», и я сделал этот проект с целью узнать больше о ООП и других вещах. Мое приложение работает очень хорошо, но у меня все еще есть некоторые проблемы (небольшие проблемы).UWP Metronome App - средства управления транспортом MediaPlayerElement

Я использовал MediaPlayerElement для воспроизведения звука. Я не хочу, что управление медиа транспорта появляется во время выполнения, для этого я написал

mediaPlayer.MediaPlayer.SystemMediaTransportControls.IsEnabled = false; 

но управление медиа транспорта все еще включено.

Другая проблема заключается в том, что приложение работает на ПК (возможно, имеет больше возможностей обработки), но в смартфоне, ах, не работает хорошо! Когда 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(); 
    } 
} 

МЕТРОНОМ ИСТОЧНИК

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; 
    } 
} 

У меня есть ползунок, который связан с Tempo собственности и когда пользователь нажимает кнопку Запустить metronomo воспроизводит звук. Это работает как таймер, когда при достижении указанного значения он воспроизводит звук.

В компьютере (Core I3) это приложение использует максимальный уровень 1.0% от ЦП, я не знаю, как использовать ЦП в смартфоне (Lumia 535).

** Мой процессор поддерживает VT-X, но мой чипсет не так, я делаю все, что могу! : p

Спасибо за помощь! :)

ответ

1

Вместо MediaPlayer вы можете использовать BackgroundMediaPlayer.

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

Также ... Каждый раз, когда вы устанавливаете метроном, вы добавляете дополнительный обработчик событий. Я предполагаю, что вы каждый раз не создаете новый метроном. Это означает, что когда вы нажимаете start, затем останавливаетесь, а затем начинаете снова - каждый тик вызывает вызов игрока. PLAY() дважды. Это также хороший способ получить утечки памяти. Я бы отказался от подписки на событие в Stop(). Подробнее об этом here (MSDN).

dispTimer.Tick -= DispTimer_Tick; 

Удачи вам в обучении.

+0

Фоновый плеер Хорошо работает, средства управления транспортом отключены. SetUriSource устарел ». Производительность приложения по-прежнему сохраняется на мобильных устройствах, но я буду искать решение для этого. –

 Смежные вопросы

  • Нет связанных вопросов^_^