【问题标题】:UWP: How do I read lyrics from a local music file?UWP:如何从本地音乐文件中读取歌词?
【发布时间】:2019-12-29 06:24:24
【问题描述】:

歌词嵌套在音乐文件中,不是从互联网上下载的。 MusicProperties 没有这个属性。

我尝试使用Id3 包来读取它,这需要文件的路径。但是,在 UWP 中,似乎无法使用 C:/Users/Seaky/Desktop/Music/SomeMusic.mp3 之类的路径访问文件(至少对我不起作用,因为即使使用 broadFileSystemAccess,我的权限也被拒绝。

我还能尝试什么?

【问题讨论】:

    标签: c# windows uwp


    【解决方案1】:

    我找到了一种方法,因为Mp3 在其构造函数中接受了一个 Stream 对象。因此,我能够做到这一点:

        public async Task<string> GetLyrics()
        {
            var file = await StorageFile.GetFileFromPathAsync(Path);
            using (var stream = await file.OpenAsync(FileAccessMode.Read))
            {
                using (var mp3 = new Mp3(stream.AsStream()))
                {
                    var lyrics = mp3.GetTag(Id3TagFamily.Version2X).Lyrics;
                    return lyrics.Count > 0 ? lyrics[0].Lyrics : "";
                }
            }
        }
    

    【讨论】:

      【解决方案2】:

      从选定数量文件夹之外的 UWP 应用程序访问文件需要额外的权限。

      正如您所指出的,您已将 broadFileSystemAccess 功能添加到您的应用清单中,这应该允许访问最终用户有权访问的任何文件。

      broadFileSystemAccess 功能仍需要最终用户授权应用程序。如果指定了broadFileSystemAccess 功能并且尚未授予权限,则通常会提示最终用户执行此操作,但是,在某些情况下,这是broken。因此,您可以通过 Windows“应用程序和设置”设置页面下的“高级设置”链接来检查应用程序是否具有所需的权限。

      如果您对路径进行硬编码,您可以尝试让最终用户使用FileOpenPicker 来选择文件,看看是否会有所不同。

      有更多关于文件访问权限的信息here

      【讨论】:

      • 应用程序的文件系统切换按钮已打开,但我的权限仍然被拒绝。
      • 我没有硬编码路径。我允许用户在播放任何音乐文件时查看歌词。
      • 您能否发布发生错误的代码以及您收到的完整错误?
      • 我的代码是hereGetLyrics 评论区。例外是System.UnauthorizedAccessException:“Access to the path 'C:\Users\Seaky\Desktop\Media\Music\Justin Bieber\Baby.mp3' is denied.”
      猜你喜欢
      • 2013-03-07
      • 2019-02-02
      • 2021-07-07
      • 2021-10-03
      • 2017-11-29
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多