自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 KeyboardPianoV0.0 项目介绍

KeyboardPianoV0.0 项目介绍该项目是基于 java 环境开发的个人项目——Keyboard Piano,即键盘钢琴通过键盘按键绑定,响应音频播放,从而模拟钢琴的演奏。说人话就是,按一个键,发一个声。。。所以整个项目其实也没什么技术难点,不懂就猜,不会就查。这样瞎鸡巴把项目给搞起来了也正因为如此,萌生了写博客记录学习过程的念头,也好总结一番,跟大伙分享一...

2019-09-16 10:55:34 338

原创 KeyboardPianoV1.8 Debug(Unhook)

文章目录详细步骤例行说明具体步骤代码分析相关链接详细步骤例行说明V1.3.1 BUG 记录 中写到,使用 Hook 钩子函数拦截系统按键信息,并屏蔽系统按键,导致一个问题,只要程序运行着,即使程序最小化,系统也无法正常按键,所以这个版本将修正该 BUG具体步骤当程序窗口获得焦点时,启用钩子函数监听系统按键反之,当程序窗口失去焦点时,取消监听屏蔽,恢复系统按键代码分析Key...

2019-09-22 15:17:52 177

原创 KeyboardPianoV1.7.3 线程池

文章目录详细步骤例行说明代码分析相关链接详细步骤例行说明Thread creation and destruction is very expensive由此引入线程池科学管理线程,又根据音频播放的并发性以及数量的不确定性,选择缓存线程池 CacheThreadPool 管理音频播放其特点是:线程数没有限制,线程重用率高,并且有一个超时回收机制,当空闲的线程超过 1 分钟就...

2019-09-22 14:22:54 127

原创 KeyboardPianoV1.7.2 Debug(音频优化)

文章目录详细步骤例行说明具体步骤优化过程Option相关链接后记详细步骤例行说明V1.7.1 主要在 MyButton 中处理贴图优化,这个版本开始整顿 MusicPlayer具体步骤Task Manager => 内存猛增 => JConsole => 堆内存泄露 => Memory Analyzer => 分析原因优化的过程:Clip 播放 +...

2019-09-22 12:14:29 189

原创 java 堆内存泄露排查(例子)

文章目录配置说明排查之路视频教程图文教程数据表格相关链接后记配置说明系统:Windows10项目:KeyboardPiano V1.7对象:音频播放类 com.sun.media.sound.DirectAudioDevice$DirectClip原因:sun 的老旧框架,Clip.close(),音频数据 audioData[] 无法释放,从而导致堆内存泄露工具:JConsole...

2019-09-22 12:09:52 730

原创 KeyboardPianoV1.6.*(忽略版本)

V1.6.* 的版本都是 Debug 版本,更合适地讲是试错的版本,而且 BUG 处理不完整,总之就是一个字,乱(代码乱,逻辑乱)所以,很负责任地讲,V1.6.* 的版本没必要看,没有教程说明,也不用去看代码。以免误导视听,扰乱思路!后面的版本会详细、系统地分析说明所以说,写这篇博文也只是滥竽充数,进一步的学习请直接跳到 V1.7.1 Debug(贴图优化) (V1.7 只做排版而已,同样建...

2019-09-22 11:46:28 84

原创 KeyboardPianoV1.7.1 Debug(贴图优化)

文章目录详细步骤例行说明具体步骤代码分析Option详细步骤例行说明Debug 开篇引言——越往后越难,情况越多越复杂,坐稳啦V1.5.1 中 switchCase & graphicsImageSet() 的代码解释下有引出一个 BUG每 paint 一次,就会初始化一次按钮的贴图,重复的初始化,导致无缘无故地消耗内存,属于代码逻辑错误具体步骤正确的处理...

2019-09-22 11:44:24 132

原创 KeyboardPianoV1.6 MusicPlayer

文章目录详细步骤例行说明具体步骤代码分析OptionsOption1后记详细步骤例行说明本着最小代价/资源化原则,使用 java 自带的音频播放器(位于 javax.sound.sampled 包内),格式上仅限于 wav 音频(MP3 翻车不支持,且对 wav 频率&位 有范围限制)这里博主使用 44100 Hz, 16 bit 的格式所以与其说是选择了 wav,倒不如说是选...

2019-09-19 16:50:50 281

原创 KeyboardPianoV1.5.3 鼠标事件

文章目录详细步骤例行说明具体步骤代码分析相关链接详细步骤例行说明首先贴一张贴 全键按下图 (可见于 KeyboardPianoV0.0 项目介绍)即使一个人把所有按键一次性全部按下,也未必能达到这种效果,因为即使是那种全键无冲的键盘,也可能有翻车 ←_←那博主是怎么做到的呢?其实问题的关键就是一开始选用的开关按钮 JToggleButton,使用鼠标点击一次,按钮就不会弹起来,所以才...

2019-09-19 10:57:29 95

原创 KeyboardPianoV1.5.1 MyButton(调用)

文章目录详细步骤例行说明具体步骤代码分析==Attention==OptionsOption1Option2相关链接详细步骤例行说明V1.5 已构建好 MyButton,等待 V1.5.1 的调用,调用实现按钮的贴图修边美化具体步骤MyButton 构造方法初始化按钮,消去边框,设置大小paintComponent() 画按钮组件 => switchCase() 按...

2019-09-19 10:51:52 213

原创 KeyboardPianoV1.5 MyButton(创建)

文章目录详细步骤例行说明代码分析详细步骤例行说明还是原先的老套路,先实现后调用,先把 MyButton 做出来,到后续版本再调用之所以要自己做个 MyButton, 是因为 JToggleButton 功能比较有限,但又不完全没有用,所以选择了 extends,这样即继承 JToggleButton 的所有功能,又可以添加新的功能进去,就一个字 爽 ∩ω∩代码分析set...

2019-09-19 09:02:06 134

原创 KeyboardPianoV1.4.1 配置管理

文章目录详细步骤例行说明具体步骤代码分析OptionsOption1相关链接详细步骤例行说明就如之前 V1.3 - V1.3.1 的关系一样,V1.3 做前期准备,V1.3.1 做调用处理这里 V1.4 - V1.4.1 也是同个道理,但这个版本只做配置管理,为下个版本做调用前准备具体步骤新建一个 PropertiesManage 配置管理类这里实际上有一入另一种设计模式 ...

2019-09-18 11:49:12 135

原创 KeyboardPianoV1.4 音频贴图

文章目录详细步骤例行说明分类介绍具体步骤OptionsOption1Option2相关链接详细步骤例行说明该版本主要做前期资源准备,包含音频、贴图、配置文件等分类介绍键盘按键 按照形状划分成 6 种,按颜色分成 5 种(左右手+按下抬起+空)wav 音频分类,这里要看 pitch 分 7 种,Octave 分 9 种由于博主对音调音高一窍不通,就不在这里瞎 BB 了,有...

2019-09-18 11:15:51 149

原创 KeyboardPianoV1.3.1 按钮绑定(调用)

文章目录详细步骤例行说明具体步骤代码分析BUG 记录OptionsOption1详细步骤例行说明上一个版本已经把键盘监听的框架搭好了,就差调用绑定了具体步骤callback() => switchKey() => select() 没了代码分析callback() 监听键盘事件,把 vkCode & wparam 传递给 switchKey() 进行按...

2019-09-17 22:28:58 264

原创 KeyboardPianoV1.3 按钮绑定(搭建)

文章目录详细步骤例行说明具体步骤代码分析相关链接详细步骤例行说明有了各个键值 vkCode,就可以做按钮绑定了上个版本 V1.2.2 还不是严格意义上的写代码,从 V1.0 到现在一行代码都没写,手都开始痒起来了。。。具体步骤首先需要用到两个 jar 包,按照以下链接下载并导入,img1链接:https://pan.baidu.com/s/1n7kIidocxo0tAGoo...

2019-09-17 22:24:01 149

原创 KeyboardPianoV1.2.2 vkCodes

文章目录详细步骤例行说明具体步骤OptionsOption1Option2Option3相关链接详细步骤例行说明有了 104 个按钮后,就需要绑定键盘上的按键,使其一一对应那问题来了,怎么做 按键绑定 呢?实际上键盘上的每个按键都有一个特定的值(vkCode),所以在做绑定之前,是不是应该把这些 识别码 给找出来呀!单纯知道这些值并没有什么卵用,将其成员化为我所用才是硬道理,所以该版...

2019-09-17 17:42:30 271

原创 KeyboardPianoV1.1.1+V1.2+V1.2.1 代码调整

文章目录KeyboardPianoV1.1.1 按钮修正KeyboardPianoV1.2 按钮重命名KeyboardPianoV1.2.1 按钮调整KeyboardPianoV1.1.1 按钮修正Debug 版本去除位于数字键盘上方的 4 个多余按钮 img1但是遗留了一个 BUG 数字键盘 0 号键 被分割,该 BUG 于 V1.2 更正当然也可以两个 BUGs 一起处理,只...

2019-09-16 22:21:09 172

原创 KeyboardPianoV1.1 布局调整

文章目录详细步骤例行说明具体步骤OptionsOption1Option2Option3Option4后记详细步骤例行说明V1.0 的版本运行不了,出来混的,总是要还的嘛。V1.1 就来解决这个运行问题,顺便把多余的包清除掉注:由于博主能力有限,没能把 GitHub 强大的版本控制功能用好,所以用了一个最蠢的办法做项目的版本管理,倘若有兴趣了解的童鞋,请移步到 Option1 查看...

2019-09-16 21:14:24 167

原创 KeyboardPianoV1.0 界面搭建

文章目录详细步骤例行说明具体步骤OptionsOption1Option2Option3Attention相关链接详细步骤例行说明项目一上来,就是要把界面搭起来。万事开头难,V1.0 会啰嗦一点,图多话多,要耐心其实界面搭建没啥技术含量,只要有耐心 + 、小技巧,轻轻松松搭完界面,而且不用写一行代码有视频教程,也有书面教程;既有中文版,也有英文版。就是这么拽 ^ ^具体步骤...

2019-09-16 17:27:50 284

原创 HandOverHead

HandOverHead借助 Kinect 传感器实现 Hand over head 的功能识别, 改变手中圆圈的颜色(红色)作为手超过头部的信号一、项目分析1.1 项目来源借助已有项目 BodyBasics-WPF (C#), 已实现合拳和张掌的识别,整体框架已搭建完成,方便后续操作由上图可见,手(握拳)低于头部,手上的圆为红色如图,举手(握拳)超过头部,手部的定位...

2018-12-19 23:58:36 207

原创 MergeSort

MergeSort 归并排序主要说明优化的过程,如讲解过程不明了,请见 源码简介归并排序是将数组不断二分(divide)至单节点/双节点,排序后再逐一合并(merge)回原始数组的算法其实现过程是分治(divide and conquer)的典例概述sort0(); 主要是将数组长度分为奇偶的情况进行 divide,merge 两种情况通吃相对 sort1 而言数...

2018-11-05 23:42:22 184

原创 MinMaxHeap

MinMaxHeap最小-最大堆 (混合堆) MinMaxHeap源码简介特点集合 min & maxHeap 的功能 详细见 BinaryHeap支持原有操作,并同时具备 deleteMin & Max 操作同样使用数组实现只有 root 元素时,root 即是最大值也是最小值最小值永远在 root 位置,最大值总在 root 的儿子里下标...

2018-10-26 10:08:43 654 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除