【问题标题】:What is this (128 + 127 *) part of these formulas for riffwave.js?这些 riffwave.js 公式的 (128 + 127 *) 部分是什么?
【发布时间】:2015-04-13 00:12:40
【问题描述】:

我正在尝试在浏览器中做一些 javascript 音乐合成器,我遇到了 riffwave.js。从这个问题here,答案给出了如何使用 riffwave.js 的提示。

我已经研究了一些东西,比如多音调,我几乎理解了所有这些,但我不知道为什么会有128 + 127 *

它还在此演示页面中显示here

谁能提供解释或告诉我如何使用该部分来修改程序?

谢谢。

【问题讨论】:

    标签: javascript waveform synthesizer


    【解决方案1】:

    您引用的示例显示了以下形式的方程式:

    A=128 + 127 * Sin(...)
    

    由于Sin 函数可以在 -1 到 +1 之间变化,因此上述等式的结果是 1-255。所以,加上常数128并乘以系数127,这基本上是一个sin函数,其输出在1到255之间变化,这很方便,因为它可以使用8位(或1字节)存储。

    【讨论】:

    • 并且公式的这个特定部分应该被调整!代码需要此范围内的值——仅无符号字节。要更改注释,请更改其后的公式(确保结果为 -1..1)。
    • @Jongware 感谢您的意见。当我开始尝试一次获得多个音调时,我发现该部分必须在 -1..1 之间变化,我的解决方案是将音调相加并除以正在使用的数字。
    【解决方案2】:

    就像 mti2935 所说,这是一种方便的方法,可以将一个从 -1 到 1 变化的数字映射到一个从 1 到 255 变化的整数,它非常适合一个字节。特别是,riffwave 似乎在内部以 8 位 .wav 格式表示声音,因此这会将浮点数转换为实际播放声音所需的 8 位整数格式。

    【讨论】:

    • 感谢您的洞察力。您是否知道使用超过 8 位执行类似操作的其他方法?音质并不完全是我想要的,也许超过 8 位的声音会更好?如果没有,那很好;这个问题现在更多的是放在次要位置。
    • 查看 riffwave,您必须修改 riffwave、使用不同的库或编写自己的库。实际的声音播放机制似乎是 HTML5 音频标签 (wikiw3schools),它支持您可以使用的其他文件格式。我对 WAV 文件格式了解不多,因此您可能仍然可以使用 WAV,只需对 riffwave 进行少量修改,例如更改文件标题以允许 16 位或更高的声音或其他内容。加快采样率也可能会有所帮助。
    • 您似乎想尝试对格式块进行一些修改; RIFFWAVE 格式描述为here。特别是,我会尝试将 128+127*sinx 更改为 32768+32767*sinx 并在您致电 wave.Make(data) 之前执行 wave.header.bitsPerSample = 16;
    猜你喜欢
    • 2015-03-11
    • 2023-02-14
    • 2020-11-12
    • 1970-01-01
    • 2023-03-31
    • 2014-11-23
    • 2021-09-09
    • 2011-02-17
    相关资源
    最近更新 更多