• 締切済み

MATLAB(再生している音の周波数をリアルタイムで変更したい)

MATLAB(R2008a)を利用しています。 sin関数で作成した正弦波をwavplay関数やaudioplayer・play関数で再生しているのですが、再生中に正弦波の周波数をキーボードからの入力にあわせて滑らかに変更したいと思っています。 どのような方法があるのでしょうか。 audioplayerで作った音をstopで一度とめて、違う周波数の正弦波をすぐにplayで再生しようと思っても間に少し空白の時間ができてしまって困っております。 お知恵いただけると助かります。

みんなの回答

回答No.2

#1です。 > 周波数の変化はステップ的で構いません。現在、周波数変更時に一瞬起こる空白の時間をまずは消せればいいと思っております。 なるほど、じゃあ(1)だけが問題ですね。 #1でも書きましたが、mmioやwaveOut等をmexで作れば見た目はmatlab上だけで動いているように見えますよ。やったことないけど。 mexの例↓ http://www.edu.cs.kobe-u.ac.jp/~mori/Matlab/mexmemo.html mmio、waveOutの例↓ http://www.atelier-blue.com/memo/memo2006-4-22.htm どこまでmexにするかは個人の自由・・・。少なくともウインドウは要らないな・・。バッファの管理をmatlabでやれば、waveOut・・だけmex化でもOKかな?

from2001
質問者

お礼

これは、参考になります! ありがとうございます。 mexというのですね。知りませんでした。 ちなみに私は下記の方法を検討していました。 MATLABのコードをMATLAB Builder NEでコンパイルしてVB.NETで利用する。 MATLABとVB.NETでDDE通信またはファイルを介してデータを通信する。

回答No.1

これはかなり難しいですね。 実現するには大きく分けて2つの項目を解決しなければいけません。 (1) MATLABには音声をリアルタイムに加工を施しつつ再生する関数が(私の知る限り)ありません。なので、mexを使って、mmio等をmatlab上で使えるようにしなければいけないですが、なかなか大変です。C言語とかなら簡単だけど・・・。 (2) 滑らかに変更するとはどの程度滑らかにですか? それなりにきれいに推移しようとすると、 ナイキストフィルタやワープフィルタを使わないといけません。 ある程度の専門知識が必要です。 500->1k->2k->4k[Hz]とか倍々に、滑らかではなくステップ的に変化させるのであれば簡単です。

from2001
質問者

補足

ご回答ありがとうございます。周波数の変化はステップ的で構いません。現在、周波数変更時に一瞬起こる空白の時間をまずは消せればいいと思っております。 Matlab上だけで実装できないとわかれば他の言語にデータをわたして実装する手段は考えているのですが、なんとかMatlabだけで実装できないものかと質問させていただいた次第でした。

関連するQ&A

  • 周波数応答

    制御理論において周波数応答というのがありますが、 周波数応答とは正弦波を入力したとき、その正弦波の周波数によって 順次変化する定常時の出力のことですよね? さらに、伝達関数の周波数応答を調べれば周波数特性が得られ、 システムの安定、不安定が班別できるようになる ということなのですが、 正弦波を入力した場合だけしか考えなくて良いのですか? このままだと、正弦波を入力した場合の システムの安定、不安定しか班別できなくて、 正弦波をいくつも重ね合わせたような不規則な 波の入力をしたときの周波数応答が分からない と思うのですが・・・。

  • 周波数と角周波数

    (1) 時間に関して周期的でかつ波形の伝播速度が一定の波形に対して, 周波数はその時間周期の逆数である. (2) 角周波数という言葉は正弦波(複素形の指数関数も含む)に対する用語である. この(1)と(2)は正しいでしょうか ? また, いわゆる電波の周波数とは(1)のことでしょうか ? フーリエ解析によれば, 周期 T の波形 f(t) は, 基本角周波数 2π/Tの整数倍の角周波数の正弦波の重ね合わせで表せますが, この場合にf(t)に対する周波数といえば, 1/T のことでしょうか ?

  • 特定周波数の取り出しについて

    2点質問させて下さい。 縦480x横640の画像(チャート)データ を480のファイルに1ファイル640個のデータとして保存して その1ファイルにある特定の周波数がどのくらい 含まれているかを抽出する作業をExcelにて行っております。 (将来的にはソフト制御を考えています) 特定の周波数を抜き出す方法として データに対して、抽出したい周波数の正弦波との積を取り そのデータを積分して値を求めようと考えておりますが その特定の周波数の値を変化させた時に、結果がマイナス値 が出てくる場合があります。 私の認識ですと、マイナス値が出てくる事は無いと思って いたのですが、これは私の方法が間違っているのでしょうか? ちなみに各種データは次のとおりで求めています。 サンプリング周期 Δt [s] = 1 / 640 = 0.0015625 ω(特定周波数10Hzの場合)= 2*PI()*10Hz= 62.8 正弦波          = sin(サンプリング時間xω) また、上記の周波数成分を抜き出すのと似ていますが ある範囲だけの周波数成分(バンドパスフィルタ?)の ような事を行いたい場合どのようにすればよいかご教授 していただけないでしょうか?参考になる書籍、HPなど でも紹介していただけるとありがたいです。 自分なりに勉強しているのですが、なかなか進まないので ほとほと困り果ててます どうぞ皆様のお知恵をおかしください。 よろしくお願いします。

  • MATLABでの左右で時間差をつけた正弦波の再生

    自分は現在MATLABを用いてプログラミングを行っています。 左右それぞれから時間差をつけて正弦波を再生して音像定位の実験を行いたいのですが、どのようにプログラミングをおこなえばいいのかよくわかりません。 現在は時間差をつける機構を実装していない状態で、 handles.x = 0.1*sin(2*pi*handles.f*t)*2.626891326; handles.y = handles.a*sin((2*pi*handles.f*handles.t)+handles.rad); z = [handles.x;handles.y]'; sound(z,handles.Fs); handles.fは周波数、handles.tは再生時間です このようにして再生しています。 このプログラムで、handles.xまたはhandles.yのどちらかを基準としてもう片方の再生開始時間を操作したいと考えています。 再生開始時間を遅らせるのにはdelayフィルタを用いようかと考えているのですが、再生開始時間を早くする方法がよくわかりません。 なにかいい方法があればご教授お願いします。

  • FFTを使って異なるサンプリング周波数での周波数強度について

    100Hzのsin波に対してFFTを行い周波数スペクトルを出したときのことです。 解析条件 サンプリング周波数・・・・44.1kHz , 22.1kHz FFTの点数・・・32768点 窓関数・・・ハニング窓関数 まず、サンプリング周波数44.1kHzで解析を行い、100Hzにメインローブが現れていました。 次に、サンプリング周波数22.1kHz以外は同様の解析条件で解析を行ったのですが、サンプリング周波数44.1kHzに比べて、100Hzのスペクトル強度が下がっていました。また、サイドローブは44.1kHzに比べて上がっていました。 スペクトル強度がサンプリング周波数によって変化するというのはありえるのでしょうか? それとも、私の組んでいるプログラムが間違っているという事なのでしょうか?どなたかご教授下さい。よろしくお願いします。

  • 正弦波発振回路のひずみ率周波数特性

    ウィーンブリッジを用いた正弦波発振回路で発振した正弦波のひずみ率を測定し、縦軸ひずみ率、横軸周波数(対数目盛)の周波数特性のグラフにしたところ、周波数が高くなるにつれ波のように変化しながら0.2%前後に収束していきました。ただ単に指数関数的に減少しているとは考え難く、原因が見当もつきません。どなたかご存知でしたら教えてください。お願いします。

  • 正弦波で角周波数 2πf ω(rad/s)の波形図

    等速回転運動する正弦波(sin)で単振動や音波などで、 角周波数(6.28*周波数*変位)を使いますが、 粒子速度の理解には変位(振幅)が見れる正弦波の波形図よりも 1回転を半円に分けた速度図の方が良いのでは?

  • 任意の周波数の正弦波(サイン波)を生成する方法

    任意の周波数の正弦波をソフトウエアだけで生成する方法をどなたかご教授ください。 組み込み機器に実装します。sin(), cos()を使っての演算は負荷がかかりすぎるため使えません。 (サンプルレート16kHzで音声として出力しようとしています) 1Hz~10000Hzくらいの範囲で出力できれば十分です。 コードではなくアルゴリズムだけで結構です。 お知恵をお貸しください。

  • スピーカーの周波数特性測定について

    こんにちは。 わたくしwavw spectraを使ってスピーカーの周波数特性を測定しています。そこでわからないことがあったので、是非知恵を貸して頂きたいのです。 周波数特性のグラフは縦軸がゲインになっているのですが、そのゲインは フルスケールsin波を基準とした利得 となっています。フルスケールsin波とはどういう意味なのでしょう?いちおう理工学部4年生なのですが、教科書を漁ってもネットで検索しても分からなかったので、どなたか分かる方いらっしゃったら、回答をお願いいたします。

  • 複素数領域と周波数領域について質問です。

    教科書の正弦は関数の定常状態解析でフェーザのところを読んでいてわからないことがあります。  The phasor transform transfers the sinusoidal function from the time domain to the complex-number domain, which is also called the frequency domain, since the response depends, in general, on ω. ( Electric circuits by Nilsson, Riedel より) (一般的に応答はωによって決まるので、フェーザ変換は正弦波関数を 時間領域から複素数領域(周波数領域ともいう。)へ移す。) 周波数領域とは http://homepage1.nifty.com/seigyo/tubo_VI.gif の右側の図のことを指し、 複素数領域とは、 http://blue.ribbon.to/~sirane3/eq/2311.gif このような図になると思うのですが なぜ教科書は ”複素数領域(周波数領域ともいう。)” といっているのでしょうか? この周波数領域とは角周波数領域のことなのでしょうか? それと、これが一番聞きたいことなのですが、フェーザ変換した後のグラフを考えるとき、みなさんはどちらのグラフで考えてますか?

専門家に質問してみよう