修改音频样本缓冲区的音量增益

2024-02-03

我想增加语音数据缓冲区的音量。重点是我正在使用 DirectSound,并且我有一个主要缓冲区和一个辅助缓冲区 - 所有流混合都是手动完成的。在语音聊天中,所有参与者都可以拥有独立的音量级别。我将每个流数据乘以一个值(增益)并将其求和到一个缓冲区。一切工作正常,但当我尝试将数据乘以大于 1.0f 的值时 - 我听到一些削波或其他声音。

我尝试过使用 Audacity 效果压缩器,但这无助于减少奇怪的噪音。

也许我应该以其他方式修改增益?或者只是使用另一种后处理算法?

更新:哇,我刚刚发现了有趣的事情!我在增加音量之前和之后都转储了音频。

Here is the pic Clipped audio

对于质量感到抱歉 - 我认为这就是声音应该出现的样子(我自己画了红线)。看起来值确实超出了示例数据类型。但我不明白为什么?我的样本缓冲区是字节,但我只能通过短指针访问它。它已签名,但即使 *ptr 约为 15-20,000 时也会发生剪裁。


对于每个样本 - 将其转换为某种更大的数据类型 - 如果您有 16 位有符号样本,它们最初适合 SHORT - 从流中提取它,然后转换为本地双精度,然后乘法,然后 CLIP,然后转换回 SHORT。

它必须这样工作......

如果需要,我什至可以提供代码示例。

EDIT:

你的图片是确切的证据,表明你在乘法之前没有扩展到更大的类型 - 你无法“捕获”SHORT 上的剪切条件,因为它会自动换行。

short* sampleBuffer;
...
short sample=*sampleBuffer;
double dsample=(double)sample * gain;
if (dsample>32767.0) {dsample=32767.0;}
if (dsample<-32768.0) {dsample=-32768.0;}
*sampleBuffer=(short)dsample;
sampleBuffer++;

还有一个编辑:

如果您有多个声音 - 首先将它们全部加倍 - 然后增益每个声音 - 然后添加它们 - 最后一步剪辑它们。

又一个编辑(+1 激励了我):

如果你有 STEREO,同样的东西也可以工作,只需计算所有样本 x2,即

number of shorts = number of samples * 2.

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

修改音频样本缓冲区的音量增益 的相关文章

  • 金特 + XNA (C#)

    是否可以使用jint http jint codeplex com操作使用 XNA C 创建的 3D 环境 并向该环境添加功能 再次使用 jint 作为 Jint 的贡献者 我会推荐你Jint http jint codeplex com
  • 在 C# 中使用“using”关键字避免多次处置的最佳实践

    当变量是 IDisposable 时 我们有using关键字来管理处置 但是如果我们在方法中返回值怎么办 using twice StringContent stringToStringContent string str using St
  • 如何使用 ASP.NET MVC 编辑多选列表?

    我想编辑一个如下所示的对象 我希望用 UsersGrossList 中的一个或多个用户填充 UsersSelectedList 使用 mvc 中的标准编辑视图 我只得到映射的字符串和布尔值 下面未显示 我在 google 上找到的许多示例都
  • 元组在 VS2012 中如何工作?

    Visual Studio 2012 功能 tuples但不是可变参数模板 这是如何完成的 如何在不使用可变模板的情况下实现元组 简而言之 微软做了与之前在 NET 中实现类似元组的数据类型完全相同的事情 创建许多版本 每个版本都有固定数量
  • 锁定 ASP.NET 应用程序变量

    我在 ASP NET 应用程序中使用第三方 Web 服务 对第 3 方 Web 服务的调用必须同步 但 ASP NET 显然是多线程的 并且可能会发出多个页面请求 从而导致对第 3 方 Web 服务的同时调用 对 Web 服务的调用封装在自
  • 叮当错误?命名空间模板类的朋友

    以下代码在 clang 下无法编译 但在 gcc 和 VS 下可以编译 template
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 在 ASP.NET MVC 中将模型从视图传递到控制器

    我正在 ASP NET MVC 中开发我的第一个应用程序 但遇到了一个我无法解决的问题 即使在阅读了整个互联网之后也是如此 因此 我有几个使用视图模型创建的视图 它们是报告 这些视图模型是根据用户选择标准填充的 我正在尝试构建一种接受模型并
  • C++ 将联合强制转换为其成员类型之一

    以下对我来说似乎完全符合逻辑 但不是有效的 C 联合不能隐式转换为其成员类型之一 有人知道为什么不这样做的充分理由吗 union u int i char c function f int i int main u v v i 6 f v
  • 静态类与类的实例

    我有一个静态类 用于访问我的公共属性 整个应用程序的全局属性 和我在应用程序运行期间使用的方法 例如 我在静态类中设置了一些属性 并且在应用程序运行时我可以从属性中获取值 但我可以使用单例模式创建非静态类并以相同的方式使用它 问题 对于我的
  • 如何在win32中使用GetSaveFileName保存文件?

    我编写此代码是为了获取 fileName 来保存我的文件 include stdafx h include
  • 在 C# 中何时使用 ArrayList 而不是 array[]?

    我经常使用一个ArrayList而不是 正常 array 当我使用时 我感觉好像我在作弊 或懒惰 ArrayList 什么时候可以使用ArrayList在数组上 数组是强类型的 并且可以很好地用作参数 如果您知道集合的长度并且它是固定的 则
  • 你好,我最近正在开发我的新游戏,我遇到了*无限跳跃*的问题

    所以基本上当我按跳跃 空格键时我会跳跃但是如果我连续按空格键它 只是跳啊跳啊跳等等 我不想要我只想它跳一次 code if Input GetKeyDown space isGrounded velocity y Mathf Sqrt ju
  • Xamarin - SignalR 挂在连接上

    我正在尝试将我的 Xamarin 应用程序连接到托管在 Azure 上的 SignalR 后端 我遇到的问题是每次我在 HubConnection 上调用 StartAsync 时 它都会挂起客户端并且请求永远不会完成 我尝试通过应用程序进
  • 如何使用 CSI.exe 脚本参数

    当你运行csi exe 安装了 Visual Studio 2015 update 2 您将得到以下语法 Microsoft R Visual C Interactive Compiler version 1 2 0 51106 Copyr
  • 从 NumPy 数组到 Mat 的 C++ 转换 (OpenCV)

    我正在围绕 ArUco 增强现实库 基于 OpenCV 编写一个薄包装器 我试图构建的界面非常简单 Python 将图像传递给 C 代码 C 代码检测标记并将其位置和其他信息作为字典元组返回给 Python 但是 我不知道如何在 Pytho
  • Linq.Select() 中的嵌套表达式方法调用

    I use Select i gt new T 每次手动点击数据库后将我的实体对象转换为 DTO 对象 以下是一些示例实体和 DTOS 用户实体 public partial class User public int Id get set
  • 将 Swagger 与命名空间版本的 WebApi 结合使用

    我已经找到了如何使用基于名称空间的 WebAPI 版本这个班 https aspnet codeplex com SourceControl changeset view dd207952fa86 Samples WebApi Namesp
  • 将 char 绑定到枚举类型

    我有一段与此非常相似的代码 class someclass public enum Section START MID END vector section Full void ex for int i 0 i section
  • 为什么表达式 a = a + b - ( b = a ) 在 C++ 中给出序列点警告?

    以下是测试代码 int main int a 3 int b 4 a a b b a cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n return 0 编译此命令会出现以下警告 gt g

随机推荐

  • 如何使用量角器或硒测试@media print?

    我已经在我的网站上实现和打印功能 我想通过量角器 硒来测试它 有任何方法可以 应用 下面的样式 media print测试期间 我只看到一个相关的question https stackoverflow com questions 3341
  • jQuery 验证插件中组的自定义错误消息

    我正在使用 jQuery 验证插件 并且我已经开始将一些字段分组在一起 groups fullName myFirstName myLastName 我还将这些字段添加到规则部分 以便对它们进行验证 rules myFirstName re
  • WCF 客户端由于回调而死锁,即使回调 IsOneWay 也是如此

    WCF 新手 我有一个客户端在调用 WCF 服务时陷入死锁 该服务将在调用时调用对客户端的回调 该回调被标记为 IsOneWay 我已确认该服务不会阻塞回调 然后 客户端立即再次调用相同的服务 在紧密循环中 而无需为回调提供服务 然后客户端
  • Jquery hasClass 用于多个类

    我有 tr valign top th class chkCol fixed checkbox th th class fixed head th tr 现在在 Jquery 中我调用一个类似的函数 if this hasClass fix
  • 使用代理而不是通过 htaccess rewriteRule 进行重定向

    我正在开发一个 web 应用程序 对于静态文件 我只是使用 apachelocalhost当后端位于运行于以下位置的 couchdb 实例上时localhost 5984 Web 应用程序始终与后端的文件进行交互 那么当尝试在 apache
  • 自定义 AppDomain 和 PrivateBinPath

    我使用 c 4 0 和控制台应用程序只是为了测试 以下代码确实给出了异常 AppDomainSetup appSetup new AppDomainSetup ApplicationName PluginsDomain Applicatio
  • 来自 os.listdir() 的非字母数字列表顺序

    我经常使用 python 来处理数据目录 最近 我注意到列表的默认顺序已更改为几乎无意义的内容 例如 如果我位于包含以下子目录的当前目录中 run01 run02 run19 run20 然后我通过以下命令生成一个列表 dir os lis
  • SWT 应用程序中 com.ibm.icu.text.BreakDictionary.main 中的 ArrayIndexOutOfBoundsException

    我正进入 状态 Exception in thread main java lang ArrayIndexOutOfBoundsException 0 at com ibm icu text BreakDictionary main Bre
  • 在 AWS Elastic Beanstalk 上使用 Django 自动设置 Apache Solr - Oscar

    我需要确保阿帕奇 索尔 https lucene apache org solr 与我的 django oscar 应用程序一起安装 并且一直在使用这些指示 http django oscar readthedocs org en late
  • 根据输入值设置 jQuery 日期范围选择器的日期

    https github com longbill jquery date range picker https github com longbill jquery date range picker 我一切都工作得很好 但我似乎无法让选
  • 如何在启动操作系统之前进行一些安全验证?

    我有一个可启动闪存盘 其中包含定制的 Ubunto 我想将闪存盘传递给未知的人 但它存在一些安全问题 我想确保未知的人无法更改闪存盘内容 因此 我想计算闪存内容的哈希值并在每次启动时验证它 并在验证失败或哈希不匹配时防止启动操作系统 为此
  • 如何更改Android SeekBar轨道开始位置?

    我想设置SeekBars的轨道起始位置 因此它不会从搜索栏的左侧开始 而是形成任意位置 这是一张 Photoshop 图像 它应该是这样的 http i imgur com QCMEu png https i imgur com QCMEu
  • Cim_PhysicalMemory 和 Win32_ComputerSystem 返回不同的内存量

    我正在尝试编写一个 PowerShell 脚本来显示服务器 具有 512 GB 的物理服务器 中安装的内存量 我尝试了三种不同的方法 得到了不同的结果 Win32 PhysicalMemory https msdn microsoft co
  • 如何将 tabs.executeScript 与 React 一起使用

    在我的一个组件中 当加载该组件时 我希望我的扩展将脚本注入到运行该扩展的当前选项卡中 该脚本本质上获取源代码并将其保存为字符串 所以 在我的componentWillMount我尝试通过以下方式注入脚本 componentWillMount
  • 解析宏变量名称中包含 %eval 的宏,SAS

    这是一个玩具示例 旨在帮助解决我遇到的更大问题 它本质上涉及在引用更大的宏变量名称时使用 eval 宏 我创建了一个宏变量 x 2 它使用循环 it 的值 从最终输出可以看出该变量已成功创建 但是我只能将其放入日志而不评估 it 1 这当使
  • 是否有贝叶斯信念网络框架“Infer.NET”的 java 替代品?

    java 是否可以替代贝叶斯信念网络框架 Infer NET 如果它具有可扩展性 大型数据集的在线学习 良好的支持 自 2010 年以来最新更新 开源且易于编写网络结构 则更好 所有功能均来自 Infer NET 你也许还应该考虑Samia
  • 应用程序最小化时的 Electron win.flashFrame() 方法

    win flashFrame 使托盘图标闪烁 直到单击该图标并且应用程序窗口再次回到焦点 在 Windows 10 上 但是 如果应用程序最小化 闪烁会在几秒钟后自动结束 甚至无需单击图标 我怎样才能防止这种情况发生 如果窗口最小化 用户将
  • 对对象列表进行排序的算法

    假设您有一个对象列表 用户在工作时几乎使用所有对象 如何对对象列表进行排序 以便列表适应用户最常使用的顺序 您可以使用什么算法来实现这一点 编辑 许多答案建议计算对象的使用次数 这是行不通的 因为所有对象都使用相同的数量 只是顺序不同 在你
  • 在 iPhone UITextView 上打字(如 Twitter)时建议 # 个标签

    我正在构建一个使用主题标签的应用程序 例如 Twitter 或 Tweetbot 当您输入消息时 如果您输入主题标签符号 我会建议与您当前输入的标签相匹配的标签 我已经弄清楚如何让 UITableView 出现并显示主题标签列表 但我不知道
  • 修改音频样本缓冲区的音量增益

    我想增加语音数据缓冲区的音量 重点是我正在使用 DirectSound 并且我有一个主要缓冲区和一个辅助缓冲区 所有流混合都是手动完成的 在语音聊天中 所有参与者都可以拥有独立的音量级别 我将每个流数据乘以一个值 增益 并将其求和到一个缓冲