多くの異なるオーディオを含む 1 つの WMA ファイルがあります。サウンド ストリームの一部を再生する方法はありますか?
何かのようなもの:
public static void Play(Stream soundStream, long start, long end);
これは、.Net 用のオーディオ ライブラリであるNAudioを使用して実行できる場合があります。
ここの例を使用して、簡単なテスト アプリケーションを起動して試すことができました。WaveSteam.Skip(int seconds) メソッドを使用すると、ファイル内の特定の位置から開始できます。ただし、最終位置を取得する方法を理解できませんでした。以下は、30 秒のマークで wma ファイルを開始する変更されたサンプルです。
IWavePlayer waveOutDevice = new WaveOut();
WaveStream mainOutputStream;
WaveChannel32 volumeStream;
WaveStream wmaReader = new WMAFileReader(@"F:\My Music\The Prodigy\Music for the Jilted Generation\01 Intro.wma");
volumeStream = new WaveChannel32(wmaReader);
mainOutputStream = volumeStream;
mainOutputStream.Skip(30); //start 30 seconds into the file
waveOutDevice.Init(mainOutputStream);
waveOutDevice.Play();
ただし、上記のサンプルでは、再生を停止してストリームを破棄するためのクリーンアップ コードが省略されています。それが少し役立つことを願っています。
あなたが望む方法ではありません。
これは、WinForms または WPF コンテキスト内にあると想定しています。解決策は、プロジェクトで WMP ActiveX コントロールをホストし、そこに WMA ファイルをロードして、Position/Seek プロパティを設定し、しばらく再生して、Timer が特定のポイントに達したときに停止することです。WMP ActiveX コントロールにタイマー イベントがあるとは思わないので、別のスレッドで監視し、到達したら再生を停止する必要があります。
これはハックですが、動作するはずです。.NET アプリケーション内で ActiveX コントロールをホストすることに慣れている場合は、数時間以内に「機能する」ものを入手できるはずです。64 ビット WMP ActiveX コントロールとの互換性の問題のため、アプリケーションを x86 専用にする必要があることに注意してください。
はるかに困難な代替手段は、アプリケーション内から DirectShow を操作し、WMA ファイルのレンダー グラフを作成して、自分で操作、シーク、および再生を行うことです。DS の学習曲線は非常に急です。これまでに COM を使用したことがない場合は、少なくとも数日から数週間かかると予想してください。