更新记录

1.0.0(2023-05-29)

新版首发


平台兼容性

Android iOS
× 适用版本区间:11 - 16

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
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>

隐私、权限声明

1. 本插件需要申请的系统权限列表:

如果需要后台播放,需要配置 manifest.json -> App常用其它设置 -> 后台运行能力 填写 audio,云打包之后生效

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问