国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

可視化音軌

hsluoyz / 2268人閱讀

摘要:音樂播放器模塊初始化播放暫停時(shí)間這種寫法耦合度較高,只適用于當(dāng)前頁(yè)面,無法進(jìn)行擴(kuò)展,可以用回調(diào)函數(shù),將得到的時(shí)間回調(diào)出去格式化時(shí)間進(jìn)度定義一個(gè)存放對(duì)象的數(shù)組每一個(gè)盒子寬度相同情況下,不包括邊框。

//音樂播放器模塊、
var cxMusic = {
    audioDom : null,
    // 初始化
    init : function(callback) {
        this.audioDom = document.getElementById("audioDom");
        this.time(callback);
    },
    // 播放
    play : function() {
        return this.audioDom.play();
    },
    // 暫停
    stop : function() {
        return this.audioDom.pause();
    },
    // 時(shí)間
    time : function(callback) {
        var $this = this;
        this.audioDom.addEventListener("canplaythrough", function() {
            var totaltime = $this.format(this.duration);
            // $(".time").html($this.format(this.duration));
            // 這種寫法耦合度較高,只適用于當(dāng)前頁(yè)面,無法進(jìn)行擴(kuò)展,可以用回調(diào)函數(shù),將得到的時(shí)間回調(diào)出去
            if (callback)
                callback.call(this, true, totaltime);
        });
        this.audioDom.addEventListener("timeupdate", function() {
            var current = $this.format(this.currentTime);
            var percent = this.currentTime / this.duration * 100;
            if (callback)
                callback.call(this, false, current, percent);
        });
    },
    // 格式化時(shí)間
    format : function(ftime) {
        var m = Math.floor(ftime / 60);
        var s = Math.floor(ftime % 60);
        if (m < 10)
            m = "0" + m;
        if (s < 10)
            s = "0" + s;
        return m + ":" + s;
    },
    // 進(jìn)度
    percent : function() {

    }
};

var cxBar = {
    arr : [],// 定義一個(gè)存放span對(duì)象的數(shù)組
    mw : 5,// 每一個(gè)盒子寬度
    init : function() {

        var domBox = dom("wrapBox");
        var bwidth = domBox.clientWidth; // 相同情況下,clientWidth";
            var spanDom = document.createElement("span");
            spanDom["className"] = "items";

            // css(spanDom,{left:(i*this.mw)+"px",backgroundColor:randomColor(0.5)});
            css(spanDom, {
                left : (i * this.mw),
                width : this.mw - 1,
                //backgroundColor : randomColor(0.5)
            });
            domBox.appendChild(spanDom);
            cxBar.arr.push(spanDom);
        }
        // domBox.innerHTML=html;

    }
};

/* 音樂解析器 */
var KeKeMusic = {
    mark : false,

    init : function() {// ie11以上的瀏覽器才支持
        // 1:音頻上下文===html5+ajax+audioContext html5+audio+audioContext
        window.AudioContext = window.AudioContext || window.webkitAudioContext
                || window.mozAudioContext || window.msAudioContext;
        /* 動(dòng)畫執(zhí)行的兼容寫法 */
        window.requestAnimationFrame = window.requestAnimationFrame
                || window.webkitRequestAnimationFrame
                || window.mozRequestAnimationFrame
                || window.msRequestAnimationFrame;
        // 2:初始化音軌對(duì)象
        var audioContext = new window.AudioContext();
        return audioContext;
    },

    parse : function(audioContext, audioDom, callback) {
        try {
            // 拿到播放器去解析你音樂文件
            var audioBufferSouceNode = audioContext
                    .createMediaElementSource(audioDom);
            // 創(chuàng)建解析對(duì)象
            var analyser = audioContext.createAnalyser();
            // 將source與分析器連接
            audioBufferSouceNode.connect(analyser);
            // 將分析器與destination連接,這樣才能形成到達(dá)揚(yáng)聲器的通路
            analyser.connect(audioContext.destination);
            // 調(diào)用解析音頻的方法
            KeKeMusic.data(analyser, callback);
        } catch (e) {

        }
    },

    data : function(analyser, callback) {
        if (KeKeMusic.mark) {
            // 將音頻轉(zhuǎn)換一個(gè)數(shù)組
            var array = new Uint8Array(analyser.frequencyBinCount);
            analyser.getByteFrequencyData(array);
            // 通過回調(diào)函數(shù)返回
            if (callback)
                callback(array);
            requestAnimationFrame(function() {
                KeKeMusic.data(analyser, callback);
            });
        }
    }
};

window.onload = function() {
    cxBar.init();
    // 點(diǎn)擊音樂播放器
    var audioDom = dom("audioDom");
    var audioContext = KeKeMusic.init();
    this.audioDom.onplay = function() {
        KeKeMusic.mark = true;
        var len = cxBar.arr.length;
        KeKeMusic.parse(audioContext, audioDom, function(data) {
            for (var i = 0; i < len; i++) {
                cxBar.arr[i]["style"]["height"] = data[i] + "px";
                cxBar.arr[i].style.background = "linear-gradient("+randomColor(0.5)+"5%,rgba(255,255,0,0.5) 60%,#fff 100%)";
            }
        })
    };
//    this.audioAutom.onpause=function(){
//        kekeMusic.mark=false;
//    }

};

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/91090.html

相關(guān)文章

  • 程序 + 音樂: 我的自由鋼琴開發(fā)歷程

    摘要:原文鏈接最近用做了一款鋼琴類應(yīng)用,名字定為自由鋼琴,人生如音樂,歡快且自由。就類似于多年前開發(fā)的鋼琴游戲,自由鋼琴只是換了的技術(shù),同時(shí)支持了鋼琴曲的自動(dòng)播放功能。目前采用的技術(shù)架構(gòu)是框架。 原文鏈接 Hate 996? Come Here & Relax~ 最近用Vue + Tone.js做了一款鋼琴類web應(yīng)用,名字定為自由鋼琴(AutoPiano),人生如音樂,歡快且自由。 此文權(quán)...

    Euphoria 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<