2013-07-10 2 views
3

Я использую flash для захвата аудио, кодирования его в mp3, а затем отправьте его на javascript в виде ByteArray. Теперь я хочу, чтобы javascript сохранял его как MP3 на моем компьютере (а не флэш-память сохраняет его на моем компьютере). Я использую Blob, а затем getDataURL, но файл не воспроизводится при сохранении. Я использовал тот же самый точный метод для сохранения WAV-файлов, и он работал отлично. Вот код JS:преобразование ByteArray в blob с помощью javascript

var getDataFromSWF = function (bytes) { 
      var myBlob = new Blob([bytes], { type: "audio/mpeg3" }); 

      var url = (window.URL || window.webkitURL).createObjectURL(myBlob); 
      var link = window.document.createElement('a'); 
      link.href = url; 

//   $("label").text(url); 
      link.download = 'output.mp3'; 
      var click = document.createEvent("Event"); 
      click.initEvent("click", true, true); 
      link.dispatchEvent(click); 

//   console.log(bytes); 
     } 

Я довольно много уверен, что ByteArray, это хорошо, потому что если я позволю SWF сохранить файл, он работает тоже нормально. Но я хочу знать, что не так с JS-кодом. (Примечание: я новичок в BLOB)

ответ

0

Попробуйте это, чтобы получить Blob

function base64toBlob(base64Data, contentType) { 
var sliceSize = 1024; 
var byteCharacters = atob(base64Data); 
var bytesLength = byteCharacters.length; 
var slicesCount = Math.ceil(bytesLength/sliceSize); 
var byteArrays = new Array(slicesCount); 
for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) { 
    var begin = sliceIndex * sliceSize; 
    var end = Math.min(begin + sliceSize, bytesLength); 
    var bytes = new Array(end - begin); 
    for (var offset = begin, i = 0 ; offset < end; ++i, ++offset) { 
     bytes[i] = byteCharacters[offset].charCodeAt(0); 
    } 
    byteArrays[sliceIndex] = new Uint8Array(bytes); 
} 
return new Blob(byteArrays, { type: contentType }); 

}

Смежные вопросы