サウンドプログラミング4 at TECH
サウンドプログラミング4 - 暇つぶし2ch666:デフォルトの名無しさん
08/06/13 18:05:18
>>665
Wikipedia。デジタル・フィルタの基礎から勉強したほうがいい。

そのあとで↓
URLリンク(www.musicdsp.org)

667:デフォルトの名無しさん
08/06/13 18:19:07
>>666
英語はきついっすw

668:デフォルトの名無しさん
08/06/13 19:48:34
じゃぁ本買いな

669:デフォルトの名無しさん
08/06/13 20:33:30
勉強する気もねぇ乞食かよ・・・

670:デフォルトの名無しさん
08/06/14 03:10:02
>>632
多分ゲームで必要になるのはストリームしながら再生、停止。
メモリに常駐している音(効果音、クリック音)の再生。
それらの音のボリュームの全体操作。
(画面が切り替わった時に前の効果音が残ったりしちゃうから。)
サウンド用の領域が溢れた時に音を鳴らさない、その旨を伝える手段。
場合によってはストリーム音のクロスフェード
(前の音を段々小さくして変わりに次の音を徐々に入れていく。)
それはなくても徐々に音を消す処理は必須。(いきなり消すとノイズが入る。)
この辺はハードが色々用意してくれてるだろうから、勢いでなんとかなる。
一番大変なのは、どの場面でも必要になるサウンド処理は、別スレッドで管理されることが多い。
サウンドはスレッドセーフで作らないと後で大変なことに。
後、BGMをストリームで流すとディスク上で常にシークが入る。
ロードを頻繁にするデータは、ディスクの外側よりBGMの隣にデータを配置した方が早くなる場合もある。
昔、隣の席でゲームのサウンドを開発している人を見た感想でした。

671:デフォルトの名無しさん
08/06/14 10:50:28
         ,,,,,,,,,,_
           ,ィヾヾヾヾシiミ、
          rミ゙``       ミミ、
          {i       ミミミl
          i゙i ,,,ノ 、,,-=、 ミミミ  サウンドプログラム
          {_i=・}-{_=・`} ̄レゥ:}
             l ̄,,,,_,゙ ̄` :::ン   フフン
           |/ _;__,、ヽ..::/l
           ヽ.~ニ~ ' .::::ノ/ }\_
         _,,.-‐' `ー '"::/ /  |   ̄`''ー-、
      r‐''"   ./  i\/  /    |     / ヽ
      /     /   | /;;;ヽ、 l ヽ /     ノ /}


672:デフォルトの名無しさん
08/06/14 11:56:49
シミュ系のプログラムやってる人おる?
昔のビンテージエフェクターの回路図をソフトウェアでシミュとか


673:デフォルトの名無しさん
08/06/14 17:55:44
いけいけどんどんて


674:デフォルトの名無しさん
08/06/14 20:30:15
>>668
どんな本が良いですか?

そもそも公式に書かれた記号の意味が分からない
俺のようなものでは読むだけ無駄ですか? orz


675:デフォルトの名無しさん
08/06/14 22:53:08
勉強しろ

676:デフォルトの名無しさん
08/06/15 15:27:42
OHMの「マンガでわかるフーリエ解析」辺りから入ればいいんでねぇの?

677:デフォルトの名無しさん
08/06/21 00:41:08
音声をFFTして周波数領域でなんか処理してるプログラムのソースないですか?参考にしたい

678:デフォルトの名無しさん
08/06/21 07:17:21
キーコンをFFTで周波数領域でやってる人がいたと思うけど
granul 分割統合法の方がシンプルで良好なようだよ。

ほかにはFFTはタップ数の多いFIRフィルタを計算するのに
計算量を減らすのに使われる。

周波数軸上で直接加工するのは難しいよ

679:デフォルトの名無しさん
08/06/28 12:51:17
音声の実信号x[n]があります。

点数4096のFFTをかける

4096/2個のDFT値(実部と虚部)
Xr[n] Xi[n]を得る。

パワースペクトル計算し

xp[i] = Xr[i]*Xr[i] + Xi[i]*Xi[i]

対数とってdbに
db[i]= 10*log[10] xp[i]

という手順でスペクトル解析するプログラムを組みました。

入力として1khzのsin波を入力すると
1khz付近の値が一番大きく130[db]ぐらいになります。
これは正しい

しかし、10khzでも値が50ぐらいあって、

他にあるスペアナのように綺麗にピークがでません。

原因とかわかりますか?困っています


680:679
08/06/28 14:37:47
あと窓関数としてハミング窓かけています

681:デフォルトの名無しさん
08/06/28 14:42:02
80db差って10^8ってことだよねえ

682:デフォルトの名無しさん
08/06/28 16:37:27
って事は別に普通だということですか?
フリーのスペアナだとそんなことはないんですが

683:デフォルトの名無しさん
08/06/28 18:19:11
入力x[n]のパワーは?
窓関数外した時の結果は?
S/Nの閾値は?

684:デフォルトの名無しさん
08/06/30 09:45:51
音声の実信号ってのが16bitPCMなんじゃないの?
そうするとデジタル誤差が丁度それくらいだと思うよ

685:デフォルトの名無しさん
08/06/30 14:57:22
実信号x[n]の代わりに、sin関数で生成した配列を入力に使って
理想状態のテストをやってみたら?

その後、入力の位相をずらしてみたり、DCオフセットを追加してみたり、
16bitとか24bitに量子化するなど、各種の条件でテストしたら
どの要素がどのように影響しているのかが見えてくると思う

686:デフォルトの名無しさん
08/07/03 19:51:24
>>683
窓関数いろいろ変えても良い結果はでないですね。
S/Nを区別する処理はしてません

>>684
そういうもんですかね?

>>685
例えば800Hzのsin波とかどうすればいいんでしょうか

687:デフォルトの名無しさん
08/07/04 14:56:28
>例えば800Hzのsin波とかどうすればいいんでしょうか

#include <math.h>
#define PI 3.14159265
#define NN 4096
#define Fs 10000.0 /* Sampling freq. 10kHz */
#define Freq1 800.0 /* Signal freq. 800Hz */

int i;
double x[NN];

for(i=0;i<NN;i++)
x[i] = sin(i*2.0*PI*Freq1/Fs);


688:デフォルトの名無しさん
08/07/04 17:01:01
>>686
16bitで量子化してると 6*15=90dBしかS/Nはないよ。
サイン波をソフト上で16bitのデータを作って入れても-105dB程度下にノイズが出てくる


689:デフォルトの名無しさん
08/07/04 20:34:29
サウンドの基礎が解ってないようだし、初心者本なり教科書なり読んで勉強するべき。

690:デフォルトの名無しさん
08/07/05 12:59:11
sin関数で生成したのでテストしてみました。1000hzのsin波で、サンプリング周波数は10k
FFTは4096点で、窓関数はハミングです


値はパワースペクトルです。

988.769531 [Hz]: 60.407160
991.210938 [Hz]: 52.110974
993.652344 [Hz]: 0.011060
996.093750 [Hz]: 6921.740936
998.535156 [Hz]: 681334.211257
1000.976563 [Hz]: 946209.472048
1003.417969 [Hz]: 31271.077880
1005.859375 [Hz]: 19.035879
1008.300781 [Hz]: 43.300825

なかなかいい結果になりました。993hzで値が小さいのが気になりますが。

97.656250 [Hz]: 0.061772
100.097656 [Hz]: 0.061831
102.539063 [Hz]: 0.061892
>>688
このあたりがノイズってことですよね。対数とってdbにするとマイナスでてきちゃうし
>>689
一応読んで勉強したつもりなんですが・・・ dbがマイナスとはどういうことでしょうか?音を吸収する?

691:デフォルトの名無しさん
08/07/05 13:04:31
>>689
分かってないのはサウンドの基礎だけではなかったようだ

692:デフォルトの名無しさん
08/07/05 13:17:42
1、 ムダな精度で表示するな
2、 周波数も対数化する方法を考えろ

693:デフォルトの名無しさん
08/07/05 17:23:02
>>690
なんでスペアナ作りたいのかしらんけど、作っても君の知識レベルでは使いこなせないから意味無いよ?

694:デフォルトの名無しさん
08/07/05 17:29:48
何を勉強したらいいですか

695:デフォルトの名無しさん
08/07/05 18:09:10
なんでdB(対数)表現を使うのか?>URLリンク(ja.wikipedia.org)
対数のマイナス値の意味も解ってないみたいだから、高校数学辺りの教科書で対数を勉強する。
その上で>>679で触れてる「他にあるスペアナ」のスケールの上限下限値とか確認すると見えてくるかも。

696:デフォルトの名無しさん
08/07/05 21:09:05
リア厨の予感がする

697:デフォルトの名無しさん
08/07/05 21:09:55
リア中でこれだったら逆にすげぇわ

698:デフォルトの名無しさん
08/07/05 21:21:35
今日び本読めばたいていのことは書いてあるから
付け焼刃的な知識で実装は小学生でも出来る
その本を本当に理解するのに必要な基礎知識が抜けているのは
真っ当な教育を(まだ)受けていないから

699:デフォルトの名無しさん
08/07/06 05:46:08
ゆとり世代の大学の宿題

700:デフォルトの名無しさん
08/07/06 12:10:09
「何を勉強したらいいですか」の一文は最高にイカしてるなw
広がる話題でも無いし、後釣り宣言で収束キボンヌ

701:デフォルトの名無しさん
08/07/07 10:25:18
>>694
理系の大学1年生程度の数学。対数とフーリエ変換ぐらいは理解しとけ。

702:デフォルトの名無しさん
08/07/07 10:57:25
>>694さんが >>690 なら技術的というか工学的なセンスを磨く必要があると思うよ。


プラモでもいいし電子キットでもいいし、何でもいいからとにかく
実際に何か組み立てたり 雑学でいいから色んな本を読んで、
面白そうなものは作ってみる。

有効精度とか、この結果を出すのに何が一番効くかといったあたりからね

703:デフォルトの名無しさん
08/07/08 21:25:45
FFTの話からどんどん離れてきました

704:デフォルトの名無しさん
08/07/08 21:38:58
センターキャンセル処理で単純にL-Rするとオーバーフローする。
(L-R)/2ってしたらオーバーフローはしなくなりました。

でも気になる事があります。

元の数値が奇数だったら、切捨てされておかしなことになりませんか?




705:デフォルトの名無しさん
08/07/09 07:21:49
どうおかしくなると思うかを書いてみたら?


706:デフォルトの名無しさん
08/07/09 07:29:49
(L-R)/2が3の倍数になると頭がおかしくなる。

707:デフォルトの名無しさん
08/07/09 10:08:35
例えば波形の値が
300 303 だったら0.5倍すると150 151 となって二倍して元に戻そうとしても戻らなくなるので、データがちがくなってしまうのかなと

708:デフォルトの名無しさん
08/07/09 10:31:19
標本化定理が破られたと聞いて飛んできました!

今の時代、2倍以上の周波数でサンプリングしなくても
デジタル処理を使うと元の信号を完全復元できるそうですが
マジですか?

709:デフォルトの名無しさん
08/07/09 11:07:25
>>707
元に戻すような処理をするなら、2で割らず、余裕のあるところで計算しろ。

>>708
いましてるのは周波数じゃなくてビット数の話だろw

710:デフォルトの名無しさん
08/07/09 11:46:59
元には戻さないんですが
いいのかな?って思うんです

711:デフォルトの名無しさん
08/07/09 12:51:18
>>710
センターキャンセルで1bitの誤差が問題になる場面なんてあるの? なけりゃ気にするな。

712:デフォルトの名無しさん
08/07/09 18:23:44
切り捨て(丸め)について、まじめに考えたいなら下記URLが参考になる

URLリンク(blackfin.s36.coreserver.jp)

713:デフォルトの名無しさん
08/07/09 18:59:29
まぁ2で割るんで十分でしょ

714:デフォルトの名無しさん
08/07/09 22:34:52
>>708
いやいや、完全復元じゃない。

自然界に存在する音って調波構造持ってることが多いから、
低周波から倍音の推測がある程度可能って話。
こういう話が出るたびに標本化定理が破られたとか騒ぐ馬鹿がいるけど、原理が違うから。

>>709
別件の質問じゃね?

715:デフォルトの名無しさん
08/07/09 22:37:20
>>707
(L-R)/2 だけだと当然、下位1ビットの復元無理。

その±1の差がどの程度問題になるかって話で言うと、まあ、用途しだい。

(L+R)/2 の情報もあるなら、円め方のルール決めとけば完全復元可能。

716:デフォルトの名無しさん
08/07/09 23:30:17
(L+R)/2の情報持つぐらいなら、double型で(L-R)/2の情報を保持しといたほうがよくね?

717:デフォルトの名無しさん
08/07/10 00:37:58
>>716
L, R が32ビット整数ならね。

718:デフォルトの名無しさん
08/07/10 02:36:53
>>708 >>714
もしかして、アンダーサンプリングの話では?

719:デフォルトの名無しさん
08/07/10 07:04:42
>>716
もっと手っ取り早く、L/R/0.5*(L+R)の三つを保持しとけばよくね?

720:デフォルトの名無しさん
08/07/10 07:24:42
保存が必要なのは L と Rだけだろ (L-R)/2 はその場で計算出来る

721:デフォルトの名無しさん
08/07/10 18:32:11
まぁ数だけじゃなく質もいいけどな

NT○研究所、ソ○ー アクセ○チュア

まぁ君らニートには縁のない会社ばっかりだよ

722:デフォルトの名無しさん
08/07/10 18:39:51
周波数から音名への割り当て方ってどうすればいいですか?

例えばサンプリング周波数44.1khzのデータをN=8192の高速フーリエ変換をすると、
周波数分解能は5.38[hz]。

A3=440[hz]と考える。 440[hz]付近はこんな感じになってる

403.747559 409.130859 414.51416 419.897461 425.280762 [Hz] 

430.664063 [Hz] 436.047363 [Hz] 441.430664 [Hz] 446.813965 [Hz] 452.197266 [Hz]

G#3=415[hz]で、どこまでをG#のパワーとしてみなして、どこからどこまでをAのパワーとしてみなしていいかわかりません。

単純に区間を2分割だとまずいですよね


723:デフォルトの名無しさん
08/07/10 19:16:42
またこの人か・・・

724:デフォルトの名無しさん
08/07/10 19:24:57
すいません。上のFFTのひとです

725:デフォルトの名無しさん
08/07/11 06:44:30
だから、まず、有効数字ってのを体に叩き込め!

半音の比は2^(1/12) = 1.059
だから、半音の真ん中の音は 2^(0.5/12) =1.029 の所だ

440*2^(-1/12)  = 415Hz
440*2^(-0.5/12) = 427Hz ここが真中


なお、 A=440Hzに対して 430Hzは Aの音じゃない。 調子外れの音だ
処理の都合で A に入れるだけって事だろ?

726:デフォルトの名無しさん
08/07/11 10:11:53
ありがとうございます。

430Hzの音はAとしてみなし、Aのパワーとして加算すべきなのか、

ゴミとして捨てるべきなのかが分かりません。

430Hzの音が実際なっていなくても、FFTすると430Hzのところにパワーが出てきてしまいますよね?

727:デフォルトの名無しさん
08/07/11 10:27:57
>>726
好きにしろ。

728:デフォルトの名無しさん
08/07/11 11:57:50
>>726 手段は目的の為にあるんであって

手段の細かい事だけ聞かれても、他人には判断のしようがない

729:デフォルトの名無しさん
08/07/11 12:51:10
厨房採譜ソフトでも作りたいんだろうよ

730:デフォルトの名無しさん
08/07/11 16:21:44
test

731:デフォルトの名無しさん
08/07/18 14:31:32
Windowsで、モールス信号を出すプログラムを作っています。
信号のオン/オフを、正弦波を生成して信号がないときには0で埋める方法で実装したのですが、
信号が切れるときにプツプツと酷いノイズが乗ってしまいました。
--
10 9 7 0 0 0 0 0 0
--
突然信号が0になってしまうのがノイズの原因と考え、信号が0に戻るまで待つことにしました。
--
10 9 7 5 3 2 0 0 0
--
これでノイズはだいぶ軽減されたのですが、まだ残っています。
何かいい方法はないでしょうか。
あまり知識がないもので、何か参考になるサイトや書籍などを教えて頂けると嬉しいです。

732:デフォルトの名無しさん
08/07/18 14:32:40
>>731
エンベロープをつけろ。短い時間でフェードイン/アウトしろ。

733:デフォルトの名無しさん
08/07/18 14:33:44
>>731
ちょっとそれ聞かせてもらえる?


734:デフォルトの名無しさん
08/07/18 15:11:36
プチプチしたほうがモールスっぽいよ

735:デフォルトの名無しさん
08/07/18 20:39:15
>>731
自前でサイン波形出力してるなら0クロス地点(付近)でカットすりゃいいだけだと思うが、
そもそも、その「10」とかって値の単位はなんだ?
モールス信号出力ライブラリみたいなのでもあんの?

736:デフォルトの名無しさん
08/07/18 22:18:14
「信号が0に戻るまで待つ」=「0クロス地点(付近)でカット」ってことじゃないの?

737:731
08/07/18 23:42:24
>>732
エンベロープ調べてみます。アタック・ディケイをかけろということでしょうか。
短い時間なのでフェードを使うという発想はありませんでした。試してみます。

>>735
>>736の通りです。数字は単なる例示なのであまり深く突っ込まないでください。

738:デフォルトの名無しさん
08/07/19 06:47:15
多分、フェードインやフェードアウトの処理は数ms~数十ms程度の時間で良いはず。

アマチュア無線機で、この時間を調整してキークリックを低減するという改造記事を
見たことがあるし、セットモードで調整可能なメーカー製トランシーバーもある。


739:デフォルトの名無しさん
08/07/20 18:25:11
時間分解能があまり重要じゃない解析において、
手法を短時間フーリエ変換からウェーブレットにする利点ってある?

740:デフォルトの名無しさん
08/07/20 23:52:06
ある

741:デフォルトの名無しさん
08/07/21 00:03:34
具体的にどんなことですか?

742:デフォルトの名無しさん
08/07/21 00:36:27
>>741
テンプレートマッチングとかじゃね?
音声認識で使うみたいなの

743:デフォルトの名無しさん
08/07/21 00:41:43
FFTしたデータとのテンプレートマッチングでもいい気がするが

744:デフォルトの名無しさん
08/07/21 09:44:12
まあ、ウェーブレットも、マザーウェーブレットの種類次第では、
単なる窓掛け FFT でしかないし。

745:デフォルトの名無しさん
08/07/21 10:45:10
>>731
無音区間を0にするんじゃなくて、
そのまま保持してればいいんでは

10 9 7 7 7 7 7 7 7

って感じに。

746:デフォルトの名無しさん
08/07/21 10:49:26
…と書き込んでいいこと思いついた。

接線の傾きが大きいときにカットするからノイズになるというんだったら
0クロス地点じゃなくて、サインカーブのてっぺん
つまり10、-10の時点で発振を止めて保持すればいいんじゃないかな。

10 9 7 5 3 2 0 -2 -3 -5 -7 -9 -10 -10 -10 -10 -10 -10

こういうことだ。

747:デフォルトの名無しさん
08/07/21 13:03:20
>>746
それ、オーディオ回路にダメージを与えかねないんじゃね?
まんま直流電圧掛けることになるからコイル系の素子に過電流が流れそうだ。

748:デフォルトの名無しさん
08/07/21 13:47:38
>>744
そうかな?

749:デフォルトの名無しさん
08/07/21 18:50:24
>>748
コンセプト抜きにして、数式上はね。
ガボールウェーブレットとか、ガウス窓の FFT でしかない。

750:デフォルトの名無しさん
08/07/22 01:50:35
>>746
直流成分
通常はD/Aコンバータのハイパスで取り除かれるかれるとは思うけど、
この手のプログラミングではやっちゃわないように気をつけるべきところでっせ

751:デフォルトの名無しさん
08/07/22 04:09:42
>>749
窓掛けFFTは時間単位、ウェーブレットは波数単位とかではなかったっけ

752:デフォルトの名無しさん
08/07/22 12:59:42
C++相談室 part62
スレリンク(tech板:874番)

874 名前:デフォルトの名無しさん[sage] 投稿日:2008/07/22(火) 12:01:38
御婆ちゃんになるにつれて、声が甲高くなるゲームを作成してるのですが
お勧めの関数はなんですか?

今自分ではiostreamとint(void)に目をつけています。

アドバイスよろしくお願いします

753:デフォルトの名無しさん
08/07/22 22:04:29
さすが天才は目の付け所が違うな…

それよりロリぃ声を再現する関数が欲しい

754:デフォルトの名無しさん
08/07/23 01:04:02
年取るにつれてしわがれた声になるのは
喉にディストーションエフェクタをつけるようなもんだから
ということは逆にディストーションをクリーンにするエフェクタがあれば
って、うーん・・・

755:デフォルトの名無しさん
08/07/30 10:48:56
リアルタイムで波形を描画するプログラムを作ってますが、
MM_WOM_DONEが帰ってきたタイミングで波形を描画すると
音声再生が完了する前に波形を描ききってしまいます。

ネットの情報では音声再生が完了した場合にMM_WOM_DONEメッセージが返ると書かれていますが、
実際はMM_WOM_DONEメッセージが音声再生が完了したタイミングで返るのではなく、
デバイスに音声データを送信し終えた段階で返ってきているということなのでしょうか?

756:デフォルトの名無しさん
08/07/30 11:01:31
大きいバッファ一つだとそういう感じになるね。

waveOutPrepareHeader で小さい領域を数個作って
ソレを繰り返し使いまわすようにするといい


757:デフォルトの名無しさん
08/07/30 23:16:58
なるほど。ありがとうございました。

758:デフォルトの名無しさん
08/08/19 05:57:23

>>605

使えるよ。めちゃくちゃ情報量多いのでレファレンス本として使ってる。
エフェクタの実装でつまったときとかに眺めてる。
歴史を網羅してる本(ちょっと古い)なんだけど、
アナログにおける実装とかをデジタルに落とすときに参考になる。
まあバイブルなんで、もっといたほうがいいと思う。

759:デフォルトの名無しさん
08/08/20 22:33:25
>>605
原書の方が良いよ。


760:デフォルトの名無しさん
08/08/26 06:52:16
ウェーブデータから指定した周波数をカットする関数はありますか?

761:デフォルトの名無しさん
08/08/26 07:36:34
そりゃぁ、作ればあるだろうけど……

762:デフォルトの名無しさん
08/08/28 01:40:14
>>760

FFTして所望の周波数部分削って逆FFTしろ

763:デフォルトの名無しさん
08/08/28 01:42:45
ところでDirectAccessってその後どうなったのか

764:デフォルトの名無しさん
08/08/31 18:42:37
バンドパス処理する場合にはFFTして通過させる以外の周波数の振幅を0にしてIFFTするだけでいいの?

765:デフォルトの名無しさん
08/08/31 19:12:40
>>764
それでできるけど、FFT でやるとブロックノイズ対策が面倒よ。
普通に FIR とか IIR でバンドパスフィルタ作った方がいいと思う。

766:デフォルトの名無しさん
08/08/31 19:48:27
なぜブロックノイズが生じるのですか?

767:デフォルトの名無しさん
08/08/31 19:53:14
FFTは2^nサイズで処理するじゃない

768:デフォルトの名無しさん
08/08/31 19:56:14
データを全区間にわたってFFTするならブロックにならないけども。
データ長次第か。

769:デフォルトの名無しさん
08/08/31 21:35:27
終端のところは、前部分とオーバーラップさせて2^nにしたらダメですか?

770:デフォルトの名無しさん
08/08/31 22:07:00
>>769
まあ、それがブロックノイズ対策。

FFT の変種で MDCT ってのがあって、
オーバーラップさせて周波数領域で処理するんならそれ使うのが楽かも。

とはいえ、やっぱり FIR とかを避ける理由がよくわからん。

771:デフォルトの名無しさん
08/08/31 22:35:21
わかりました。FIR使ってみます。
避けたのは勉強してないからです

772:デフォルトの名無しさん
08/08/31 22:40:15
FFTを使えばパワースペクトルが得られるってのは、スペアナの実装でよく知られているし、よく目にするからでは。
あとFIRはフィルタの設計法が分からんとか。
昔の俺がそうだったんだが。

773:デフォルトの名無しさん
08/08/31 22:51:53
>>772
まさにそうですwww
FIRすればFFTいらないんですか?

774:デフォルトの名無しさん
08/08/31 22:53:19
winampのグライコってどんな仕組み?

775:デフォルトの名無しさん
08/09/01 00:06:57
俺は逆にFFT使う方法がわからん。


FFTして、弄りたい周波数の実部と虚部に係数かけてもどしゃいいだけ?


776:デフォルトの名無しさん
08/09/01 00:54:32
>>770
MDCTはDCT-4だから、ライブラリ選ぶかもね
まぁfftw使えば選べるけど

>>771 >>773
位相を見ないのならDFT(いわゆる普通のFFT)よりDCTの方が良いよ (境界条件の関係)。
DCT前の窓処理がほぼ不要で、オーバーラップのみで結構まともに仕上がる。

FIRは時系列処理で、それと等価な処理が DFT(+オーバーラップ)
でDFTの高速化アルゴリズムがFFT

777:デフォルトの名無しさん
08/09/24 21:55:05
こんなスレあったのか
知らなかった。。。

778:デフォルトの名無しさん
08/09/26 04:42:11
ようこそ、ラッキー7。
ここはム板でももっともマニアックなスレです。


779:デフォルトの名無しさん
08/09/26 05:04:35
776が言っている境界条件の関係が非常によく分かるページ
URLリンク(laputa.cs.shinshu-u.ac.jp)

2次元DCTだが許せ。

780:デフォルトの名無しさん
08/09/26 09:25:21
俺もそのうち二次元に行くから許してやるよ。

781:デフォルトの名無しさん
08/09/26 15:30:40
2次元のFFTとか感覚的によくわからないんだよな。
音をFFTすると時間分が圧縮できるのは分かるが、画像をFFTして圧縮できるのはなぜ?
誰か教えてくり。

782:デフォルトの名無しさん
08/09/26 16:05:28
だが断る

783:デフォルトの名無しさん
08/09/26 18:22:13
>>781
イメージ的にだけど、
2次元のDCT=ある方向に濃淡が変化するレート
で、写真って一つの色に近い値に染まっている箇所がほとんど
(急激な変化は物体との境界にある)だから、例えば64x64の画像に
DCTをかますと、それは低周波数に集中する。

そこに音響で言えば周波数マスキングのような
心理的な情報を考慮させた量子化をすると、いい具合に低周波数
以外の部分が同じような値(0に近い値)になる。
同じような値が多いからエントロピーが少ない。だから、それに
ハフマン符号なんかをかますとファイルが圧縮できる。

間違っていたら訂正お願いします。

784:デフォルトの名無しさん
08/09/26 19:45:56
分かってるやつには分かるが分かってないやつには分からない
結局教科書読めって話になる

785:デフォルトの名無しさん
08/09/26 21:28:08
>>781
そもそも人間の視覚があんまり周波数の高い絵を認識してない
(細かいシマシマ描くと、その中間色あたりの単色に見える)
ので、高周波は多少劣化しても大丈夫。

786:デフォルトの名無しさん
08/09/27 00:54:20
>>783
>>781

ははあ、なるほど。
サンプリング周波数が44.1khzでとりあえず十分っていうのと似た話か。
FFTすることで圧縮されるわけじゃなく、FFT後の量子化の際に高周波を切り捨てることで圧縮するという感じ?

787:デフォルトの名無しさん
08/09/27 01:02:32
>>786
全部捨てるとさすがにあれだけど、
量子化ステップは高周波ほど荒くして問題ない。

788:デフォルトの名無しさん
08/09/27 10:39:54
いやだからそれは本質じゃないんだってば
平均情報量って知ってる?

789:デフォルトの名無しさん
08/09/27 11:13:14
>>788
量子化ステップ荒くしないと平均情報量そんなに変わらないよ。
べた塗画像とかならともかく、元々のエントロピーが高いものはFFTしてもやっぱエントロピー高い。

790:デフォルトの名無しさん
08/09/27 17:57:48
表現を変えただけなら情報量は変わらん。可逆圧縮が例。
非可逆圧縮だと、本質に影響少なくどうやって情報を切り捨てるかが重要で、
そのときに周波数領域とかの表現形式によってやりやすさが変わる

791:デフォルトの名無しさん
08/09/27 22:23:12
うそこけ

792:デフォルトの名無しさん
08/09/27 22:26:19
ほんとだって。
でないと、可逆でエントロピー減ることになるじゃない。

法則性が見つけやすいって意味で、
見掛け上の情報量が減ってる感じになることはあって、
本質的にはFFTしただけでは情報量減らない。

793:デフォルトの名無しさん
08/09/27 22:28:00
「表現をかえたという情報」の分だけ変わるじゃんよ?

794:デフォルトの名無しさん
08/09/27 22:31:20
>>793
それは、「低周波数しか成分持ってない」とか付随した知識がある場合にのみ有効。
実際のところ、画像はそれほど周波数偏ってない。

795:デフォルトの名無しさん
08/09/27 22:38:14
>>794
有効かどうかじゃなくて変わらんというのに反論してるんだよ

796:デフォルトの名無しさん
08/09/27 22:53:02
でもそれ、「低周波しか持ってない」って情報がある時点でエントロピー低いのでは。

797:デフォルトの名無しさん
08/09/27 22:53:40
えっと、要するに、エントロピーが変わるのは、
FFT かけた瞬間じゃなくて、負荷的な情報を与えた瞬間。

798:デフォルトの名無しさん
08/09/27 23:23:50
エントロピーの計算式覚えてるよね?

799:デフォルトの名無しさん
08/09/28 01:11:53
帰ってきたら色々レスついてるな
まずは >>792 >>794 >>797 に同意

>>795
変わらない。記号列長と情報量は区別するべき。可逆圧縮で考えるなら、
圧縮することで記号列は短くなるが、その記号列が表す情報そのものは何も変わらない。
変わったら可逆じゃない。情報が変わらないから情報量も変わらない。OK?

可逆圧縮は情報を変えずに記号列を圧縮する操作、非可逆圧縮はそれに加えて情報自体も削減する。
表現形式を変えるだけのDFTで情報量は減らない。で、周波数領域にすることで例えば
「低周波成分が大半を占める」とか聴覚心理モデルとか**問題領域固有の知識**を入れて、
削っても影響のない情報を判別して削るのが非可逆の基本。
何度も言うが、表現形式を変えただけでは情報量は減らない。

800:デフォルトの名無しさん
08/09/29 10:00:27
なんかモンティホール問題と似てきたな。
誰か799の言ってることをモンティホール問題に置き換えて説明してれくれないだろうか。

801:デフォルトの名無しさん
08/09/29 10:21:45
このソースコードと出力結果の情報量は同じ?
#include<stdio.h>
#include<math.h>
int main(void){
double theta;
int i;
for(i=0;i<10000;i++){
theta=i*0.001;
printf("%f\n", sin(theta));
}
return 0;
}

802:デフォルトの名無しさん
08/09/29 11:32:52
>>801
本気で頭悪いのか?
理論と有限桁での実装の誤差ってのは何にしてもついて回るもんだから議論するだけ無駄。

803:デフォルトの名無しさん
08/09/29 11:34:18
>>801
周期関数の結果は非可逆だよねぇ。情報量はどうなるんだろ。

そう言えばFFTして逆FFTすると、強度の情報が失われないかな?
音や画像みたいに正規化しやすい場合はいいんだけれど。
# 演算誤差は目を瞑ったとしても。

804:デフォルトの名無しさん
08/09/29 12:32:27
0.001www

805:デフォルトの名無しさん
08/09/29 12:40:18
>>799

すばらしい説明をありがとう。
情報量を圧縮って意味がわからないよなそもそも。

806:801
08/09/29 19:17:35
>>802
誤差が無ければ議論できるの?
#include<stdio.h>
int myrand(void){
static unsigned long seed=377743;
seed=seed*8209+6469;
return (seed>>8)&0xffff;
}
int main(void){
int i;
for(i=0;i<10000;i++){
printf("%d\n", myrand());
}
return 0;
}

807:デフォルトの名無しさん
08/09/29 20:56:03
>806
出力結果からそのソースが一意で起こせるならな。
ってか揚げ足取りがしたいだけだろお前。

808:801
08/09/29 21:10:07
スマン
情報量云々を見るとつい…

809:デフォルトの名無しさん
08/09/29 21:53:24
2次元の話がずいぶん広がってしまったな。
なんか音の話題ないの。


810:デフォルトの名無しさん
08/09/30 12:09:50
ここにいるおまいらが今まで作った音響アプリの代表作って何よ。
俺はリズムサンプラー。

811:デフォルトの名無しさん
08/09/30 13:15:36
>>810
そういうのはマ板でやれ

812:デフォルトの名無しさん
08/09/30 16:31:04
音響アプリなんだからいいだろ。
このスレ貴重なんだから盛り上げていこうぜ。

813:デフォルトの名無しさん
08/09/30 16:54:45
自分語りがしたいならマ板。
技術スレでする話題じゃねーわな。
糞スレ化するからいらんよ。

814:デフォルトの名無しさん
08/09/30 17:43:26
すいません技術的な質問です。
オーバーサンプリングって単純にプログラム内でサンプリング周波数の倍のデータとして扱えばそれでいいんでしょうか。
データ間は0をつめるとして、なぜそれでエイリアシング対策になるのかが理解できません。
たとえば44.1khzのWAVファイルを倍の88.2khzで扱ったとして、元データは44.1khzのデータしかないので、結局音そのものはクオリティ変わりませんよね。


815:デフォルトの名無しさん
08/09/30 18:57:58
キミが言っているのはオーバーサンプリングではなくアップサンプリングじゃないの。

例えば、20kHz以下の信号をAD変換したい時に、サンプリング周波数を
44.1kHzではなく88.2kHzにするのがオーバーサンプリング。
こうすれば、AD変換の前に必要なアンチエイリアシング・フィルタに必要な
遮断特性が緩和されるというメリットがある。

アップサンプリングについて説明すると、データの間に0を挿入してデータ数を
2倍にすれば2倍アップサンプリングになる。アップサンプリング後のデータには
エイリアスが発生しているので、それをFIRフィルタで削ってからDACで出力すれば、
DA変換後のスムージング・フィルタに必要な遮断特性が緩和される。

図が無いと判りにくいだろうから、詳しくは下記リンクを参照。
URLリンク(blackfin.s36.coreserver.jp)

816:デフォルトの名無しさん
08/09/30 19:28:25
>>815

なるほど、まず用語の使用が間違っていたのですね。
さらに実際はアップサンプリング時でもLPFをかけることが肝だったんですね、納得しました。
ありがとうございます。

参考:URLリンク(www38.tok2.com)

ただ、そうなると良く分からないのが、たとえば>>405の記述で見られるような、
デジタル信号処理の計算の部分でオーバーサンプリングしろというのはどういう意味なのかということなのですが。
エフェクト処理でアップ(オーバー)サンプリングすることで、一体どんなメリットがあるのかわからずに悩んでいます。
もの分かりが悪くて申し訳ないです。

817:デフォルトの名無しさん
08/09/30 23:15:53
>アップサンプリング
漏れなら同じデータで穴埋めちゃう。 当然、波形がカクカクするが気にしない。
画像の拡大もカクカクしてるのが好きだから。

818:デフォルトの名無しさん
08/09/30 23:54:53
Lanczos3で補間したら適度なLPFにもなってるんじゃないの?
高級オーディオメーカWADIAの昔の製品はB-Splineだったな。
20kHzに近い波形はレベルも位相もボロボロになってるかもしれないけど
どうせサンプル数が足りないから長tapのFIRでも大差ないでしょ。

819:デフォルトの名無しさん
08/10/01 01:13:56
>どうせサンプル数が足りないから長tapのFIRでも大差ないでしょ。

ここ詳しく。

820:デフォルトの名無しさん
08/10/01 01:29:01
>>817
音の「カクカク」はジッターノイズになって苦痛じゃない?

821:デフォルトの名無しさん
08/10/01 16:45:43
高周波が出ますナ

822:デフォルトの名無しさん
08/10/01 22:23:45
おまいらフィルタの設計時ってどんなツール使ってる?


823:デフォルトの名無しさん
08/10/02 09:34:09
dsPICworks

dsPICつこてるので。

824:デフォルトの名無しさん
08/10/02 12:24:11
職場では MATLAB
自宅では GNU Octave

825:デフォルトの名無しさん
08/10/02 14:59:12
GNU Octave って、FIRやIIRのタップごとの計算とか簡単にできたりするの?
GUIでスペクトル確認しながらとか。

826:デフォルトの名無しさん
08/10/02 18:15:28
GNU Octave は、基本的に対話型コマンドライン環境だからCUIになるけど、
(コマンド列をテキストファイルに書き出せば、スクリプト実行も可能)
フィルタ設計コマンドでフィルタ係数を求めて、フィルタ特性をグラフ表示するのは簡単にできるよ。

827:デフォルトの名無しさん
08/10/02 19:17:53
へー、おもしろい。使ってみます。ありがとうー。

828:デフォルトの名無しさん
08/10/03 12:42:06
>>826
gnuplotと組み合わせてるのかな?

829:デフォルトの名無しさん
08/10/04 16:46:17
MAXMSPとかでパッチ作ってあそんでるんですが
pluggoブリッジじゃなくて純粋なOSXのプラグインを
作りたいんですが、何から手をつけたらいいんでしょうか?

830:デフォルトの名無しさん
08/10/05 01:45:43
あー....。

831:デフォルトの名無しさん
08/10/05 08:21:52
結構色々調べたんですよ
CoreAudioのプログラミングXcodeでやるんですね

SourceForgeなんかにAUシンセのソース等みながら
やってみます

832:デフォルトの名無しさん
08/10/06 11:42:35
MACはCoreAudioとかあるからなあ、結局サウンドプログラミングの出番ないよな。


833:デフォルトの名無しさん
08/10/06 19:09:06
んな訳ない。 波形を自分で作ったり加工したり…

834:デフォルトの名無しさん
08/10/07 05:05:08
それだけ?

835:デフォルトの名無しさん
08/10/07 07:31:43
サウンドプログラミングじゃないじゃん

836:デフォルトの名無しさん
08/10/07 12:14:18
サウンドデバイスプログラミングやAPI使用法はスレ違いだからすっこんでろw
ここはもっとアカデミックで高尚な話題のスレなんだよ

837:デフォルトの名無しさん
08/10/07 14:22:35
デバイスなめんな

838:デフォルトの名無しさん
08/10/08 04:37:48

>>830

それにしては、>>752の話題はこのスレでは光ってるよな
くそワロタ

839:デフォルトの名無しさん
08/10/09 05:07:21
質問です。

自分の声って自分の耳で聞いた場合と、何かに録音して聞いた場合とでは違って聞こえますよね。
他人が実際どのように自分の声を認識しているのかを知りたくて、
それを聞けるようにするアプリを作ろうと思っているのですが、
そもそも技術的には可能でしょうか?

どうしても大好きなあの子がどんな風に自分の声を聞いているのか知りたくてたまらないんです。

よろしくお願いします。

840:デフォルトの名無しさん
08/10/09 08:57:35
頭部インパルス応答ってあるじゃん
あれの応用で、音源を喉部に固定して測定すればいいと思うよ

841:デフォルトの名無しさん
08/10/09 09:06:37
>>839
変態キモイ死ね

骨を伝ってくる音の特性を再現すれば出来そうだけど、
個人の骨格の違いでどの程度変わるのかってーのと、
そもそも個人個人で聞こえ方に差異があるはずだから無理じゃね?

842:デフォルトの名無しさん
08/10/09 10:05:50
>>839
頭の模型を作って喉にスピーカー、耳にマイクを仕込んで、IRを取れ。それつかってコンボリューション。

843:デフォルトの名無しさん
08/10/09 10:30:03
作ろうと思ってるなら自分で理論考えて作ればいいじゃん
そのための脳みそがないってんならご愁傷様だ

844:デフォルトの名無しさん
08/10/09 10:40:39
単に他人の耳の位置にマイクを設置すればいいんじゃないの?

845:デフォルトの名無しさん
08/10/09 10:41:29
普通に録音して聞けばいいだろ。その子の聞こえ方をシミュしても、その結果を聞くのは自分なんだし

846:デフォルトの名無しさん
08/10/09 17:08:52
>>839
単に録音してそれを自分で聴くだけでいい。

難しいのは、自分の声を自分がどう聞いているかを
相手に聞かせることだ。

847:デフォルトの名無しさん
08/10/09 20:06:19
>>840-842は質問を勘違いしてるな

848:デフォルトの名無しさん
08/10/09 20:26:39
>831の者です

グラニュラ・・・そしてFFT・・・・
新しい音響はヒットチャートも揺るがしますよ

みなさん頑張ってね!

849:840
08/10/10 00:43:36
・・・俺が>>841-842を誤誘導したっぽいな

850:デフォルトの名無しさん
08/10/10 02:30:07
このスレで聞くくらいだから、まさか録音して聞けば済む程度の質問されるとは思わない罠w
でもまぁ全く同じには聞こえないだろうけど。

851:デフォルトの名無しさん
08/10/10 19:14:27
その子の頭部を物理シュミレーションするしかないわな。
でもそれが測れるくらい仲がいいならもう付き合ってるよな。

852:デフォルトの名無しさん
08/10/10 22:01:27
>>850>>851
それを言い出すとキリがないんじゃないか。

例えば「大好きなあの子がどんな風に自分の顔を見ているのか」知りたいのなら、
普通は「鏡を見ろ」と答えて、それで十分な答えだ。
あの子の水晶体や網膜の特性、視覚に関係する脳の働きまで考慮しないだろう。

853:デフォルトの名無しさん
08/10/10 22:13:04
みんな勘違いしているようだが、>>839
その子自身の発した声を、その子自身がどう聞いているかを、知りたい って意味なんだよ。

854:デフォルトの名無しさん
08/10/10 22:13:25
ところで、non causalなら理想ローパスってつくれるんでしょ?

855:デフォルトの名無しさん
08/10/11 00:44:48
まあ、non causal ならねぇ

856:デフォルトの名無しさん
08/10/11 11:32:49
一瞬カジュアルって読んでしまった

理想ローパスって有限長でできるの?無限長なら先読みできたところで意味ない気が…
理解間違ってたらすまん

857:デフォルトの名無しさん
08/10/11 13:20:16
>>853
なるほど。全然気付かなかった。
「自分」という言葉を使ってるから両方の意味にとれるんだな。
その方法は俺も知りたいと思っていた。

適当なフィルタをかけて、どちらが似ているかを本人に選ばせ、
パラメータを微調整していく、というのくらいしか思いつかない。

858:デフォルトの名無しさん
08/10/11 13:35:05
>>853
日本語の「自分」は1~3人称全部に使えるからわかりにくい~

859:854
08/10/11 19:40:18
>>856
あっしの理解では、フィルタが無限長でも
データが有限長なら可能かと。

860:デフォルトの名無しさん
08/10/11 23:20:43
ダウンサンプリングするプログラムつくりたいんだけど、
間引くデータはどう選んだらいいんですか?

861:デフォルトの名無しさん
08/10/12 00:49:11
1/2にするなら1/4fsでローパスして1つ飛ばしすれば速い。
整数比でなければリサンプリング。間引くじゃできん・・と思う。
間引くだけで可能なら俺も知りたい。

862:デフォルトの名無しさん
08/10/12 09:30:54
wavefs44.exeとかssrcのソースが参考になる。

863:デフォルトの名無しさん
08/10/13 12:12:34
奇遇だな
俺もssrcを勧めようと思っていたところだ

864:デフォルトの名無しさん
08/10/13 18:31:48
2つともソースもバイナリも入手不能っぽいのだが

865:デフォルトの名無しさん
08/10/13 18:43:57
ググって一番頭のサイトで手に入るけど?

866:デフォルトの名無しさん
08/10/13 19:03:39
ssrcって日本からアクセスブロックしてんじゃなかったっけ

867:デフォルトの名無しさん
08/10/13 21:36:09
海外のプロクシ経由でアクセスすれば問題無いでしょ。

868:デフォルトの名無しさん
08/10/16 20:51:37
DFTとDTFTの違いが理解できない…誰か解脱plz

869:デフォルトの名無しさん
08/10/16 22:58:12
>>868
入力関数が周期的か否か

870:デフォルトの名無しさん
08/10/17 02:54:09
SSRCみたいに、
サウンドプログラミングの参考になるオープンソースソフトって他にどんなのがありますか。




871:デフォルトの名無しさん
08/10/17 04:50:26
>>868
Wikipediaより
・入力が離散的なら、フーリエ変換は DTFT となる。
・入力が周期的なら、フーリエ変換はフーリエ級数となる。
・入力が離散的かつ周期的なら、フーリエ変換は DFT となる。

872:デフォルトの名無しさん
08/10/17 09:07:37
DFTは、有限区間での変換を行う。
DFTは実際にはそうとは限らないが、以下の仮定を置いて考える。
その時にその区間の信号が、周期的に無限に続くと考える。従って、信号の一端と多端が滑らかでない場合などに問題が生じる。
これらを解決するために、窓関数などが用いられるが、これによってスペクトル漏れという問題が起きる。

これに対し、DTFTは、実際に上記の過程が成立する場合ではないかと思う。

873:デフォルトの名無しさん
08/10/17 16:17:35
連続時間・無限区間 → フーリエ変換
連続時間・有限区間 → フーリエ級数
離散時間・無限区間 → 離散時間フーリエ変換(DTFT)
離散時間・有限区間 → 離散フーリエ変換(DFT)

874:デフォルトの名無しさん
08/10/17 23:21:38
どれも微妙に誤解を招きそうな回答ですな

875:デフォルトの名無しさん
08/10/17 23:51:42
ご存知とは思うが、周期関数を除いては客観的な周波数成分など定義されていないので、
DFTの結果はDFT変換結果でしかない。
f(t)=f(t+T)を常に満たす周期信号など実在しないから(だって過去には限界があるし未来は分からないから)
実際には周波数成分は未定義である。
・・ということを念頭に置かないとフーリエ系周波数分析に過剰な期待をしすぎる。
ピッチが速く変化する人の声などはLPC分析のほうが成功を収めている。

876:デフォルトの名無しさん
08/10/18 11:02:27
>DFT変換

877:デフォルトの名無しさん
08/10/20 10:09:20
頭痛が痛いタイプの人か。

878:デフォルトの名無しさん
08/10/21 01:42:12
頭痛はほんとに痛いんだぞ!バカにしちゃだめ!死ぬよ!

879:デフォルトの名無しさん
08/10/21 04:20:59
大体でいいから音楽から歌声部分だけ目立たせるようにフィルタをかけたいんだが、
なかなかうまくいかん。

FIRフィルタで400-4000hzくらいを通したところで音楽がこもるだけだ。
フィルタで音声以外の部分を削る(性能はかなり低くていい)って無理なのか?

880:デフォルトの名無しさん
08/10/21 08:36:35
どの音も倍音成分含んだ上で音が成り立ってるから、
周波数だけでボーカル分離はできないと思う。
音量やパンも考えないと。

881:デフォルトの名無しさん
08/10/21 08:55:13
他に、「ボーカルはセンター付近にあって、他の楽器は左右に寄ってる」
って仮定のもとに分離を試みたりするらしいけども、
その仮定自体100%そうとはいえないし、
その仮定が正しい場合でも、たった2チャネルの信号から特定部分抜くのは難しい。


882:デフォルトの名無しさん
08/10/21 19:18:17
マイクから録音した音声を波形で表示したいのですが、
WaveInで録音したものをどうやって波形にすればいいのですか?

883:デフォルトの名無しさん
08/10/21 20:52:29
数値を時系列にプロット

884:デフォルトの名無しさん
08/10/21 22:46:25
質問です

超超基本的なシンセソフト(学研のふろくのsx-150みたいな)を作ってみたいです!
プログラミング言語に関する知識は全くないです。(シンセソフト作りで一緒に勉強しようと思ってます)

使用する言語でおススメありますか?

885:デフォルトの名無しさん
08/10/22 00:07:56
C

886:デフォルトの名無しさん
08/10/22 00:10:11
C++

887:884
08/10/22 01:50:29
>>885>>886
ありがとうございます!

C言語で調べたところVSTSDKというのがあったんですが、
これを使ってVSTとして作った方が近道ですかね?


あと、よかったら参考になる本など教えてもらえるととても嬉しいです。
(この前それっぽい本を買ったんですが、シンセのことばかりでプログラミングのことが載ってなかったんですORZ。でも勉強にはなりました)

888:デフォルトの名無しさん
08/10/22 05:27:48
プログラムってのは成功失敗を問わず実践してこそ身につくもの。
人に聞く前に自分で実験してみたりはしないのかい?

そもそも言語の基礎が解ってるならサウンドの基礎知識だけ学べば実装はそんなに難しく無いはずだし、
言語から勉強しようってんならスレ違い。

889:デフォルトの名無しさん
08/10/22 07:31:28
>>888
アドバイスありがとうございます!

少しでも近道しようっていう考えが間違ってました。

一人で頑張ります!

890:デフォルトの名無しさん
08/10/22 10:22:51
VSTって知らないけど、全部自分で作った方が面白いと思うよ。
sx-150シミュレーターというかエミュレーターというか。

891:デフォルトの名無しさん
08/10/22 10:27:43
>全部自分で
VSTなど使わずって意味で。

892:デフォルトの名無しさん
08/10/22 15:24:46
むしろVSTなんか作ろうとしたら
ゴールが遠すぎてあっという間に挫折するわな

893:868
08/10/22 22:56:08
皆様解説サンクスです。コメントを総合して何となく分かってきました。
"解脱"に誰もツッこんでくれなくて(´・ω・`)ショボーン

>>889 >>892
プログラミングモデルとしては、VSTは分かりやすい方ですよ。
オブジェクト指向っていう壁はありますが、複雑多機能なフレームワーク
渡されるよりは学習コストは低いと思います。
基本的には、SDKで提供されるクラスを継承して処理を実装して、
そのクラスのインスタンスのポインタを返す関数を書いてエクスポートするだけです。

894:デフォルトの名無しさん
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