2016-05-19 17 views

答えて

4

CodecFactory -classのオーバーロードが内部であるため、同じ手順を手動で実行して、直接デコーダを選択することができます。実際には、CodeFactoryは、デコーダを自動的に決定するためのヘルパークラスに過ぎません。あなたのコーデックについて既に知っていれば、これを自分で行うことができます。 ファイルパスを渡すと、CSCoreはファイル拡張子をチェックし、FileStreamFile.OpenReadを使用)を開き、選択したデコーダに処理されます。

あなたのコーデックに特定のデコーダを使用するだけです。

MP3の場合、音源として扱う必要があるIWaveSourceインターフェイスを実装するDmoStreamから継承したDmoMP3Decoderを使用できます。あなたがWmaDecoderを使用することができ、WMAについては

public void PlayASound(Stream stream) 
{ 
    //Contains the sound to play 
    using (IWaveSource soundSource = GetSoundSource(stream)) 
    { 
     //SoundOut implementation which plays the sound 
     using (ISoundOut soundOut = GetSoundOut()) 
     { 
      //Tell the SoundOut which sound it has to play 
      soundOut.Initialize(soundSource); 
      //Play the sound 
      soundOut.Play(); 

      Thread.Sleep(2000); 

      //Stop the playback 
      soundOut.Stop(); 
     } 
    } 
} 

private ISoundOut GetSoundOut() 
{ 
    if (WasapiOut.IsSupportedOnCurrentPlatform) 
     return new WasapiOut(); 
    else 
     return new DirectSoundOut(); 
} 

private IWaveSource GetSoundSource(Stream stream) 
{ 
    // Instead of using the CodecFactory as helper, you specify the decoder directly: 
    return new DmoMp3Decoder(stream); 

}

はここCodeplex上のドキュメントから調整済みのサンプルです。 あなたは異なるデコーダの実装を確認する必要があります:https://github.com/filoe/cscore/blob/master/CSCore/Codecs/CodecFactory.cs#L30

には、例外がスローされていないことを、確認して、リンクされたソースコードのように、別のデコーダ(Mp3MediafoundationDecoder)の使用方法とそれらを扱います。また、最後にストリームを廃棄することを忘れないでください。

関連する問題