下面的代码工作的一些wav文件,但与别人我得到“InvalidOperationException异常是未处理。消息=声音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型规律。
所以......我要么需要一种方法来从CCITT U型规律转换成PCM上飞下载这些文件后(他们是从网址下载并本地播放)或播放这些文件不是PlaySync可能以不同的方式() ...
看看从mitov AUDIOLAB的库。 它的伟大工程
所以,你要播放的文件,或将其转换? 什么是首要目标? 你打它作为一个证明,你可以将它转换,还是你转换它,因为你不知道怎么玩不转换的文件? http://www.catb.org/esr/faqs/smart-questions.html#goal
你的问题的标题宣称“转换”,但身体声称“播放”
这个答案是关于播放文件。
你也可以尝试直接使用的FFDShow编解码器没有的DirectX中间。 http://en.wikipedia.org/wiki/Libavcodec和http://libav.org/和http://ffmpeg.org/ (他们最近有一个分裂)
谷歌搜索“的FFDShow DOTNET”,“libav DOTNET”,“的ffmpeg DOTNET”示出了一堆库来使用它,如
- https://github.com/ermau/libav.net
- 从净ffdshow的控制
- 固体FFmpeg的包装为C#/。NET
还有BASS库。 它的目标是为游戏中声音播放,所以它可能具有的格式范围少,没有太大的重新编码。 仍然有很多音乐播放器都是建立在它之上。 有的说,这是最简单的API使用。 因此,值得考虑。 http://www.un4seen.com/
http://MediaInfo.sf.net是一个库(本机Win32 / Win64的DLL),允许检查大多数多媒体格式的内容。 我不知道,如果使用TIS C或C ++的API是从C#侧容易。
做到这一点的方法是在使用newkie代码: http://www.codeproject.com/Articles/175030/PlaySound-A-Better-Way-to-Play-Wav-Files-in-C?msg=4366037# xx4366037xx
就我而言,至少,我只好全部小写字母x的更改为大写X的,不过,得到它的工作。