如何将音频流式传输到 OpenAL Sources 中?

2024-01-18

我刚刚开始使用 OpenAL。

我已成功将 WAV 文件加载到其中,并成功播放它们。这很容易。

现在,我需要能够将音乐流式传输到 OpenAL 中,而不是将整个文件加载到其中。虽然这对于声音效果等有好处,但正如您可能知道的那样,对于音乐来说可能非常危险。

问题是,我似乎无法在谷歌上找到与此相关的任何内容。虽然我找到了一些与流 OGG 文件相关的示例,但我更愿意制作一个支持所有音乐文件的系统。

据我了解,OpenAL 应该为此内置函数。但我找不到他们。

所以,我的问题是,如何将音频流式传输到 OpenAL 的缓冲区中,同时删除已播放的部分并导入尚未播放的部分?

如果这是一个无知的问题,我深表歉意。


Use alSourceQueueBuffers()对要由源直接连续播放的缓冲区进行排队。在播放过程中,使用alGetSourcei()和这个结合AL_BUFFERS_PROCESSED获取已完全播放并准备重用的缓冲区数量。alSourceUnqueueBuffers()将为您将这些缓冲区从队列中弹出,以便您可以用新数据填充它们并再次将它们排队。

基本上,您将在一个线程中循环:休眠一小段时间,测试新的可用缓冲区,用数据填充它们,将它们排队并再次休眠。

SFML 在其中实现了这一点声音流类 https://github.com/LaurentGomila/SFML/blob/master/src/SFML/Audio/SoundStream.cpp(C++),喜欢的可以看一下作为参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将音频流式传输到 OpenAL Sources 中? 的相关文章

随机推荐

  • mysql 按字母顺序排列

    我正在尝试按字母顺序对 mysql 数据进行排序 一个 乙 C D 当我点击 B 时 此查询运行 按 b 从用户顺序中选择名称 但结果显示以 a 或 c 或 d 开头的所有记录 我想显示仅以 b 开头的记录 感谢帮助 我想显示仅以 b 开头
  • “git revert”中的“他们”和“我们”是谁?

    我无法理解谁us and them在这些冲突中git revert 所以我真的不知道这里发生了什么 git revert some commit hash Then git status显示以下冲突 deleted by them path
  • 编写编译器……什么是对的,什么是错的? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用干净或自定义配置文件启动 VSC

    通常 VSC 将设置和用户数据存储在 appdata Code 以及扩展名 userprofile vscode 有没有办法告诉新实例加载其他一些配置文件或从 空白画布 开始 就像您可以使用 Firefox 一样 no remote pro
  • 使用 SFML 使自定义类型可绘制

    我最近开始使用 SFML 我决定作为一种学习经验 我将使用它制作一个 pong 克隆 我定义了一个名为Ball绘制使用 SFML 绘制RectangleShape 当我尝试使用以下命令将这个自定义类型绘制到屏幕上时window draw 但
  • Rust 基准测试已优化

    我正在尝试对从 Rust 哈希映射中获取密钥进行基准测试 我有以下基准 bench fn rust get b mut Bencher let hash keys get random hash
  • Qt 去除边距

    我目前正在使用 QMainWindow 小部件 我想删除内部小部件周围的边距 我成功删除了窗口边框的边距 但没有删除窗口内小部件的边距 这是我的代码 例如 this gt mainWidget new QWidget this this g
  • 如何使用Javascript切片提取字符串的第一个和最后一个字母?

    如何使用 JavaScriptslice提取字符串的第一个和最后一个字母 Eg Hello World 我需要的结果是 dH 以下是我的 jsfiddle http jsfiddle net vSAs8 http jsfiddle net
  • log4net AdoNetAppender 截断消息文本

    我遇到一个问题 无论我做什么 我的消息字段都会被截断为大约 42k 这是一个简短的片段来说明我的配置
  • R - 匹配不同长度矩阵的行和列

    我现在的问题如下 我有一个有向 1 模式边缘列表 代表在某一年参与联合项目的演员对 可能如下所示 projektleader projectpartner year A B 2005 A C 2000 B A 2002 现在我只需要某一特定
  • 如何将 UITextField 中用作 leftView 的 UILabel 与 textField 的文本垂直对齐?

    我正在使用一个UILabel as the leftView of a UITextField 问题是文本字段的文本高于标签的文本 这是我到目前为止使用过的代码 UILabel startsWith UILabel alloc init s
  • React-Navigation:使用/更改带有 Redux 状态的标题标题

    是否可以访问 React Navigation 的标题标题中的整个 Redux 状态 The 官方文档 https reactnavigation org docs intro headers表示导航对应的状态是可访问的 static na
  • 交叉编译中的CMake CMAKE_AUTOMOC

    我有以下问题 我尝试使用 CMake 中构建的本机机制进行交叉编译 我准备了以下 toolchain cmake 文件 set CMAKE SYSTEM NAME Linux set CMAKE SYSTEM PROCESSOR arm s
  • 具有复选框行为的自定义列表视图,如 Gmail 应用程序

    我在这里阅读了很多有关列表视图和复选框的帖子 他们中的很多人都使用 CheckedTextView 或扩展它 我想实现一个带有复选框行为的自定义列表视图 就像在 android 邮件应用程序 Gingerbread ICS 上一样 只有复选
  • spring security 2.0.7 和 spring 2.5 的登录表单问题

    您好 我正在尝试在我的应用程序上放置一个登录页面 我的login jsp是
  • 弱引用的其他用途?

    我知道弱引用是一个很好的选择记忆 http en wikipedia org wiki Memoization潜在的大量数据 以及维基百科关于弱引用的文章 http en wikipedia org wiki Weak reference仅
  • 如何写入来自 Firebase 的数据以快速存储?

    首先 我正在使用 React Native 我正在从 Firebase 获取数据并希望快速写入存储 通过 Redux 但这不起作用 您可以在下面找到我的所有代码 功能 async getTumData uid const selectedG
  • 如果会话因无活动而过期,则注销并重定向到登录页面

    我正在尝试使用 Flask 更新一个网站 其中用户拥有帐户并且能够登录 如果超过 10 分钟没有活动 我想让用户会话过期并注销 并将用户重定向到登录页面 我想更新它 app before request下面是我的代码 如何检查登录时间并检查
  • 无法使用mockito模拟私有方法

    我正在尝试使用 power mockito 来模拟私有方法 读完这篇文章后我得到了一些想法 并且遵循了相同的结构 example https stackoverflow com questions 28121177 mock private
  • 如何将音频流式传输到 OpenAL Sources 中?

    我刚刚开始使用 OpenAL 我已成功将 WAV 文件加载到其中 并成功播放它们 这很容易 现在 我需要能够将音乐流式传输到 OpenAL 中 而不是将整个文件加载到其中 虽然这对于声音效果等有好处 但正如您可能知道的那样 对于音乐来说可能