- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试制作一个简单的振荡器程序,我可以在其中更改 Octave 类型,就像 Massive VST 用正数和负数显示它的方式一样:
(来源:massivesynth.com)
现在,我知道一个 Octave 有 1200 音分(每半音 100 音分)。我遇到的问题是,在制作 Osc 代码时,我意识到它的音高是以音分为单位。
ctx = new webkitAudioContext();
function osc1(pitch){
osc = ctx.createOscillator(),
osc.type = 2; //0 = sine, 1 = square, 2 = saw, 3 = triangle, 4 = custom
osc.frequency.value = pitch; //in cents
gainNode = ctx.createGainNode();
osc.connect(gainNode);
gainNode.connect(ctx.destination);
gainNode.gain.value = 1;
osc.noteOn(0);
};
osc1 (20);
因为音高会改变音符的频率,所以我很困惑,没有 MIDI 键盘我怎么知道
此外,我怎样才能从这些波形中获得低音效果?我做了几个测试,在 1 美分、2 美分、5 美分、20 美分等处产生声音,看看它们听起来如何,以及当振荡器以 1 美分产生音高时,我得到的只是一个低音 click 而在 2 美分的情况下,我在 4/4 节拍中得到几乎相同的click。根据我的理解,您可以将频率视为 map 上的点,同样,将美分视为这些点之间的距离。话虽如此,既然声音是直接从浏览器生成的,音分如何确定音符的频率?另外,如果只是移动振荡器的音高那么简单,那么振荡器从哪个音符开始?换句话说,您要“推销”什么音符?
考虑到我自己也很困惑,我希望我写的是有道理的。
感谢您的帮助和反馈!
最佳答案
音高以赫兹(每秒循环数)为单位,也可以表示为音符和与该音符的偏差(以音分为单位)。正如您正确指出的那样,1 音分是半音的 1/100 或 Octave 的 1/1200。
翻译音分的关键是要认识到音高的进展不是线性的而是几何的。 A 定义为 440 赫兹。高一个 Octave 的 A 为 880Hz,高一个 Octave 的 A 为 1760Hz,依此类推。请注意,两个 A 音符之间的 Hz 差异对于每个 Octave 音阶向上加倍。
从数学上讲,从给定的音高开始,下一个半音不是大固定的赫兹数,而是大一个比率,即 2 的第十二根 (21/12)。由于一分小了 100 倍,它的比率是 2 的 1200 次方根,或 21/1200。请记住,对于每个 Octave 音阶,您将 Hz 加倍。对于每个半音,您将频率乘以 21/12。如果你这样做十二次,你就会把原来的数字加倍 (440 * (21/12)12 = 440 * 2 = 880)。同样,(440 * (21/1200)1200 = 880)。
在 Excel 中尝试。
Cell A1: 440
Cell A2: =A1*2^(1/1200)
Cell A3: ...copy A2 down...
.
.
.
Cell A1201:
如果操作正确,单元格 A1201 将神奇地包含值 880,其间的所有单元格将为您提供每一分的频率(但请参阅下面的重要警告)。
不幸的是,事情并没有那么简单。我描述的是基于数学的毕达哥拉斯量表,今天没有人使用。如果你用这种方式给钢琴调音,C 大调和 A 小调可能听起来不错,但其他键听起来很走调。其原因与听力生理学有关。有很多关于气质的学术书籍,它在巴洛克时期引起了激烈的争论,几个系统争夺思想份额,直到巴赫“决定”每个人都使用良好的气质,因为键盘不能轻易地拥有它气质变了。
今天的音乐家使用一种称为平均律音阶的修改,其中一些音符从数学上的完美程度稍微向上或向下调整,以便所有键都可以使用而无需重新调整。这是一种妥协,但我们都习惯于听到它。我不会进一步讨论它,只是说,由于间隔不完全是 21/12,因此音分的定义略微取决于每个间隔的实际宽度。将音分视为 0 到 100 之间的一组点,在两个音符之间等距,但基于固定的比率 (21/1200) 而不是固定数量赫兹。
如果你想制作一个精确的振荡器来提供音符,你将不得不研究音律并调整 Hz 值以匹配当前的音乐惯例。您将需要一本关于音律的好书,和/或可以调节不同音律的调音器。有几个 iPhone 应用程序可以处理不同的气质,包括输入和输出到扬声器。
祝你好运,玩得开心。
关于javascript - 网络音频 : Hz and Cents,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19603530/
到目前为止,在我使用 MediaCodec 连接视频的过程中,我终于设法将 48k Hz 音频重新采样为 44.1k Hz。 我一直在测试将视频与两个视频连接在一起,第一个具有 22050 Hz 2
我现在正在尝试编译某人的代码,这个人正在使用变量 HZ(我认为它代表 Hertz,代表 CPU 的赫兹),但编译器提示变量未定义。我猜这个人没有包含正确的头文件。 那么有谁知道HZ是在哪个头文件中定义
在 sched_fair.c 中有: unsigned int sysctl_sched_latency = 5000000ULL //5m unsigned int sysctl_sched_min
我看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/但是脚本似乎不起作用。无论如何知道在 Linux 的终端中检查“HZ”的简单
我正在从Google的文本到语音服务获取16位PCM数据(24000 Hz),然后将其存储在u8数组中。有没有一种简单的方法可以将其重采样到48000 Hz,而输出是u8阵列?我不了解FFmpeg上的
我正在尝试制作一个简单的振荡器程序,我可以在其中更改 Octave 类型,就像 Massive VST 用正数和负数显示它的方式一样: (来源:massivesynth.com) 现在,我知道一个 O
我收到一条消息,该消息从在 ARM 平台上运行的 Linux 应用程序 (Qt C++) 打印出来: Unknown HZ value! (108) Assume 100. 此输出会定期出现在不同
我正在 python 上的 pandas 中开发一个项目。我收到这样的 .csv 文件作为输入: Name Timestamp Data A1 259
我正在使用 Estimote SDK (3.6.0) 与我的信标进行通信。现在我在某处读到,可以获取 5 Hz 信标的广告包。这仅适用于 Estimote 信标还是也适用于其他供应商的信标?在源代码中
音频数据如何下采样到 5512 Hz PCM?我读过一些文章,涉及的步骤是将音频解码为 PCM,将其转换为单声道,然后对其进行下采样。 为了转换为单声道,是否对每帧的 channel 进行平均以获得单
我以大约 50 Hz 的频率(每 0.02 秒一次,正如 Android 所允许的那样...)收集加速度计数据 这是 10 秒数据窗口的幅度图,我想在其上估计功率谱密度: 像这样应用 scipy.si
我有一个传感器,它使用 RS422 通过串口发送消息。 (我认为这是正确的术语。)无论如何,我制作了线束,并将其连接到我的 rs422 到 usb 转换器和 tada,我在 super 终端中获得了数
我一直在使用the Android NDK Camera sample有了它,人们就可以使用 the yuvreader_ inside DrawFrame 读取格式为 AIMAGE_FORMAT_Y
有没有可以读取的全局变量?从 2.6 内核开始,它是可配置的,所以我不能确定是否确实使用了默认值。我正在使用“崩溃”来调试内核核心转储。 最佳答案 它是在编译期间在内核的 .config 中配置的。检
我有 形式的原始音频数据 vector m_shorts; 音频数据为 22050 kHz 单声道。 有人知道我如何(没有任何第三方库)快速将短 vector 转换为 48000 Hz 单声道吗? 我
如何通过ADB shell知道Android内核的HZ值? (没有任何编码) 我检查了How to check HZ in the terminal? ,但这不适用于 Android ADB shel
从 iOS 上的音频流(音乐)获取 Hz 频率值的最佳方法是什么? Apple 提供的最好和最简单的框架是什么?提前致谢。 最佳答案 这是我使用 Accelerate Framework 在 iOS
这就是我所拥有的。它生成 5 秒 Au file具有 440 Hz 正弦波,灵感来自 this question . -- file: tone.hs import qualified Data.By
我目前正在研究 WiFI 的内核源代码(net/mac80211) (三星Galaxy S3---GT-I9300---内核) 我已经看到了如下代码: /* * Scanning implement
我正在使用 ublox NEO-M8N-0-01全局导航卫星系统模块。该模块最高支持 5Hz GPS+GLONASS 和 10Hz GPS。 但是,当我尝试更改采样率(通过消息 View 中的 UBX
我是一名优秀的程序员,十分优秀!