声音小程序,java编写一个声音小程序,发出系统声音,滴的一声,不用播放外部文件,就系统声音

声音小程序,java编写一个声音小程序,发出系统声音,滴的一声,不用播放外部文件,就系统声音,第1张

// 获取系统默认的本机工具包

java.awt.Toolkit tk = java.awt.Toolkit.getDefaultToolkit()

// 发出当前系统最简单的声音

tk.beep()

不需要外部包,只是用系统JDK中的 awt包下的 toolkit工具类就可以了。

AudioClip audio1=getAudioClip(codebase,"danny.au")可以写在paint函数中,也可以写在别的函数中。Java applet除了可以播放.au的音乐文件还可以播放.wav的音乐文件,要播放mp3文件需要有JMF插件。

import java.applet.Applet

import java.applet.AudioClip

import java.awt.Graphics

import java.net.URL

public class PlaySound extends Applet

{

public void paint(Graphics g)

{

URL codebase=getCodeBase()

System.out.println(codebase)

AudioClip audio1=getAudioClip(codebase,"danny.au")

g.drawString("Play music",30,30)

audio1.loop()

}

}

放音乐的api网上查有很多,比如javax.sound.midi.*

支持midi,mid背景音乐的播放

public class Music implements MetaEventListener, Runnable{

private Sequence sequence = null

private Sequencer sequencer

private boolean isPlaying = false

private volatile Thread thread

public Music(){

}

public Music(String midifile){

try {

loadMidi(midifile)

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (InvalidMidiDataException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

//导入midi文件到内存中传给Sequence对象,相当与编码器

public void loadMidi(String filename) throws IOException, InvalidMidiDataException{

sequence = MidiSystem.getSequence(this.getClass().getResourceAsStream(filename))

}

//播放方法

public void play(){

if(isPlaying){

return

}

try {

sequencer = MidiSystem.getSequencer()

sequencer.open()

//用Sequencer对象把声音文件序列解码出来播放

sequencer.setSequence(sequence)

sequencer.addMetaEventListener(this)

//设置循环次数,-1表示一直循环

sequencer.setLoopCount(-1)

sequencer.setLoopStartPoint(0)

sequencer.setLoopEndPoint(sequencer.getTickLength())

} catch (MidiUnavailableException e) {

// TODO Auto-generated catch block

e.printStackTrace()

} catch (InvalidMidiDataException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

if(thread == null){

thread = new Thread(this)

thread.start()

}

}

public void stop(){

if(isPlaying){

sequencer.stop()

isPlaying = false

}

if(thread != null){

thread = null

}

}

public void meta(MetaMessage meta) {

if(meta.getType() == 47){

System.out.println("Sequencer is done playing")

}

// TODO Auto-generated method stub

}

public void run() {

// TODO Auto-generated method stub

Thread current = Thread.currentThread()

while(current == thread &&!isPlaying){

sequencer.start()

isPlaying = true

try {

thread.sleep(1001)

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

}

//用起来也很方便

public static void main(String[] args){

Music music = new Music("a.mid")

music.play()

}

}

如果这样写路径类要和音频文件放在一个目录下,如果你不想这样,有两种方法,一种是修改路径字符串,另一种是把Class.getResourceAsStream方法改成new FileInputStream 这两个方法加载资源的初始路径不同,前者找class文件所在目录,后者找project目录


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12136956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存