CSCore - 从 FileStream 或 MemoryStream 播放音频
CSCore - Play audio from a FileStream or MemoryStream
使用 CSCore,如何从 FileStream
或 MemoryStream
播放 WMA 或 MP3(不同于使用 string
作为文件路径或 url).
由于 GetCodec(Stream stream, object key)
-CodecFactory
-class 的重载是内部的,您可以简单地手动执行相同的步骤并直接选择您的解码器。实际上,CodeFactory
只是一个帮助程序 class,用于自动确定解码器,所以如果您已经知道您的编解码器,您可以自己做。
在内部,当传递文件路径时,CSCore 检查文件扩展名,然后打开一个 FileStream
(使用 File.OpenRead
),该文件被处理到选定的解码器。
您需要做的就是为您的编解码器使用特定的解码器。
对于MP3,您可以使用您需要处理的DmoMP3Decoder which inherits from DmoStream that implements the IWaveSource接口作为音源。
这是 Codeplex 上文档的调整示例:
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);
}
对于 WMA,您可以使用 WmaDecoder。
您应该检查不同解码器的实现:https://github.com/filoe/cscore/blob/master/CSCore/Codecs/CodecFactory.cs#L30
确保没有抛出异常并使用另一个解码器 (Mp3MediafoundationDecoder) 处理它们,如链接的源代码中所示。另外别忘了在最后处理你的流。
使用 CSCore,如何从 FileStream
或 MemoryStream
播放 WMA 或 MP3(不同于使用 string
作为文件路径或 url).
由于 GetCodec(Stream stream, object key)
-CodecFactory
-class 的重载是内部的,您可以简单地手动执行相同的步骤并直接选择您的解码器。实际上,CodeFactory
只是一个帮助程序 class,用于自动确定解码器,所以如果您已经知道您的编解码器,您可以自己做。
在内部,当传递文件路径时,CSCore 检查文件扩展名,然后打开一个 FileStream
(使用 File.OpenRead
),该文件被处理到选定的解码器。
您需要做的就是为您的编解码器使用特定的解码器。
对于MP3,您可以使用您需要处理的DmoMP3Decoder which inherits from DmoStream that implements the IWaveSource接口作为音源。
这是 Codeplex 上文档的调整示例:
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);
}
对于 WMA,您可以使用 WmaDecoder。 您应该检查不同解码器的实现:https://github.com/filoe/cscore/blob/master/CSCore/Codecs/CodecFactory.cs#L30
确保没有抛出异常并使用另一个解码器 (Mp3MediafoundationDecoder) 处理它们,如链接的源代码中所示。另外别忘了在最后处理你的流。