2015-01-14 2 views
0

Код, показанный ниже, который воспроизводит аудиофайл, отлично работает в моем приложении WPF. Но когда я выполняю тот же код в Windows 8.1 app, я не получаю никаких исключений, но я также не получаю никакого звука. Может ли кто-нибудь помочь?MediaElement, работающий в WPF, но не в Windows 8.1 App

private void myMediaElement_MediaOpened(object sender, RoutedEventArgs e) 
{ 
    myMediaElement.Source = 
     new Uri(@"C:\Users\Soph\Music\Addicted.mp3", UriKind.Absolute); 
    myMediaElement.Play(); 
} 

private void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    myMediaElement_MediaOpened(sender,e); 
} 

EDIT:

Я добавил в совет событие mediaFailed (с последующим из http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.mediaelement.mediafailed)

private string GetHresultFromErrorMessage(ExceptionRoutedEventArgs e) 
    { 
     String hr = String.Empty; 
     String token = "HRESULT - "; 
     const int hrLength = 10;  // eg "0xFFFFFFFF" 

     int tokenPos = e.ErrorMessage.IndexOf(token, StringComparison.Ordinal); 
     if (tokenPos != -1) 
     { 
      hr = e.ErrorMessage.Substring(tokenPos + token.Length, hrLength); 
     } 

     return hr; 
    } 

    private void mycontrol_MediaFailed(object sender, ExceptionRoutedEventArgs e) 
    { 
     // get HRESULT from event args 
     string hr = GetHresultFromErrorMessage(e); 

     // Handle media failed event appropriately 
    } 

Тогда я пытался отладить это:

Название Значение Тип

это {PracMEWindowsApp.MainPage} PracMEWindowsA pp.MainPage е {} Windows.UI.Xaml.ExceptionRoutedEventArgs Windows.UI.Xaml.ExceptionRoutedEventArgs час "0x80070003" строка лексем "HRESULT -" строка tokenPos 40 Int hrLength 10 INT

Что это час захватить? Почему мой файл не воспроизводится?

+0

'Окна 8,1 App' не правильный термин, вы имеете в виду приложение для Windows Store, не так ли? Пожалуйста, отредактируйте свой вопрос, также используя правильный тег 'windows-store-app' – kennyzx

+0

Пробовал ли вы отлаживать настройки' source' и 'Play'?Возможно, у вас есть Access denied, потому что у вас нет прав на использование файлов с 'C: \'. – RenDishen

+0

Хорошая практика всегда обрабатывать событие MediaFailed – user2250152

ответ

0

Для доступа к библиотеке музыки укажите функцию «Музыкальная библиотека» в манифесте приложения. Также рекомендуется всегда обрабатывать событие MediaFailed.

+0

Я добавил событие MediaFailed, а также отредактировал мой вопрос. Что это за захват? Почему мой файл не воспроизводится? – SoProgram

+0

@SoProgram вы зарегистрированы как пользователь Soph? – user2250152

+0

Я не знаю, почему мое имя попало в SoProgram @ user2250152 – SoProgram

0

HRESULT 0x80070003 «Справочник не найден». Это предполагает, что элемент мультимедиа не любит что-то о пути к файлу. Если вы получаете HRESULT 0x80070005 (Access Denied), это, вероятно, связано с правами.

+0

Да, я понял. Но я не понимаю, что я исправил путь, и у меня нет никаких исключений или неудачных событий, но я не могу услышать звук. Но он отлично работал с использованием WPF – SoProgram

0

Windows Store приложение не имеет доступа к файлам в локальной файловой системе, он работает в песочнице среды и имеет доступ только к своей собственной папке данных, путь, как C:\Users\Soph\Music\Addicted.mp3 неузнаваем.

Существует несколько способов воспроизведения медиафайла.

a.Specify музыкальная библиотека возможность в Package.appxmanifest (это требуется), а затем

private async void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    var file = await Windows.Storage.KnownFolders.MusicLibrary.GetFileAsync("Addicted.mp3"); 
    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
    myMediaElement.SetSource(stream, file.ContentType); 
} 

или

б. используйте FileOpenPicker, выберите песню вручную, вы можете получить доступ к любому файлу .mp3 в файловой системе.

private async void btn1_Click(object sender, RoutedEventArgs e) 
{ 
    FileOpenPicker openPicker = new FileOpenPicker(); 
    openPicker.FileTypeFilter.Add(".mp3"); 
    openPicker.SuggestedStartLocation = PickerLocationId.MusicLibrary; 
    var file = await openPicker.PickSingleFileAsync(); 
    var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read); 
    myMediaElement.SetSource(stream, file.ContentType); 
} 

или

гр. Добавить Addicted.mp3 в проект, а затем

Uri uri = new Uri("ms-appx:///Addicted.mp3"); 
myMediaElement.Source = uri; 

вы также можете установить его в XAML

<MediaElement x:Name="myMediaElement" Source="Addicted.mp3" /> 
+0

Thankyou для подробного объяснения. Я понял и теперь дал правильный путь, как вы упомянули. Теперь это не провал. Но и это не давало мне никакого звука. Хотя я хорошо слышу это с помощью WPF. Почему бы не использовать WindowsAPP ?? – SoProgram

+0

Приложение должно работать как передний план для воспроизведения звука, если вы переключитесь на другое приложение, звук перестает играть. И Каким образом - a, b, c-вы используете? – kennyzx

+0

Звук не наступает. Хотя он проходит через .Play() .. Его единственная страница прямо сейчас. Вот почему я застрял .. ?? @kennyzx – SoProgram

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