以下代码适用于某些wav文件,但对于其他一些文件会出现“InvalidOperationException was unhandled. Message=Sound API only supports playing PCM wave files.”的错误提示。
var webClient = new WebClient();
webClient.DownloadFile(url, fileName);
var fileSound = new SoundPlayer(fileName);
fileSound.PlaySync();
有没有办法以编程方式检查wav文件是否“损坏”(不是PCM波形文件),然后根据需要进行转换?
奇怪的是,这段代码在传统的Delphi应用程序中可以工作 - 所有的wav文件都可以正常播放。以下是Delphi代码:
filename := GetEnvironmentVariable('TEMP')+'\archieAndDingbat.wav';
URLDownloadToFile(nil, PChar(url), PChar(filename), 0, nil);
PlaySound(filename);
我在资源管理器中查看了这两个文件的属性,发现它们确实有所不同。能够播放的文件音频格式为PCM;而不能播放的文件则是CCITT u-Law格式。
因此,我需要一种方法,在下载这些文件后(它们是从一个url下载并在本地播放),能够即时将CCITT u-Law格式转换为PCM格式,或者使用与PlaySync()不同的播放方式来播放这些文件。