如何改变PCM数据流的音量(实验失败)

2024-02-26

Solved

我的代码以前从未用于处理有符号值,因此字节 -> 短转换错误地处理了符号位。这样做正确地解决了问题。

问题是...

我正在尝试更改 PCM 数据流的音量。我可以从立体声文件中提取单通道数据,通过跳过/复制它们/插入零/等方式对样本进行各种愚蠢的实验效果,但我似乎找不到一种方法以任何方式修改实际样本值并获得合理的输出。

My attempts are really simple: https://i.stack.imgur.com/CDJzi.png https://i.stack.imgur.com/CDJzi.png

  1. 源音频数据
  2. 值 - 10000
  3. 值 + 10000
  4. 值 * 0.9
  5. 值 * 1.1

(值=-值工作正常——反转波浪,听起来是一样的)

执行此操作的代码同样简单(I/O 使用 0-65535 范围内的无符号值) <-- 这就是问题所在,读取正确签名的值解决了这个问题:

// NOTE: INVALID CODE
int sample = ...read unsigned 16 bit value from a stream...
sample -= 32768;
sample = (int)(sample * 0.9f);
sample += 32768;
...write unsigned 16 bit value to a stream...

// NOTE: VALID CODE
int sample = ...read *signed* 16 bit value from a stream...
sample = (int)(sample * 0.9f);
...write 16 bit value to a stream...

我正在努力让样本变得更安静。我想象减小振幅(样本 * 0.9)会产生更安静的文件,但上面的 4. 和 5. 显然都是无效的。有SO 上有类似的问题 https://stackoverflow.com/questions/1149092/how-do-i-attenuate-a-wav-file-by-a-given-decibel-valueMusiGenesis 说他使用“sample *= 0.75”类型的代码得到了正确的结果(是的,我确实尝试了除了 0.9 和 1.1 之外的其他值)。

The question is: am I doing something stupid or is the whole idea of multiplying by a constant wrong? I'd like the end result to be something like this: https://i.stack.imgur.com/Wspe9.png https://i.stack.imgur.com/Wspe9.png


您的第四次尝试绝对是正确的方法。假设您的样本范围以 0 为中心,则可以将每个样本乘以另一个值来更改信号的音量或增益。

但在这种情况下,我猜当你将 int 乘以 float 并转换回 int 时,幕后会发生一些有趣的事情。在不知道您使用的语言的情况下很难说,但这可能就是导致问题的原因。

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

如何改变PCM数据流的音量(实验失败) 的相关文章

  • PyAudio 输入溢出

    我正在尝试用 python 发出实时绘图声音 我需要从我的麦克风中获取数据块 使用 PyAudio 尝试使用 import pyaudio import wave import sys chunk 1024 FORMAT pyaudio p
  • 如何将网络音频流保存到文件(c++/java)

    是否有任何库或众所周知的方法来保存音频网络流 网络广播 mp3 流 以编程方式归档 您可以使用 libvlcVLC http www videolan org vlc 项目 这wiki http wiki videolan org Libv
  • Python 中的跨平台音频播放

    是否有用于音频播放的跨平台 Python 库 我的目标操作系统是 按重要性排序 Windows Linux 和 Mac OSX 需要支持的文件格式是 按重要性排序 MP3 OGG WAV 和 FLAC 这样的事情存在吗 我尝试了一些可用的
  • 实时获取 macOS 输出设备音频缓冲区

    我试图tapmacOS 上当前选择的输出音频设备 因此我基本上有一个直通侦听器 可以监视当前正在输出的音频流而不影响它 我想将这些数据实时复制到环形缓冲区 以便我可以单独对其进行操作 Apple 文档和 过时 SO 答案的结合令人困惑 我是
  • 比较两个不同的音频文件不起作用

    我想比较两个音频文件 例如 mp3 和 wav 我用musicg https code google com p musicg 通过指纹进行比较 Wave record1 new Wave music1 toString Wave reco
  • 将非规范化数字刷新为零

    我在网上搜索过 但没有结果 Xcode 和 Visual C 有没有办法将非规范化数字视为 0 我本以为 IDE 首选项中有一个选项可以打开此选项 但似乎找不到它 我正在做一些跨平台音频工作 需要停止某些处理器占用资源 Cheers 您正在
  • 如何对重新采样的音频数据进行双三次(或其他非线性)插值?

    我正在编写一些以不同速度播放 WAV 文件的代码 以便波形要么更慢 音调更低 要么更快 音调更高 我目前正在使用简单的线性插值 如下所示 int newlength int Math Round rawdata Length lengthM
  • 使用 DirectSound 向后读取声音

    是否可以使用 DirectSound 的托管版本向后读取声音 如果没有 是否有另一个库可以轻松实现 您可以使用 WaveFileReader 和 WaveFileWriter 类NAudio http www codeplex com na
  • Objective C - 音频延迟估计的互相关

    我想知道是否有人知道如何执行互相关两个音频信号之间iOS 我想将接收器 我正在从麦克风接收信号 处获得的 FFT 窗口与发射器处 正在播放音轨 处的 FFT 窗口对齐 即确保每个窗口的第一个样本 除了发射机的 同步 周期之外 也将是接收机的
  • 第一次播放声音时 AVAudioPlayer 启动缓慢

    我试图消除通过 iPhone 上的 AVAudioPlayer 播放 非常短 不到 2 秒 音频文件时的启动延迟 首先 代码 NSString audioFile NSString stringWithFormat caf NSBundle
  • Firefox createMediaStreamDestination 使用 rtc 的错误?

    我通过 rtc 流式传输音频并想要静音和取消静音音频 这有效 但没有增益控制 function stream getUserMedia stream console log Access granted to audio video pee
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 我们可以从 MFCC 系数中恢复音频吗?

    可以从 MFCC 系数中获取音频信号吗 另外 MFCC 系数是否有一个值范围 如果有的话 是什么 如果没有 如何将其归一化在 0 到 1 之间 我尝试使用以下 MATLAB 代码 http labrosa ee columbia edu m
  • 如何使用 javascript 从 Audio Element 录制音频

    我正在使用 HTML5 和 Javascript 制作录音机 并且不想包含任何第三方 API 我的第一步是使用以下命令创建音频检索器和播放器
  • 当通过音频采样的数据数量超过 AudioRecord 构造函数中设置的“bufferSizeInBytes”时会发生什么?

    public AudioRecord int audioSource int sampleRateInHz int channelConfig int audioFormat int bufferSizeInBytes 这是公共构造函数Au
  • 使用 Google Speech 时从 Google Cloud Storage 访问音频文件

    我使用下面的这段代码使用 Google Speech 成功解析了包含语音的 wav 文件 并将其转换为文本 但我想访问另一个 wav 文件 该文件已放置在 Google Cloud Storage 公开 上 而不是本地硬盘上 为什么不简单地
  • java中wav文件转换为字节数组

    我的项目是 阿塞拜疆语音的语音识别 我必须编写一个程序来转换wav文件到字节数组 如何将音频文件转换为byte 基本上如第一个答案中的片段所描述 但不是BufferedInputStream use AudioSystem getAudio
  • 将声音图形化地表示为波

    我创建了一个记录和播放声音的应用程序 我正在寻找一种显示简单波形的方法 记录声音的表示 不需要动画 只需一个简单的图表 如果可以选择波的子集也很好 当然更好 也播放该部分 总而言之 我正在寻找什么 一种以图形方式将录制的声音表示为波的方法
  • Mediaplayer 播放几次后停止播放

    我有一个按钮 按下它会播放一个随机声音剪辑 然后播放另一个声音剪辑 然后通过一个媒体播放器播放另一个声音剪辑 但是多次按下该按钮 15 20 次 后 所有音频都会停止 我在播放最后一个音频剪辑后释放媒体播放器 所以我不认为这是原因 有什么指
  • 音频html标签无法快进或快退控制

    我正在使用音频 html 标签从我的上传服务器加载音频 但我不知道为什么我的音频无法像往常一样循环 快进或快退控制 我的音频 标题 Accenpt Ranges bytes Connection Keep Alive Content Len

随机推荐

  • 数据库表和面向对象的类之间有关系吗?

    每次我编程时 我都会认识到类和表之间的这种关系 或者是我的想象 您可以为每个数据库表一个类或每个类一个表 即 tables customer products order classes customer products order ma
  • 如何将自定义参数传递给 Locust 测试类?

    我目前正在使用环境变量将自定义参数传递给我的负载测试 例如 我的测试类如下所示 from locust import HttpLocust TaskSet task import os class UserBehavior TaskSet
  • SwiftUI iOS14 GeometryReader 无效的框架尺寸

    我的 GeometryReader 在 iOS13 中工作正常 但现在在 iOS14 中出现线程问题 框架尺寸无效 负或非有限 我打印了读者应该返回的尺寸 看起来不错 该应用程序仍然基本上可以工作 但看起来有点奇怪 因为引入了一些填充 有谁
  • Node.js:如何为 prod 和 staging 设置不同的变量

    我正在使用 Express 并且需要为每个服务器 登台和生产 使用不同的凭据 我可以在 server coffee 文件中设置变量 但随后我需要访问不同文件中的这些变量 server coffee app configure product
  • 我可以在 EJS 中渲染多个源吗

    我尝试使用来自 2 个不同源的数据 但使用 EJS JS 和 Node 将它们呈现在同一个 HTML 页面上 这就是我正在尝试的 app set view engine ejs app get function req res res re
  • 无法建立新连接

    import requests url http ES search demo com document record search pretty true data query bool must text record document
  • 谷歌地图缩放看起来很奇怪

    我遇到了 Google 地图问题 除了缩放按钮似乎混乱之外 一切似乎都正常 Here is an image of the map 我猜有些东西是重叠的 但我不太确定 看来我来晚了 还是想分享一下我的想法 编辑库的核心 CSS 并不是一个好
  • 如何使用 GLFW 轮询 libdispatch 块中的事件?

    跟进答案如何将 GLUT 与 libdispatch 一起使用 https stackoverflow com q 12553563 64860 我现在改用 GLFW 以下代码设置一个窗口 设置一个计时器来轮询事件 并随着时间的推移将渲染更
  • 将值添加到空 Swift 数组

    我不知道如何在 Swift 中向空数组添加值 我尝试以两种不同的方式从空数组开始 var emptyArray Int emptyArray Int and var emptyArray 顺便问一下 这两种创建空数组的方式有什么区别 我尝试
  • 如何使用appledoc生成类似Apple的文档

    我正在阅读如何生成类似 Apple 的 HTML 文档的文章 here http gentlebytes com appledoc docs examples basic 我的问题是命令行的用途 我们如何将命令行和 appledoc xco
  • Outlook JS Addin - 撰写表单 - 如何检查事件/消息是否已保存?

    Outlook 加载项 office js 的撰写表单中是否有一种方法可以检查表单后面的对象 在我的例子中是日历事件 是否已保存 检查物品ID 如果未定义 则消息未存储 如果存在 则消息来自草稿 请参阅Office context mail
  • Process.GetProcesses 返回所有登录用户的进程?

    在允许多个用户同时登录一台机器的windows环境中 当我们调用Process GetProcesses 它是否返回进行此调用的登录用户的进程 还是返回所有登录用户的进程 我查看了 MSDN 页面 但找不到此信息 该函数返回本地计算机上运行
  • socket.error[Errno 99] 无法分配请求的地址

    昨天 我创建了一个名为的 python 脚本sniffer ip header decode py 但我遇到了以下错误 Traceback most recent call last File sniffer ip header decod
  • 通过 (...) 时避免参数重复

    考虑功能 f lt function x X mean c x X 我怎样才能自动 通过操纵f 更改签名f 这样它就可以与lapply 即不返回以下明显的错误 lapply X list 1 FUN f X 1 Error in lappl
  • XMLHttpRequest:浏览器支持 sendAsBinary?

    Firefox 是唯一支持 sendAsBinary 方法的吗 目前 我相信只有 FF3 支持此功能 尽管有一个解决方法 http code google com p chromium issues detail id 35705 for
  • Web 材质组件与 Angular Material 2 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 最近 MDL Material Design Lite 项目的后继项目推出Web 的材料组件 http
  • 如何在 React Native 中打开现有项目?

    我第一次使用 React Native 时 在我的 MacBook 上成功安装了用于 iOS 开发的所有内容 并且能够创建一个项目并在手机上查看它 然而 现在我回到它 我似乎无法弄清楚如何打开我现有的项目 我尝试过寻找指南 但我能找到的唯一
  • 在尾递归函数中使用管道时出现堆栈溢出异常

    我有一个简单的游戏循环实现 let gameLoop gamestate let rec innerLoop prev gamestate let now getTicks let delta now prev gamestate gt r
  • \363\353\377\377\377\177 是什么?

    gdb p char 0x7fffffffe9c8 16 0x7fffffffe9c8 363 353 377 377 377 177 它看起来不像ascii 也不像多字节 那是什么 这些都是octal http en wikipedia
  • 如何改变PCM数据流的音量(实验失败)

    Solved 我的代码以前从未用于处理有符号值 因此字节 gt 短转换错误地处理了符号位 这样做正确地解决了问题 问题是 我正在尝试更改 PCM 数据流的音量 我可以从立体声文件中提取单通道数据 通过跳过 复制它们 插入零 等方式对样本进行