问题标签 [sound-synthesis]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
12550 浏览

signal-processing - FFT 音高检测 - 旋律提取

我正在创建一个音高检测程序,该程序从帧的 FFT 获得的功率谱中提取基频。这是我到目前为止所拥有的:

  • 将输入音频信号分成帧。
  • 带汉明窗的乘法框架
  • 计算帧 sqrt(real^2 + img^2) 的 FFT 和幅度
  • 通过谐波积谱找到基频(峰值)
  • 将峰值的频率(bin 频率)转换为音符(例如 ~440 Hz 是 A4)

现在程序为每一帧生成一个整数,其值从 0 到 87。根据我在这里找到的公式,每个整数对应一个钢琴音符。我现在正试图通过根据计算出的音符合成声音来模仿输入信号中的旋律。我试图简单地生成一个幅度和频率与基频相对应的正弦波,但结果听起来与原始声音完全不同(几乎听起来像随机哔哔声)。

我不是很懂音乐,所以根据我所拥有的,我可以根据从基频获得的信息来生成旋律与输入(乐器、语音、乐器+语音)相似的声音吗?如果没有,我可以使用我目前拥有的代码尝试其他什么想法。

谢谢!

0 投票
1 回答
328 浏览

c# - 如何在音频合成应用程序中正确弯曲音符?

问题

我试图弄清楚这一点但无济于事 - 如何在两个频率之间连续改变音符的音高。

我正在使用与此类似的功能生成音频信号:

虽然我在此功能之外手动管理时间,但如下所示:

并且在所需样本量上线性插值frequency参数的明显解决方案无法按预期工作。执行此操作时,声波会充满爆裂声和咔嗒声。

我必须如何实施呢?

解决方案(编辑)

感谢 geofftnzless,这非常容易解决。我现在已经切换到使用这个生成器:

它负责time内部递增。

使用这个生成器插值frequency工作顺利,没有听得见的问题。谢谢!

0 投票
1 回答
914 浏览

audio - 调频 (FM) 代码片段

我为音频信号的频率调制编写了以下代码。音频本身为 1 秒长,以 8000 Hz 采样。我想通过使用频率为 50 Hz(表示为采样频率的一小部分)的正弦波将 FM 应用于此音频信号。调制信号的调制指数为0.25,从而只产生一对边带。

0 投票
2 回答
1348 浏览

audio - Arduino 压电敲击传感器播放音调

我想将几个压电连接到一个 arduino,这样,当它们被激活时,每个压电播放/触发一个单独的音调。例如,我将有五个压电器连接到 arduino - 当我对每个压电器施加压力时,它们会通过计算机上的软件界面或压电器本身播放单独的音符。基本上是一个使用 piezos 作为键的 Arduino 合成器。

我只是不太确定如何去做。我确信它是可能的,但只需要朝着正确的方向推动。有任何想法吗?谢谢!

0 投票
1 回答
1104 浏览

c# - 在 C# 中实时播放合成声音

我正在尝试编写一个迷你合成器程序。本质上,每 200 毫秒触发一个计时器。当它被触发时,循环会生成 200mS 的 PCM 样本(例如锯齿波、正弦波等),样本的数量与采样率和扫描周期有关。例如,每 200 毫秒,波形阵列中有 4000 个样本可供播放。我的问题是,我该如何播放这个数组,即 PlaySound 方法应该做什么?每 200 毫秒调用一次 PlaySound 应该以连续的方式播放后续样本。我玩过 DirectSound 和 NAudio 无济于事。

我意识到计时器可能不会每 200 毫秒准确触发一次,并且 4000 个样本可能包含实际时间稍微太少或太多的样本。我并不担心这一点,因为我可以根据后续计时器触发之间的实际时间调整样本数量。

0 投票
0 回答
333 浏览

c++ - 合成工具包:MIDI 音符在不同的乐器上有不同的频率

我一直在尝试将 Synthesis 工具包用于音频项目。我在下面编写了一个快速程序,它会生成一个持续时间为 1 秒且带有 MIDI 音符 49 的 WAV 文件。实际上,该程序会生成两个这样的文件,一个使用“Bowed”乐器,另一个使用“PercFlut”乐器。奇怪的是,当我播放生成的两个 WAV 文件时,频率并不相同。对于 Bowed 乐器,相同 MIDI 音符的主频率似乎是 440 HZ。对于 PrecFlut 仪器,主频率似乎在 210 HZ 左右。

我究竟做错了什么?任何帮助将不胜感激。

谢谢,这是我的代码:

0 投票
2 回答
3538 浏览

java - 在Java中,有没有办法合成特定频率的音调?

我正在做一些双耳节拍的工作,并正在尝试构建一个 Java 应用程序,它可以以稍微不同的频率播放两种声音......大约 25-30Hz 的差异。

在一个完美的世界里,我想给 Java 两个整数输入,比如 440 和 410,让 Java 播放一个 440Hz 的音调和一个 410Hz 的音调。

鉴于我在javax.sound.*课堂上看到的情况,Java 似乎只支持相当于钢琴音符...A4 @ 440Hz,然后是 A-sharp-4 @ 466.164Hz,而在另一个方向上,G-sharp-4 @ 415.305Hz。虽然“相邻”通常在产生双耳节拍的范围内,但我正在尝试对我的音调频率进行更多控制。

由于简单的音频合成只不过是频率、强度和时间长度,在我看来,在javax.sound.*课程的某个地方,有某种查找说明当我告诉 Java 播放“A4”时,那就是440赫兹。问题变成了是否有办法破解该表以说“A4.1”相当于449Hz。

我一直在搞砸javax.sound.midi,还没有探索过javax.sound.sampled;看来我需要对我的音调进行采样才能使用这些sampled课程;我更喜欢合成。如果我弄错了,请引导我。

我见过的大多数第三方界面都是专门针对音乐制作和操作的,因此,它们使用微音的能力有限。有没有人有解决方案的经验或建议?

0 投票
1 回答
126 浏览

objective-c - 我如何在 AUGraph 的两条总线中播放两种不同的声音

嘿伙计们可以帮助我吗,我如何在 AUGraph 中分别在两条不同的总线中播放两种不同的声音。(例如,一条总线有一种声音,另一条总线有另一种声音,我需要分别播放这两种声音),任何非常感谢您的帮助。谢谢你

0 投票
1 回答
200 浏览

c++ - 虚函数的 STK 回调振荡器问题

我正在使用正弦振荡器回调处理其中一个 STK 程序。由于生成器类中的虚函数导致我的 ToneGen 类抽象,我在从生成器类继承的 ToneGen 类创建对象时遇到问题。我已经尝试过指针,但似乎导致将数据获取到适当的方法时出现问题。如果我使用指针,我的代码会在 ToneGen.h 文件中中断

否则没有指针我得到这个错误

这是生成器类中的虚函数

无论如何要避免这种情况,我在其他帖子上尝试了其他几种技术,但还没有运气。

我正在修改的代码可以在这里找到

我在 VisualStudio 2010 windows 7 32 位上执行此操作

0 投票
1 回答
135 浏览

midi - 声卡的选择会影响胆小的性能吗?

我正在开发 Web 应用程序,它将使用 timidity++ 将 midi 文件转换为 wav 文件。我知道没有声卡就不行,所以我必须有服务器。我的问题是:使用的声卡会影响生成wav文件的速度吗?如果我的问题的答案是肯定的,那么我在购买声卡时应该注意什么。有什么声卡可以推荐吗?