【发布时间】:2012-09-14 15:47:07
【问题描述】:
以下代码适用于一些 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 文件都可以正常播放。这是 Delphi 代码:
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() ...
【问题讨论】:
-
您还期待哪些其他格式?
-
@Daniel:我什么都不期待;我以为 .wav 文件是 .wav 文件是 .wav 文件,所以当一个播放正常而另一个播放不正常时,我感到非常困惑。
-
不,.wav 的很多变体en.wikipedia.org/wiki/WAV