2013-06-09 6 views
6

मैं एक आरआईए लिखने की कोशिश कर रहा हूं जिसका उपयोग मोबाइल और डेस्कटॉप ब्राउज़र दोनों पर भी किया जा सकता है। इस ऐप का एक मुख्य उद्देश्य ध्वनि बजाना है। एक्स कई हो सकते हैं (अब तक, 150+ हैं)गतिशील रूप से निर्मित ऑडियो ऑब्जेक्ट एंड्रॉइड क्रोम ब्राउज़र में नहीं खेल रहा है

एक निश्चित उपयोगकर्ता कार्रवाई पर मैं एक नया ऑडियो ऑब्जेक्ट बनाना चाहता हूं, एक निश्चित क्लिप लोड करना चाहता हूं, और इसे चला सकता हूं। आदर्श रूप में, मैं एक नया 'ऑडियो' ऑब्जेक्ट बनाउंगा, लोड के लिए src प्रतीक्षा करें और फिर खेलें। यह विभिन्न डेस्कटॉप ब्राउज़र पर काम करता है, हालांकि एंड्रॉइड 4.2, क्रोम और स्टॉक ब्राउजर पर असफल रहा है।

मैं ऑडियो सहित 4 अलग अलग तरीकों की कोशिश की है:

  1. सहित (html में) बस एक ऑडियो ब्लॉक, है यह रनटाइम पर लोड और .play बुला(); यह काम करता है हालांकि इसका मतलब है कि मुझे 150+ ऑडियो ब्लॉक बनाना होगा। (यह हर जगह काम करता है)
  2. 'ऑडियो' का एक नया उदाहरण बनाएं और गतिशील रूप से .src विशेषता को सेट करें, फिर लोडकंपलेट कॉलिंग पर .play() (यह केवल डेस्कटॉप ब्राउज़र पर काम करता है, मेरे मोबाइल पर नहीं)
  3. नया ऑडियो टैग बनाने के लिए jQuery का उपयोग करें, डोम में जोड़ें, लोड के लिए प्रतीक्षा करें, फिर खेलें (यह केवल मेरे मोबाइल पर नहीं, डेस्कटॉप ब्राउज़र पर काम करता है)
  4. एचटीएमएल में ऑडियो टैग लोड करने के लिए कहने के साथ ऑडियो टैग जोड़ें, उपयोगकर्ता के लिए प्रतीक्षा करें बातचीत, फिर इसे लोड करें, तैयार होने के लिए प्रतीक्षा करें, फिर खेलें (यह हर जगह काम करता है)।

तो, बड़ा सवाल यह है कि कोई विचार क्यों नहीं काम कर रहा है?

** संपादित करें ** मुझे पता है कि एक समय में केवल 1 फ़ाइल खेला जा सकता है, और यही वह है जो मैं यहां करने की कोशिश कर रहा हूं। परियोजना (कार्यात्मक रूप से) एक फोन सेवा के समान है, जहां आपके पास 1 व्यक्ति संख्या 0 - 9 रिकॉर्ड करता है, फिर यह 'फ़ोन' बोलता है तो '5'। '5'। '5'। '0'। '1 '..... आदि। इसलिए एक समय में 1 ऑडियो स्ट्रीम पूरी तरह से स्वीकार्य है ... यह सिर्फ यह खेलना है जो मुद्दा है।

अभी के रूप में, मैं निम्नलिखित कोड है, यह भी पाया जा सकता है here

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>test</title> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
<script> 
    var $a1, $a2, $a3, $a4; 
    $(document).ready(function(){ 
     _setupVars(); 
     _addListeners(); 
    }) 

    function _setupVars(){ 
     $a1 = $("#audio1"); 
     $a2 = $("#audio2"); 
     $a3 = $("#audio3"); 
     $a4 = $("#audio4"); 
    } 

    function _addListeners(){ 
     $a1.click(_handleAudio1); 
     $a2.click(_handleAudio2); 
     $a3.click(_handleAudio3); 
     $a4.click(_handleAudio4); 
    } 

    function _handleAudio1(){ 
     $("#america")[0].play(); 
    } 

    function _handleAudio2(){ 
     var a = new Audio(); 

     $(a).on("canplay", function(){ 
      a.play(); 
     }) 

     if(a.canPlayType("audio/mp3")) 
      a.src = "audio/test2.mp3"; 
     else if(a.canPlayType("audio/ogg")) 
      a.src = "audio/test2.ogg"; 
    } 

    function _handleAudio3(){ 
     var $x = $('<audio id="says">'+ 
       '<source src="audio/test3.mp3">'+ 
       '<source src="audio/test3.ogg">'+ 
       '</audio>'); 
     $x.on("canplay", function(){ 
      $x[0].play(); 
     }) 
     $("#audioCont").append($x); 
    } 

    function _handleAudio4(){ 
     var $x =$("#cat"); 
     $x.on("canplay", function(){ 
      $x[0].play(); 
     }) 
     $x[0].load(); 
    } 

</script> 
</head> 
<body> 
    <input type="button" id="audio1" value="play Audio Tag"/><br /> 
    <input type="button" id="audio2" value="play audio object"/><br /> 
    <input type="button" id="audio3" value="play dynamic Audio Tag"/><br /> 
    <input type="button" id="audio4" value="play load Audio Tag, then play"/><br /> 
    <audio id="america"> 
     <source src="audio/test1.mp3"> 
     <source src="audio/test1.ogg"> 
    </audio> 
    <audio id="cat"> 
     <source src="audio/test4.mp3"> 
     <source src="audio/test4.ogg"> 
    </audio> 

</body> 
</html> 

उत्तर

2

तरीके 1, 2 & 3 आईओएस पर काम नहीं करेगा की है। दुर्भाग्य से अधिकांश मोबाइल डिवाइस एक समय में एक ही स्रोत में एचटीएमएल 5 ऑडियो को सीमित करते हैं। आईओएस को किसी भी मीडिया प्लेबैक को शुरू करने के लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है (ऑनलोड गिनती नहीं है)।

+0

मैं एक समय में 1 ओएस के साथ ठीक हूं। 9 तो यह 'बोलता है' तो '5' एक फोन नंबर '5' '5' '0' '1 - परियोजना (कार्यात्मक) एक फोन सेवा है, जहाँ आप 1 व्यक्ति रिकॉर्ड है संख्या 0 के समान है।।।। '..... आदि तो 1 ऑडियो एक समय में बाहर धारा पूरी तरह से स्वीकार्य ... यह सिर्फ यह जो मुद्दा है खेलने के लिए हो रही है है (क्रोम में, नहीं एक iOS डिवाइस अभी तक में परीक्षण करने के लिए मिल गया है) – whomba

+0

एक एकल मीडिया फ़ाइल केवल एक समय में उपयोगकर्ता इंटरैक्शन के साथ खेला जा सकता है। – idbehold

7

अभी एंड्रॉइड पर क्रोम उपयोगकर्ता को ऑडियो चलाने के लिए एक इशारा के माध्यम से प्लेबैक "आक्रमण" करने की स्पष्ट आवश्यकता है। मोबाइल डिवाइस बैंडविड्थ को अधिभारित करने या परेशान पॉपअप बनाने की चिंताएं थीं जो सिर्फ ऑडियो चलाती हैं - जो डिफ़ॉल्ट रूप से अक्षम होने के कारणों में से एक है।

हम इसे बदलने के लिए देख रहे हैं, और यदि आप एंड्रॉइड पर क्रोम के बीटा पर हैं तो आप इस लिंक chrome://flags/#disable-gesture-requirement-for-media-playback पर जा सकते हैं और यह आपको इस व्यवहार को टॉगल करने देगा। हम इस मुद्दे पर काम कर रहे हैं और आप इसका पालन कर सकते हैं Bug 160536

+1

इस पर अनुवर्ती के रूप में मैंने उपरोक्त उस पृष्ठ पर नेविगेट किया, लेकिन मुझे उस सेटिंग को नहीं मिला जिसे मुझे बदलने की जरूरत है? क्या आप इसे मेरे लिए इंगित कर सकते हैं? –

+1

ठीक है, यह एक बहुत पुराना है, लेकिन आप निश्चित रूप से एंड्रॉइड पर क्रॉसवॉक/कॉर्डोवा में 'प्लेटफार्म \ एंड्रॉइड \ 'में' xwalk --disable-gesture-requirement-for-media-playback'' जोड़कर यह कर सकते हैं \ संपत्ति \ xwalk-command-line'' फ़ाइल - अगर आपके पास पहले से नहीं है तो इसे बनाएं। – Agamemnus

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