OpenAL:alBufferData 返回 AL_INVALID_VALUE,即使输入变量 *看起来* 正常?

2023-12-31

因此,我正在构建一个线程 IMA ADPCM 解码器,将音频数据流式传输到 OpenAL(参见下面的简短描述)但我遇到了一些麻烦。

我的问题之一是有时我对 alBufferData 的调用:

alBufferData(*bufferID, format, pcmData, sizeInBytes, bitRate);

returns AL_INVALID_VALUE尽管如此,在检查参数时,它们看起来像这样:

bufferID='109770616', format='AL_FORMAT_STEREO16', dataPtr='109754188', sizeInBytes='8164'

有任何线索吗?发生这种情况时,实际播放的声音会有些卡顿,并且错误通常会连续发生约 10 次(在同一声音上)。当我重复启动相同的声音时,通常也会发生这种情况(例如,用轻机枪进行短时间连发射击时......;))

流媒体解码器模块的快速简化浏览

声音的播放方式:

  1. 触发播放声音。
  2. 一个 bufferSize 大小的音频被解码,其余的则排队等待进一步解码。
  3. OpenAL 被触发开始播放声音。

解码/流媒体循环

  1. 对于每个排队等待解码的声音,解码 bufferSize 大小的音频。
  2. 解码后的音频将添加到具有适当 bufferID 的 alBuffer(请参阅上面的调用)中。

如果还不算太晚,我会告诉您我在 BufferData 中遇到的类似问题,以下是我的修复方法。不过,请记住,我不知道您的线程程序的具体情况。

由于多种原因返回无效值,我所知道的原因是......
- 如果源已经分配了 bufferID,则将新缓冲区排队(到流媒体源)(因为如果设置缓冲区 ID,它将设置为静态)。如果是这样,请删除源属性中的 ID。
- 更改播放中的缓冲区格式。一旦源开始播放,您就无法更改任何缓冲区设置(fmt、采样率),除了缓冲区数据本身,即使它位于另一个排队的源上。

听起来您可能正在另一个线程中更改这些设置之一。

另一件可能导致爆音的事情是重放声音。再次调用 play 只是停止源,然后倒回当前缓冲区并从头开始播放。像这样演奏枪声听起来不像你想要的(我认为是分层的)。 2 个选项,将剩余的枪声混合到缓冲区中然后重播,但这可能不起作用。另一个万无一失的方法是使用多个来源并轮流在每次开火时调用哪些来源。

祝你的项目好运。

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

OpenAL:alBufferData 返回 AL_INVALID_VALUE,即使输入变量 *看起来* 正常? 的相关文章

  • python:如何改变音量?

    I used winsound Beep frequency duration 因为我想以指定的频率播放声音 现在 我需要更改这些声音的音量 我怎样才能做到这一点 我试图寻求帮助pyaudio but 如果您对外部库开放 您可以使用pydu
  • 使用 Google Speech 时从 Google Cloud Storage 访问音频文件

    我使用下面的这段代码使用 Google Speech 成功解析了包含语音的 wav 文件 并将其转换为文本 但我想访问另一个 wav 文件 该文件已放置在 Google Cloud Storage 公开 上 而不是本地硬盘上 为什么不简单地
  • 如何使用ffmpeg重叠和合并多个音频文件?

    我正在尝试将多个音频文件合并到一个文件中 但我可以使用以下命令来连接 而不是连接 ffmpeg v debug i file1 wav i file2 wav i file3 wav filter complex 0 0 concat n
  • WaveSurfer JS 无法在 Firefox 中为特定的 mp3 音频文件生成图表

    我们面临着在 Firefox 中使用 wavesurfer JS 对某些特定格式的 mp3 文件绘制音频可视化 图表 的问题 它总是给我们这样的错误 传递给decodeAudioData 的缓冲区包含未知的内容类型 但同一个文件在 chro
  • SoundEffect 和 SoundEffectInstance 类之间的区别

    就像有问题一样 我不明白使用这些类有什么区别 每个类别的优点和局限性是什么 我读了很多教程 但仍然无法决定我应该做什么 为了让事情更清楚 我得到了 AudioModule AudioEmitterComponent 和 AudioListe
  • 在 Android 中通过蓝牙接收音频

    我想创建一个能够接收音频流的 Android 应用程序 我想过使用 A2DP 配置文件 但似乎 Android 不支持 A2DP 接收器 看起来有很多人正在寻找这个问题的解决方案 但是接收普通的比特流 然后在应用程序中将数据转换为音频呢 我
  • Azure 媒体服务仅限音频

    我们已开始使用 Azure 媒体服务 AMS 来编码 加密和托管我们的视频 MP4 效果良好 然而 除了视频之外 我们还有 MP3 音频文件 由于我们已经在使用 AMS 因此将它们放在这里也是有意义的 但我们遇到了问题 当我们尝试从门户进行
  • “初始化 MCI 时出现问题”播放声音问题

    我正在尝试使用 Playsound 播放代码文件夹中的文件 但是每次运行代码时 它似乎都能够调用该文件 但我总是收到以下输出 playsound PlaysoundException Error 277 for command open p
  • 在下载整个文件之前是否可以知道 MP3 的持续时间?

    这是一个关于MP3文件格式的问题 我一直在寻找一种获得 MP3 持续时间的方法 由于我使用 JLayer SPI 来解码 MP3 我发现在音频源是文件的情况下这是可能的 AudioFileFormat fileFormat AudioSys
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Javascript 播放声音性能重吗?

    我正在用 Javascript 制作一个简单的游戏 当一个物体与墙壁碰撞时 它会发出 砰 的声音 声音的响度取决于物体的速度 速度越高 gt 声音越大 播放功能 playSound function id vol ID of the sou
  • 如何以编程方式播放 16 位 pcm 数组 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我有一个包含 16 位 pcm 值的短 数组 我希望能够在不添加任何标题 也不将任何文件保存到内存的情况下播放它 我知道我可能需要一个提供
  • 如何让 JavaScript 发出蜂鸣声?

    我希望我的网页在用户超出我的最大字符限制时发出蜂鸣声
  • C#:将音频文件从服务器流式传输到客户端

    我目前正在编写一个应用程序 该应用程序将允许用户安装某种形式的应用程序 可能是 Windows 服务 该应用程序将在其 PC 上打开一个端口 并在硬盘上指定一个特定的目的地 然后能够流式传输 mp3 文件 然后 我将有另一个应用程序 该应用
  • 是否可以通过 Android 应用程序来录音?

    我是一名开发人员 希望创建一个 Android 应用程序来记录电话 这是出于我个人的需要 为了我自己的目的和记录而记录电话 是否有可能做到这一点 是否可以访问麦克风以及通过扬声器发出的声音 我对 Android 开发有点陌生 所以请耐心等待
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • 我们可以使用 C# 录制发送到扬声器的声音吗

    我有一个软件 SoundTap Streaming Audio Recorder 它记录发送到扬声器的任何音频 无论流是来自网络还是来自某些文件或麦克风 我可以在桌面应用程序中制作这样的应用程序 以便我可以录制发送到扬声器的流 无论来源如何
  • 如何用Java捕获音频数据

    我想访问我的麦克风用 Java 录制的音频数据 我该怎么做呢 我的目标是保存录制的音频数据并同时向用户播放 如果您不需要 JMF 中的任何附加功能 我会避免使用它 因为开发已经停止 最后一个版本是 2004 年 它与 Java 6 存在兼容
  • 谷歌colab录音,如何实现更精确的方式告诉用户开始对着麦克风说话

    我正在尝试创建一个为机器学习项目录制音频的程序 我想使用 google colab 这样人们就不必在他们的系统上安装或运行任何东西 我在网上找到了这个录制和播放音频的示例 单元格 1 包含用于录制音频的 js 代码和用于将其转换为字节对象的
  • Java 原始音频输出

    只是想知道Java中是否有像模块这样的库皮奥迪埃 http pyaudiere org 在 Python 中 这仅允许您创建音调并播放它们 如以下示例 Python 代码 device audiere open device tone de

随机推荐

  • 当控制权返回操作系统时,操作系统是否会假设有关被调用者保存的寄存器的任何信息?

    当控制权返回操作系统时 操作系统是否会假设有关被调用者保存的寄存器的任何信息 我想知道操作系统 例如 Windows 是否假设有关被调用者保存的寄存器的任何信息 例如ebp esi edi 换句话说 当控制权转移回操作系统时 操作系统是否需
  • 动态地将样式表插入 IFRAME

    我做了以下事情 document ready function portal load function portal contents find head append 这工作正常 但问题是每当我更新样式表时 更新的样式都不会应用在 IF
  • 在 C 和 C++ 中,术语“空循环”到底指什么?

    是不是这样的事情 for statements 或者是这样的 for initialisation condition updation 我正在参考各种来源寻找答案 您的第一个案例 for带有空表达式 是一个infinite循环和第二个循环
  • 在 JCalendar 中禁用过去的日期和 2 周后的日期

    我想禁用过去的日期和从现在起 2 周后的日期JCalendar 我已经有这个代码 jDateChooser1 getJCalendar setMinSelectableDate new Date JTextFieldDateEditor j
  • 如何在表单验证失败时提供我选择的消息

    我正在使用 spring mvc 3 0 这是我的控制器类 Controller RequestMapping author public class AuthorController Autowired private IAuthorDa
  • 匿名闭包不能在具有显式参数的闭包内使用

    smb 能否解释一下问题是什么 我应该如何修改我的代码 我需要过滤CKRecords 返回自CloudKit override func tableView tableView UITableView moveRowAtIndexPath
  • 简单的 MIPS 汇编 - 返回斐波那契数

    我正在尝试创建一个简单的汇编代码 它接受输入 N 并返回第 N 个斐波那契数 例如 如果您输入 2 它应该输出 1 如果您输入 3 它应该输出 2 我的代码不会抛出任何错误 但是在输入数字后它会返回一些奇怪的东西 如果输入 1 则返回 26
  • oracle sql 中的迄今为止的字符

    下面的SQL有什么错误 select to Date substr 2 22 2015 9 20 06 AM 1 9 mm dd yyyy DD MON YY from dual 我收到以下错误 ORA 12702 SQL 函数中使用的 N
  • Numpy 矩阵减法混乱

    我对我意外使用两个 numpy 矩阵执行的操作的结果有疑问 后来修复 假设我有一个列向量 A 1 2 3 和一个行向量 B 1 1 1 据我所知 没有正确的数学方法来 减去 这两个向量 即这应该是一个未定义的操作 然而 当我这样做时 我得到
  • 如何让脚本查看电子表格中的某个工作表?

    我正在尝试从电子表格发送电子邮件 该脚本从电子表格内的工作表中获取电子邮件和电子邮件正文 当这张表是第一张表时 脚本工作正常 但是 由于我不会详细说明的原因 我需要先使用另一张纸 我尝试过使用 var ss SpreadsheetApp g
  • 使用 gcloud 和 kubectl 切换 GCP 帐户和上下文不起作用

    我有 2 个 Gmail 帐户 每个帐户都与 2 个独立的 GCP 帐户关联 要从命令行切换帐户 我在过去两周左右的时间里一直在使用这两个命令 gcloud config configurations activate ACCT NAME
  • OS X 是否有相当于 lsusb 的工具

    这个问题似乎遍布谷歌 但答案都指向使用 System Profiler 这很好 但是使用 System Profiler 您得到的只是如下所示的内容 DasKeyboard Product ID 0x1919 Vendor ID 0x04d
  • Bootstrap 3 / CSS:如何在面板标题中正确垂直对齐

    我使用 Bootstrap 3 创建具有如下结构的面板 并且希望垂直对齐面板标题内的跨度 而不扩展面板标题的默认高度 我尝试了不同的方法 添加class clearfix 添加style vertical align middle impo
  • 规避 sed 反向引用限制 \1 到 \9

    sed 手册明确指出 可用于替换中的替换字符串的可用反向引用编号为 1 到 9 我正在尝试解析一个包含 10 个字段的日志文件 我已经为其形成了正则表达式 但第十个匹配项 以及之后的任何内容 无法访问 有没有人有一种优雅的方法来规避 KSH
  • 如何获取sql server中可能包含特殊字符的列

    我遇到的情况是名称列包含许多特殊字符 我有一个解决方案 我喜欢像这样提到的所有特殊字符 但我认为这并不是解决问题的好办法 有没有一种方法可以在 SQL 查询本身中使用正则表达式来检查名称列是否包含特殊字符 特殊字符是除了字母和数字之外的所有
  • 使用 bash 逐个读取 zip 文件中的文件

    我想打开 zip 文件中的文件并读取它们 在这个 zip 文件中 我有许多 gz 文件 例如 a dat gz b dat gz 等 到目前为止我的代码 for i in unzip p sample zip do for line in
  • 基于 OSI 模型,数据包如何通过 Internet 从一台计算机传输到另一台计算机

    我熟悉基本的 OSI 模型 但我总是感到困惑 数据包如何通过 Internet 从一台机器传输到另一台机器以及哪些 OSI 层会出现 例如 对于以下拓扑 机器A交换机路由器路由器路由器交换机机器B 其中多个路由器代表互联网 当机器 A 向机
  • 如何让 Maven 使用与 JDK 中不同的 JAXB 库

    我正在使用 java 1 6 0 14 其中包含注释的实现javax xml bind annotation XmlElement 然而JDK中的仅适用于Method和Field 我发现 jaxb api jar 版本 2 2 3 也允许在
  • asp web api补丁实现

    假设我有这个模型 public partial class Todo public int id get set public string content get set public bool done get set 我将其作为 js
  • OpenAL:alBufferData 返回 AL_INVALID_VALUE,即使输入变量 *看起来* 正常?

    因此 我正在构建一个线程 IMA ADPCM 解码器 将音频数据流式传输到 OpenAL 参见下面的简短描述 但我遇到了一些麻烦 我的问题之一是有时我对 alBufferData 的调用 alBufferData bufferID form