4

次のコードは一部の 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 wave ファイルではない) かどうかをプログラムで確認し、必要に応じて変換する方法はありますか?

奇妙なのは、コードが従来の Delphi アプリで機能することです。すべての wav ファイルは正常に再生されます。Delphi コードは次のとおりです。

filename := GetEnvironmentVariable('TEMP')+'\archieAndDingbat.wav';
URLDownloadToFile(nil, PChar(url), PChar(filename), 0, nil);
PlaySound(filename);

エクスプローラーで 2 つのファイルのプロパティを確認したところ、実際に違いがあることがわかりました。再生できるファイルのオーディオ形式は PCM です。再生されないのは CCITT u-Law です。

だから...これらのファイルをダウンロードした後、その場でCCITT u-LawからPCMに変換する方法が必要です(URLからダウンロードしてローカルで再生します)か、おそらくPlaySync()とは異なるこれらのファイルの再生方法が必要です...

4

3 に答える 3

1

それで、ファイルを再生しますか、それとも変換しますか?主な目標は何ですか?変換できることを証明するものとして再生しますか、それとも変換されていないファイルの再生方法がわからないために変換しますか? http://www.catb.org/esr/faqs/smart-questions.html#goal

質問のタイトルには「変換」と記載されていますが、本文には「再生」と記載されています

この答えは、ファイルの再生に関するものです。


DirectX中間体なしでFFDShowコーデックを直接使用することもできます。 http://en.wikipedia.org/wiki/Libavcodecおよびhttp://libav.org/およびhttp://ffmpeg.org/(最近分裂した)

「FFDShowdotnet」、「libav dotnet」、「ffmpeg dotnet」をグーグルで検索すると、それを使用するためのライブラリが表示されます。


BASSライブラリもあります。ゲーム中のサウンド再生を対象としているため、フォーマットの範囲が狭く、再コーディングにはあまり適していません。それでも多くの音楽プレーヤーがその上に構築されています。使用するのが最も簡単なAPIであると言う人もいます。したがって、検討する価値があります。http://www.un4seen.com/


http://MediaInfo.sf.netは、ほとんどのマルチメディア形式のコンテンツをチェックできるライブラリ(ネイティブwin32 / win64 DLL)です。tisCまたはC++APisの使用がC#側から簡単かどうかはわかりません。

于 2012-09-13T07:51:43.453 に答える
1

mitov の audiolab ライブラリを見てください。それはうまくいきます

于 2012-09-12T21:08:43.000 に答える
0

それを行う方法は、http: //www.codeproject.com/Articles/175030/PlaySound-A-Better-Way-to-Play-Wav-Files-in-C? msg=4366037# で newkie のコードを使用することです。 xx4366037xx

ただし、少なくとも私の場合は、小文字の x をすべて大文字の x に変更して動作させる必要がありました。

于 2012-09-13T16:35:41.510 に答える