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

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

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

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

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

1回答

1435閲覧

web audio api のサンプリングレートについて

k.Natsu

総合スコア10

HTML5

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

JavaScript

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

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2018/03/08 02:17

(実現したいこと)
Web Audio APIを使用して音源再生時にフィルタ処理したい。

(解決できていないこと)

ソース音源として各種サンプリングレートの音源を用意しております。
しかし、Web Audio APIでdecodeAudioしたAudioBufferで取得できる
サンプリングレートは、44.1kHzに固定されてしまいます。

ウェブ検索すると、固定ではないか?という情報はありますが、
確かな記述がなく、どのように扱われているのかがわかりません。

44.1kHzのサンプリングレートを任意に変更は可能でしょうか?

lang

1private audioctx: any = new AudioContext; 2 3public getAudioBufferSync(file:any): Promise<any> { 4 return new Promise((resolve, reject) => { 5 let f:FileReader = new FileReader(); 6 f.onload = () => { 7 this.audioctx.decodeAudioData(f.result, (buffer) => { 8 resolve(buffer); 9 },(error) => { 10 alert('failed.'); 11 }); 12 }; 13 f.readAsArrayBuffer(file); 14 }); 15} 16 17public getSamplingRate(buffer: any): number { 18 console.log(buffer.sampleRate); //44100 expected 16000 19 console.log(this.audioctx.sampleRate); //44100 expected 16000 20 return this.audioctx.sampleRate; 21}

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

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

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

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

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

guest

回答1

0

https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/decodeAudioData

に以下の記述がありますので

The decoded AudioBuffer is resampled to the AudioContext's sampling rate, then passed to a callback or promise.

大元のAudioContextのsampleRateをなんとかしないことには変化しないと思いますが、

ブラウザーの実装はわからないのでNodeJSの実装を見てみますと

https://github.com/audiojs/web-audio-api/blob/master/lib/AudioContext.js

固定値44100としているので、同様の実装では上のコードのままでは44.1KHz固定になるだろうと思います。(単なる推測ですが44100固定値で問題ないからこの実装になっているような・・・)


ところで固定値になったとして実現したいことの障害になるのでしょうか?やったことないので確かなことはわかりませんが、AudioContextの以下の説明をみると用意した音声ファイルのサンプリングレートは気にする必要ないのではという予感がします。

An audio context controls both the creation of the nodes it contains and the execution of the audio processing, or decoding. You need to create an AudioContext before you do anything else, as everything happens inside a context.

実際にサンプリングレートの不一致でフィルタリングに問題が出たのでしょうか?

投稿2018/03/08 04:16

KSwordOfHaste

総合スコア18392

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

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

k.Natsu

2018/03/08 05:57

ご回答ありがとうございます。 はい、現状特にフィルタリングで問題が出たわけではないです。 ソース音源のサンプリングレートが16kHzの場合でもweb audio apiの場合だと44.1kHzとなり、不思議に思っている、という状況です。 16kHzの音源なのに44.1kHzになり、データ点数は多くなることで再生時間は同じ、しかし音質は変わっていないという状況で、できればソース音源と同じデータ点数で処理をしたいと思っている次第です。
KSwordOfHaste

2018/03/08 06:10

なるほど。わかりました。おそらく様々なオーディオソースを混在させた際の扱いをシンプルにするためにこのようになっていると想像します。サンプリングレートが16kHz->44.1kHzになることでサンプルを合成する頻度は44.1kHzになってしまいますが、リソースの面からいえば外部からJSエンジン内部へのデータストリームはあくまで16kHzで流れ込んでいるわけですし、音声の品質を一定以上に確保する意味でエンジン自体の信号処理能力は最低限CD品質程度のレートの処理能力が「充分ある」という前提で44.1kHz固定でよしとしているのだと思います。
k.Natsu

2018/03/08 06:18

はい、44.1kHz固定にされているというか変換されているということなのですよね。入力音源のサンプリングレートを間違って認識している、もしくはプログラムの取り扱いが間違っているのではないか?ということでこちらに質問させていただいておりました。再生音声品質自体は、iTunesで再生した場合とほぼ変わらないので問題ないのかな?とは考えておりますが、フィルタ処理を独自のFFTで実装しているということもあり、データ点数は増えているのに品質は16kHzのものなので、同じサンプリングレートでweb audio apiで読み込ませて処理回数を減らしたいと考えておりました。
KSwordOfHaste

2018/03/08 06:34 編集

うーん、FFTのデータ件数を減らすという意味で元のサンプリングレートのままデータを受け取りたいという点納得しました。 元のサンプリングレートをなんらかの形でFFTへ渡す箇所で意識できるようにし、間引きしたサンプルによってFFTを施しまた元のレートへ流し込むみたいなことが工夫できないものでしょうか。 ---追記--- これはあくまでFFT処理をAutiodContextの中に組み込むならという想定です
k.Natsu

2018/03/08 08:25

アドバイスいただきありがとうございます。 はい、間引いて処理するというのも一つの手段であるのですが、できればソース音源のまま分解してくれる方法がweb audio apiに用意されていないかな?と調査しています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問