close

繼前一篇 [JavaScript]如何在mp3檔案上傳到後端Server前,由前端獲取相關檔案資訊  

現在我們聊到上傳Wave的問題,線上音樂現在有標榜上傳48KHz/24bit,

這樣是高品質音樂,高聆聽享受,

而現在唱片製作最少也都是這樣的格式以上,

至於說要用多高規的格式,是不是就是好事,這不再這篇文章的討論範圍,

 

如果我們有一個網站,要讓使用者上傳44.1kHz/16bit的Wave檔,

這異樣一首歌可通常都是50M左右,

等使用者傳到後端Server再來回報格式是否合乎需求,

 

或者有些程式設計師會說,反正就等使用者上傳後,

後台要轉檔時再來判斷上傳的格式,再來轉換成網站或是App需要的格式,

 

對於一個程式設計師,轉音檔有很多plug-in可以用,引用元件像是N-Audio,

要甚麼格式都可以轉出來,沒錯,轉換出來的格式是對了,

但是為什麼Protools聲音就是硬生生地比其他軟體好,

是演算法!!

還有不管是升降格式,Dithering..是轉換聲音檔規格的一個很重要的關鍵,

這個技術我想去上網下載個免費的plug-in來跟數萬元的錄音軟體

甚或是那種用硬體的來轉,這樣的差別有多少,

 

我想也應該不是有很多人知道wave轉mp3的過程,

必須要先把wave轉成44.1KHz/16bit才能進行轉mp3,

至於為什麼?那個轉換的演算法就是這樣,(這邊我研究有錯歡迎指正)

 

好,回到正題,

為了要節省頻寬,在上傳到Server前就先檢驗格式,

一樣我們得用到HTML5以及localstorage,

我查詢過很多技術網站都找不到相關的解答,

講難聽點,一大堆牛鬼蛇神的解法,有一大方面是這需求很冷門,

看過一大堆甚麼數學公式甚麼一大堆的,

最後我在維基百科找到答案,

Wave format

 

所有的資訊都在檔頭,還需要計算甚麼嗎?也許mp3檔案也是這樣吧?

所以採用bytes陣列方式來處理!!

 

$("#file").change(function(e){
                     
    var myfile = e.currentTarget.files[0];
   	var fileurl = URL.createObjectURL(myfile); 

       $("#filetype").text(myfile.type); //檔案型態   audio/wav 
       $("#filesize").text(myfile.size);  //檔案大小

       $("#audio").prop("src", fileurl);
      
        var reader = new FileReader();
     var blob = myfile.slice(0, 44); 
    //讀取0到43位元組的資料,因為之後是音頻資料,我們只讀檔案資訊,不讀取檔案音頻內容

  		reader.readAsArrayBuffer(blob);
        
        reader.onloadend = function(evt) {

      if (evt.target.readyState == FileReader.DONE) { // DONE == 2

         var chars  = new Int16Array(evt.target.result);
   

                 // 這邊開始請使用 chars[xx]  依照規格表來確認檔案格式

});

 

最後還是一句話,音頻轉檔,請交由專業的程式來處理,

光是Dithering這件事情,我早就放棄了.

arrow
arrow
    全站熱搜

    baechang 發表在 痞客邦 留言(0) 人氣()