2015-07-09 10 views
11

में प्रस्तुत करें मैं इलेक्ट्रॉन के साथ बनाए गए ऐप पर काम कर रहा हूं, इसे waveurfer.js के साथ काम करना चाहिए ताकि ऑडियो फ़ाइल का प्रतिनिधित्व करने वाले तरंगों को प्रदर्शित किया जा सके। हालांकि, मुझे fs मॉड्यूल का उपयोग करके फ़ाइल खोलने में समस्या हो रही है और फ़ाइल सामग्री को ब्लॉब के माध्यम से तरंगों पर धक्का दे रहा है। फ़ाइल लोड होती है और सबकुछ काम करता प्रतीत होता है लेकिन जब डीकोडिंग तरंगों का कहना है Error decoding audiobufferइलेक्ट्रॉन में स्थानीय फ़ाइल खोलें और waveurfer.js

दो बातें मैंने सोचा कि शायद इस को प्रभावित कर सकता:

  • fs.readFile समारोह दूसरा पैरामीटर के रूप में एक एन्कोडिंग लेता
  • ब्लॉब निर्माता एक विकल्प दूसरा पैरामीटर के रूप में वस्तु, इस whithin आप के माध्यम से माइम प्रकार परिभाषित कर सकते हैं लेता है type संपत्ति

हालांकि, अब तक दोनों दृष्टिकोण समस्या को ठीक करने में विफल रहे हैं।

मुझे उम्मीद है कि किसी के पास समाधान होगा। (fs.readFile फ़ंक्शन भी पूरी तरह से गलत तरीका है और वहां एक बेहतर तरीका है; मैं सिर्फ फाइल खोलने का अपेक्षाकृत प्रदर्शन करने वाला तरीका ढूंढ रहा हूं, किसी भी मदद की सराहना की जाती है) चीयर्स!

कोड यह रहा ...

(मैं सभी इलेक्ट्रॉन बॉयलरप्लेट बाहर जा रहा हूँ, आप इसे आसानी से कर git clone https://github.com/sindresorhus/electron-boilerplate/ से प्राप्त कर सकते हैं) - index.html में main.js एक स्क्रिप्ट टैग शामिल करें, आईडी wave-area साथ एक div जोड़ने कहीं भी एचटीएमएल में और wavesurfer.js library पर एक स्क्रिप्ट टैग जोड़ें। इसके अलावा आपको demo wav-file की स्थानीय प्रति की आवश्यकता होगी।

main.js फ़ाइल में

फिर ...

var fs = require('fs'); 

var wavesurfer = Object.create(WaveSurfer); 
wavesurfer.init({ 
    container: '#wave-area' 
}); 

fs.readFile('/path/to/demo.wav', function(err, data) { 
    if (data && !err) { 
    console.log('has data and no error!'); 
    } 
    var file = new window.Blob([data]); 
    wavesurfer.loadBlob(file); 
} 

wavesurfer.on('loading', function(e) { 
    console.log('loading', e); 
}); 

wavesurfer.on('error', function(err) { 
    console.log(err); 
}); 

उत्तर

11

मैं अंत में समाधान मिल गया! ब्लॉब जो loadBlob विधि के माध्यम से wavesurfer को पारित कर दिया है तब्दील करने की जरूरत है एक Uint8Array

काम कर कोड में इस तरह के लिए इस

fs.readFile('/path/to/demo.wav', function(err, buffer) { 
    // … 
    var blob = new window.Blob([new Uint8Array(buffer)]); 
    wavesurfer.loadBlob(blob); 
} 
+2

धन्यवाद लग रहा है! यह 'window.createObjectURL' के लिए भी काम करता है –

संबंधित मुद्दे