gpt4 book ai didi

audio - CSCore - 从 FileStream 或 MemoryStream 播放音频

转载 作者:行者123 更新时间:2023-12-01 22:18:00 25 4
gpt4 key购买 nike

使用 CSCore,我如何从 FileStreamMemoryStream 播放 WMA 或 MP3(与使用采用 string 的方法不同)文件路径或 url)。

最佳答案

由于 CodecFactory 类的 GetCodec(Stream stream, object key) 重载是内部的,因此您可以简单地手动执行相同的步骤并直接选择您的解码器。实际上,CodeFactory 只是一个用于自动确定解码器的辅助类,因此如果您已经了解您的编解码器,则可以自己执行此操作。在内部,当传递文件路径时,CSCore 检查文件扩展名,然后打开一个 FileStream (使用 File.OpenRead),该文件将被处理到所选的解码器。 p>

您所需要做的就是使用适合您的编解码器的特定解码器。

对于 MP3,您可以使用 DmoMP3Decoder它继承自 DmoStream实现 IWaveSource -您需要将其作为声源处理的接口(interface)。

这是来自 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 ) 来处理它们,如链接的源代码中所示。另外不要忘记最后处理你的流。

关于audio - CSCore - 从 FileStream 或 MemoryStream 播放音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37333969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com