【数字视音频处理】【Qtcreator】音乐DIY
最后编辑于2017/12/17
参考
http://www.baofeng.com/video/239/video-37-3409739.html
最后阿酱给的演示视频
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的移动事件(现在也不知道是怎么用的)然后没办法直接自己读鼠标事件直接算结果……
上一篇: XAudio2 (一)