2013-05-17 13 views
7

मैंने यहां और अन्य जगहों के कई आंशिक उत्तर देखे हैं, लेकिन मैं बहुत नौसिखिया कोडर हूं और पूरी तरह से समाधान की उम्मीद कर रहा हूं। मैं क्रोम कैनरी (v। 29.x) में एक लैपटॉप माइक से रिकॉर्डिंग ऑडियो सेट करने में सक्षम हूं और रिकॉर्डर.जेएस का उपयोग करके, अपेक्षाकृत आसानी से एक .wav फ़ाइल रिकॉर्डिंग सेट कर सकता हूं और स्थानीय रूप से सहेज सकता हूं, एक ला:सर्वर से क्रोम में रिकॉर्ड किए गए डब्ल्यूएवी फ़ाइल को

http://webaudiodemos.appspot.com/AudioRecorder/index.html

लेकिन मुझे फ़ाइल को एक लिनक्स सर्वर पर सहेजने में सक्षम होना चाहिए जो मैं चला रहा हूं। यह सर्वर पर ब्लॉब दर्ज डेटा का वास्तविक प्रेषण है और उसे एक .wav फ़ाइल के रूप में सहेज रहा है जो मुझे पकड़ रहा है। मेरे पास एक यूआरएल में ब्लॉब को कैसे सहेजना है और सौदा करने के बारे में आवश्यक PHP और/या AJAX ज्ञान नहीं है, जैसा कि मुझे समझने के लिए दिया गया है, लिनक्स पर द्विआधारी के साथ जो वास्तव में चुनौतीपूर्ण .wav फ़ाइल को सहेजता है। मैं सही दिशा में किसी भी पॉइंटर्स का स्वागत करता हूं। जावास्क्रिप्ट समारोह WAV ब्लॉब अपलोड करने के लिए

+0

http://stackoverflow.com/questions/13658888/save-blob-audio-file-on-server-with-xmlhttprequest?rq=1 का डुप्लिकेट, लेकिन इसका अभी तक जवाब नहीं दिया गया है। –

+0

http://stackoverflow.com/questions/18951197/null-parameter-when-trying-to-pass-a-blob-to-c-sharp-controller/18996423#18996423 यदि आप एएसपी एमवीसी के साथ काम कर रहे हैं तो इस पर निर्भर रहें –

उत्तर

14

क्लाइंट साइड:

function upload(blob) { 
    var xhr=new XMLHttpRequest(); 
    xhr.onload=function(e) { 
     if(this.readyState === 4) { 
      console.log("Server returned: ",e.target.responseText); 
     } 
    }; 
    var fd=new FormData(); 
    fd.append("that_random_filename.wav",blob); 
    xhr.open("POST","<url>",true); 
    xhr.send(fd); 
} 

PHP फ़ाइल upload_wav.php:

<?php 
// get the temporary name that PHP gave to the uploaded file 
$tmp_filename=$_FILES["that_random_filename.wav"]["tmp_name"]; 
// rename the temporary file (because PHP deletes the file as soon as it's done with it) 
rename($tmp_filename,"/tmp/uploaded_audio.wav"); 
?> 

जिसके बाद आप फ़ाइल /tmp/uploaded_audio.wav खेल सकते हैं।

लेकिन याद रखें! /tmp/uploaded_audio.wav उपयोगकर्ता द्वारा www-data बनाया गया था, और (PHP डिफ़ॉल्ट द्वारा) उपयोगकर्ता द्वारा पठनीय नहीं है। उपयुक्त अनुमतियों को जोड़ने स्वचालित करने के लिए, पीएचपी के अंत (PHP समाप्ति टैग ?> से पहले) के लिए लाइन

chmod("/tmp/uploaded_audio.wav",0755); 

जोड़ देते हैं।

उम्मीद है कि इससे मदद मिलती है।

function exportWAV(type){ 
    var bufferL = mergeBuffers(recBuffersL, recLength); 
    var bufferR = mergeBuffers(recBuffersR, recLength); 
    var interleaved = interleave(bufferL, bufferR); 
    var dataview = encodeWAV(interleaved); 
    var audioBlob = new Blob([dataview], { type: type }); 

    var xhr=new XMLHttpRequest(); 
    xhr.onload=function(e) { 
     if(this.readyState === 4) { 
      console.log("Server returned: ",e.target.responseText); 
     } 
    }; 
    var fd=new FormData(); 
    fd.append("that_random_filename.wav",audioBlob); 
    xhr.open("POST","<url>",true); 
    xhr.send(fd); 
} 

फिर उस विधि सर्वर से बचा लेगा:

+0

यह करता है - एक लाख धन्यवाद! – jimiayler

+0

किसी भी विचार को उपरोक्त को http://webaudiodemos.appspot.com/AudioRecorder/index.html पर कैसे लागू करें? जिस तरह से उन्होंने अपना कोड लिखा वह मेरे लिए इतना भ्रमित है। – Ael

+0

अरग। बहुत लंबा, अलग जवाब के रूप में बचाएगा। – cwilso

2

सबसे आसान तरीका है, अगर आप सिर्फ इतना है कि कोड को हैक करना चाहते हैं, recorderWorker.js करने के लिए जाते हैं, और कुछ इस तरह के exportWAV() फ़ंक्शन हैक है मुख्य थ्रेड पर वापस धक्का देने के बजाय, कार्यकर्ता थ्रेड के अंदर से। (रिकॉर्डरजेएस में जटिल वर्कर-आधारित तंत्र इसलिए है क्योंकि एक बड़ा एन्कोड ऑफ-थ्रेड किया जाना चाहिए।)

वास्तव में, आप आज केवल मीडियारेकॉर्डर का उपयोग करेंगे, और इसे एन्कोडिंग करने दें, लेकिन यह एक संपूर्ण है मोम की 'नोटर बॉल'।

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