「java音乐波形」乐音的波形总是规则的
今天给各位分享java音乐波形的知识,其中也会对乐音的波形总是规则的进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、怎样用JAVA画出wav音频波形图
- 2、java绘制wav波形
- 3、java实时动态波形比较问题:比较实际运行的波形与标准波形是否一致。难点是判断实际运行的波形
- 4、java 心音显示,接收心音信号,然后显示波形
- 5、javacv怎么调用音频录制
怎样用JAVA画出wav音频波形图
你要画波形图这个肯定是可以的,但是JAVA没有这个波形图显示控件,你要自己开发一个显示控件。
获得显示坐标和波形图的代码呢,方法比较多,以前我在.NET里做,画图用的那个GDI+来实现坐标和画图的。
简单的画个圆啥的就可以用那个自带的类啊,以下代码仅供参考。
java.awt
类 Graphics
Graphics 类是所有图形上下文的抽象基类,允许应用程序在组件(已经在各种设备上实现)以及闭屏图像上进行绘制。
Graphics 对象封装了 Java 支持的基本呈现操作所需的状态信息。此状态信息包括以下属性:
要在其上绘制的 Component 对象。
呈现和剪贴坐标的转换原点。
当前剪贴区。
当前颜色。
当前字体。
当前逻辑像素操作函数(XOR 或 Paint)。
当前 XOR 交替颜色(参见 setXORMode(java.awt.Color))。
坐标是无限细分的,并且位于输出设备的像素之间。绘制图形轮廓的操作是通过使用像素大小的画笔遍历像素间无限细分路径的操作,画笔从路径上的锚点向下和向右绘制。填充图形的操作是填充图形内部区域无限细分路径操作。呈现水平文本的操作是呈现字符字形完全位于基线坐标之上的上升部分。
java绘制wav波形
本文讲述如何实时录音,以及将录音波形频谱实时显示的方法。Windows提供了一个多媒体控制接口(MCI),用它可以录音,很方便。但是这种方法不能实时给出录音的原始数据,因此要显示波形和频谱都是不可能实现的。要达到实时的效果,就要使用Windows提供的另一套函数,即低级音频函数。其中和录音有关的是以waveIn开头的一组函数。
低级音频函数的使用比较繁琐,大致要有以下几个步骤。
用waveInOpen打开设备,并设置回调。因为要保证实时性,所以不能用查询的方式,而必须设置回调。
为设备分配足够的内存做缓冲区,动态分配或静态数组都可以。为了保证实时性,程序用了双缓冲技术,在处理一个缓冲区数据的同时另一个缓冲区用于录音。为了便于说明写成Buffer1、Buffer2。
将Buffer1关联到设备上去,waveInPrepareBuffer、waveInAddBuffer。
开始录音,waveInStart
当驱动程序填满这个缓冲区(Buffer1)时就会产生回调(消息为WIM_DATA),这时立刻将Buffer2关联到设备上继续录音,然后处理Buffer1,当驱动程序填满Buffer2时又会产生回调,这是再将Buffer1关联到设备上,而去处理Buffer2,如此反复就使得录音能够实时的进行下去。
停止录音,waveInStop
关闭设备,waveInClose
上面就是实时录音的一个基本流程,产生回调时,其lParam就是一个指向WAVEHDR结构的指针,通过这个指针就可以得到原始数据(注意了:我这个程序只是单声道8位的PCM格式,因此正好一个字节就是一个采样点的值,对于其他格式的我就不知道了)。有了原始数据就可以很容易的画出波形了,而频谱也就是多一次FFT变换而已,没什么太难的。
这里是我用LCC写的例子,非常简单,而且相信大家都可以很容易的移植到BCB上来。另外,我偷了一下懒,FFT用了我以前封装到DLL中的函数(现在已经忘了怎么写了^_^),可以在此下载 (不要觉得奇怪,就是这个时钟,将其中的DEMO.DLL拿来用就是了)。当然你也可以自己写一个FFT放到程序里去。
-*-*-PATCH-*-*-2002-06-11
上次那个程序还不好,原因是双缓冲还不能满足实时的要求,因此这次用了8缓冲循环技术。新的程序也是用LCC写的。
开始时依次将0-6号缓冲区关联到设备上,而7号缓冲区不关联,然后开始录音,这是驱动程序开始向0号缓冲区输出数据,当0号缓冲区数据满时产生回调,这时驱动程序会自动向1号缓冲区输出数据,但这时应将7号缓冲区关联到设备上去,然后处理0号缓冲区的数据。然后当1号缓冲区数据满时又会产生回调,这时驱动程序会自动向2号缓冲区输出数据,而将0号缓冲区关联到设备上去。这样如此反复,始终保持1个缓冲区用于驱动输出数据,1个缓冲区用于处理数据,6个缓冲区处于等待状态。
而如果只有两个缓冲区,就只能一个用于驱动输出,一个用于处理数据。这样在产生回调的时候就会出现没有处于等待状态的缓冲区的情况,这样驱动程序就不能自动向缓冲区输出数据。而要等waveInPrepareBuffer、waveInAddBuffer调用之后,这样就会出现一个小小的间隙,而导致录音不连续。
java实时动态波形比较问题:比较实际运行的波形与标准波形是否一致。难点是判断实际运行的波形
问你几个问题。
1.
你的波形用什么形式的数据记录。
2.
你说的理论波形,为什么与实际波形开始时间不同,是之前都运行着,还是到你画的时间点开始一致的
3
如果周期是好几倍,那么时间点肯定不同,你不如直接把实验波形与理论波形自己做比较了
4
你也说了判断实际运行波形在标准波形的开始位置是难点,看来你能以标准波形的起始点为开始最好,否则只能从你的波形模型上完善了
java 心音显示,接收心音信号,然后显示波形
// Java 正弦波:线宽、颜色、分段颜色、背景色、波峰数、显示速度
// 画图方向:向左画、向右画、向上画、向下画、同时向右和向下画
// 位置:水平、垂直多条Java 正弦波
import java.awt.*;
// 1.正弦波 jvzxb 类继承框架 Frame
public class jvzxb extends Frame {
public jvzxb() {
setLayout(new BorderLayout()); // 设置边界布局
DrawPanel dp = new DrawPanel(); // 创建画图面板实例 dp
add("Center", dp); // 对中加入画图面板 dp
}
// 2.关闭窗口,终止程序
public boolean handleEvent(Event e) {
switch (e.id) {
case Event.WINDOW_DESTROY: // 窗口关闭
System.exit(0); // 系统退出,终止程序
return true;
default:
return false;
}
}
// 3.程序入口
public static void main(String args[]) {
jvzxb zxb = new jvzxb();
zxb.setTitle("Java 语言图形程序设计 正弦波 谢山水 2003.10.");
zxb.setSize(800,600);
zxb.show();
}
}
// 4.定义求上正弦函数的方法
class DrawPanel extends Panel {
double f1(double x){ // 上正弦波
return 180+Math.sin(x/20)*30;
// 调整垂直位置,波峰数,波幅度
}
double f2(double x){ // 中正弦波
return 280+Math.sin(x/10)*40;
}
double f3(double x){ //下正弦波
return 420+Math.sin(x/5)*50;
}
// 5.定义画图方法
public void paint(Graphics g) {
// 6.画图纸边框和水平轴线
g.setColor(new Color(255,0,155));//设置画笔为紫色
g.drawRect(5,5,780,540); // 画图纸外边框
g.setColor(new Color(0,133,255));//设置画笔为蓝色
g.drawRect(15,15,760,520); // 画图纸内边框
g.drawRect(16,16,758,518);
g.drawRect(17,17,756,516);
g.drawRect(18,18,754,514);
g.setColor(new Color(255,0,255));//设置画笔为紫色
g.drawLine(50,180,730,180); // 画上水平轴线
g.setColor(new Color(255,255,0));//设置画笔为黄色
g.drawLine(50,280,730,280); // 画中水平轴线
g.drawLine(50,281,730,281);
g.drawLine(50,282,730,282);
g.setColor(new Color(0,133,255)); //设置画笔为蓝色
g.drawLine(50,420,730,420); // 画下水平轴线
g.drawLine(50,421,730,421);
g.drawLine(50,422,730,422);
g.drawLine(50,423,730,423);
g.drawLine(50,424,730,424);
// 7.输出文字
Font fnt20 = new Font("TimesRoman",Font.PLAIN,20);
Font fnt40 = new Font("宋体",Font.BOLD,40); // 创建字体对象
g.setFont(fnt20); // 设置当前字体
g.setColor(new Color(255,0,255));
g.drawString("Java TXCXSJ",340,50); // 紫字
g.setFont(fnt40); // 设置当前字体
g.setColor(new Color(0,0,255));
g.drawString("Java 语言图形程序设计",190,100);// 蓝字
g.setFont(fnt20); // 设置当前字体
g.setColor(new Color(255,255,0));
g.drawString("程序设计: 谢山水",320,140); // 黄字
g.drawString("2003年10月1日",340,170);
// 8.循环设置颜色
for(int i=0;i30;i++){
switch((int) i/10){
case 0:
g.setColor(new Color(0,133,255)); //设置画笔为蓝色
setBackground(Color.yellow); //设置背景为黄色
break;
case 1:
g.setColor(new Color(255,255,0)); //设置画笔为黄色
setBackground(Color.orange); //设置背景为橙色
break;
case 2:
g.setColor(new Color(255,0,155)); //设置画笔为红色
setBackground(new Color(0,190,0)); //设置背景为绿色
break;
}
// 9.绘制正弦波
for(int x=90;x710;x++){ //上正弦波
g.drawLine((int)x,(int)f1(x),(int)x+1,(int)f1(x+1));
}
for(int x=90;x710;x++){ //中正弦波
for (int h=0;h4;h++){
g.drawLine((int)x,(int)f2(x)+h,(int)x+1,(int)f2(x+1)+h);
}
}
for(int x=90;x710;x++){ //下正弦波
for (int h=0;h9;h++){
g.drawLine((int)x,(int)f3(x)+h,(int)x+1,(int)f3(x+1)+h);
}
}
}
}
}
javacv怎么调用音频录制
Adobe Audition3.0(简称AA),先下载伴奏,打开AA,,点文件,新建,确定。点视图,选多轨,在第一音轨点右键插入音频,找到你的伴奏插入,点第二音轨的R键开启录音状态,点左下的红色圆圈录制就行了,录制完成后双击音轨2的波形,进入编辑视图,这里可以进行人声效果的处理,可以到百度搜索一下相关教程,很多的,如降噪、混响、均衡等都在这里处理,处理完成后返回多轨视图,听一下,如果声音大小与伴奏不协调可以在编辑视图的效果》压限》标准化进程里调节音量。都做好后在多轨视图里点右键混缩到文件里的第一项,就把伴奏和人声混合起来了,点文件》另存,保存成WAV或MP3随便,完成了。
java音乐波形的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于乐音的波形总是规则的、java音乐波形的信息别忘了在本站进行查找喔。
发布于:2022-11-30,除非注明,否则均为
原创文章,转载请注明出处。