更新记录
1.0.0(2023-05-29)
新版首发
平台兼容性
Android | iOS |
---|---|
× | 适用版本区间:11 - 16 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
KJ-AudioPlayer
系统音频播放器、后台循环播放、同时和其它app播放音频、设置音频播放模式(ios)
注意事项
如果需要后台播放,需要配置 manifest.json -> App常用其它设置 -> 后台运行能力 填写 audio,云打包之后生效
使用
<template>
<view class="content">
<button type="primary" @click="setCategoryOptions">设置音频播放模式</button>
<button type="primary" @click="init">初始化</button>
<button type="primary" @click="setEnableRate">是否可以更改播放速率</button>
<button type="primary" @click="prepareToPlay">预加载资源</button>
<button type="primary" @click="play">播放</button>
<button type="primary" @click="playAtTime">指定时间播放音频</button>
<button type="primary" @click="isPlaying">是否正在播放</button>
<button type="primary" @click="getPlayerInfo">获取播放器信息</button>
<button type="primary" @click="setCurrentTime">设置当前时间、进度</button>
<button type="primary" @click="setPan">设置平移</button>
<button type="primary" @click="setVolume">设置音量</button>
<button type="primary" @click="setRate">设置播放速率</button>
<button type="primary" @click="setNumberOfLoops">设置循环次数</button>
<button type="primary" @click="setMeteringEnabled">设置是否启用音频测量</button>
<button type="primary" @click="updateMeters">更新音频测量值</button>
<button type="primary" @click="peakPowerForChannel">获得指定声道的分贝峰值</button>
<button type="primary" @click="averagePowerForChannel">获得指定声道的分贝平均值</button>
<button type="primary" @click="pause">暂停</button>
<button type="primary" @click="stop">停止</button>
</view>
</template>
<script>
var KJAudioPlayer = uni.requireNativePlugin("KJ-AudioPlayer");
export default {
data() {
return {
title: 'Hello'
}
},
onLoad() {
var globalEvent = uni.requireNativePlugin('globalEvent');
globalEvent.addEventListener('onState', function(res) {
console.log("onState:" + JSON.stringify(res));
});
},
methods: {
setCategoryOptions() {
/**
* category - 类型,
* Ambient(用于非以语音为主的应用,使用这个category的应用会随着静音键和屏幕关闭而静音。并且不会中止其它应用播放声音,可以和其它自带应用如iPod,safari等同时播放声音。无法在后台播放声音)
* SoloAmbient(和Ambient相同,但是区别在于会中止其他应用的播放)
* Playback(用于以语音为主的应用,使用这个category的应用不会随着静音键和屏幕关闭而静音。可在后台播放声音)
* Record(用于需要录音的应用,设置该category后,除了来电铃声,闹钟或日历提醒之外的其它系统声音都不会被播放。该Category只提供单纯录音功能)
* PlayAndRecord(用于既需要播放声音又需要录音的应用,语音聊天应用(如微信)应该使用这个category。该Category提供录音和播放功能。如果你的应用需要用到iPhone上的听筒,该category是你唯一的选择,在该Category下声音的默认出口为听筒(在没有外接设备的情况下))
* MultiRoute(想象一个DJ用的App,手机连着HDMI到扬声器播放当前的音乐,然后耳机里面播放下一曲,这种常人不理解的场景,这个类别可以支持多个设备输入输出。)
*
* options - 选项 主要用于控制当前应用和其他应用中间的关系
* 0x1(设置这个选项在激活会话时,不会打断其他应用程序的音频播放,在以下的选项中可用Playback、PlayAndRecord、MultiRoute)
* 0x2(这个选项在激活会话时降低其他程序的音频播放声音,在以下的选项中可用PlayAndRecord、Record,主要是体现当前音频的重要性,例如使导航音量凸出于音乐播放的音量,特别关注的音量高于当前视频的音量等操作。)
* 0x4(如果要支持蓝牙耳机电话,则需要设置这个选项)
* 0x8( 如果在VoIP模式下,希望默认打开免提功能,需要设置这个选项)
* 0x11(当你的app偶尔的使用音频播放时打断其他应用,使其静音,并自动使用麦克风以及使用完毕后自动恢复其他应用的播放,可以在以下的选项中可用Playback、PlayAndRecord 、MultiRoute)
* 0x20()
* 0x40()
* 0x80()
* */
var dic = {
"category": "Playback",
"options": 0x1, //可多选 如:0x1|0x2
"active": true //设置为活动或非活动
}
KJAudioPlayer.setCategoryOptions(dic, (res) => {
console.log("setCategoryOptions:" + JSON.stringify(res));
})
},
init() {
var dic = {
"filePath": plus.io.convertLocalFileSystemURL("static/test.mp3") //只支持本地路径
}
KJAudioPlayer.init(dic, (res) => {
console.log("init:" + JSON.stringify(res));
})
},
setEnableRate() { //需要在prepareToPlay前设置为YES
var dic = {
"value": true
}
KJAudioPlayer.setEnableRate(dic, (res) => {
console.log("setEnableRate:" + JSON.stringify(res));
})
},
prepareToPlay() {
KJAudioPlayer.prepareToPlay((res) => {
console.log("prepareToPlay:" + JSON.stringify(res));
})
},
play() {
KJAudioPlayer.play((res) => {
console.log("play:" + JSON.stringify(res));
})
},
playAtTime() {
var dic = {
"value": 1
}
KJAudioPlayer.playAtTime(dic, (res) => {
console.log("playAtTime:" + JSON.stringify(res));
})
},
isPlaying() {
KJAudioPlayer.isPlaying((res) => {
console.log("isPlaying:" + JSON.stringify(res));
})
},
getPlayerInfo() {
KJAudioPlayer.getPlayerInfo((res) => {
console.log("getPlayerInfo:" + JSON.stringify(res));
/**
* 返回json字段说明:{"volume":1,"rate":1,"currentTime":13.223197278911565,
* "enableRate":true,"numberOfChannels":2,"pan":0,"duration":21.968979591836735,
* "numberOfLoops":-1,"deviceCurrentTime":57919.84638275,"isMeteringEnabled":true,
* "channelAssignments":[]}
*
* volume - 音量
* rate - 速率
* currentTime - 当前时间
* enableRate - 是否可以更改速率
* numberOfChannels - 通道数
* pan - 平移
* duration - 时长
* numberOfLoops - 循环次数
* isMeteringEnabled - 是否启用音频测量
* */
})
},
setCurrentTime() {
var dic = {
"value": 10 //单位秒
}
KJAudioPlayer.setCurrentTime(dic)
},
setPan() {
var dic = {
"value": -1.0 //设置平移-1.0为左,0.0为中,1.0为右
}
KJAudioPlayer.setPan(dic)
},
setVolume() {
var dic = {
"value": 1.0, //0.0 - 1.0
//"fadeDuration":500
}
KJAudioPlayer.setVolume(dic)
},
setRate() {
var dic = {
"value": 0.5 //1.0表示正常,0.5表示半速,2.0表示倍速。
}
KJAudioPlayer.setRate(dic)
},
setNumberOfLoops() {
var dic = {
"value": -1 //-1为无效循环
}
KJAudioPlayer.setNumberOfLoops(dic)
},
setMeteringEnabled() {
var dic = {
"value": true
}
KJAudioPlayer.setMeteringEnabled(dic)
},
updateMeters() {
//更新音频测量值,注意如果要更新音频测量值必须设置setMeteringEnabled为YES,通过音频测量值可以即时获得音频分贝等信息
KJAudioPlayer.updateMeters();
},
peakPowerForChannel() {
var dic = {
"channelNumber": 0
}
KJAudioPlayer.peakPowerForChannel(dic, (res) => {
console.log("peakPowerForChannel:" + JSON.stringify(res));
})
},
averagePowerForChannel() {
var dic = {
"channelNumber": 1
}
KJAudioPlayer.averagePowerForChannel(dic, (res) => {
console.log("averagePowerForChannel:" + JSON.stringify(res));
})
},
pause() {
KJAudioPlayer.pause((res) => {
console.log("pause:" + JSON.stringify(res));
})
},
stop() {
//stop方法的效果也只是暂停播放,不同之处是stop会撤销prepareToPlay方法所做的准备。
KJAudioPlayer.stop((res) => {
console.log("stop:" + JSON.stringify(res));
})
}
}
}
</script>
<style>
button {
font-size: 15px;
}
</style>