Java平台通过其javax.sound.midi包提供了强大的MIDI处理能力,使开发者能够在应用程序中创建、编辑和播放音乐。...本文将详细介绍一个基于Java MIDI技术的音乐播放应用,该应用能够演奏经典的"生日快乐歌"。...通过这个简单而实用的例子,我们将探索Java MIDI编程的基础知识,包括音符表示、音乐序列创建、音符添加以及音乐播放等核心概念。...演绎效果 https://live.csdn.net/v/487674 技术说明 Java MIDI API概述 Java Sound API中的MIDI部分提供了一套完整的接口和类,用于处理MIDI数据和控制...总结 这个Java MIDI音乐播放应用展示了如何使用Java的声音API创建和播放音乐。通过分析,我们可以将程序分为以下几个核心模块: 1.
在 Java 中,有一些替代方案可以用来实现 FTP 服务器功能,类似于 Python 中的 pyftpdlib。目前我们常用的就是三种替换方案,这里需要根据自己的项目需求选择合适的方法。...1、问题背景在 Java 环境下寻找一款与 pyftpdlib 类似的 FTP 服务器库,要求易于配置和运行,以便嵌入到应用程序中。...2、解决方案Java 中有许多可替代 pyftpdlib 的 FTP 服务器库,其中包括:Apache FtpServer:Apache FtpServer 是 Apache Jakarta 项目的一部分...;import java.net.InetSocketAddress;public class MinaFtpServerExample { public static void main(String...,要知道这些 Java FTP 服务器库都提供了丰富的功能和灵活的配置选项,可以根据我们的需求选择最适合的替代方案。
在开发Java音频处理应用时,使用MIDI(Musical Instrument Digital Interface)接口是一个常见的需求。...MIDI是一个标准协议,允许电子乐器、计算机和其他相关设备之间交换音乐表现信息。在Java中,MIDI数据的处理主要通过javax.sound.midi包中的类来完成。...二、可能出错的原因 导致javax.sound.midi.InvalidMidiDataException的原因主要包括以下几种: 数据超出范围:MIDI协议规定了特定范围内的有效数据值,如果提供的数据超出这个范围...例如,MIDI消息的状态字节应在0到255之间,而数据字节应在0到127之间。 无效的MIDI命令:尝试创建不符合MIDI标准的命令或消息也会触发该异常。...理解MIDI协议:深入理解MIDI协议的结构和要求,有助于在编写代码时避免无效的数据或命令。
文章目录 一、问题说明 二、查找 midi 文件中速度相关的二进制数据 一、问题说明 ---- 解析 midi 文件时 , 发现音符解析出现异常 ; 是根据 音符 微秒时长 , 统计音符时 , 发现音符解析出现异常...查看 midi 文件的速度 ; 可以看到 , 开始的速度是 70 bpm , 在 1/5 位置 , 速度变成了 65 bpm ; 二、查找 midi 文件中速度相关的二进制数据 ---- 参考 【...BLE MIDI】MIDI 文件格式分析总结 ★★★ 八、FF 51 03 四分音符时长 博客章节 , 可以知道 , FF 51 03 是时间设定的标志 ; 使用二进制查看工具 , 打开该 midi 文件..., 发现该 midi 中竟然有 2 个 FF 51 03 速度设置标志 , 两个速度标记之间的 84 C1 48 是 delta-time , 单位是 tick , 参考 【BLE MIDI】MIDI...文件格式分析总结 ★★★ 六、delta-time 间隔 博客章节 , 计算该 delta-time 值 ; 设置了 2 次速度 , 这样就导致了音符的时间计算错误 ;
很多小微型应用程序也需要一些数据处理和计算能力,如果集成一个数据库就显得太沉重了,小巧轻量的 SQLite 是个不错的选择,因而被广泛应用。不过,SQLite 也有些不方便的地方。...如果你恰好是在用 Java 或安卓上编程,那么 esProc SPL 可能是个更好的选择,那些问题都不复存在了。...esProc 也是个免费开源的软件,是纯 Java 开发,把 jar 包直接引入到 Java 应用程序中就可以使用了,完全无缝集成。...esProc 也提供了标准 JDBC 接口,就像访问数据库一样可以被 Java 主程序调用,只不过 esProc 使用的查询语言称为 SPL,而不是 SQL。...的代码是写在格子里的,乾学院 里有更多信息。
文章目录 前言 一、Android 相关的 BLE MIDI 资料 二、iOS 相关的 BLE MIDI 资料 三、支持 BLE-MIDI 模块 BT401 四、单片机制作电子乐器 五、博客资料 前言...MIDI 信号 ; 本博客主要是收集一下网上的相关资料 ; 蓝牙 MIDI 是苹果的专利 , 基本上 iOS , Mac 系统上 , 对 BLE MIDI 支持的很好 , 但是对于 Android ,...支持的不是太好 , Android 在 6.0 以后的系统中逐渐加入了对 MIDI 的支持 ; 市面上的 BLE MIDI 对 iOS 兼容的很好 , 但是对 Android 兼容的不太完善 ;...二、iOS 相关的 BLE MIDI 资料 ---- 在网上找到一个 苹果的蓝牙低功耗 MIDI 规范 , " Apple Bluetooth Low Energy MIDI Specification.pdf...自制卡林巴电子琴,可通过蓝牙连接手机库乐队 MIDI Boy【理科生的第一件乐器】 在上述 【MIDI_Boy】使用ESP32做一个炫酷的【卡林巴】【电子琴】, 可通过蓝牙MIDI连接手机库乐队 博客中涉及到一些
tempo:速度,默认值500000,代表一个拍子的时长是500000微秒,也就是0.5秒,也就是1分钟120拍。...beat:拍子,也就是一个四分音符 tick:拍子不是midi文件里最小的时间单位,tick是最小的时间单位,代表把beat分成多少份。...tick越大切分越细,对音乐的表现就越细腻,也就是resolution越高。 每一个message的time属性:单位是tick,表示和上一个message的时间距离。...time signature:对应于五线谱上的拍号,6/8拍的意思就是以八分音符为一拍,每小节有六拍。...那么拍号会影响乐曲的时长吗,答案是不会,拍号是用来表现音乐的节奏,音符与音符之间强弱关系的,虽然叫做time signature但是不是一个用来度量曲子时间的单位。
这是两个步骤并不是原子性这就是在获取完之后原字符被另外一个线程修改了然后本线程将旧数据新增的字符统一写会内存中这就导致另外一个线程写入的数据丢失。...我们自己也可以解决这个问题就是在调用append的方法之前加一把锁Lock或者synchronized 。再次送审====毫无意外这次还是没有通过。经理给出的回复是加锁太笨重了。...在append这里加锁不仅增加了代码的复杂性还容易忘记释放锁。这时候打开百度开始取经。网络上都推荐使用StringBuffer因为他是线程安全的。...不过StringBuffer中的toStringCache的作用就是在tostring的时候将最后一个字符缓存起来提高使用性吧。总结==经验就是时间的积累。如果在我看来我就仅仅加把锁完事解决。...但是因为没有经历过并发的洗礼可能操作不好锁的事情java内置提供的尽量使用别人的。不要造轮子但是得知道轮子的建造过程我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!
.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public...registerObserver(BPMObserver observer); void removeObserver(BPMObserver observer); } import javax.sound.midi...示例参考:https://www.jianshu.com/p/1c6d5d6bb8d6 Model1 早期的Java EE项目全部采用JSP编写,JSP文件既要负责创建HTML页面,又要控制网页流程.同时还要负责处理业务逻辑...这给Java EE的开发带来一系列问题 如 代码耦合性强,系统控制流程复杂,难以维护等,为了解决这些问题,原Sun公司制定了Model1模式作为Java EE程序员开发的考性规范....在Java EE程序开发中,通常用JSP负责动态生成Web网页,而业务逻辑则由其他可重用的组件(如JavaBean)来实现 .JSP可通过Java程序片段来访问这些组件,于是就有了JSP+JavaBean
,但还是希望读者能意识到它本质还是家商业公司,在提供这么多好用、免费的功能同时,肯定会在其他方面找回来,比如前不久收费的副驾驶员 Copilot[9],毕竟天下没有免费的午餐。...,当时的 CEO 在 Twitter[12] 上是这么回应的: It is painful for me to hear how trade restrictions have hurt people....在俄罗斯攻打乌克兰时,也有群众呼吁禁用俄罗斯的用户访问,不过最后没有实施[13]。 当然,不仅仅是上述原因,重要文件多处备份永远都是非常必要的。...— Codeberg News[15] • Why I Use Sourcehut | parasrah[16] 个人觉得,追求纯 FOSS 有些属于软件开发领域的意识形态,属于吃饱没事干才会考虑的问题...,但人就是这样的物种,多多少少都有些自己的坚持。
数据传输对象是在进程之间承载数据的对象。使用它的动机是进程之间的通信通常通过远程接口完成,其中每次调用都是昂贵的操作。...由于每次调用的大部分成本都与客户端和服务器之间的往返时间有关,因此减少调用次数的一种方法是使用一个对象(DTO)来聚合本应传输的数据由几个呼叫,但仅由一个呼叫提供服务。...在这种情况下,最好的方法是返回实体本身。 2 JPA 投影 我们在特定情况下请求特定数据。因此,当调用到达数据访问层时,所需数据的范围是完全已知的:执行适合此范围的 SQL 查询是有意义的。...本质上,查询中的投影允许精确地选择想要的数据。...GraphQL 为您的 API 中的数据提供了完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,使 API 更容易随着时间的推移而发展,并支持强大的开发人员工具。
周末闲逛 Twitter 时,发现一个很有意思的小工具叫 kubeman,野心倒是不小,励志成为 kubectl 的替代品,用于实时监控和管理 kubernetes 集群,还可以调试与 Istio...如果只使用 kubectl,当网格中的服务出现问题时,可能需要运行很多命令,而且要交叉引用来自多个命令的输出信息,这就会导致问题分析的过程很复杂。...还提供了一些额外的操作: 一旦操作项运行并输出了结果,你就可以在输出面板顶部的搜索框里通过关键词搜索相应的文本。如果想删除搜索的关键词,可以按下键盘上的 esc 键。 ?...每个操作项的输出会按层级进行分组。最顶部的输出行(深蓝色)显示的是输出结果的标题,单击这一行会将整个输出折迭起来,只显示组和子组,这样就可以看到整个输出的概要。再次单击这一行就会显示整个输出。 ?...同理,你可以单击某一个组来折迭这个组的输出,只显示子组。同理适用于子组。 不同的子组下的输出都可以展开和折迭,你可以上下滚动来选择感兴趣的子组,然后单击展开输出。 ?
Postwoman 一个开源、免费、快速、漂亮的 API 构建器,可以替代 Postman。 这个名字起得挺有意思,感觉像 Postman 的媳妇。...Postwoman 的诞生过程: 它的作者是一个全栈开发工程师,经常使用 Postman 做 API 测试,Postman 对不同操作系统都做了客户端,作者常在不同平台做测试,感觉这点非常麻烦,而且 Postman...还收费,也不支持 cURL,还有其他一些让他不爽的地方,这时作者就起了掐死 Postman 的念头,他心中想要一个这样的 API 测试工具: 开源 在线运行 多平台支持 多设备支持 可以在任何地方访问...POST 中添加原生域 支持集合,可以把请求放入集合 支持代理 支持Docker 功能真不少,我对她支持 cURL 和 GraphQL 比较感兴趣,试了一下导入cURL,输入curl命令后,她会自动转为普通的请求方式
在Dart语言中并没有接口的概念,但接口的功能需要其他功能来弥补,这就是抽象类。接口的作用是用于制定规范。也就是说,在接口中定义的方法,都必须在实现接口的类中实现。而且接口本身并不能实例化。...Dart中的抽象类与接口类似,但也有一定的差异。它们的区别、联系以及主要用途如下: • Dart抽象类允许定义没有方法体的方法,这一点与接口一样。不过也允许定义包含方法体的普通方法。...• 如果在Dart抽象类中定义没有方法体的方法,那么抽象类的子类必须实现这个方法,否则子类也出现编译错误,除法将子类声明为抽象类,否则代码无法编译通过。...• 抽象类中有方法体的方法就是普通方法,在抽象类的子类中并不要求覆盖这些普通方法,但要想使用普通方法,必须用普通类继承抽象类,才可以实例化,并调用这些普通方法。 • 通常可以用抽象类实现多态的效果。...尽管这两个变量中包含了同样的方法,但由于这两个类中实现方法的代码不同,所以通过这两个变量调用同名方法的效果也不同,这就叫多态。
在《UVM实战》这本书中,一直说virtual_sequence/sequencer都不是真正的sequence和sequencer,都是起到一个调度的作用。...,并且发送到真正的sequencer去。...中的某个具体的sequencer,不知道你是否有这样的疑问。...现在回到上面的问题,是不是所有的sequence都要发给virtual sequencer中的某个具体的sequencer,一一对应呢?...,virtual_sequencer中也没有对应的config_sequencer。
概述在之前的一篇文章中,作者写了一个事件组件-- 超精简的订阅发布事件组件--SPEvent,这个组件是采用链表建立所有事件节点的关系的。...链表的优缺点:优点:①链表上的元素在空间存储上内存地址不连续;②在插入和删除操作时,只需要修改被删节点上一节点的链接地址,不需要移动元素;缺点:①没有解决连续存储分配带来的表长难以确定的问题;②失去了顺序存储结构随机存取的特性...SPEvent实际不会存在删改的动作,显然链表的优点在这个组件中无法体现优势。而实际顺利存储更能满足SPEvent的业务及能力,那么有什么方式能做到这个操作了?...采用KEY-VALUE的特性开查找对象。...int16_t top; // vector当前已经存储的数据的峰值数目 int16_t free; // vector已经被释放的数据记录数目
源码地址:https://download.csdn.net/download/FL1623863129/89599322
在之前我介绍过了notion,这款强大的制作笔记的应用,说是笔记,其实它可以记录的内容非常多。具体可以翻看之前的文章。当然了,里面有部分强大的内容不是免费试用的。...今天来介绍一个记笔记的应用 AppFlowy 。这个是一个完全开源的产品。...同样的,AppFlowy 也是支持Mac / Windows / Linux Packages 这3个端的。并且明确的说了,完全的,100%免费!...打开应用后,先进行数据保存地方的设置,设置完成之后,就可以看到它的展示页面,在这个页面会有小教学。 它是支持中文设置的,那么我们第一步,就先设置中文。...其他的比如主题,字体等设置,就可以自行去更改了。都在设置选项里 相比于memos的过于简单,notion的功能繁杂,或许这款100%开源的AppFlowy 也是一个不错的选择。
如今,越来越多的音乐人选择使用音乐制作软件来进行音乐的创作,一台电脑、一款软件以及一个外接MIDI就是一个小型的音乐工作站。...FL Studio支持多种音频文件格式,包括MIDI、MP3、WAV、OGG等,可以帮助用户自由地进行音乐创作。...Step Sequencer”(步进式编曲器)使得音符的创建和编辑变得简单易懂,即使是音乐制作初学者也能轻松上手。...FL Studio 21水果音乐制作软件介绍什么是FL Studio水果音乐制作软件FL Studio 21让你的计算机就像是全功能的录音室,漂亮的大混音盘,先进的制作工具,让音乐突破想象力的限制。...升级了混音台功能,增强了渲染功能,可以对效果器和MIDI音频进行格式化。FL Studio还有许多个性的专业音乐效果器插件,可以满足你在音乐上的所有想象力。
接下来,表哥为大家分享一下优秀替代品吧! notepad next 对于习惯了notepad++的用户,或许很难适应其他的替代品,目前的话这款确实是用的最舒服的。...VSCode IDEA RJ TextEd RJ TextEd是一个使用Delphi 2007开发的免费Unicode源码和文本编辑器,它是一个多国语言版的编辑器,包含简体中文,使用它可以方便地编辑html...、css、java、jsp、javascript等纯文本文件。...并支持多种开发语言的语法高亮支持,支持多种外观主题,支持代码折叠等功能,查找功能支持正则表达式等。...其他 当然除了上面几款优秀的工具之外,还有UltraEdit、sublime text 这两款软件也不错。但是商业软件。大家可以根据自身的需求进行选择。