异星工厂吧 关注:61,197贴子:391,753

【音乐电路】通配型-音乐播放器

只看楼主收藏回复

立于浮华之世,奏响天籁之音.



IP属地:上海1楼2017-04-27 19:13回复
    二楼备用


    IP属地:上海2楼2017-04-27 19:13
    回复
      然而一分钟过去了


      IP属地:辽宁来自iPhone客户端3楼2017-04-27 19:14
      收起回复
        播放器概述:
        将音谱"翻译"为控制喇叭播放的指定信号值,并确定间隔时间,写入常量箱中,就可以进行播放音乐.
        支持多音轨,无限扩展.
        播放器截图(核心部分):



        播放器作者:
        EFC小组

        音乐:@天马行空的友情
        电路:御道风云
        ps:
        不知道国外有没有已经做出高时长高质量的音乐,希望现在还不迟.
        其实如果不是我强行装逼,星期二大概就能搞定的.
        我个人是个音痴,演示用的小星星都是别人帮忙做的,如果说明时用错了名词,请指正.
        该电路是标准版,如果有人使用需要额外的功能,请联系我获得帮助.以后可能会更新,请最好使用最新版.
        祝每个厂长都能听着战歌杀虫子.


        IP属地:上海本楼含有高级字体4楼2017-04-27 19:19
        回复
          百度云科学链接:/1kUU4wFd

          生效请告知,所有的相关蓝图都会放在这里.


          IP属地:上海5楼2017-04-27 19:32
          收起回复
            可以


            来自Android客户端6楼2017-04-27 19:42
            回复
              点个赞!


              IP属地:浙江7楼2017-04-27 20:54
              回复
                以钢琴播放小星星为例,说明电路的使用.
                第一步自然是获取小星星的乐谱
                我在某网站找到了钢琴谱

                来源:

                我们需要把乐谱表示的钢琴键位确定.
                乐谱上面标明了对应的钢琴位.不过我们不能用1-7来表示
                这里有一份钢琴按键表:

                由此也可以看出钢琴总共有88个键,52个百键,36个黑键.其中黑键在后面加一个#来表示


                IP属地:上海8楼2017-04-27 21:21
                收起回复
                  把乐谱标上对应的键:

                  也就是说,小星星前面一点的弹奏顺序是这样的:

                  (注意与乐谱的对照)


                  IP属地:上海9楼2017-04-27 21:23
                  回复
                    有声版BAD APPLE正在赶来的路上


                    IP属地:天津11楼2017-04-27 22:30
                    收起回复
                      回到游戏,来看看喇叭(翻译为程控扬声器)

                      钢琴这个乐器,游戏里48个音,我用A信号来控制发声.
                      信号值与音调的顺序是对应的.
                      (A,1)=F3
                      (A,2)=F3#
                      (A,3)=G3
                      ......
                      依此类推
                      因此我们可以做一个音调与信号值的对应表
                      (由于选择我们用不到黑键,也就是带#的音,就先不记了)

                      可以发现实际钢琴的音与游戏钢琴的音是有差别的
                      实际钢琴的c2建位于小字二组,声音大概和游戏的C6音调相仿(详细的就要看音乐大佬的了)
                      那g2就相当于G6
                      同依此类推.
                      那么:

                      由前面的 音调与信号值对应表 可以知道,
                      (A,32)=C6
                      (A,39)=G6
                      .....
                      那信号值就是:

                      由前面的乐谱可以知道,每个音之间的间隔是相同的.
                      我们先假定其间隔是40t(1秒=60t),我不懂音乐,40t只是我个人感觉的间隔.
                      确定这几个东西就可以尝试播放乐谱前面一点的上部分了


                      IP属地:上海12楼2017-04-27 23:29
                      收起回复
                        如果感觉这样来回转换太麻烦,我搞了一个钢琴的译码器,会方便一些,后面再发


                        IP属地:上海13楼2017-04-27 23:30
                        回复
                          为了方便演示,我拆除了一些无关的设施

                          首先打开播放数据区的第一个常量箱

                          不要更改信号的种类,通过更改信号值控制播放,A-I控制间隔时间, 0-8是控制音调

                          这样设置的含义是
                          播放信号32对应的声音-------等待40t----------播放32对应的声音
                          我们要播放的是
                          32 32 39 39 41 41 39
                          那就是这样设置:


                          IP属地:上海本楼含有高级字体14楼2017-04-27 23:32
                          回复
                            播放时不允许无间隔,把后面的也加上间隔

                            到这里我们已经完成了80%
                            我们只用到了一个常量箱,在这里:

                            把值设置为1
                            用几个常量箱就设置为几,这个值决定了读取几个常量箱
                            最后一步

                            扔个东西到蓝色传送带就播放了
                            (以后我会改进开始播放和结束播放的控制,先这样凑合着吧....)
                            你就能听到熟悉的"明天都是小星星"了,(我都已经听吐了好吧......)
                            如果你不结束它会一直循环
                            结束播放:
                            点开这个运算器

                            把大于号> 改为小于号< 然后再改回 大于号>
                            看过电路基础的应该知道这是一个存储器,上面的步骤是在打断循环,手动重置存储器.
                            如果无法正常开始,也可以重置一下.
                            圆满完成
                            接下来说明多音轨和扩展


                            IP属地:上海本楼含有高级字体15楼2017-04-27 23:36
                            收起回复