2017-03-06 生活

和上一次的 Hackathon 很像,这次队伍是 hcz, Wally, Tiger

分了两个组,Wally 和 Tiger 做了一个地铁模拟游戏的外设,焊板子锯木头花了不少时间。 我和 hcz 专注于使用一条红外测距制作一个乐器。

这次去之前没什么准备,基本上都是现场开始做。使用了 The Synthesis ToolKit in C++ 进行声音合成以及输出。 我是在赛场上才第一次见到这个库,对于音乐制作我也不是很熟悉, 所以一开始挺长的时间都在研究这个库的文档还有那些音乐制作的概念。 最后效果还可以,实现了多种乐器,多种声音效果。 在过程中有一个硬件问题当时还以为碰上了玄学,红外感应输出很不稳定,时断时续还有诡异的数据, 想了挺久才发现是建筑学院里的大灯功率太高产生了干扰(扶额)。

接下来我想说说这次我觉得可以改进的地方。

首先,研究这个库和音乐制作花了很多时间。这可以有几种方法避免。 一是提前学习一下,或者说不要在赛场上进入一个完全陌生的领域。 另一种方法其实是我在比赛结束之后才想起来的,对于这一次的目的,制作一个乐器, 我们使用的方法是,从 USB 数据包中得到手指位置信息,然后完全由我们自己来生成声音并输出, 这对于我们其实是一种相对比较难的方法。我们一部分使用库,另外也手写了一些音效, 一直到最后都不算稳定工作。也许直接模拟一个 MIDI 键盘是一个更好的方法, 因为 MIDI 键盘输入之后的声音合成以及输出都是非常成熟的。

第二,在我们自己写的声音合成部分,一直有各种诡异的 bug,到最后我们都在 debug。 我觉得以后在这种比赛中,不要 debug 到最后一分钟, 最好能在最后留一些时间做一些收尾工作,比如准备展示。 到了最后一个小时,如果有一个功能仍然有问题,可以考虑放弃这个功能。 所以,在比赛的过程中,尽量有一个 stable 分支,保持一个可用的产品,到后面可以直接切回 stable 分支。

最后,还有展示,这两次比赛展示部分都不算好。在上一点中也提到了, 我们几乎所有的时间都在做这个产品,但几乎没有考虑怎样做一个好的展示。 所以以后在前期就要考虑怎样展示这个产品。