如何在Windows 10通用应用程序中导入从CD中提取的.CDA音轨?

8
我需要从CD中导入音轨,但到目前为止我还无法做到。我可以成功地从CD中导入.mp3或许多其他音频格式。为了导入,首先我会扫描CD的文件和文件夹。然后我将文件列表显示给用户,并从列表中复制用户选择的文件。
这是我用于扫描目录或CD的代码:
    List<StorageFile> allTrackFiles = null;
    private async Task GetFiles(StorageFolder folder)
    {
        if(!scanningRemovableTask)
        {
            return;
        }
        try
        {

        if(allTrackFiles == null)
        {
            allTrackFiles = new List<StorageFile>();
        }
        var items = await folder.GetItemsAsync();

        foreach (var item in items)
        {
                if (item.GetType() == typeof(StorageFile))
                {
                    StorageFile storageFile = item as StorageFile;
                    allTrackFiles.Add(storageFile);

                    var basicProperties  = await storageFile.GetBasicPropertiesAsync();
                    var musicProperties = await storageFile.OpenReadAsync();
                }
                else
                    await GetFiles(item as StorageFolder);
        }

        }
        catch(Exception e)
        {

        }
    }    

我把CD的路径传递给这个函数,它会为我创建一个文件列表。当CD只包含.mp3或其他常见的音频格式时,这段代码可以正常工作。但是当CD包含.CDA扩展名的音轨时,就会出现问题。因为我们知道,.CDA文件本身无法播放,它们只是指向原始媒体文件的快捷方式。

现在,我目前遇到的难题是:如何读取.CDA文件或将.CDA文件导入通用Windows应用程序的本地目录中。


同样的问题。在UWP中支持.CDA吗? - Mikewhat
不知道答案...我也在寻找解决方案!!! - Waqas Ahmed Khan
1个回答

6

简短回答:使用CDA文件不可能实现此功能。

详细回答:CDA文件只是Windows为CD上每个音轨生成的存根文件。这些文件不包含实际的音频数据,只包含每个音轨在光盘上的起始和结束位置。如果将该文件从CD复制到计算机上,则无法单独使用,因为它仅是指向光盘部分内容的快捷方式。音频CD不是格式化为文件系统磁盘。它不能被视为文件访问。这就是Windows创建CDA文件的原因。它将CD显示为带有音轨文件的驱动器,以便于查看。

您需要使用一个库,可以从磁盘加载实际的音轨,而不是作为文件进行加载。使用CDA的正确方法是将其用作实际音轨的参考,将其转换为文件,然后加载转换后的文件。

你可以使用本机Windows Media Interface来提取音轨。我还发现了一个Code Project Tutorial,似乎是使用自定义的提取器。它们应该会让你朝着正确的方向前进。


代码项目教程不是针对Windows表单应用程序吗? 我正在尝试将其与UWP一起使用!!? 可以在通用Windows平台中使用吗? - Waqas Ahmed Khan
其实我在UWP或桌面应用方面没有太多经验...如果您能给我更多的指导,那将非常有帮助...顺便说一句,谢谢您的回答... - Waqas Ahmed Khan
代码项目教程使用名为CDDrive的类。第一个示例展示了如何使用它。我查看了代码,它确实使用了本地Windows API调用。考虑到读取音频CD的低级性质,可能没有绕过依赖于操作系统的方法。我不确定这如何转换为通用Windows应用程序。它可能完全正常工作。试一试并让我知道结果。 - Jaguir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接