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

最后编辑于2017/12/17

参考

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

最后阿酱给的演示视频

src="https://www.youtube.com/embed/k0D0HRzHt2Y" allowfullscreen="" width="560" height="315">

B站链接https://www.bilibili.com/video/av31583695/

然后橡皮擦是假的,当时记录的时候开了数组中间去掉一个太麻烦了——
以及混音只是同时播放了两个音而已

基本属性

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

class Info
{
public:
    int x;
    int y;
    int pointMode;
    Info();
    Info(int tx, int ty, int tpointMode);
};


class MainScene:public QMainWindow
{
    Q_OBJECT

private:

    QGraphicsScene Scene;

    class Line *line[10];//十条弦
    //这里画的线是用一串的points连接形成的,line特指弦
    class Points *points[50];//我这里设置画的线条最多50条(然而没有溢出报错) - 球球你换成Vector
    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直接 传坐标进来 自己写和每个点判断有没有撞

后面

导出音乐文件
以上是否要增加动画
部分mp3文件播放会有延迟
混音之类的处理


2018.2.19
后来期末都没时间写这个玩意,结果差不多是烂尾了otz

类的介绍

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

一些问题

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

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

展示

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

大概是

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

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

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

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

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

代码

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值