Хотите открыть несколько аудио файлов и воспроизводить их в UWP - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу открыть несколько аудиофайлов в UWP с помощью FileOpenPicker, но получаю ошибку, которую не могу преобразовать.Как я могу это исправить?И если это будет исправлено, все аудиофайлы будут воспроизводиться по порядку или все одновременно?

public MainPage()
{
    this.InitializeComponent();
}
MediaSource media_source;
MediaPlayer media_player;


public async System.Threading.Tasks.Task OpenfileAsync()
{
    var filePicker = new Windows.Storage.Pickers.FileOpenPicker();

    filePicker.FileTypeFilter.Add(".mp3");
    filePicker.FileTypeFilter.Add(".mp4");
    filePicker.FileTypeFilter.Add(".ogg");
    filePicker.FileTypeFilter.Add(".wav");
    filePicker.FileTypeFilter.Add(".wma");

    filePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;

    StorageFile file = await filePicker.PickSingleFileAsync();

    if (file != null)
    {
        media_source = MediaSource.CreateFromStorageFile(file);
        media_player = new MediaPlayer();
        media_player.Source = media_source;
        mediaPlayerElement.SetMediaPlayer(media_player);
        media_player.Play();
    }
}

private async void Select_track_Click(object sender, RoutedEventArgs e)
{
    await OpenfileAsync();
}
public async System.Threading.Tasks.Task OpenMultipleAsync()
{
    var filePicker = new Windows.Storage.Pickers.FileOpenPicker();
    filePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;

    filePicker.FileTypeFilter.Add(".mp3");
    filePicker.FileTypeFilter.Add(".mp4");
    filePicker.FileTypeFilter.Add(".ogg");
    filePicker.FileTypeFilter.Add(".wav");
    filePicker.FileTypeFilter.Add(".wma");
    filePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;

    StorageFile file = await filePicker.PickMultipleFilesAsync();

    if (file != null)
    {

        media_source = MediaSource.CreateFromStorageFile(file);
        media_player = new MediaPlayer();
        media_player.Source = media_source;
        mediaPlayerElement.SetMediaPlayer(media_player);
        media_player.Play();

    }

}
private async void playlist_Click(object sender, RoutedEventArgs e)
{
    await OpenMultipleAsync();
}

Я получаю ошибку в StorageFile file = await filepicker.PickmultiplefilesAsync();

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

для воспроизведения списка файлов лучше всего использовать MediaPlaybackList

Также вам нужно установить RecommendedStartLocation только один раз и при использовании PickMultipleFilesAsync () вы получаете список возвращенных файлов, поэтому вам нужно пройти через этот список, чтобы получить все файлы и добавить их в ваш MediaPlaybackList

Изменить ваш OpenMultipleAsync метод, подобный этому:

public async System.Threading.Tasks.Task OpenMultipleAsync()
{
    var filePicker = new Windows.Storage.Pickers.FileOpenPicker();

    filePicker.FileTypeFilter.Add(".mp3");
    filePicker.FileTypeFilter.Add(".mp4");
    filePicker.FileTypeFilter.Add(".ogg");
    filePicker.FileTypeFilter.Add(".wav");
    filePicker.FileTypeFilter.Add(".wma");
    filePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.MusicLibrary;

    _mediaPlaybackList = new MediaPlaybackList();

    var files = await filePicker.PickMultipleFilesAsync();

    foreach (var file in files)
    {
        var mediaPlaybackItem = new MediaPlaybackItem(MediaSource.CreateFromStorageFile(file));
        _mediaPlaybackList.Items.Add(mediaPlaybackItem);
    }

    _mediaPlayer = new MediaPlayer();
    _mediaPlayer.Source = _mediaPlaybackList;
    mediaPlayerElement.SetMediaPlayer(_mediaPlayer);
}

Подробнее о MediaPlaybackItem можно увидеть здесь

и ответить «будут ли эти мультимедийные файлы воспроизводиться вместе в одно и то же время или один за другим»: они будут воспроизводиться один за другим подряд, что и является целью MediaPlaybackList, который поддерживает воспроизведение без пауз для списков воспроизведения.

0 голосов
/ 12 сентября 2018

Метод FileOpenPicker.PickMultipleFilesAsync имеет следующую подпись:

IAsyncOperation<IReadOnlyList<StorageFile>> PickMultipleFilesAsync()

В отличие от PickFileAsync он возвращает IReadOnlyList<StorageFile>, поэтому вы фактически получите список из нескольких файлов, выбранных пользователем.Вы должны обновить код следующим образом:

var files = await filePicker.PickMultipleFilesAsync();

foreach (var file in files)
{
    if (file != null)
    {
        media_source = MediaSource.CreateFromStorageFile(file);
        media_player = new MediaPlayer();
        media_player.Source = media_source;
        mediaPlayerElement.SetMediaPlayer(media_player);
        media_player.Play();
    }
}

Это решение будет воспроизводить все звуки одновременно.Для воспроизведения одного за другим вы можете использовать решение @touseefbsb :-).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...