获取全局唯一的背景音频管理器。 小程序切入后台,如果音频处于播放状态,可以继续播放枣物镇。但是后台状态不能通过调用API *** 纵音频的播放状态。
从微信客户端6.7.2版本开始,若需要在小程序切后台后继续播放音频,需要在 app.json 中配置 requiredBackgroundModes 属性。开发版和体验版上可以直接生效,正式版还需通过审核。
2、onUnload和onHide事件中暂停音蚂滑乐的播放。
3、onShow中调用播放事件
4、在播放结束的事件凳粗中,再次播放,以达到循环播放的效果。
放音乐的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目录
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)