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

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

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

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

Q&A

1回答

2150閲覧

WebAudioAPIでピッチシフトさせるアルゴリズムについて(サウンドプログラミング、JavaScript初心者)

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2017/07/13 07:02

WebAudioAPIでScriptProcessorNodeを使ってピッチシフトさせるためのアルゴリズムを書きたいのです。正弦波をまず作ってみてつなげようと思ったのですが、音声に影響していません。

JavaScript

1 2PichShift.setup = function(audioStream) { 3 4 console.log("pichshift setup"); 5 const processor = audioCtx.createScriptProcessor(1024, 2, 2); 6 this.output = audioCtx.createMediaStreamDestination(); 7 this.mic = audioCtx.createMediaStreamSource(audioStream); 8 9 this.mic.connect(processor); 10 processor.connect(this.output); 11 processor.onaudioprocess = (event) => { 12 const inputLs = event.inputBuffer.getChannelData(0); 13 const inputRs = event.inputBuffer.getChannelData(1); 14 const outputLs = event.outputBuffer.getChannelData(0); 15 const outputRs = event.outputBuffer.getChannelData(1); 16 let tb; 17 18 var frequency = 400; 19 //var fs = audioCtx.sampleRate; // Sampling frequency 20 var x = 0; 21 for (let i = 0; i < 1024; i++) { 22 // var t0 = fs / frequency; 23 var output = 0; 24 output = Math.sin((2 * Math.PI / frequency) * i); 25 // Output sound 26 outputLs[i] = output; 27 outputRs[i] = output; 28 // Update phase 29 x++; 30 // Exceed fundamental period ? 31 if (x >= t0) { 32 x = 0; 33 } 34 } 35} 36};

何も声が変わらないので式以前の問題なのかもしれません。
github:pichshift.js
WebAudioAPIやJavaScript、サウンドプログラミングに詳しい方、ご指摘くださると助かります。

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

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

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

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

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

guest

回答1

0

入力された音声と正弦波を合成させるということであってますでしょうか ?
そうであれば,

JavaScript

1PichShift.setup = function(audioStream) { 2 console.log("pichshift setup"); 3 4 this.mic = audioCtx.createMediaStreamSource(audioStream); 5 const processor = audioCtx.createScriptProcessor(1024, 2, 2); 6 7 this.mic.connect(processor); 8 processor.connect(audioCtx.destination); 9 10 const frequency = 400; 11 const fs = audioCtx.sampleRate; // Sampling frequency 12 const t0 = fs / frequency; 13 14 let x = 0; 15 16 processor.onaudioprocess = (event) => { 17 const inputLs = event.inputBuffer.getChannelData(0); 18 const inputRs = event.inputBuffer.getChannelData(1); 19 const outputLs = event.outputBuffer.getChannelData(0); 20 const outputRs = event.outputBuffer.getChannelData(1); 21 22 for (let i = 0; i < 1024; i++) { 23 outputLs[i] = inputLs[i] + Math.sin((2 * Math.PI * frequency * x) / fs); 24 outputRs[i] = inputRs[i] + Math.sin((2 * Math.PI * frequency * x) / fs); 25 26 // Update phase 27 x++; 28 29 // Exceed fundamental period ? 30 if (x >= t0) { 31 x = 0; 32 } 33 } 34 }; 35}; 36

で可能だと思います.

投稿2017/07/13 10:31

Korilakkuma

総合スコア29

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

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

退会済みユーザー

退会済みユーザー

2017/07/14 05:45

ピッチシフトを実装させるために正弦波を作ってみたかったのですが、書いていただいたコードだと正弦波の音と声が2つ流れるようになると思うのですが声そのものの音程を変更するためにはどうつなげたらいいでしょうか。audioCtx.sampleRateを入力した音声にしたらいいのでしょうか。。迷走中です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問