以下代码适用于某些wav文件,但我得到的是“InvalidOperationException未处理.Info = Sound API仅支持播放PCM wave文件。”
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(它们从网址下载然后在本地播放)或者可能采用不同的方式播放这些文件PlaySync()......
答案 0 :(得分:1)
查看mitov的audiolab库。它很棒
答案 1 :(得分:1)
那么,你想播放文件还是CONVERT呢?主要目标是什么?你是作为证明你可以转换它,或者你转换它,因为你不知道如何播放未转换的文件? http://www.catb.org/esr/faqs/smart-questions.html#goal
你的问题的标题声称“转换”但身体声称“播放”
这个答案是关于播放文件。
您也可以尝试在没有DirectX中间的情况下直接使用FFDShow编解码器。 http://en.wikipedia.org/wiki/Libavcodec和http://libav.org/以及http://ffmpeg.org/(他们最近有分裂)
用Google搜索“FFDShow dotnet”,“libav dotnet”,“ffmpeg dotnet”显示了一堆使用它的库,例如还有BASS库。它的目标是在游戏过程中进行声音播放,因此它可能具有较少的格式范围,并且对于重新编码而言并不多。仍然有许多音乐播放器建立在它之上。有人说它是最简单的API。所以值得考虑。 http://www.un4seen.com/
http://MediaInfo.sf.net是一个库(本机win32 / win64 DLL),允许检查大多数多媒体格式内容。 我不知道在C#方面使用tis C或C ++ AP是否容易。
答案 2 :(得分:0)
在我的情况下,至少,我必须将所有小写的x更改为大写的x,以使其工作。