问题标签 [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 投票
7 回答
92991 浏览

python - 用 python 生成/合成声音?

是否有可能让 python 产生像正弦波一样的简单声音?

有可用的模块吗?如果没有,您将如何创建自己的?

此外,您是否需要某种主机环境来运行 python 才能播放声音,或者仅通过从终端拨打电话就可以实现?

如果答案取决于操作系统,我使用的是 Mac。

0 投票
2 回答
1345 浏览

python - 在python中连接合成音调

我正在使用以下代码,它将生成一个 wav 文件,其中包含持续 2 秒的 440 Hz 音调。

我想知道是否可以根据 note 方法修改代码,以便实际使用 python 生成曲调。

我尝试添加两种不同的音调,正如预期的那样,两种音调同时播放,创造出听起来有点像拨号音的东西:

我也尝试将这两种音调相乘,但这只会产生静态。

我还尝试过区分不同长度的音调并添加它们,但这会导致引发异常,如下所示:

原因:

所以,我想知道 - 我怎样才能像这样连接不同的音调来制作曲调?

0 投票
3 回答
1734 浏览

ios - iOS 正弦波生成 - 可听见的咔嗒声

我正在为 iOS 创建一个合成器。在玩耍并尝试学习核心音频之后,我遇到了一个我无法理解的问题。我的正弦波会定期发出咔哒声,我猜这与相位有关。我查看了有关该主题的几本指南和书籍,并且都表明我做得正确。

如果有人愿意为我查看我的代码,将不胜感激。

0 投票
1 回答
377 浏览

flash - Flash 可以做低延迟的音频合成吗?

当使用 Sound 类的 SAMPLE_DATA 事件合成声音时,Flash 文档建议尽可能多地写入最多 8192 个样本。在我的系统上,除非我每个事件至少写入 4192 个样本,否则声音会中断。那是整整十分之一秒,这将是用户注意到的。

我可以选择提前缓冲一些东西,但这对我的应用程序来说是一个主要的烦恼。有什么方法可以降低延迟音频输出?

0 投票
1 回答
6544 浏览

java - Android Audio - 流式正弦发生器奇怪的行为

第一次在这里海报。我通常喜欢自己找到答案(无论是通过研究还是反复试验),但我在这里被难住了。

我正在尝试做的事情: 我正在构建一个简单的 android 音频合成器。现在,我只是实时播放正弦音,UI 中有一个滑块,可以在用户调整时改变音调的频率。

我是如何构建它的: 基本上,我有两个线程——一个工作线程和一个输出线程。每次调用它的 tick() 方法时,工作线程只需用正弦波数据填充缓冲区。一旦缓冲区被填满,它会提醒输出线程数据已准备好写入音轨。我使用两个线程的原因是因为 audiotrack.write() 阻塞,并且我希望工作线程能够尽快开始处理其数据(而不是等待音轨完成写入)。UI 上的滑块只是更改工作线程中的一个变量,因此对频率的任何更改(通过滑块)都将被工作线程的 tick() 方法读取。

什么有效: 几乎所有东西;线程沟通良好,播放中似乎没有任何间隙或点击。尽管缓冲区大小很大(感谢 android),但响应能力还可以。频率变量确实发生了变化,tick() 方法中缓冲区计算期间使用的中间值也发生了变化(由 Log.i() 验证)。

什么不起作用: 出于某种原因,我似乎无法获得可听频率的连续变化。当我调整滑块时,频率会逐步变化,通常与四度或五度一样宽。从理论上讲,我应该听到 1Hz 的微小变化,但我不是。奇怪的是,滑块的变化似乎导致正弦波在谐波系列的间隔中播放。但是,我可以验证频率变量没有捕捉到默认频率的整数倍。

我的音轨设置如下:

正在填充工作线程的缓冲区(通过 tick()),如下所示:

音频数据是这样写的:

任何帮助将不胜感激。我怎样才能获得更渐进的频率变化?我非常有信心我在 tick() 中的逻辑是合理的,因为 Log.i() 验证变量 angleIncrement 和 currentAngle 正在正确更新。

谢谢!

更新:

我在这里发现了一个类似的问题:Android AudioTrack buffering questions 该解决方案提出必须能够为audioTrack 生成足够快的样本,这是有道理的。我将采样率降低到 22050Hz,并进行了一些经验测试——在最坏的情况下,我可以在大约 6 毫秒内填充我的缓冲区(通过 tick())。这绰绰有余。在 22050Hz 时,audioTrack 为我提供了 2048 个样本(或 4096 字节)的缓冲区大小。因此,每个填充的缓冲区持续约 0.0928 秒的音频,这比创建数据所需的时间(1~6 毫秒)要长得多。所以,我知道我没有任何问题足够快地生产样品。

我还应该注意到,在应用程序生命周期的前 3 秒内,它运行良好 - 滑块的平滑扫描会在音频输出中产生平滑扫描。在此之后,它开始变得非常不稳定(声音仅每 100Mhz 变化一次),之后,它完全停止响应滑块输入。

我还修复了一个错误,但我认为它没有效果。AudioTrack.getMinBufferSize() 返回允许的最小缓冲区大小(以 BYTES 为单位),我使用这个数字作为 tick() 中的缓冲区长度 - 我现在使用这个数字的一​​半(每个样本 2 个字节)。

0 投票
2 回答
192 浏览

vhdl - 需要额外 LE 的 VHDL 函数?

我正在创建一个具有多个定义的包,类似于以下内容

我想使用类似于以下的函数来修改记录类型中的字段。

我的问题是,将使用类似于所示示例的函数,使用比显式修改记录值更多的 LE。

0 投票
1 回答
570 浏览

c# - .net 合成器

我正在寻找可以与我的 .NET 应用程序集成的合成器。那里有可用的 .NET 合成器吗?有没有办法将 VST 插件集成到您的 .NET 应用程序中?

我想创建基于 MIDI 输入的声音,最好是比正弦波/方波/锯齿波更吸引人的声音。

0 投票
2 回答
2852 浏览

vhdl - 双向总线上的 Block RAM

我花了很长时间试图弄清楚如何将 Xilinx Spartan 6 FPGA 的内核生成的 Block RAM 连接到双向数据总线。我能找到的所有示例都说仅单独使用输入和输出数据端口,但就我而言,我被迫将其用作双向数据总线。

我正在使用 VHDL。

生成的组件具有以下定义:

实例化如下:

有人可以向我展示一个将连接dina并连接douta到一个inout名为的端口的进程块data吗?

我尝试了以下方法,成功率为 0%:

谢谢您的帮助!

0 投票
3 回答
3704 浏览

xilinx - 为什么这个 VHDL 不能在 XST 中推断 BRAM?

我有一个向量数组,我想使用 ISE 13.4 将它们存储在 Virtex-5 上的 Block RAM 中。它是 32Kb,应该适合 1 个 BRAM,但它都存储在逻辑中。我的系统使用 AMBA APB 总线,所以我检查选择线和启用线。请帮助我理解为什么这段代码不能推断出 BRAM。注意:这是一个更容易理解的虚拟示例,应该可以帮助我处理其他代码。

ram_style将数组声明为,block但 XST 报告说:WARNING:Xst:3211 - Cannot use block RAM resources for signal <Mram_memory>. Please check that the RAM contents is read synchronously.

问题似乎在于 read_enable 条件,但 Virtex 5 用户指南听起来好像 BRAM 硬块上有一个enable和一个write_enable。我可以一直驱动​​输出,但我不想这样做,那样会浪费功率。还有其他想法吗?

0 投票
2 回答
932 浏览

vhdl - VHDL 代码综合错误

我编写了一个 VHDL 代码来实现 PWM 控制器的功能。我已经模拟成功,结果符合预期。我还检查了合成的语法,但它显示了任何错误。当我使用 XILINX ISE 12.4 合成它时,它没有合成并且错误状态

“错误:Xst:827 - 第 67 行:信号 tmp_PC 无法合成,同步描述错误。当前软件版本不支持您用于描述同步元素(寄存器、内存等)的描述样式。”

我尝试查找错误消息并得到不同的答案。出现的可能原因1:不符合综合模板的“IF”嵌套不当。2:使用“risisng_edge(clk)”而不是通常的“(clk'event and clk='1')”。

我仍然不完全确定可能是什么问题。如果有人可以提出我忽略的可能错误,那将非常有帮助。