按频率对波形进行颜色编码[关闭]

2024-04-17

我想按本地频率内容显示每个部分中颜色编码的音频波形。基本上与 Serato/Traktor 或任何其他 DJ 软件的功能完全相同,您可以查看声音并了解其中的频率。它看起来像这样:

所以本质上,我将进行 FFT 来获取我指定的任何 bin 宽度的频率,但是任何人都可以向我推荐一些在实际绘制它时有用的代码(最好是 c)吗?


这次我们来尝试一下真正的答案。 :-)

这个问题太复杂了,无法用这个空间中的所有代码给出完整的解决方案,但我将使用伪代码并假设您有一些库可以对样本块进行窗口化并计算 FFT。

这类似于构建波形显示。当您构建波形显示时,您可以确定在当前缩放级别下“适合”单个水平像素的样本数量(给定 X 滚动位置),计算该段的最小和最大样本值,并为您提供该波形像素的最小/最大 Y 位置。 (这实际上有点简化,我当时已经编写了波形渲染代码,但这是一个很好的近似值。)

要使用频率对波进行着色,您需要使用具有较小箱的短时 FFT 来预处理波数据,并为每个箱确定主要频率是什么,然后将其映射到光谱上从红色到紫色的颜色。

假设您的音频样本位于名为samples,这是伪代码。

// sample rate
float fS = 44100;

// size of frame for analysis, you may want to play with this 
float frameMsec = 10;

// samples in a frame
int frameSamples = (int)(fS / (frameMsec * 1000));

// how much overlap each frame, you may want to play with this one too
int overlapSamples = (frameSamples / 2); 

// number of samples in the sound file
int numSamples = ...; 

// input array of samples
float inSamples[] = ...;

// color to use for each frame
RGB outColors[] = new float[(numSamples / frameOverlap) + 1]; 

// scratch buffers
float tmpWindow[frameSamples];
float tmpFFT[frameSamples];

// helper function to apply a windowing function to a frame of samples
void calcWindow(float* dst, const float* src, int size);

// helper function to compute FFT
void fft(float* dst, const float* src, int size);

// find the index of array element with the highest absolute value
// probably want to take some kind of moving average of buf[i]^2
// and return the maximum found
int maxFreqIndex(const float* buf, int size);

// map a frequency to a color, red = lower freq -> violet = high freq
RGB freqToColor(int i);

for (int i = 0, outptr = 0; i < numSamples; i += frameOverlap, outptr++)
{
    // window another frame for FFT
    calcWindow(tmpWindow, &inSamples[i], frameSamples);

    // compute the FFT on the next frame
    fft(tmpFFT, tmpWindow, frameSamples);

    // which frequency is the highest?
    int freqIndex = maxFreqIndex(tmpFFT, frameSamples);

    // map to color
    outColor[outptr] = freqToColor(freqIndex);
}

这将为您提供一个 RGB 数组,您可以在放大和缩小波形显示时放大和缩小该数组。当您缩放时,您可能希望对相邻帧的 RGB 值进行平均,以便为您提供整体视图。

我希望这有帮助。

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

按频率对波形进行颜色编码[关闭] 的相关文章

  • 在 NSView 中重复背景图像

    我正在尝试在 NSView 中绘制重复的背景图像 到目前为止我已经有了 INIT id initWithFrame NSRect frame if self super initWithFrame frame self background
  • DrawingPanel中刷新图片扩展了JPanel

    我必须在软件底部加载一个小图标 只是有一个加载 确定 错误图标 正如 http www article kth se lindsey JavaCourse Book Part1 Java Chapter06 images html 上的建议
  • 如何在android中录制视频的同时在视频上绘图,并保存视频和绘图?

    我正在尝试开发一款应用程序 允许我在录制视频时在视频上绘图 然后将录制内容和视频保存在一个 mp4 文件中以供以后使用 另外 我想使用camera2库 特别是我需要我的应用程序在高于API 21的设备上运行 并且我总是避免使用已弃用的库 我
  • 使 PlaySound 非阻塞

    我一直在测试声音 我注意到PlaySound正在阻塞 即它会等到声音播放完毕才返回 include
  • 如何在触摸事件上移动画布中的 ShapeDrawable

    我正在尝试在 Android 中实现绘图应用程序 用户应该能够选择和移动绘制的形状 目前我已经在绘图画布上静态绘制了一些矩形和文本 View mDrawingCanvas new View mContext ShapeDrawable re
  • 比较两个不同的音频文件不起作用

    我想比较两个音频文件 例如 mp3 和 wav 我用musicg https code google com p musicg 通过指纹进行比较 Wave record1 new Wave music1 toString Wave reco
  • 如何在多个 HTML 页面上播放背景音频?

    是否有解决方案可以让背景音频 音乐在网站上的多个页面上播放 而无需在每个页面加载时重新启动 该网站当前使用框架集 但我正在寻找替代方案 如果不让整个网站都 AJAX 我认为框架是唯一的方法 如果您需要的话 这里有一个关于制作 ajax 站点
  • Mojave/macOS 10.14.0:[AVPlayerItem 持续时间] 始终不确定

    我正在尝试使用以下代码读取本地存储的音频文件的持续时间 import
  • 使用 Javascript 播放音频元素 (html5)

    我正在尝试弄清楚如何触发从 javascript 播放音频 我得到了一些 html 看起来像 div class audio foo div
  • 如何使用 PJSIP 为 iOS 客户端应用程序捕获并翻译其他语言的传入音频流?

    我想在基于 VoIP 的 iOS 客户端应用程序中集成语言转换器 该应用程序将根据用户选择将实时传入音频流翻译为其他选定的语言 我正在使用 PjSip 开源库来支持 VoIP 呼叫 对于语言翻译 我想使用语音到文本和文本到语音开源库 现在我
  • 本地播放 mp3 时 Android MediaPlayer 错误(1, -2147483648)

    Android 4 4 发布后不久 我的代码自 2 2 以来一直正常工作 突然出现了错误 我的代码将查询音乐数据库中给定的音乐文件 该路径在查询中返回 然后该路径被传递到 MediaPlayer Code String uri conten
  • 在 Mobile Safari 中重用 HTML5 音频对象

    我希望在 iPad 上的 Mobile Safari 中运行的 Web 应用程序上播放一个简短 小于 1 秒 的音频文件 以响应用户输入 同时将事件和音频播放之间的延迟降至最低 在页面重新加载之间可以多次触发播放 因此我想缓存音频文件 以下
  • 如何在Python中从声音中获取Pi-Phase以获得相消干涉

    第一 我不知道该把这个话题放在哪里 因为它是一个编程和声音问题 如果有错误的地方请评论 但这是我的问题 如何将声音加载到 Python 中并创建它的 反向声音 因此 当我播放原始文件和 pi 偏移 文件时 它们会产生破坏性干扰并相互抵消 因
  • NAudio 音调变换

    我正在使用 NAudio DLL 并且正在寻找音调变换声音的示例代码 有一个使用的例子NAudio https github com naudio NAudio用于开源中的音高变换Skype 变声器 https github com mar
  • 将每分钟的 MP3 导出为单独的 WAV

    这绝对是一个奇怪的问题 但我正在寻找一种方法 将 60 分钟的 mp3 混合拆分为 60 个单独的 1 分钟长的 wav 文件 以便与 Echonest 等音频指纹识别 API 一起使用 这是否可以在单个 ffmpeg 命令中实现 或者我是
  • 如何使用python将下载的音频文件扩展名重命名为mp3

    目前 我正在尝试根据艺术家姓名和歌曲标题将 YouTube 音乐视频下载为音频文件 下载所有视频后 我尝试将所有音频文件从 webm 或 mp4 扩展名重命名为 mp3 但似乎我在将文件名和扩展名更改为 mp3 时遇到了一些错误 我的代码基
  • 通话过程中是否可以拦截语音数据?

    我计划开发 Android 应用程序 对语音数据进行加密 解密 以便各方可以使用安全通道进行通信 那么问题来了 GSM通话时如何拦截语音 音频数据 可能还是不可能 我应该使用 Android NDK 还是其他东西 在 GSM 中 由于信道特
  • android 录音时可以静音吗

    我想构建一个应用程序 我想在通话中调制声音 我编写了一段代码来记录声音并以不同的音调播放它 现在我想要在通话时使用此功能 我想将通话静音 记录声音然后以不同的音调播放它 如何将通话静音但仍录制音频 此答案可在通话期间使麦克风静音 Boole
  • GDI+ 中绘图坐标的硬界限是什么?

    我这样渲染插值曲线 e Graphics DrawLines new Pen Color Red interpolationPoints ToArray 有时会抛出 OverflowException 对 interpolationPoin
  • 使用 Google Speech 时从 Google Cloud Storage 访问音频文件

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

随机推荐

  • 任务似乎自动开始

    我正在移植一个加载时间很长的程序 当我移植它时 它根本没有得到改善 因为缓慢是因为访问数据库服务器 而不是次优代码 我已将加载移动到一个单独的线程上Tasks库 现在 UI 在加载时不会冻结 但它确实让我对某些事情感到好奇 The Task
  • 使用弹簧对安全休息控制器进行单元测试

    我有一个使用 Spring Boot 编写的非常小的 REST 应用程序 我想编写一个用于身份验证的单元测试 但即使我将 MockWithUser 添加到测试中 我也会收到 401 错误 重要的文件是 安全配置 Configuration
  • ptr_vector如何管理内存?

    我目前正在使用 c 使用 opengl 进行较低级别的编码 我来自一个沉重的 objc 背景 所以我对内存管理有一些了解 但我似乎无法理解 boost 库如何管理容器类型 例如ptr vector 我认为我的问题与我不知道如何ptr vec
  • 使用 dplyr 过滤包含部分列字符串的行

    假设我有一个像这样的数据框 term cnt apple 10 apples 5 a apple on 3 blue pears 3 pears 1 如何过滤此列中所有部分找到的字符串 例如得到结果 term cnt apple 10 pe
  • UnicodeEncodeError:在 UTF-8 语言环境中打印时,“ascii”编解码器无法对字符“\xe9”进行编码

    我正在清理 Europarl 的法语单语语料库 http data statmt org wmt19 translation task fr de monolingual europarl v7 fr gz http data statmt
  • 无法在fiddler中捕获jmeter流量

    我创建了 JMeter 记录 但当我开始测试时 我在 Fiddler 中没有看到任何请求 我改变了 Fiddler 中的端口号为 8080 我在 JMeter 中使用该端口号 Steps 创建线程组 将Http请求添加到线程组并输入URL
  • 从地址获取上一条指令的开头

    我们在缓冲区中查看 x86 操作码 标记当前指针 68 0F 00 6A 90 00 找到下一条指令的开始很容易 因为电流的大小是可以确定的 但是你如何才能准确地猜出前一个的开始呢 68 0F 00 6A 90 总共 5 个字节 结束于 0
  • 如何在 Google Composer 上重新启动气流服务器?

    当我需要在本地重新启动网络服务器时 我会这样做 ps ef grep airflow awk print 2 xargs kill 9 airflow webserver p 8080 D 我如何在 Google Composer 上执行此
  • 未能启用约束。一行或多行包含违反非空、唯一或外键约束的值。 VB.Net 中的错误

    StackOverFlow 中出现了三个类似的问题 但没有人给出答案 如果已找到发生此错误的原因但不知道解决方法 我在用Strongly Typed Dataset对于我的项目 它是作为 DAL 的 dll 创建的 我已使用设计器将 Sql
  • 我无法添加或删除课程

    我正在尝试删除一个类并在一个函数中添加一个类 但是当我点击按钮时什么也没有发生 这是我的代码 function unlikeVerhaal unlike unlike preventDefault document querySelecto
  • 如何使用 JavaScript 从表中的行索引获取行 id

    假设这是我的桌子 table tr td a td tr tr td b td tr table 如何使用表中的行索引获取行 ID 上面只是一个例子 其中 id 是静态的 但在我的例子中 我的 id 是动态的 所以我不能使用document
  • 一个编译器错误让我在 ActionScript 中感到困惑

    首先 我想解释一下 我对 ActionScript 不熟悉 所以不要因为一些基本的错误而责怪我 我刚刚学会了很短的时间 因此 编写 ActionScript 脚本的一些技巧总是值得赞赏的 我不知道编译器为什么说 我的一个类的构造函数不接受任
  • 在打字稿中使用 es-6 符号

    我正在尝试在我的打字稿代码中使用符号 使用 es 5 作为目标 但是 下面的代码会报错TS2304 找不到名称 符号 var sym Symbol 根据路线图 从 1 5 版本开始支持符号 但我想一件事是支持符号 另一件事是将符号转译为 e
  • MVC,模型可以保存/加载其数据吗?

    快速提问 我的数据模型是一个单例对象 它包含我想要存档的名称列表 我的想法是让模型负责加载和保存它自己的数据 该模型的load方法将被调用ViewController s viewDidLoad方法和save by the ViewCont
  • 只能创建一个cardNumber类型的元素

    我正在尝试显示我的条纹组件 但收到此错误 IntegrationError 只能创建一个类型为 cardNumber 的元素 我不知道为什么 因为我在整个应用程序中只使用了一次 有任何想法吗 这是我的索引 import ReactDOM f
  • 创建一个分层的 xml 形式,形成一个类似于书籍描述的“平面”xml

    这是一个后续问题 选择当前元素和当前元素的下一个元素之间的所有元素 https stackoverflow com q 16145859 2115381 即使我不确定创建一个新问题是否是正确的方法 但我还是这样做 因为原来的问题已经回答了
  • 按数据存储 API 中的范围进行过滤

    数据存储 API 文档位于http docs ckan org en ckan 2 2 datastore html http docs ckan org en ckan 2 2 datastore html描述 datastore del
  • 在同一用户的不同设备之间共享 Facebook 访问令牌

    用户可以从不同的设备登录我们的应用程序 我们希望将用户的访问令牌转移到他们登录的所有设备 这样他们就不必在他们使用的每台设备上再次执行 Facebook 登录步骤 在 Facebook 的开发者文档页面之一 https developers
  • matplotlib - 从等高线提取值

    这个问题 答案对 https stackoverflow com questions 5666056 matplotlib extracting data from contour lines显示如何从等高线图中提取顶点 p cs coll
  • 按频率对波形进行颜色编码[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想按本地频率内容显示每个部分中颜色编码的音频波形 基本上与 Serato Traktor 或任何其他