我试图将一些我在网上找到的C++代码转换成一个MIDI控制器——AKAI Fielt,用于特定的OLED显示器的重新排序。显示器使用了一种奇怪的配置,将位显示为像素,正如我在页面底部分享的博客中所记录的那样
目的是能够在屏幕上显示文本。消息以MIDI SysEx的形式发送,像素的每个字节使用7位,将MSB保留为0,这是MIDI数据字节的标准值。我已经取得了相当大的成功,因为我已经成功地获得了正确的像素集来打开,那里只是被弄坏了,所以它不可读。我相信错误在我试图翻译成Python的位操作函数中
这是原始代码
static void _FIRE_PlotPixel(unsigned X, unsigned Y, unsigned C) {
unsigned RemapBit;
//
if (X < 128 && Y < 64) {
//
// Unwind 128x64 arrangement into a 1024x8 arrangement of pixels.
//
X += 128 * (Y/8);
Y %= 8;
//
// Remap by tiling 7x8 block of translated pixels.
//
RemapBit = _aBitMutate[Y][X % 7];
if (C > 0) {
_aOLEDBitmap[4 + X/7*8 + RemapBit/7] |= 1u << (RemapBit % 7);
} else {
_aOLEDBitmap[4 + X/7*8 + RemapBit/7] &= ~(1u << (RemapBit % 7));
}
}
}
我首先必须创建一个大的0列表来设置值,这可能会导致问题。注意,我使用1178作为大小,我希望是1175,但这不够大,所以我的位图中可能有一些零散的字节,我不确定-尽管它确实包含1024字节,这对于128x6上的每像素1位是正确的
TestBitMap = [0x00 for i in range(1178)]
然后创建用于绘制像素的函数:
def PlotPixel(x, y, c):
if x < 128 and y < 64:
x += 128 * (y / 8)
y %= 8
RemapBit = BitMutate[int(y)][int(x % 7)]
if c > 0:
TestBitMap[4 + int(x / 7 * 8) + int(RemapBit / 7)] |= 1 << (int(RemapBit % 7))
else:
TestBitMap[4 + int(x / 7 * 8) + int(RemapBit / 7)] &= ~(1 << (int(RemapBit % 7)))
然后我这样称呼它,其中bits是我的标准位图,用每像素1位的PIL生成(这是可行的,当我从标准位图中提取位时,我能够正确地看到图像):
for x in range(128):
for y in range(64):
# Plot the pixels - essentially sets all bits to 0x00, ie black
PlotPixel(x, y, 0)
for y in range(64):
for x in range(128):
if bits[(55 - y) * int(128 / 8) + int(x / 8)] & (0x80 >> (x % 8)):
PlotPixel(x + 4, y + 4, 1)
return TestBitMap
正在使用此列表重新排列这些位,该列表由最初在博客中讨论此问题的人记录:
BitMutate = [[13, 19, 25, 31, 37, 43, 49],
[0, 20, 26, 32, 38, 44, 50],
[1, 7, 27, 33, 39, 45, 51],
[2, 8, 14, 34, 40, 46, 52],
[3, 9, 15, 21, 41, 47, 53],
[4, 10, 16, 22, 28, 48, 54],
[5, 11, 17, 23, 29, 35, 55],
[6, 12, 18, 24, 30, 36, 42]]
以下是我一直用作研究的博客的链接: https://blog.segger.com/decoding-the-akai-fire-part-3/
我正在使用位图和它们提供的预期SysEx消息输出进行测试和比较,以查看我的版本如何响应
我知道Python可能不是解决这个问题的最佳语言,但这是我所熟悉的语言,因为它的最终用途,它是最合适的。我使用这个项目来学习更多关于C/C++的知识。我觉得我真的很接近,只是明显错过了一些重要的东西。任何帮助都将不胜感激:)
目前没有回答
相关问题 更多 >
编程相关推荐