【问题标题】:C# FMOD playing from streamC# FMOD 从流中播放
【发布时间】:2011-03-25 21:46:43
【问题描述】:

谁能帮助我使用 FMOD 或任何其他方式播放内存流中的文件?

到目前为止,我有这个:
变量

    private FMOD.System _fmod = null;
    private FMOD.Sound _sound = null;
    private FMOD.Channel _channel = null;

代码

        var file = File.ReadAllBytes("test.ogg");
        //MessageBox.Show("Bytes from file: " + file.Length);

        FMOD.Factory.System_Create(ref _fmod);

        var result = _fmod.init(2, FMOD.INITFLAGS.NORMAL, (IntPtr)null);
        if(result != FMOD.RESULT.OK) ShowError(result);

        var info = new FMOD.CREATESOUNDEXINFO();

        result = _fmod.createStream(file, MODE.CREATESTREAM, ref info,  ref _sound);
        if (result != RESULT.OK) ShowError(result);

任何帮助将不胜感激

【问题讨论】:

  • 嗨!请问您是如何使 fmodex.dll 在 C# 中工作的?我对此感到困惑。谢谢!
  • 嗨,对不起,我无法让它工作......最后我用 MP3 格式的声音文件,因为我的时间不多了。

标签: c# audio stream fmod


【解决方案1】:

首先,我强烈建议您查看 FMOD 附带的“loadfrommemory”示例(它也有 C# 版本)。但是在这里回答你的问题:

  1. 您需要填充 FMOD.CREATESOUNDEXINFO 结构的一些成员:

    info.cbsize = Marshal.SizeOf(info); info.length = file.Length;

  2. 您需要告诉 FMOD 您正在使用 OPENMEMORY 标志提供内存数据:

    result = _fmod.createStream(file, MODE.CREATESTREAM | MODE.OPENMEMORY, ref info, ref _sound);

这应该就是您开始工作所需要的全部内容了。

【讨论】:

  • WOW
  • :D :D :D :D :D :D 你是神 :) 我以为我永远不会得到我需要为我的论文工作制作的音乐播放器!!! :) FMOD 很棒!!!
  • 嘿,谢谢,现在可以了,但我还有另一个问题,如果我只填充,比如说,10% 的缓冲区,然后开始播放,然后继续填充缓冲区,声音停止达到 10% 后播放。你知道为什么会这样吗?
  • 通过使用 MODE.OPENMEMORY,您告诉 FMOD 将 'file' 指向的数据复制到其内部缓冲区中。您可以使用 MODE.OPENMEMORY_POINT 但有更好的流式传输解决方案,例如用户创建的带有读取回调的声音。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
相关资源
最近更新 更多