2013-02-21 2 views
1

Я пытаюсь воспроизвести аудиофайл (.wav), когда нажата кнопка переключения (и пауза при повторном нажатии). Сначала я работал, но теперь мне нужно что-то испортить, и я ищу помощь. Вот как я это делаю:Windows 8 Store App - MediaElement больше не воспроизводится Аудио

Создать MediaElement в XAML

<MediaElement x:Name="myMediaElement" HorizontalAlignment="Center" VerticalAlignment="Center" PosterSource="vuvuzela.png" IsLooping="True" Source="Assets/vuvuzela.wav" Grid.Row="1" AutoPlay="False"/> 

Тогда My ToggleButton это:

<ToggleButton x:Name="ToggleButton" Content="Activate" HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Row="2" FontSize="32" Style="{StaticResource ToggleButtonStyle1}" Checked="Tog_Checked" Unchecked="Tog_Unchecked"/> 

И в моем коде, сзади, я имею в ToggleButton «s проверенные/непроверенные обработчики:

private void Tog_Checked(object sender, RoutedEventArgs e) 
    { 
     myMediaElement.Play(); 
    } 

    private void Tog_Unchecked(object sender, RoutedEventArgs e) 
    { 
     myMediaElement.Pause(); 
    } 

Любые идеи относительно того, что может Неправильно или как это проверить? Благодаря!


EDIT: Отлажена еще несколько. Похоже, что myMediaElement не проходит мимо состояния Opening?

+0

Просто, чтобы вы знали, что происходит с моим Windows Phone, что звук больше не работает, пока я не перезагрузить его. Началось замечать, что когда мой будильник не звучал в один прекрасный день, и я не мог воспроизводить звук на телефоне, пока не перезапустил его. Так что, возможно, вы столкнулись с этой странной системной ошибкой? – Mic

+0

Неплохая идея, но перезагрузка была бесполезной –

+0

Я заметил, что настройка автовоспроизведения в true в событии события/щелчка переключения (любой триггер) может сделать трюк. Попробуйте myMediaElement.AutoPlay = true; myMediaElement.Play(); –

ответ

1

Видимо это аппаратная проблема. Проблема была в моем компьютере (MacBook с Bootcamp). Наконец нашел, что ответ на этот пост ->MediaElement in WinRT/Win8 does not work at all

Спасибо за всю помощь, хотя все

0

Вам важно, чтобы ваш медиа-элемент выглядел так?

Попробуйте это в случае щелчка вместо:

var _Media = new Windows.UI.Xaml.Controls.MediaElement() { AutoPlay = false }; 
var _Location = Windows.ApplicationModel.Package.Current.InstalledLocation; 
var _Folder = await _Location.GetFolderAsync("Assets"); 
var _File = await _Folder.GetFileAsync("Ding.wav"); 
var _Stream = await _File.OpenAsync(Windows.Storage.FileAccessMode.Read); 
_Media.SetSource(_Stream, _File.ContentType); 
_Media.Play(); 
+0

Нет, это не обязательно должно быть визуально. Я пробовал ваш код, хотя и ничего не получил. Когда я отлаживаю точки останова, 'CurrentState'' _Media' является 'Открытие'. Никогда не попадает в «Play». Это что-то значит? –

+0

удалить AutoPlay = false, и он должен работать. Если он находится в событии click для кнопки воспроизведения, в любом случае он не должен быть ложным. В противном случае установите значение false в XAML и значение true перед воспроизведением кода. –

0

показали код, необходимый для воспроизведения звукового файла. (код для воспроизведения следующего аудио - бонус)

1. Добавить элемент мультимедиа, кнопки воспроизведения/паузы/остановки в файл XAML.

<MediaElement x:Name="media" Source="Assets/page1/para1.mp3" 
       Grid.Column="0" Grid.Row="0" AutoPlay="True" /> 
<Button Click="StopMedia" Grid.Column="0" Grid.Row="1" Content="Stop" /> 
<Button Click="PauseMedia" Grid.Column="1" Grid.Row="1" Content="Pause" /> 
<Button Click="PlayMedia" Grid.Column="2" Grid.Row="1" Content="Play" /> 

2.Add следующий код в файл с фоновым кодом:

private void StopMedia(object sender, RoutedEventArgs e) 
    { 
     media.Stop(); 
    } 
    private void PauseMedia(object sender, RoutedEventArgs e) 
    { 
     media.Pause(); 
    } 
    private void PlayMedia(object sender, RoutedEventArgs e) 
    { 
     media.Source = new Uri(this.BaseUri, "Assets/page1/para1.mp3"); 
     media.Play(); 
    } 

    protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) 
    { 
     media.MediaEnded += media_MediaEnded; 

    } 

    private void media_MediaEnded(object sender, RoutedEventArgs e) 
    { 
     media.Source = new Uri(this.BaseUri, "Assets/page1/para2.mp3"); 
     media.Play(); 
    }