将数组缩放到 midi
Scaling an array to midi
我正在做一个项目,我正在对微控制器进行编程,以计算编码器的脉冲并相应地增加/减少变量。此数字将更改 16 位数模转换器的值。因此,编码器需要在 0 - 65535 的范围内计数。
我遇到的问题是,如何缩放另一个(较低位、midi 值、0-127)数字以遵循上述编码器的值,以便两个数字范围同时从 0 开始,并分别以最高值结束。
所以当 16 位数 = 0 时,中间值 = 0
或者当 16 位数 = 1023 时,中间值 = 1
或者当 16 位数 = 1024 时,中间值 = 2
当 16 位数字 = 65535 时,中间值 = 127
等。
因此,midiValue 的每个增量都需要 16 位数字的 512 增量。
我希望能够传递一个数字(16BitNumber)的函数,并具有符合midi值的比例。所以理论上我只能在非易失性 RAM 中存储一个值作为预设,以便稍后调用,并且所有相关数组都会相应地更新。我需要能够使用更高分辨率的数字进行计数,以便相对于 midi 值我可以有更多的"步长"。
我的第一个倾向是列出一长串 if 语句;
if ( 16BitNumber >= 1024 && 16BitNumber <1536) {
midiValue = 3;
}
似乎需要很长时间才能全部输入出来,我不太担心,因为我不能只写一些代码来为我写一些代码。我最关心的是尝试做一些快速的事情。快速编码器更改意味着如果我的代码未优化,midiValue 可能会跟上进度较慢。
我的另一个想法是操纵数组的索引以选择正确的值,但这似乎会很慢。我也只需要接受整数midiValues,据我所知,这需要模除法,这是又一步。
我真的很想得到一些关于我应该朝哪个方向前进的建议。
您的问题并没有完全说明16BitNumber
和midiValue
的类型,但假设使用了uint16_t
和uint8_t
类型,您可以简单地使用移位运算符>>
。
MidiValue= 16BitNumber >> 9;
事实上,MidiValue
是16BitNumber
的 7 个最高有效位的值。
7bitnumber = 16bitnumber >> 9;
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 计算缩放多边形的比例,得到给定的多边形面积
- QwtPlot具有相等的轴和自动缩放
- 如何在directx/c++中进行平移/缩放操作
- 在Qt中实现无限可缩放的画布
- 是否可以为 QPixmap 派生类嵌入缩放方法?
- 形状对象的旋转和缩放不正确C++
- 如何在 OpenSceneGraph 中缩放/旋转/移动资产
- 如何在OpenGL(GLFW,很高兴)中进行2D缩放?
- 改变或缩放两个正态分布以具有特定的相关系数
- SDL2 调整窗口大小后如何缩放鼠标坐标?
- 如何在OpenGL中正确旋转和缩放对象?
- 仅当类型为 std::complex 时,才进行缩放
- 将 VS Code 用于跨平台可缩放C++项目
- 根据帧速率缩放/缩小数字
- 在 c++ 中缩放浮点值
- 如何防止 DirectX C++程序的拉伸/缩放
- 使用提升几何缓冲区缩放多边形时的冗余折点
- 为什么我不能使用 Sphere 来缩放字形?
- 我在QChartView中找不到缩放图形的鼠标滚轮滚动事件