微信小程序后台没有背景音乐功能怎么办

微信小程序后台没有背景音乐功能怎么办,第1张

如果你的微信小程序后台没有背景音乐功能,可以考虑自己写代码实现背景音乐播放。具体的实现思路是首先在小程序的`app.js`文件中初始化一个Audio Context对象,然后在需要播放背景音乐的页面中调用这个对象的createInnerAudioContext方法,传知芹入音乐文件地址后即可开始播放。同时可以借助各种开源组件或插件来优模亮化自己的代码,比如一些优秀的音乐播放器组件或插件可以让代码更加方便、优雅。除此之外,也可以尝试一些第三方平台提供的解决方案,例如百度AI语音识别、科大讯飞语音识别等等,为小程序添加更加丰富的音频听感旦猛宽。

1、wx.getBackgroundAudioManager :

获取全局唯一的背景音频管理器。 小程序切入后台,如果音频处于播放状态,可以继续播放枣物镇。但是后台状态不能通过调用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目录


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

原文地址: http://outofmemory.cn/yw/12379247.html

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

发表评论

登录后才能评论

评论列表(0条)

保存