java调节音量代码_用Java调用VC音量控制程序_java
前言
本文通過java的Runtime接口來實(shí)現(xiàn)調(diào)用其他語言實(shí)現(xiàn)的應(yīng)用程序,進(jìn)而來實(shí)現(xiàn)對計(jì)算機(jī)硬件信息的監(jiān)控和控制.本文是多媒體信息系統(tǒng)的一個(gè)部分,就是調(diào)整計(jì)算機(jī)音量。
使用VC編寫音量控制程序
本控制示例使用VC6.0編寫,主要是調(diào)用系統(tǒng)的API來實(shí)現(xiàn),
mixerGetLineInfo 獲取Master Volume Control.
http://www.gaodaima.com/64887.html用Java調(diào)用VC音量控制程序_java
mixerGetControlDetails 獲取 Volume Control 信息
mixerSetControlDetails 設(shè)置 Volume Control 信息
最終編譯成Console類型的Dos執(zhí)行的程序VolumeControl.exe。這個(gè)程序?qū)崿F(xiàn)三個(gè)功能:
1.獲取音量 VolumeControl.exe 0
2.增加音量 VolumeControl.exe 1
3.減少音量 VolumeControl.exe 2
下面我們用Java設(shè)計(jì)創(chuàng)建一個(gè)Panel用于顯示音量并調(diào)用應(yīng)用程序?qū)崿F(xiàn)對音量的實(shí)際控制,本例中使用自定義Progress顯示VolumeTracker.java
實(shí)現(xiàn)原理如下:
使用一個(gè)線程動態(tài)刷新頁面,主線程用來實(shí)現(xiàn)對音量的控制.其實(shí)現(xiàn)代碼如下:
import java.awt.*;
import java.awt.font.*;
import java.awt.geom.*;
import java.awt.event.*;
import java.text.AttributedString;
import java.text.AttributedCharacterIterator;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
import javax.swing.event.*;
import java.io.*;
public class VolumeTracker extends JPanel implements Runnable
{
String welcomeStr = "Welcome to Java Sound";
Thread pbThread;
Color background = Color.white;
//new Color(20, 20, 20);
Color jfcBlue = Color.blue;
//new Color(204, 204, 255);
Color jfcDarkBlue = jfcBlue.darker();
Font font24 = new Font("serif", Font.BOLD, 24);
Font font28 = new Font("serif", Font.BOLD, 28);
Font font42 = new Font("serif", Font.BOLD, 42);
FontMetrics fm28, fm42;
String errStr=null;
String currentName=null;
double duration = 100.0;
double seconds = 82.0;
boolean midiEOM, audioEOM;
public VolumeTracker()
{
fm28 = getFontMetrics(font28);
fm42 = getFontMetrics(font42);
initVolume();
start();
}
private void initVolume()
{
try
{
//這一段小程序?qū)崿F(xiàn)對VC創(chuàng)建程序的調(diào)用
Runtime rt = Runtime.getRuntime(); //Time and Date.
//mngPathTool類,提供了一個(gè)獲取當(dāng)前路徑的方法
mngPathTool tool = new mngPathTool();
String sexec = tool.getCurPath()+ "//binex//VolumeControl.exe 0";
Process child = rt.exec(sexec);
//獲取控制臺輸出的內(nèi)容,進(jìn)而獲得音量的大小
InputStreamReader reader = new InputStreamReader(child.getInputStream());
char[] chr = new char[5];
reader.read(chr) ;
String s="";
for(int i=0;i<5;i++)
{
if(chr[i]>='0' && chr[i]<='9') s+=chr[i];
}
//System.out.println(s);
Integer nVolume = new Integer(s);
seconds = nVolume.intValue();
child.waitFor();
//這一段小程序?qū)崿F(xiàn)對VC創(chuàng)建程序的調(diào)用
}
catch(Exception e1)
{
e1.printStackTrace();
}
}
public void paint(Graphics g)
{
//畫圖來實(shí)現(xiàn)百分比Tracker
Graphics2D g2 = (Graphics2D) g;
Dimension d = getSize();
g2.setBackground(background);
g2.clearRect(0, 0, d.width, d.height);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(jfcBlue);
double tseconds = duration-seconds;
if (tseconds > 0.0)
{
int num = 20;
int progress = (int) (tseconds / duration * num);
double hh = ((double) (d.height - 4) / (double) num);
double ww = (int)(d.width-4);
double x = 0.0;
for ( ; x < progress; x+=1.0)
{
g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
}
g2.setColor(jfcDarkBlue);
for ( ; x < num; x+=1.0)
{
g2.fill(new Rectangle2D.Double(d.width-ww-2, x*hh+2, ww, hh));
g2.fill3DRect((int)(d.width-ww-2),(int) (x*hh+2),(int) ww, (int)hh,true);
}
}
}
public void start()
{
pbThread = new Thread(this);
pbThread.setName("PlaybackMonitor");
pbThread.start();
}
public void stop()
{
if (pbThread != null)
{
pbThread.interrupt();
}
pbThread = null;
}
public void run()
{
while (pbThread != null)
{
try
{
pbThread.sleep(99);
}
catch (Exception e)
{
break;
}
repaint();
}
pbThread = null;
}
public void addVolume()
{
changeVolume(false);
initVolume();
}
public void minusVolume()
{
changeVolume(true);
initVolume();
}
//control sound volume.
private void changeVolume(boolean bIsMinus)
{
try
{
Runtime rt = Runtime.getRuntime();
//Sound Control mngPathTool
tool = new mngPathTool();
String sexec;
if(bIsMinus)
sexec= tool.getCurPath()+ "//binex//VolumeControl.exe 2";
else
sexec= tool.getCurPath()+ "//binex//VolumeControl.exe 1";
rt.exec(sexec);
}catch(Exception e1){e1.printStackTrace(); }
}
}
// End VolumeTracker
創(chuàng)建一個(gè)JFrame用于顯示 VolumeControl.java
設(shè)置頁面背景,創(chuàng)建顯示上述Panel的容器.
創(chuàng)建對話框用于彈出顯示音量控制界面 JVolumeDlg.java
創(chuàng)建一個(gè)對話框來顯示上個(gè)步驟生成的Frame,并提供事件控制容器.
事件流向---> JVolumeDlg -- VolumeControl --- VolumeTracker
總結(jié)
Java Runtime 接口提供了調(diào)用其他應(yīng)用程序的接口,通過這個(gè)接口,可以實(shí)現(xiàn)對計(jì)算機(jī)硬件的控制和監(jiān)控. 同時(shí)通過界面線程可以實(shí)現(xiàn)相對復(fù)雜的應(yīng)用程序界面的開發(fā)。
歡迎大家閱讀《用Java調(diào)用VC音量控制程序_java》,跪求各位點(diǎn)評,若覺得好的話請收藏本文,by 搞代碼
微信 賞一包辣條吧~
支付寶 賞一聽可樂吧~
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的java调节音量代码_用Java调用VC音量控制程序_java的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java语言只保留了什么_java语言的
- 下一篇: docker java 最小镜像_doc