如何发挥非PCM文件或将其转换成PCM上飞?(How to play non-PCM file or

2019-06-28 07:20发布

下面的代码工作的一些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可能以不同的方式() ...

Answer 1:

看看从mitov AUDIOLAB的库。 它的伟大工程



Answer 2:

所以,你要播放的文件,或将其转换? 什么是首要目标? 你打它作为一个证明,你可以将它转换,还是你转换它,因为你不知道怎么玩不转换的文件? 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#侧容易。



Answer 3:

做到这一点的方法是在使用newkie代码: http://www.codeproject.com/Articles/175030/PlaySound-A-Better-Way-to-Play-Wav-Files-in-C?msg=4366037# xx4366037xx

就我而言,至少,我只好全部小写字母x的更改为大写X的,不过,得到它的工作。



文章来源: How to play non-PCM file or convert it to PCM on the fly ?