【数字视音频处理】【Qtcreator】音乐DIY 设计

来源:互联网 发布:java锁有几种 编辑:程序博客网 时间:2024/06/11 23:41

最后编辑于2017/12/17

参考

http://www.baofeng.com/video/239/video-37-3409739.html

基本属性

现在的点的类型pointMode
播放模式playMode

class Info{public:    int x;    int y;    int pointMode;    Info();    Info(int tx, int ty, int tpointMode);};class MainScene:public QMainWindow{    Q_OBJECTprivate:    QGraphicsScene Scene;    class Line *line[10];//十条弦    //这里画的线是用一串的points连接形成的,line特指弦    class Points *points[50];//我这里设置画的线条最多50条(然而没有溢出报错)    int point_count;//记录已经画了几条线    int pointMode;//0-4    int active_num;//widget 是-1 这个是用来判断点击事件 点到了什么东西 点到画布开始画图,点到弦的一端可以移动    int effect_index;//这个是ui界面中play下面的选项    QTimer timer;//计时器,速度快慢靠这个条件    bool checkMode;//这个是为了展示加的一个按钮public:    MainScene();    ~MainScene();    friend class MainWindow;    //清屏    void clearScene();    //下面三个都是与鼠标有关的事件    void addPoint(int x,int y);    void finish();    void start(int x ,int y);public slots:    void updateMusic();  };

小球移动的碰撞

//(x1 y1)(x2 y2)和(x3 y3)(x4 y4)两条直线是否相交的判断        int temp11 = ((y2-y1)*(x3-x1)-(x2-x1)*(y3-y1));        int temp12 = ((y2-y1)*(x4-x1)-(x2-x1)*(y4-y1));        int temp21 = ((y4-y3)*(x1-x3)-(x4-x3)*(y1-y3));        int temp22 = ((y4-y3)*(x2-x3)-(x4-x3)*(y2-y3));        if(temp11>0&&temp12>0||temp11<0&&temp12<0||                temp21>0&&temp22>0||temp21<0&&temp22<0)        {            return;//没有碰撞        }        // 这里是碰撞时间

写的有点赶所以貌似有点混乱

然后遇到的问题是本来想给 弦的两个控制点写继承成鼠标可以直接控制拖动 后来看了好几遍都没找到问题orz 只有点下的事件会激活 拖动和释放都没有
后来变成了 之前继承的QGraphicsView直接 传坐标进来 自己写和每个点判断有没有撞

后面

提取声音生成pointMode
导出midi文件
界面的一堆优化

音乐 5种 10个音阶(可以换)
配色
界面

以上是否要增加动画
延迟等等

一些音乐有关的其他设置?
比如同样的音需要的时间

http://doc.qt.io/qt-5/audiooverview.html

一些问题

上面那个类可以实现(想要的播放功能),但是想要更加细致的对音乐的处理仿佛很难做到因为Qt主要还是用户的交互

然后有些音乐播放会有很大的延迟(但是实际听起来没啥问题)我也不晓得咋回事

展示

没写稿子已经忘了怎么讲的了

大概是

1.先是提出画笔和音乐结合起来的想法,画笔和线段交叉会产生声音

这里写图片描述

2.然后这样的话没法重复长期发出声音,所以考虑把画笔保留增加那个沿着画笔运动的小球

这里写图片描述

3.希望有更多的音色,所以把音色和画笔的颜色对应起来

这里写图片描述

4.仅仅这样的话对音乐的控制还是偏少并且没有办法同时发出两个音,提出改变传统的弦的想法,让弦可以移动

这里写图片描述

后期我们将要继续完善的
- 前期的素材整理
会考虑增加更多的音色,然后按不同的风格分类
- 后期的处理
因为最后的展示结果会是一段我们自己处理的音乐,我们写的这个软件的初衷就更加侧重于简单的交互,让用户能以较少的操作体会到这种乐趣。而不是复杂的一个音乐的处理软件。
因为考虑到这一点,我们应该会对在这个软件的基础上,进一步学习一些音乐的处理,进行后期的处理。

代码

https://github.com/birdy-C/musicplayer.git

写的时候没多大问题很快就写掉了……
纠结最久的问题是不会用QGraphicItem的移动事件(现在也不知道是怎么用的)然后没办法直接自己重写了

原创粉丝点击