3.x audioEngine 手动扩展 不喜勿喷

2.x + 框架升级 3.x + 需要声音audioEngine api 接口的


import { _decorator, Component, Node,find,AudioSource,director,game } from 'cc';
export  class audioEngine extends Component {
     static NODE :any = null ;
    static YingLiang : number = 0.5;
    static YingXiao : number = 1;
    /** 播放音乐 */
    static playMusic: any = function(ziyuan:any,chongfu:boolean){
        var node = audioEngine.jidian("beijing");
        if (node.playing) {
            node.pause();
        }
        node.clip = ziyuan;
        node.loop = true;
        node.volume = audioEngine.YingLiang;
        if(audioEngine.YingLiang > 0){
            node.play();
        }
    }
    /** 播放音效 */
    static playEffect: any = function(ziyuan:any,chongfu:boolean){
        var node = audioEngine.jidian(ziyuan.name);
        node.clip = ziyuan;
        node.loop = false;
        node.volume = audioEngine.YingXiao;
        if(audioEngine.YingXiao > 0){
            node.play();
        }
        
    }
    /*所有音效停止*/
    static stopAll: any = function(){
        if(audioEngine.NODE){
            var shuju = audioEngine.NODE.children;
            for(var m in shuju){
               var sp = shuju[m].getComponent(AudioSource);
                if(sp){
                    sp.pause();
                }
            }
        }
    }
    /*所有音效暂停*/
    static pauseAll: any = function(){
        if(audioEngine.NODE){
            var shuju = audioEngine.NODE.children;
            for(var m in shuju){
               var sp = shuju[m].getComponent(AudioSource);
                if(sp){
                    sp.pause();
                }
            }
        }
    }
    /*所有音效重放*/
    static resumeAll: any = function(){
        var node = audioEngine.jidian("beijing");
        if(node){
            node.play();
        }
    }
    /** 展厅音效 */
    static pauseAllEffects: any = function(){
        if(audioEngine.NODE){
            var shuju = audioEngine.NODE.children;
            for(var m in shuju){
                if(shuju[m].name != "beijing"){
                    var sp = shuju[m].getComponent(AudioSource);
                    if(sp){
                        sp.pause();
                    }
                }
            }
        }
    }
    /** 暂停音乐 */
    static pauseMusic: any = function(){
        var node = audioEngine.jidian("beijing");
        if(node){
            node.pause();
        }
    }
    /** 重放音乐 */
    static resumeMusic: any = function(){
        var node = audioEngine.jidian("beijing");
        if(node){
            node.play();
        }
    }
    /** 音效音量 */
    static setEffectsVolume: any = function(yinxiao:number){
        audioEngine.YingXiao = yinxiao;
    }
    /** 音乐音量 */
    static setMusicVolume: any = function(yinxiao:number){
        audioEngine.YingLiang = yinxiao;
        var node = audioEngine.jidian("beijing");
        if(node){
            node.volume = audioEngine.YingLiang;
        }
    }
    static jidian (name:string) {
        if(!audioEngine.NODE){
            var mm = new Node("dUb_playlist");
            director.getScene().addChild(mm);
            audioEngine.NODE = mm;
            game.addPersistRootNode(audioEngine.NODE);
        }
        var node = audioEngine.NODE.getChildByName(name);
        if(node){
            return node.getComponent(AudioSource);
        }else{
            node = new Node(name);
            var sp = node.addComponent(AudioSource);
            node.parent = audioEngine.NODE;
            return sp;
        }
    }
}
1赞

看来想平滑升级还真是难为大家了 :joy:

大佬可以和引擎组的大佬建议一下,把祖传audio库换成开源的专业音频库等,现在的audio不能满足游戏中的一些需求如果做音游那就更惨不忍睹了

拼音拼错了yin不是ying

1赞

收到,目前 AudioSource 的设计更多是偏向 3D 音频的方向发展,是 component 与 node 强绑定的设计
对于音频的纯逻辑管理,确实会有诸多不便捷的地方,目前的状态是能用,但不够简单。

顺便可以同步一下,之后我们会排期支持新的 Audio2D 模块,替代 audioEngine 的角色。
我们希望通过这个模块,能够提供一套简单实用的音频接口,同时也欢迎更多来自社区的反馈。

1赞

后面原生是否考虑集成fmod之类的。。。

如果能集成fmod那就完美了,虽然可以自己动手但是伸手党yyds​:joy:

未来是会考虑的

fmod 现在好像不是免费的了

先mark了再说

想问下这个音效播放的时候多个相同音效连续播放如何解决的