Atitit java播放 wav MIXER 混响器编程
目录
1.5. Code /bookmarksHtmlEverythingIndexPrj/src/apkg/soundPlay.java 3
2013年10月14日 17:17:24 fakine 阅读数:3632
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fakine/article/details/12711779
、
(在一般的系统中只有一块声卡,所以返回的值应该为1;我的系统中装有一块PIC创新声卡,一块主板载C-media声卡,还安装了Totalrecorder软件,所以返回值是3)
int devnum=::mixerGetNumDevs();
Clip 接口表示特殊种类的数据行,该数据行的音频数据可以在回放前加载,而不是实时流出。 | |
DataLine 将与介质相关的功能添加到其超接口 Line。 | |
Line 接口表示单声道或多声道音频供给。 | |
可以注册实现 LineListener 接口的类的实例来接收行状态更改时发生的事件。 | |
混频器是一个具有一行或多行的音频设备。 | |
端口是往返于音频输入或输出线与音频设备之间的简单线路。 | |
源数据行是可以写入数据的数据行。 | |
目标数据行是可以从中读取音频数据的某种类型的 DataLine。 |
- sline.open();
- FloatControl volctrl=(FloatControl)sline.getControl(FloatControl.Type.MASTER_GAIN);
- volctrl.setValue(newVal);// newVal - the value of volume slider
也就是说,必须开始播放,得到了播放的DataLine以后才可以得到Control信息.
我这么做了,的到
Master Gain with current value: 0.0 dB (range: -80.0 - 6.0206)
不太懂dB是怎么算的,反正默认值为0,也就是说,向正(增大音量)只能移动6个单位.对于一个JSlider来说,实在太小距离了.
混音与Java(不带混合机
private static void playwav(String file) throws Exception {
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(file));
AudioFormat audioFormat= audioInputStream.getFormat();
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem
.getLine(info);
//AudioFormat audioFormat2= new AudioFormat( 70000, 16, 2, true, false);
sourceDataLine.open(audioFormat); //this audioformat can overwrite last DataLine.Info.audioFormat
sourceDataLine.start();
int cnt;
// 读取数据到缓存数据
byte[] tempBuffer = new byte[10000] ;
while ((cnt = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) {
if (cnt > 0) {
// 播放缓存数据
sourceDataLine.write(tempBuffer, 0, cnt);
}
}
// Block等待临时数据被输出为空
sourceDataLine.drain();
sourceDataLine.close();
}
API) - IT屋-程序员软件开发技术分享社区.html