以下代码适用于一些 wav 文件,但我得到的其他代码,“InvalidOperationException 未处理。Message=Sound API 仅支持播放 PCM 波形文件。”
var webClient = new WebClient();
webClient.DownloadFile(url, fileName);
var fileSound = new SoundPlayer(fileName);
fileSound.PlaySync();
有没有办法以编程方式检查 wav 文件是否“坏”(不是 PCM 波形文件),然后根据需要进行转换?
奇怪的是,代码在旧版 Delphi 应用程序中工作 - 所有 wav 文件都可以正常播放。这是德尔福代码:
filename := GetEnvironmentVariable('TEMP')+'\archieAndDingbat.wav';
URLDownloadToFile(nil, PChar(url), PChar(filename), 0, nil);
PlaySound(filename);
我在资源管理器中查看了这两个文件的属性,发现确实存在差异。对于播放的文件,其音频格式为 PCM;不会玩的是CCITT u-Law。
所以......我需要一种方法在下载这些文件后即时从 CCITT u-Law 转换为 PCM(它们是从 url 下载然后在本地播放),或者可能是与 PlaySync() 不同的播放这些文件的方式...