के बाद पहली बार मैं आईओएस 6 के तहत एचटीएमएल 5 में वेबकिटऑडियो कॉनटेक्स्ट का उपयोग कर एक छद्म ऑडियो विरूपण बग के साथ संघर्ष कर रहा हूं। यह अन्य परिस्थितियों में हो सकता है, लेकिन एकमात्र तरीका मैं कर सकता हूं डिवाइस को पावर साइकलिंग के बाद मेरे पृष्ठ की पहली विज़िट पर 100% रेपो मिलता है। ऐसा लगता है कि यदि आप इस पर जाने से पहले किसी भी ऑडियो-सक्षम पृष्ठ पर जाते हैं, तो समस्या नहीं होगी।आईओएस 6 (आईफोन 5) पर वेबकिट ऑडियो डिस्टॉर्ट्स पावर साइकलिंग
विरूपण केवल webkitAudioContext.decodeAudioData() द्वारा उत्पन्न ऑडियो के साथ होता है और फिर webkitAudioContext.createBufferSource() के माध्यम से खेला जाता है। WebkitAudioContext.createMediaElementSource() विकृत का ऑडियो प्लेबैक होगा।
क्या मुझे कुछ प्रारंभिक चरण याद आ रहा है?
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
var buffer = null;
var context = null;
var voice = null;
function load_music(file) {
context = new webkitAudioContext();
voice = context.createBufferSource();
var request = new XMLHttpRequest();
request.onload = function() {
context.decodeAudioData(request.response, function(result) {
buffer = result;
document.getElementById("start").value = "Start";
});
};
var base = window.location.pathname;
base = base.substring(0, base.lastIndexOf("/") + 1);
request.open("GET", base + file, true);
request.responseType = "arraybuffer";
request.send(null);
}
function start_music() {
if (!buffer) {
alert("Not ready yet");
return;
}
voice.buffer = buffer;
voice.connect(context.destination);
voice.noteOn(0);
document.getElementById("compare").style.display = "block";
}
</script>
</head>
<body onload="load_music('music.mp3')">
<p>This is a simple demo page to reproduce a <strong>webkitAudio</strong>
problem occurring in Safari on iOS 6.1.4. This is a stripped down demo
of a phenomenon discovered in our HTML5 game under development,
using different assets.</p>
<p><u>Steps to reproduce:</u></p>
<ol>
<li>Power cycle <strong>iPhone 5 with iOS 6.1.4</strong>.</li>
<li>Launch Safari immediately, and visit this page.</li>
<li>Wait for "Loading..." below to change to
"Start".</li>
<li>Tap "Start".</li>
</ol>
<p><u>Issue:</u></p>
<p>Audio will be excessively distorted and play at wrong pitch. If
another audio-enabled web site is visited before this one, or this
site is reloaded, the audio will fix. The distortion only happens on
the first visit after cold boot. <strong>To reproduce the bug, it is
critical to power cycle before testing.</strong></p>
<p>This bug has not been observed on any other iOS version (e.g. does
not occur on iPad Mini or iPod 5 using iOS 6.1.3).</p>
<input id="start" type="button" value="Loading..." onmousedown="start_music()" />
<span id="compare" style="display:none;"><p><a href="music.mp3">Direct link</a> to audio file, for
comparison.</p></span>
</body>
</html>
नोट:: यहाँ कोड और एचटीएमएल अपनी संपूर्णता में है कि मैं एक बग रिपोर्ट के रूप में एप्पल को प्रस्तुत (लेकिन कोई जवाब नहीं मिला है) है शरीर पाठ चलता है यह केवल iOS 6.1.4 पर होता है, लेकिन मेरा मतलब है यह कहने के लिए कि समस्या केवल इस स्थिति में पावर साइकलिंग पर होती है। मैंने आईपैड मिनी पर 6.1.3 के तहत भी समस्या का अनुभव किया है, लेकिन बिजली साइकलिंग पर नहीं।
संपादित करें: कुछ चीजें मैंने कोशिश की है ... बफर स्रोत के निर्माण को रोकें कोई फर्क नहीं पड़ता। .mp3 फ़ाइल उत्पन्न करने के लिए विभिन्न ट्रांसकोडर्स का उपयोग करके यह कोई फर्क नहीं पड़ता। पहली ध्वनि के रूप में फेंकने वाली चुप्पी बजाना कोई फर्क नहीं पड़ता क्योंकि पृष्ठ को फिर से लोड होने तक प्रत्येक डिकोडऑडियो डेटा के लिए विरूपण जारी रहता है। यदि CreateMediaElementSource और createBufferSource स्रोत एक ही पृष्ठ में मिश्रित होते हैं, केवल createBufferSource ऑडियो (decodeAudioData का उपयोग करके) विकृत हो जाएगा। जब मैं विफलता मामले और गैर-विफलता मामले में request.response.byteLength की जांच करता हूं, तो वे वही हैं, जो XMLHttpRequest गलत डेटा नहीं लौटा रहा है, हालांकि मुझे लगता है कि डेटा का भ्रष्टाचार एमपी 3 शीर्षलेख को नुकसान पहुंचाएगा और प्रस्तुत करेगा वैसे भी unplayable फ़ाइल।
विफलता की स्थिति और विफलता की स्थिति के बीच एक अवलोकन अंतर है। केवल पढ़ने योग्य मान संदर्भ.sampleRate विफलता स्थिति में 48000 और गैर-विफलता स्थिति में 44100 होगा। (फिर भी विफलता स्थिति गैर-विफलता स्थिति की तुलना में कम पिच लगता है।) केवल एक चीज जो मेरे साथ होती है वह एक हैक है जिसमें मैं जावास्क्रिप्ट के माध्यम से पृष्ठ को रीफ्रेश करता हूं यदि ब्राउज़र पर 48000 पता चला है जो 44100 की रिपोर्ट करनी चाहिए, लेकिन यह गंभीर उपयोगकर्ता है स्क्रीनिंग और भविष्य के सबूत नहीं, जो मुझे परेशान करता है।
यह अभी भी आईओएस 8. –
पर एक मुद्दा साथ ही 9.2.1 (के रूप में नवीनतम संस्करण है इस लेखन के) –