异星工厂吧 关注:64,751贴子:422,624

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

取消只看楼主收藏回复

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



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


    IP属地:上海2楼2017-04-27 19:13
    回复
      2026-04-24 13:22:11
      广告
      不感兴趣
      开通SVIP免广告
      播放器概述:
      将音谱"翻译"为控制喇叭播放的指定信号值,并确定间隔时间,写入常量箱中,就可以进行播放音乐.
      支持多音轨,无限扩展.
      播放器截图(核心部分):



      播放器作者:
      EFC小组

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


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

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


        IP属地:上海5楼2017-04-27 19:32
        收起回复
          以钢琴播放小星星为例,说明电路的使用.
          第一步自然是获取小星星的乐谱
          我在某网站找到了钢琴谱

          来源:

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

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


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

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

            (注意与乐谱的对照)


            IP属地:上海9楼2017-04-27 21:23
            回复
              回到游戏,来看看喇叭(翻译为程控扬声器)

              钢琴这个乐器,游戏里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
                回复
                  2026-04-24 13:16:11
                  广告
                  不感兴趣
                  开通SVIP免广告
                  为了方便演示,我拆除了一些无关的设施

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

                  不要更改信号的种类,通过更改信号值控制播放,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
                    收起回复
                      关于扩展,
                      把后面一段的谱再按同样的原理转换为信号值


                      先只播放37 37 36 36 34 34 32 这部分
                      一个常量箱是不够了,我们需要再加一个,
                      加上之后,按第一个常量箱样子再加上判断运算器,接上信号线

                      常量箱上写上值

                      最后再把这里改为2

                      就可以开始播放了


                      IP属地:上海本楼含有高级字体20楼2017-04-28 11:22
                      回复
                        多音轨播放
                        喇叭上标注的可以同时播放10个音,但要实际做到多音轨需要手动设置更改信号值与声音对应,这比较麻烦,我了解的也不多.
                        因此,这里直接用一个喇叭播放一音轨.
                        首先,把圈起来的区域用蓝图复制一份


                        将两个区域相连

                        注意连线的位置和颜色.
                        简单说一下逻辑.
                        ①②两个位置发出信号,用来控制读取第几个常量箱的第几对信号值.
                        相连后,可以让两者读取的信号位置保持一致.


                        IP属地:上海本楼含有高级字体21楼2017-04-28 14:30
                        回复
                          接下来,我们在右边部分编辑播放数据.
                          播放小星星的第二个音轨,也就是下面部分的
                          确认一下播放用的信号值


                          由之前的40t间隔,可以知道这里的信号间隔是20t
                          将数据写入常量箱:

                          这样就能播放声音了
                          不过显然两边的声音不协调,
                          原因是间隔不一.
                          前面也说过,有一个值是控制读取几个常量箱的,左边有2个常量箱,右边有4个,那应该设置为2还是4呢?(不是6的啊)
                          这就需要两边的播放数据,在间隔时间上保持一致,
                          比如右边的第一次间隔是20t,第二次15t
                          那么左边第一次也要是20t,第二次是15t
                          如果有更多个音轨,都需要保持一致.


                          IP属地:上海22楼2017-04-28 14:33
                          回复
                            让左边的间隔,跟右边保持一致:

                            再按照实际间隔重新添加数据

                            可以看到,实际间隔仍然是40t
                            其他常量箱同理设置.
                            最后把那个读取数量的值设置为4
                            完成.


                            IP属地:上海23楼2017-04-28 14:35
                            回复
                              2026-04-24 13:10:11
                              广告
                              不感兴趣
                              开通SVIP免广告
                              最后上成品:https://pan.baidu.com/s/1jINvdMQ


                              IP属地:上海24楼2017-04-28 14:39
                              回复