質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

7023閲覧

webAudioAPI エラーが出る

ukey

総合スコア12

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2017/12/20 17:53

編集2017/12/20 17:59

webAudioAPIを使ってarrayBufferから音を作成したいのですが,どうしてもエラーが出ます

javascript

1 window.AudioContext = window.AudioContext || window.webkitAudioContext; 2 let audioContext = new AudioContext(); 3 let source=audioContext.createBufferSource(); 4 let arrBuffer=new Float32Array(sampleNum); 5 let arrayBuffer = arrBuffer.buffer; 6 audioContext.decodeAudioData(arrayBuffer).then(function(audioBuffer){ 7 source.buffer=audioBuffer; 8 source.connect(audioContext.destination); 9 source.start(0); 10 });

エラーメッセージはこうです
Uncaught (in promise) DOMException: Unable to decode audio data
Promise rejected (async)

実行環境はgooglechrome,chromecanary,firefoxなどで試して見ました.versionは全部最新だと思います

上記コードでarrBuffer=new Float32Arrayとしていますが,一応要素はちゃんと定義してあると見てください.上記ではそう書いているだけです

よろしくお願いします!!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

let audioContext = new (window.AudioContext || window.webkitAudioContext)();
let source = audioContext.createBufferSource();
let sampleNum = audioContext.sampleRate;
let arrBuffer = new Float32Array(sampleNum);
gl.getBufferSubData(gl.TRANSFORM_FEEDBACK_BUFFER, 0, arrBuffer);
let audioBuffer = audioContext.createBuffer(2, sampleNum, sampleNum);
for (let i = 0; i < 2; i++) {
let bufferring = audioBuffer.getChannelData(i);
bufferring.set(arrBuffer);
}
let source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.start();
こんな感じでできました
正直納得はいかないですが,やっぱdecodeAudioDataではダメなんですかね

投稿2018/01/13 10:24

ukey

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

"一応要素はちゃんと定義してあると見てください"
そこが一番重要なところなんですけど。

js

1arrayBuffer = new Float32Array();

って、これではarrayBuffer型ではなくTyped Array型になるのですが。

投稿2017/12/20 18:34

turbgraphics200

総合スコア4267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

turbgraphics200

2017/12/20 18:56

あ、そうですね。 でも、decodeAudioDataは、(ブラウザーによって扱えるファイルは変わるかもですが) *.wav や *.ogg, *.mp3 といったものをデコードするもので、それ以外のものはダメかと。
ukey

2017/12/21 00:23

あ,なるほど......?ではただのbufferから音を生成するには他の手段が必要ということですね...?ちょっと探してみます.ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問