关于Thread.sleep()不可靠的答案是正确的:你不能指望它完全返回你指定的时间.事实上,我很惊讶你的节拍器可以使用,特别是当你的系统负载不足时.阅读Thread.sleep()的文档以获取更多详细信息.关于MIDI的Max Beikirch的答案是一个很好的建议:MIDI处理时机非常好.

但你问如何用音频做到这一点.诀窍是打开音频流并在节拍器点击之间填充静音,并将节拍器点击插入所需的位置.当您这样做时,您的声卡以恒定速率播放样本(无论它们是否包含咔嗒声或静音).这里的关键是保持音频流打开,永不关闭它.那么,时钟是音频硬件,而不是你的系统时钟 – 一个微妙但重要的区别.

因此,假设您正在以44100 Hz生成16位单声道样本.这是一个以所需速率创建咔嗒声的功能.请记住,这种咔嗒声对扬声器(和你的耳朵)来说是不好的,所以如果你真的使用它,请以低音量播放. (此外,此代码未经测试 – 只是为了演示这个概念)

int interval = 44100; // 1 beat per second, by default

int count = 0;

void setBPM( float bpm ) {

interval = ( bpm / 60 ) * 44100 ;

}

void generateMetronomeSamples( short[] s ) {

for( int i=0; i

s = 0;

++count;

if( count == 0 ) {

s = Short.MAX_VALUE;

}

if( count == interval ) {

count = 0;

}

}

}

使用setBPM设置速度后,可以重复调用generateMetronomeSamples()函数生成的样本,并使用JavaSound将输出流式传输到扬声器. (请参阅JSResources.org以获得一个很好的教程)

一旦你有了这个工作,你就可以用从WAV或AIFF或短音或其他任何东西获得的声音来代替刺耳的咔嗒声.

用java设计节拍器_具有高速的Java节拍器相关推荐

  1. java 上下文加载器_【深入理解Java虚拟机 】线程的上下文类加载器

    线程上下文类加载器 线程上下文类加载器( Thread Context ClassLoader) 是从JDK1.2 引入的,类Thread 的getContextClassLoader() 与 set ...

  2. 如何听节拍器_二胡初学者如何使用节拍器? | 乐器教程网

    节拍器是针对初次学习乐器的人,尤其是音乐节奏概念还不成熟.不稳定的人,使用的一种工具.作为一种辅助手段,让学乐器的人建立稳定的节奏感,是有一定作用的,对于音乐节奏感强的人,就用不着节拍器了. 节拍器是 ...

  3. java主要内存区域_可能是把Java内存区域讲的最清楚的一篇文章

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种方式(句柄 ...

  4. java编写布局文件_鸿蒙OS利用JAVA编写的布局实践练习

    鸿蒙OS利用JAVA编写的布局实践练习 鸿蒙OS利用JAVA编写的布局实践练习 目录 JAVA UI框架 利用JAVA代码实现一个简单的布局 利用xml实现上述布局 JAVA UI框架 ??应用的Ab ...

  5. java图形界面多线程_多线程编程、Java I/O系统和Java图形界面编程

    多线程编程: 一个正在运行的程序通常称为一个进程,每一个任务称为一个线程,中能够在一个程序内运行多线程的程序称为多线程程序. 线程与进程的区别:①每个进程都需要操作系统为其分配独立的内存空间: ②而同 ...

  6. java面试32问_学员分享:JAVA面试32问(11-20)

    第十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错? short s1 = 1; s1 = s1 + 1;有错,s1是shor ...

  7. java下拉菜单_薪资对比:Java开发和web前端薪资哪个好

    Web前端开发和Java开发哪个薪资更高,Web前端开发和Java开发发展前景更好? 互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是学什么技术更好,哪一个语言的就业薪资更高,就成了 ...

  8. java为什么被开发者_为什么开发者对Java 9如此的兴奋

    随着标准 Java 的版本更新,开发者总是可以从升级后的版本中获取想要的功能.那么 Java 9 的发布为什么会让开发者如此的兴奋?下面列出了一些主要原因: 1.模块化的源代码 JDK 源代码将以模块 ...

  9. java跟python对比_【多年的Java程序员总结Java与Python的对比 】

    多年的Java程序员总结Java与Python的对比 作为一个有多年职场经验的技术员,每当我遇到同行时,我都会问一句"你现在用的是什么语言?你喜欢用哪种语言?"至于答案,容后再说. ...

最新文章

  1. vsnprintf的作用和使用
  2. Hystrix降级逻辑中如何获取触发的异常
  3. ASCX呼叫ASPX.CS的方法
  4. 文件描述符fd、文件指针fp和vfork()
  5. 一种在未来互联网中的面向用户的云操作系统体系
  6. LeetCode(183)—— 从不订购的客户(MySQL)
  7. java两个数组中不同的数字_【Java】 剑指offer(56-1) 数组中只出现一次的两个数字...
  8. Java旅游管理系统本科生毕业设计任务书
  9. Excel函数实战技巧精粹(四)常用函数之COUNTIF和SUMIF详解
  10. 考研-高等数学(数学一)目录整理
  11. HTTP状态码 1xx,2xx,3xx,4xx 意思
  12. logback springProperty 标签不起作用
  13. SD卡格式化|SD卡数据恢复技巧
  14. 适合女生学的技术有哪些?
  15. 在你的硬盘上建立第二个 EFI 分区
  16. 《JSP程序设计》报告
  17. 易语言怎么注册大漠插件
  18. 有一只兔子,从出生后第3个月起每个月都生一只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔 子都不死,问每个月的兔子总数为多少?
  19. 用perl做ProjectEuler练习题01
  20. 鸿蒙开发(13)---ProgressBar与RoundProgressBar组件

热门文章

  1. android程序获取WIFI的IP地址和MAC地址
  2. 同步,异步,多线程,你怎么看?
  3. 流言终结者——C语言内存管理
  4. Regular Expression
  5. [剑指offer][JAVA]面试题第[27]题[二叉树的镜像][递归][栈]
  6. [剑指offer][JAVA]面试题第[05]题[替换空格][StringBuilder/Buffer]
  7. Ubuntu Linux 解决 bash ./ 没有那个文件或目录 的方法
  8. 和县机电工程学校工业机器人_【校企合作】学校举行工业机器人教学系统捐赠仪式...
  9. 个人博客网页设计_博客个人网页制作网页设计-1
  10. 预算里怎样计算机械作业费,用实物法编制施工图预算的完整步骤有( )等。 A.计算工程量B.套用预算人工、材料、机械 - 作业在线问答...