Final project - Dev17
10069 ワード
Visualizer実装-3
参考を探す
AudioContextとcanvasを中心としたキーワードでgooglingを行いました.
reactionを用いた可視化ソースコードが見つかった.
ブログにはReact and CanvasというAudio Visualizerが作成されます.
タイトルがあり、チュートリアルコードも提供されています.
まずブログに従ってコードを書き、理解していないコードを一つ一つ分解します.
Part1
Part 1は、オーディオファイルを再生するロジックを実現する.
オーディオファイルを別のディレクトリに保存して読み込むと、
new Audio()ジェネレータを使用してオーディオファイルを再生します.
次にボタンを作成し、togglePlay関数を作成してonClickイベントに渡します.
...
if(audio.paused) {
audio.play();
} else {
audio.paused();
}
...
render() {
return <>
<button onClick={this.togglePlay}>재생/일시중지</button>
</>
}
Part2
Part 2はAudioContextを用いて周波数スキームを作成する.
これはcanvasで描画する方向です.
WEB-AUDIO-APIのAudioContextを生成することにより、オーディオソースノードを生成する.
Part 1で生成されたオーディオオブジェクトをcreateMediaElementSourceメソッドで渡します.
ここで、createMediaElementSourceメソッドはAudioContextの
新しいMediaElementAudioSourceNodeの作成に使用します.
次に、createAnalyserメソッドを使用してターゲット周波数アレイを生成します.
createAnalyserメソッドは、オーディオ時間および周波数データを表示することができる.
データ可視化の作成に使用します.
Analyzerノードを以前に作成したMediaElementAudioSourceNodeに接続します.
AudioContextのターゲットをAnalyzerノードに接続します.
componentDidMount関数の内部で実装されます.
componentDidMount() {
this.context = new (window.AudioContext || window.webkitAudioContext)();
this.source = this.context.createMediaElementSource(this.audio);
this.analyser = this.context.createAnalyser();
this.source.connect(this.analyser);
this.analyser.connect(this.context.destination);
this.frequency_array = new Uint8Array(this.analyser.frequencyBinCount);
}
次に、canvasタグを使用してアニメーションを実装します.AudioContext.resume()
コードを実行してオーディオを再生しようとすると、次のエラーが発生しました.
どこでこの間違いを見たことがありますか?以前クローンを受け取ったことがあると思います
他のVisualizerモジュールと同じ警告文です.
ああ...以前は黄色い警告文だったのですが、そのまま通り過ぎてしまい、
これが再生エラーの原因です.
stack overflowでは、オーディオを再生する前に、onClickなどのジェスチャーを使用してください.
resume()メソッドを呼び出すべきです.
Chromeの自動再生ポリシーのリンクを添付して確認し、同様に以下のように説明します.
If an AudioContext is created before the document receives a user gesture, it will be created in the "suspended"state, and you will need to call resume() after the user gesture.
以前AudioContextには3つの状態がありました.
userがジェスチャーを行う前にAudioContextを作成した場合、stateは保留されます.
そのため、警告語とともに音声が再生できない.
オーディオを再生する前にresume()メソッドを使用してオーディオを再生します!
...
this.context.resume()
if(audio.paused) {
audio.play();
} else {
audio.paused();
}
...
render() {
return <>
<button onClick={this.togglePlay}>재생/일시중지</button>
</>
}
今日はここまで。
正直、可視化を実現しましょう!抽象的に考えるだけで、
実際の論理がどうなるか考えていないので、迷っていますが、やはり人を死なせる道理はありません.
論理については完全に理解していませんでしたが、一つ一つ解かれているようで面白かったです.
まず、一定の分岐があるVisualizerを一時的に保持します.
まず1分間の試聴機能を実現したいです.
コメントサイト
https://medium.com/swlh/create-an-audio-visualizer-with-react-and-canvas-part-1-of-3-da414a1edfed
https://stackoverflow.com/questions/55026293/google-chrome-javascript-issue-in-getting-user-audio-the-audiocontext-was-not
https://developer.chrome.com/blog/autoplay/
Reference
この問題について(Final project - Dev17), 我々は、より多くの情報をここで見つけました
https://velog.io/@woals3000/Final-project-Dev17
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
https://medium.com/swlh/create-an-audio-visualizer-with-react-and-canvas-part-1-of-3-da414a1edfed
https://stackoverflow.com/questions/55026293/google-chrome-javascript-issue-in-getting-user-audio-the-audiocontext-was-not
https://developer.chrome.com/blog/autoplay/
Reference
この問題について(Final project - Dev17), 我々は、より多くの情報をここで見つけました https://velog.io/@woals3000/Final-project-Dev17テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol