サウンドプログラミング4 at TECH
サウンドプログラミング4 - 暇つぶし2ch894:デフォルトの名無しさん
08/10/24 02:33:39
C#でサウンド操作関係のソフトを作ろうかと考えているんですが、waveOut系のような低レベル操作の出来るクラスが見つかりません。
DLLをインポートしてwaveOut系を使うしかないのでしょうか?
また、低レベル操作の出来るクラスがあれば教えてください。

895:デフォルトの名無しさん
08/10/24 03:27:46
>>894

ManagedDirectX経由である程度できる。
昔MSDNにサンプルあったよ。
リズム/ドラムあたりで検索してみ。


896:デフォルトの名無しさん
08/10/24 03:32:13

>>894
URLリンク(thesource.ofallevil.com)

ほれ

897:894
08/10/24 09:55:53
>895-896
さっそく調べてみます。
ありがとうございます!

898:デフォルトの名無しさん
08/10/25 01:40:18

遅延時間について教えてください。

FIRの設計で、周波数特性を先に決めて逆DFTかけてインパルス応答出しますよね。
このとき遅延時間が発生すると思いますが、この遅延時間を少なくする定石って何かあるのでしょうか。
サンプリング周波数を多くとるか、タップ数を減らすという考え方であってますか。
また、サンプリング周波数を多くとる場合、アップサンプリングでいいものなんでしょうか。
アホですみませんが、良く分からないので、よろしくお願いします。

899:デフォルトの名無しさん
08/10/25 03:05:15
>>898
アップサンプリングすると元の音のある帯域が相対的に低域に落ちる。で、
低域で精度確保しようとすると必要タップ数が増えて元の木阿弥。

タップ数減らしたいなら直接設計法をやめるのが早い

900:デフォルトの名無しさん
08/10/25 09:33:22
>>898
位相が歪んでもいいなら最少位相化でぐぐれ。

あとは、Remez アルゴリズムってので、
位相保ったまま、周波数特性の絶対値誤差を極力少なくできるんで、
それで所望の特性を少ないタップ数で実現できて遅延減らせる。

901:デフォルトの名無しさん
08/10/26 22:53:44

返答ありがとうございます。

>>899
ハイパスフィルタならアップサンプリングでも有効ですか?

>>900
なるほどー、Remz法って名前は知ってたのですがここで使うんですね。


902:デフォルトの名無しさん
08/10/26 23:06:13
>>901
意味が分からん
アップサンプリングで見かけ上出てくる高域にあるのはゼロ補間で出てくるエイリアス。
普通LPFでカットするし、音響的には害しかない。

903:デフォルトの名無しさん
08/10/30 17:17:14

音の出力の遅延時間そのものを自由に変更できるようにしたいんです。
その際多少音が悪くなってもかまわないので、1サンプル以下の単位で遅延時間を操作するためにFIRを使いたいと考えているのですが。
この場合定石ではどうやるんでしょうか...。アホですみません。

904:デフォルトの名無しさん
08/10/30 19:18:05
フィルターなんか使わなくても、普通のプログラムレベルで出来ると思う。

905:デフォルトの名無しさん
08/10/30 21:39:06
いやいや、分数精度遅延は普通FIR使うよ。
4~6タップくらいで、ラグランジュ補間するのが一般的だと思う。
1サンプル以下の遅延ってのは要はサンプル間の補間

906:デフォルトの名無しさん
08/10/31 20:26:10
ピッチを変更せずに再生速度を変更するのにはどういった手段が考えられますでしょうか?
FFTとかも触り程度にしかわからないのですが、お願いします。

907:デフォルトの名無しさん
08/10/31 22:12:20
>>903
アップサンプリング→遅延→ダウンサンプリング
途中適宜LPFを入れる

908:デフォルトの名無しさん
08/11/01 00:35:16
>>906
URLリンク(www.google.co.jp)

909:デフォルトの名無しさん
08/11/02 13:04:09
>>906
一定間隔で切り、複製して並べる

910:デフォルトの名無しさん
08/11/03 00:32:37
要は波の数を変えればいいんだよね

911:デフォルトの名無しさん
08/11/03 13:27:44
>>908,909,910
ありがとうございます。タイムストレッチっていうんですね
ただ一定間隔できって複製して並べるという部分がちょっと理解できませんでした。
周波数をそのままにして音を削っていくみたいな感じだとはおもうんですが…

912:デフォルトの名無しさん
08/11/03 18:20:21
クロスフェードで同じものを何度も繋げるだけだよ

913:デフォルトの名無しさん
08/11/04 00:43:08
音響信号(wavファイル)をFFTしてバンドパスフィルタかけて逆FFTする。
っていうことをしたいんですけど、いかんせんこの分野は初めてなのでやり方がわからないです。

こういった処理をするプログラムソースが載ってる本を知ってる方おられますか?

914:デフォルトの名無しさん
08/11/04 01:20:29
>>913
Intel IPP

915:デフォルトの名無しさん
08/11/04 02:31:43
FFT→ピッチシフト→逆FFTなら
URLリンク(www.dspdimension.com)
Cマガにもあったけど何年何月号か忘れた

916:903
08/11/04 14:25:36
>>905 907

ありがとうございます。亀レス申し訳ないです。

サンプル間の補間というのは、一度アップサンプリングして、サンプル間を0ではなく、
3~5次のラグランジュで補間するという意味でしょうか?
さらにその補間済みのアップサンプリングされたデータに対して4~6タップのF4IRをかけるということで良いのでしょうか?




917:デフォルトの名無しさん
08/11/04 23:09:07
>>916
いや、1/4, 2/4, 3/4 とかの位置のラグランジュ補間係数をあらかじめ計算しておく。
位置が決まってるラグランジュ補間は FIR フィルタで実装できる。

918:デフォルトの名無しさん
08/11/05 09:36:33
サウンドプログラムと言うより、フィルタの使い方ばっかりだな。

919:903
08/11/05 13:42:01
>>917
回答ありがとうございます。

>位置が決まってるラグランジュ補間は FIR フィルタで実装できる

サンプリングデータに対する補間ではなく、FIRの係数に対する補間をせよという意味でしょうか?

たとえば、あるデータに4倍のアップサンプリングをするとして、
それにかける4倍サンプリングレート時のFIRの係数を、
元々のサンプリングレート時のときの係数を基にして、
ラグランジュ補間を用いて予め計算しておくということですか?

つまり、アップサンプリング時用のFIR係数を予め作成しておく、という理解でよいでしょうか?



920:デフォルトの名無しさん
08/11/05 19:15:42
フィルタの話ついでに
IIRの演算で精度上げてったら演算誤差の蓄積とかの影響がすくなそうなんだけど
結局蓄積するから使い勝手はかわらんかな
安定し続けるようなもんができたらいいなぁと思ったり

921:デフォルトの名無しさん
08/11/05 20:15:27
DFTにおいての窓関数ってなんの意味があるんですか?区間の切り出しって意味で矩形窓はわかるんですが・・・

922:デフォルトの名無しさん
08/11/05 21:31:43
周期関数を仮定するDFTで不連続点の解消

923:デフォルトの名無しさん
08/11/05 21:50:59
それを解消するとなにがいいんですか?

窓関数で周波数分解能が変わるっていうのがわかりません。窓長で決まるものだとおもうんですが・・・

924:デフォルトの名無しさん
08/11/05 22:09:42
>>923
矩形で切り出したら両端はどうなるかを考えるんだ。
つか人に聞く前に実際に実験してみれ。

925:デフォルトの名無しさん
08/11/05 22:58:00
実験しましたが・・・

分解能っていうのは周波数ビンの幅のことじゃなくて、裾に出てくるスペクトルがなくなるってことなんですか?

926:デフォルトの名無しさん
08/11/05 23:10:10
その程度の解説はぐぐりゃ死ぬほどあんだろ
URLリンク(www.google.co.jp)
URLリンク(images.google.co.jp)
URLリンク(ja.wikipedia.org)

927:デフォルトの名無しさん
08/11/05 23:16:53
>>925
裾のスペクトルが他の部分を滲ませるから、窓がけをする。
大体ピークの鋭度とサイドローブ(裾のスペクトル)の漏れがトレードオフになっている。
だからこれは適材適所で、例えばパワースペクトルの概形を推定したいときには
窓をかけた方が大抵の場合はいいけど(かけないと小さな信号がサイドローブリーケージで埋もれる)
周波数が近い二つの正弦波を見分けるときなんかは窓をかけるとサイドローブは抑えられるけど
メインローブが広がるからむしろかけないほうがいい。

周波数分解能が変わるって表現は誤解を招くと思う。

928:927
08/11/05 23:24:47
あ、今読んで思ったけど「誤解を招く」って表現が思い切り間違ってます。
周波数分解能がかわるというよりも時間と周波数の分解能でトレードオフを取る、と書くつもりでした。

929:デフォルトの名無しさん
08/11/05 23:24:59
なるほど。よくわかりました。広きに渡って周波数の分布をみたい場合に適した窓ってなんでしょうか?
採譜用なんですが、50~2000hzぐらい

930:デフォルトの名無しさん
08/11/06 09:33:23
>>919
時刻 1, 2, 3, 4 の位置のデータから時刻 2.25, 2.5, 2.75 のデータを作るFIRフィルタを作るだけ。


931:デフォルトの名無しさん
08/11/06 10:13:12
>>929
採譜のどの部分かによる。アルゴリズムにもよるけども、音程を推定したいのなら矩形窓じゃないと
ベースの音高を推定するのに苦労すると思う。44.1kでサンプリングしたときの周波数分解能と
50Hz(オルガンの低音辺りだよな?)での半音での周波数差を見比べてみな。
あと、音色の分析とかだったらバーレットハン窓辺りが結構使われる。

932:デフォルトの名無しさん
08/11/06 14:53:14
てか採譜にFFTって時間分解能が全然実用的じゃない気が

933:903
08/11/11 21:17:36
>>930

回答ありがとうございます。
亀レスで申し訳ないです。

>時刻 1, 2, 3, 4 の位置のデータから時刻 2.25, 2.5, 2.75 のデータを作るFIRフィルタを作るだけ

アップサンプリング時に、2.25などの分数の部分のデータを作って、それをダウンサンプリングして再生でいいんでしょうか。
それで分数遅延になるんでしょうか?

ちょっと頭がこんがらがってきました。

934:デフォルトの名無しさん
08/11/12 02:19:02
>>933
930じゃないけど、
URLリンク(www.acoustics.hut.fi)
これ参考になる。理論に興味がなければ2ページ目の左コラムの式をそのまま実装すればおk
ディレイって本質的にシフトをさせたSincの畳み込みなんだけど、そうするとT<0まで
関数が存在するから窓がけするけど、そうするとリップルができるから、できるだけフラットな
F特を実現する為にラグランジュ、って考え方だと思います。


935:903
08/11/12 06:18:39
>>934

この論文、まさに自分がやりたいことが書いてありそうなタイトルです。
理論のほうにも興味があるので、これ読みこんでみます。
ありがとうざいます!


936:デフォルトの名無しさん
08/11/13 06:16:07
タイムストレッチする際に、周期を求めないといけないと思うのですが、
その求め方というか決め方がわかりません。

具体的には、音声をフレーム毎に区切って、クロスフェードさせることで時間を圧縮しようと
思うのですが、フレームをどう区切るのがいいのかがわからないので、
アドバイスお願いします。

937:デフォルトの名無しさん
08/11/15 10:03:59
>>936
周期はユーザーパラメータでいいんじゃない?

938:デフォルトの名無しさん
08/11/20 23:23:30
CQ変換ってなんですか?

939:デフォルトの名無しさん
08/11/21 01:19:42
CQ CQ こちらJF8....です

940:デフォルトの名無しさん
08/11/21 01:27:08
かなり初心者な質問だと思いますが、返答していただけたら幸いです。

現在、音楽ファイル(wavファイル)をFFTし、バンドパスフィルタをかけ、IFFTするという作業をしているのですが、
音楽ファイルのデータを配列に入れるとき、ステレオデータだと右左右左(逆?)…と格納されますよね?
そこで左のデータと右のデータを別の配列に格納して、片方のデータだけを使用しているのですが、問題はないでしょうか?
目的としては音楽特徴量の抽出です。

またフィルタをかける際ですが、
勉強不足でフィルタをかけるタイミングがわかりません↓
配列に格納したデータをFFTした後フィルタをかけIFFTするのか、生のデータにかけるのか…
ちなみにFIRフィルタをかけるつもりですが、係数の計算方法がわからないので、
URLリンク(momiji.i.ishikawa-nct.ac.jp)
のサイトで得られる係数を利用したいと思っています。

そもそも考え方が間違っているかもしれません。
よろしければご鞭撻のほどよろしくお願いします。

941:デフォルトの名無しさん
08/11/21 02:32:33
前段は別けて問題ないが、特徴量の抽出が目的なら足しちゃえば?
後段は誰かに任せた

942:デフォルトの名無しさん
08/11/21 03:51:49
>>940
よくある半区間重複だと、
窓→FFT→係数をそれぞれ乗算→IFFT→窓→オーバーラップ
このやりかたの場合、2回の窓掛けの結果をオーバーラップする必要があるので
sin窓とかvorbis窓を使う必要がある。あとライブラリによって出力データの並びが
違うので、それにあわせて適切に係数乗算しないと変になる。

943:デフォルトの名無しさん
08/11/21 09:58:23
>>940
ソースデータにもよるし、片chで期待するデータが得られるならそのままでもいいし、
狙った効果でPANしてる曲とかはLR加算するとヘンに聞こえたりする場合も稀にある。
結果が解ってる実験なり課題なりなら最適な方選んでもいいし、
ステレオでFFT処理して、必要に応じて出力結果を波形編集ソフトで弄ってもいい。

それとFFTでフィルタかけるわけだから、FIRは不要じゃね?
大抵の場合>>942の手順で事足りると思う。
多分フーリエ変換が解ってないんだと思うからFFTのC言語ソースとか落としてsin/cos波形食わしてみ。
URLリンク(www.google.co.jp)

944:940
08/11/21 17:30:04
みなさんありがとうございます。
やはり勉強不足のせいで、理解できるところと全くわからないところとあります…
ですので、もしよかったらソースを見ていただきたいです。
いただいたプログラムを弄っているので、至らない部分もあるかと思いますが、
もし時間のあるかたがいましたら、ご鞭撻のほどよろしくお願いいたしますm(_ _)m

URLリンク(a-draw.com)
パスはmail欄です。

945:デフォルトの名無しさん
08/11/21 18:59:18
FFTした結果からピークの山を見つけるにはどういうプログラムを書けばいいですか?

実際の値を 横軸を対数に周波数、縦軸にパワーにとったグラフにプロットして目で見ればここが山かなと
わかるんですが・・・

946:デフォルトの名無しさん
08/11/21 19:26:00
Audacityのスペクトル表示にあるような機能です。

947:デフォルトの名無しさん
08/11/21 23:12:04
>>945
ケプストラム

948:940
08/11/22 00:54:01
指摘はメールでお願いしますとreadmeで書きましたが、
このスレでしていただいても結構です。人頼みで申し訳ありません

949:デフォルトの名無しさん
08/11/26 15:45:00
周波数と振幅からどうやって音量を求めるんですか?

950:デフォルトの名無しさん
08/11/26 17:45:39
もしかして:RMS+二条平均根

951:デフォルトの名無しさん
08/11/26 18:06:38
変換ミス...

二乗平均根

952:デフォルトの名無しさん
08/11/30 18:52:47
固定小数点演算のフィルタを作りたいのですが係数の小数点位置はどのようにして決めればいいんでしょうか

953:デフォルトの名無しさん
08/11/30 19:03:15
>>952
用途によるとしか言いようが。
昔自分が作ったのだと、IIRだと整数部2ビット、FIRだと整数部なしでやった。

954:デフォルトの名無しさん
08/11/30 21:28:15
符号部1bit,整数部2bit,残りを少数部ですかね
乗算した結果が精度的に2倍なると思うのですが、元の精度に戻すことを考えると頭がこんがらがってしまって・・・
そのあたりはどうすればいいんでしょうか

955:デフォルトの名無しさん
08/11/30 21:47:46
>>954
そんなとこ>符号1bit、整数部2bit。

普通は係数とバッファで固定小数点位置変えるからなぁ。
たいてい、フィルタ係数って1以下になるでしょ。

956:デフォルトの名無しさん
08/11/30 23:22:25
モノラル音響信号を、2次元フーリエ変換成分(周波数方向のフーリエ成分と時間方向のフーリエ成分)
に分けることって可能ですか?そのあたりについて詳しいサイトとか本とか知ってたら教えていただきたいです。

957:デフォルトの名無しさん
08/11/30 23:33:02
>>956
それ、ウェーブレットで検索した方がいいかも。

958:デフォルトの名無しさん
08/11/30 23:33:53
係数は確かに大抵1以下なんですが、ところどころ1以上になるところが出来てしまって・・・
もしバッファの小数点位置がLSBにあって、係数を符号部1bit,整数部2bit,小数部5bitとした場合は乗算した結果を5bit右シフトして整数部を残すようにするんでしょうか
この方法だと係数が1以上の場合、残した整数部データの有効なビット幅がバッファに入ってるものより大きくなってしまう気がして・・・

959:デフォルトの名無しさん
08/12/01 00:50:13
>>956
スペクトログラムのことを言っているなら短時間FFT

960:デフォルトの名無しさん
08/12/01 21:46:34
ここで聞くのがいいのか少々悩ましいのだが
AMDーSB700でレガシオーディオの設定はどこのポートを叩けばいいのか情報ないかい?
非Windows環境なんだが、奴が邪魔してYMF744のFM音源鳴らすのに不便で仕方が無い。

961:デフォルトの名無しさん
08/12/02 00:09:48
DTMFのトーン信号を解析するソフトについて、ソースとかから載ってる本とかwebPageとか
ご存じありませんか?
#出来ればVC++で。
 

962:デフォルトの名無しさん
08/12/05 03:47:09
>961
VC++ではないけど、参考になるかな?
URLリンク(www.mars.dti.ne.jp)

963:デフォルトの名無しさん
08/12/05 14:38:35
>>962
ありがとう。ただ、俺が探してるのは外部装置なしでPC内で完結してるやつなんだ。
サウンドカードから取り込んで、判別&表示、みたいな。


964:デフォルトの名無しさん
08/12/05 14:38:50
スペクトラムってどうやって計算するんですか?

965:デフォルトの名無しさん
08/12/05 16:45:44
FFTして複素平面上でベクトルの絶対値

966:デフォルトの名無しさん
08/12/06 10:33:08
THX!

967:デフォルトの名無しさん
08/12/07 02:47:17
リサンプリング周波数の組み合わせによっては処理量が膨大になる問題で
例えば48k→44.1kで↑147↓160を素因数分解して複数回処理にわければ、
重い(ほぼ)理想フィルタでも使える!売れる!

とか思って実装してみたらVoxengoに年単位で先を越されていたというチラ裏。
(ちなみに処理量は1/7~1/8になります。
ほぼ理想フィルタなので数回程度なら聴取可能な影響はない)

968:デフォルトの名無しさん
08/12/08 01:39:44
>>967
イミワカラヌス

969:デフォルトの名無しさん
08/12/08 15:07:39
>>968
分かる奴だけ分かってくれ…ってのはアレなので、
↑がインターポレーション
↓がデシメーション
間にLPFが入る
っていうサンプルレート変換のやり方の話。DSP使わない場合は
計算負荷と品質のトレードオフになる。あとはてきとうに調べて。

970:デフォルトの名無しさん
08/12/15 04:43:01
勘違いしてるかもしれんから教えて欲しいんだけど、
一次元信号で8000のデータ数があったとして、それをレベル3までのウェーブレット変換をしたら、
0~2000までがレベル3のスケーリング係数で、
2000~4000までがレベル3のウェーブレット係数で、
4000~6000までがレベル2のウェーブレット係数で、
6000~8000までがレベル1のウェーブレット係数って認識であってるかな?

971:デフォルトの名無しさん
08/12/15 05:21:42
実装次第

972:デフォルトの名無しさん
08/12/15 08:06:02
そりゃそうだ

973:デフォルトの名無しさん
08/12/19 12:10:46
URLリンク(limetarte.net)
ここのボーカルキャンセラーなんだけどアルゴリズムについてわかる人いますか?

・新ボーカルキャンセラ(周波数成分分解ベクトル減算型=イミディエイト法)
  L, R チャネルをそれぞれ フーリエ変換、ハートレー変換などで
  {Li},{Ri} のように周波数ごとの成分に分離します。
  ここで、両チャネルの振幅スペクトル・位相スペクトルを比較し、
  非常に近いもののみを、重み付け係数付きでベクトル減算します。
  これを逆変換すると、中央音の消えたステレオ音源を得ることが
  できます。


LとRのパワースペクトルを比較して、 パワーが似てる周波数ビンのパワーを0とかにすればいいのかな?

作者に聞けっていわれそうですが・・・返信がなかったんで

974:デフォルトの名無しさん
08/12/19 12:39:01
位相も考えないとだめじゃないの

975:デフォルトの名無しさん
08/12/19 14:11:32
まぁ普通この手のアルゴリズムは説明してくんねぇって。
何の用途で使うかしんないけど、そのまま製品化とかされたらたまんないし、
どっかのサブマリン特許に引っかかってる可能性もあるし、メリットねぇもん。

976:デフォルトの名無しさん
08/12/19 16:11:08
フーリエ変換が分かれば高校数学でできる。
複素スペクトル平面上にOLとORを書いて、
PLとPRが直交するようなOPを適当に作ってベクトル減算。
習った次の日くらいに思いついたぞ俺。

ブロック単位の処理の場合プリエコーポストエコーの問題もあるから、
上みたいな遊びソフトはともかく、音楽制作に供するなら
ちょっとは頑張らないと音質的に微妙になるけど。

977:デフォルトの名無しさん
08/12/19 17:10:46
はいはい(笑)

978:デフォルトの名無しさん
08/12/19 18:55:29
>>976
ちょっと2次元で書いてくれませんか?



979:デフォルトの名無しさん
08/12/19 19:48:52
おまえらその説明で分かんないのか……

980:デフォルトの名無しさん
08/12/20 21:48:01
こういううざいのってどこにもいるのね


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch