2017-09-02 6 views
0

現在、私が取り組んでいるプロジェクトにはこのweb audio API demoを適用していますが、iPhoneでテストするとサウンドはありません。それはiPad上で正常に動作します。iOSでウェブオーディオAPIのデモが動作しない

私は解決策を検索し、答えの1の次のスニペットでStackOverflowの上で、このthreadを見つけた:

のiOS 6のSafariは、効果的にミュートウェブオーディオAPIから始まります。 イベントでサウンドを再生しようとすると(バッファソースを作成して宛先に接続し、 noteOn()にコールするまで)、 はミュートを解除しません。この後、ミュート解除され、オーディオ再生は制限されず、 とする必要があります。これは、(うまくいけば、彼らはすぐにこのの 言及し、それを更新し、Appleのドキュメントはここにある!)のiOS 6で動作します ウェブオーディオAPIがどのように文書化されていない側面です

ユーザ入力イベントは、onclickイベントでなければなりません再生ボタンにはstart()の代わりにnoteOn()を使用するように変更するとまだ修正されていません。

更新:私はまた、再生ボタンをtouchendイベントでバインドしようとしましたが、役に立たなかった。ここ

がnoteOnを使用する関数()である:

function playNote(buffer, pan, x, y, z, sendGain, mainGain, playbackRate, noteTime) { 
    // Create the note 
    var voice = context.createBufferSource(); 
    voice.buffer = buffer; 
    voice.playbackRate.value = playbackRate; 

    // Optionally, connect to a panner 
    var finalNode; 
    if (pan) { 
     var panner = context.createPanner(); 
     panner.panningModel = "HRTF"; 
     panner.setPosition(x, y, z); 
     voice.connect(panner); 
     finalNode = panner; 
    } else { 
     finalNode = voice; 
    } 

    // Connect to dry mix 
    var dryGainNode = context.createGain(); 
    dryGainNode.gain.value = mainGain * effectDryMix; 
    finalNode.connect(dryGainNode); 
    dryGainNode.connect(masterGainNode); 

    // Connect to wet mix 
    var wetGainNode = context.createGain(); 
    wetGainNode.gain.value = sendGain; 
    finalNode.connect(wetGainNode); 
    wetGainNode.connect(convolver); 

    if (iOS) {   
     voice.noteOn(noteTime);  
    } 
    else { 
     voice.start(noteTime); 
    } 
} 

任意の提案を大幅に理解されるであろう。ありがとう。

+0

コードを表示してください – user7951676

+0

私はnoteOn()を呼び出す関数を追加しましたが、コードベースはかなり大きいです。プロジェクトはGithubのhttps:// githubにあります。com/cwilso/MIDIDrums –

+0

オリジナルデモはこちらですが、iPhoneでも動作しません。 http://webaudiodemos.appspot.com/MIDIDrums/index.html –

答えて

1

私は本当に馬鹿だと感じます。どうやら、あなたのiPhoneを振動モードにしても、サウンドは再生されません。

0

ユーザーインタラクションイベントで関数を呼び出す限り、start()メソッドはiOS上のif elseステートメントなしで正常に動作するはずです。また、yとzをパスナに渡す順序を反転させます。なぜなら、zはいくつかの奇妙な理由のために二番目です。 はここで最も必要とされていない、あなたが必要なものを合わせてそれで何かを変更し、私はイベントリスナーを追加するために、DOMを使用して、どこか他の人を持って、作業例です

 <script> 
     var audioCtx = new (window . AudioContext || window . webkitAudioContext) () ; 
     var oscillator = audioCtx . createOscillator () ; 
     var gainNode = audioCtx . createGain(); 
     oscillator . connect (gainNode) ; 
     gainNode . connect (audioCtx . destination); 
     oscillator . type = 'sine' ; 
     oscillator . frequency . value =440 

     gainNode . gain . value = 1; 
     </script> 
     <button onclick="oscillator . start();">play</button> 
+0

ありがとうございます。私はその論理を取り除き、yとzを修正します。 playボタンをバインドするためにplayNote()関数を使用するメソッドがあります: document.getElementById( 'play')。addEventListener( 'touchend'、handlePlay、true); –

+0

便利な例があれば追加します – user7951676

0

私自身の経験では、時々、ということでしたWeb Audio APIはiPhoneで動作しますが、時には動作しません。ここで私のiPhone 6sで5分前に働いたページです。 1分前に動作しませんでした。もう一度やります!ここで

http://www.stephenandrewtaylor.net/dna-sonification/

が断続的に動作し、別のものです。 2分前に動作しましたが、今は動作しません(アニメーションは機能し、音声はありません)。

http://www.stephenandrewtaylor.net/lie-sonification/

それはSafariで開いているどのように多くのタブで行う必要があります。開いているタブのいくつかを閉じてみることもできます(今は2分前にうまくいったが、今はない)。私は初心者プログラマーでもあり、私はコードを書くことができるはるかに良い方法があると確信しています。

関連する問題