会社のブログログイン登録スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。2,378件6質問サイズの大きいmp3をXHRでロードし、WebAudioAPIを用いて再生しているのですが、ロードが完了するまでの待ち時間が発生します。サイズが大きいmp3であっても待ち時間を少なく抑えて再生を開始する方法はありますでしょうか。SoundCloudは再生ボタンをクリックすると即座に再生が開始されます。デベロッパーツールで確認すると再生しながらロードを行っているのがわかります。どのような実装でこれを実現しているのか分かっていないのですが、何かしらの方法があるのではないかと考えています。Extensionsという、JavaScriptでストリーミングするための標準APIがあります。Content`を返していました。Contentはサーバーにデータ(今回の場合はmp3)の一部分を要求するものらしいです。個の銅バッジ4ありがとうございます!そういうものがあったんですね。2:31あらためて、回答ありがとうございました。紹介してもらったgithubの参考リポジトリの実装を見てみました。Demoを見てもたしかに短い待機時間で再生が開始されているのですが、mp3ファイルを細切れに分割してロードするということをしているため、この手法だとmp3ファイルを編集する手間が生じます。この方法もひとつの解決法だとは思うのですが、できればmp3ファイルを編集することなく、ひとつのmp3ファイルで実現できないかと考えています(SoundCloudではそれが実現できているので何らかの方法があると考えています)。ご存知のかたがいましたらよろしくお願い致します。httpの206を使っているのかもしれません。206について追記しました。headerっていうのを使うんですね。試しにheaderを追加してxhrで取得してみると、一部分を取得できました。この方法で細切れで取得を繰り返せば、待機時間を少なくすることができそうです。|2AudioBufferはせいぜい1分程度の比較的短めの音声のために設計されていて、たとえばCD一枚74分のデータ全体のような大きなデータを読み込むような目的には向いていません。このインターフェースはメモリ上に保持されるオーディオのリソース(ワンショットの音やその他の短いオーディオクリップ)を表します。32ビット・リニアPCMです。1つ以上のチャンネルを持つ事ができます。典型的には、そのPCMデータは適度に(通常1分以内程度に)短いと見込まれます。音楽の1曲分のような長時間の音に関してはaudio要素とMediaElementAudioSourceNodeによるストリーミングを使うべきです。http://g200kg.github.io/web-audio-api-ja/#AudioBufferこれらのオブジェクトは短い、一般的には45秒未満の、断片的な音声を保持するために設計されています。それよりも長い音声は、MediaElementAudioSourceNodeのオブジェクトが適しています。https://developer.mozilla.org/ja/docs/Web/API/AudioBufferというわけで、MediaElementAudioSourceNodeを使うのがいいと思います。MediaElementAudioSourceNodeなら簡単にストリーミング再生で部分的に読み込みながら再生することが可能です。ないと思いますが、万が一どうしてもXHRで読み込まなければならない理由があるのなら、MediaElementAudioSourceNodeを使うことはできません。その場合は何らかの方法でオーディオファイルを分割してAudioBufferに読み込むことになるでしょう。MediaElementAudioSourceNodeで途中から再生するにはHTMLMediaElementのcurrentTimeプロパティで現在の再生位置を設定できます。その後でplayを呼び出せば途中から再生できます。ローカルのオーディオファイルを開いて、ローパスフィルタをかけて途中から再生するコードは次のようになります。個の銅バッジ4すみません、確認するのが遅れてしまいました。xhrを使わずともストリーミングは可能なんですね。こちらも試してみたいと思います。0:38遅くなりましたが、MediaElementAudioSourceNodeを試してみました。ロードしながらの再生ができることを確認できました。申し訳ないのですが、また質問をさせてください。100秒ある音声の50秒の位置から再生したいとした場合、先頭からロードするのではなく50秒の位置からロードを開始することは可能でしょうか?先頭からロードしてしまうと50秒の位置までロードされるのに時間がかかってしまうので、この待機時間を無くしたいと考えています。15:02回答に追記しました。8:16親切に本当にありがとうございます。サンプルコードまで書いてもらって助かります。currentTimeの指定で途中から再生させることは実現できました。このときにロードは先頭から始まってしまい、やはり待機時間が発生してしまいます。別の質問としてこちらに投稿させていただきました。何か情報ありましたらまたよろしくお願いいたします。|この質問に回答するには、ログインする必要があります。求めていた回答ではありませんか?javascriptのタグが付いた他の質問を参照する。arrows正式版として、2023年度のモデレーター選挙を行います!2023年コミュニティモデレーター選挙リンク集3WebAudioAPIでmp3の任意の範囲だけロードさせたい関連する質問18JavaScriptからファイルをダウンロードさせるのはどうしたら良いですか?1すべてのブラウザで見られるようにするには?3JavaScriptでダウンロードされるファイルの保存場所を指定する2ファイルダウンロード後にダウンロードに用いた一時フォルダを削除したい3WebAudioAPIでmp3の任意の範囲だけロードさせたい0dropzone.js(ドラッグ&ドロップでのアップロード)が上手く動作しません。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。従って情報を開示できることに同意したことになります。選択した項目のみ受け入れる。