[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/01 09:09 / Filesize : 249 KB / Number-of Response : 981
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

サウンドプログラミング4



1 名前:デフォルトの名無しさん [2007/07/25(水) 14:07:56 ]
音のプログラミング処理について語りましょう

各エフェクタの組み合わせとか、
プログラミング外の話題はDTM板の方がいいよ

サウンドプログラミング3
pc11.2ch.net/test/read.cgi/tech/1145573675/

サウンドプログラミング2
pc8.2ch.net/test/read.cgi/tech/1091054082/

サウンドプログラミング
pc5.2ch.net/tech/kako/996/996171508.html


220 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:02:30 ]
>>212
ブラウン管モニタを壊すにはデバイスドライバレベルでの制御が必要だけど
ひょっとすると、スピーカーはユーザープログラムで壊せてしまう可能性がある?
超低周波を出すとか、DCオフセットをかけ続けるとか。

221 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:09:13 ]
ドライバレベルで保護してないかな。してなきゃまずいね。

222 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:26:59 ]
ユーザープログラムも何も
曲作ってるときうっかり変な音を鳴らしてスピーカ飛ばすって時々あるもんじゃないの?

223 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 22:51:08 ]
ない

224 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:03:21 ]
俺もそんなに詳しいわけじゃないが、もちっとだけアナログの勉強をしてもいいと思うんだ。

スピーカーが飛ぶのは>212にあるようにスピーカーが想定以上の入力を受けた時。
なので出力波形だけでなく、アンプのパワーやボリュームによる所が大きい。

225 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:16:44 ]
>>220
直流を通すオーディオアンプなんてほとんど存在しないだろ。
アンプにデジタルで直結したとしても、
普通はスピーカ出力の直前にコンデンサが入ってたりしてHPF特性がかかるから、
スピーカに超低周波や直流がかかることはない。

226 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:22:58 ]
ああ、でも、直流そのものは通さないとしても、
ステップ関数とかガンと入れられたら階段部分はスピーカ的に結構きついかもな。

227 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:02:28 ]
ステップ関数は階段部分ではなく、その後のフラットな部分がキツイわけで

228 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:33:14 ]
フラットな部分はHPFで除去されるんじゃね?



229 名前:デフォルトの名無しさん [2007/10/09(火) 22:05:52 ]
インパルス連続攻撃で敵を倒せないですか?

230 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:10:36 ]
premiumtv.12gbfree.com/?RTV+4440

231 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:11:43 ]
proforceone.web.fc2.com/ ⇒ Processed input data

Chick+Corea[777]
Herbie+Hancock[999]

proforceone.web.fc2.com/ ⇒ Calculation processing

d=$.split("\n");for(j=0;d.length>j;j++){s=d[j].substring(0,l=d[j].indexOf("["));
s=encodeURIComponent(s).split("%2B").join("+");
n=d[j].substring(l+1,d[j].indexOf("]")).split(".");
n=eval(n[0].split(",").join(""));n=(n-n%20)/20+(n%20>0);br();
for(i=0;n>i;i++){write("http"+"://youtube.com/results?search_query=");
write(s+"&search_sort=video_date_uploaded&page="+(i+1));br();}}br();


232 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:12:53 ]
>>227-228
カットオフ周波数10Hzの1次HPFの場合、
ステップ関数のフラット部分は時定数0.016秒であっという間に指数減衰するね

233 名前:デフォルトの名無しさん mailto:age [2007/10/09(火) 22:13:06 ]
デジタルピークメーターテスト用 −12db標準音量サンプル
www.barks.jp/watch/?id=1000006257&wpl=wm&wbw=1m
www.barks.jp/watch/?id=1000006257&wpl=wm&wbw=300k
www.barks.jp/listen/?id=1000006259&lpl=wm&lbw=56k

フリーソフトの音量確認用 ステレオ・デジタル・メーターを使おう
赤い●をクリックする 次にスピーカーマークをクリックする 
標準のは−12dbぐらいで、−6dbを超えない様に音量調節する。
www.forest.impress.co.jp/lib/pic/music/soundedit/soundengine.html


234 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:52:44 ]
ageんなカス

235 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 09:04:46 ]
あのー、非常に初歩的なことなんですが、
このページでバッファは441000bytesといいつつ441000*2bytes
確保しているのはなぜなんでしょう?
homepage3.nifty.com/rio_i/lab/oss/002sound.htm
ただのミスだと思い、ループのところを
for ( i = 0; i < BUFSIZE/2; i ++ ) {
t = ( total / (BUFSIZE/2) ) * i;
と変えてみると、出力周波数が880Hzになってしまいますし。

236 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:57:38 ]
ただのミスだと思うよ。 でもあなたの修正が間違っている


237 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:29:54 ]
>>235
量子化ビット数が16だから3528000[bits]なら441000[bytes]だけれど、こう計算した方がわかりやすい。
44100[Hz] * 5[sec] = 220500[samples]
だから、#define BUFSIZE 220500 とすればいい。

238 名前:デフォルトの名無しさん [2007/11/01(木) 04:02:20 ]
リアルタイムのスペアナ表示を作りたい。
FFTしてlog(re*re+im*im)的なことをして振幅を対数軸にするのはok。
問題は、周波数軸を対数にしたいのだが、どうするべき?
低い方は補完なので適当にごまかすとして、高い方は間引いてしまうと情報が失われるのが
いやなので避けたい。
好みとしては、ピンクノイズ(-3dB/oct)を入力したときに表示がフラットになりたい
のだが(きっと聴感に近いので)
絶対値の和? 平均?



239 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 04:42:24 ]
普通、Octave band pass filter bank をかけるかな。

240 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 06:44:19 ]
>238
ロスしないってんなら最大使うとか。

241 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 07:50:06 ]
>>238
前半、俺は、
たとえば5点あったら、その最大と最小と5個平均の3つを求めて
最大から最小への薄い垂直線を引いておいて
その上から平均を結んた線を引いてる。

こうやるとホワイトノイズでフラットになる。
ピンクノイズでフラットにするのは気持ち悪いように思うけど、
実現したいなら-3dB/Octの補正をかければいいのでは?


242 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 09:49:01 ]
>>238
用途によると思うよ。
ピーク検出したいなら、ピクセルに対応するバンド内で最大値かな。

逆に荒く(1/6octとか1/3とか)で全体的な特性を見たいなら、両対数にしてからバンド内で
平均とか。ただその場合、各バンド内でデータのある周波数点に偏りが出る(バンド内で高域に
集まる)んで、平均した場合は必ずしもバンド中央の周波数での値にならないことに注意。

>>241
Windows Media Playerのバー表示がそんな仕様じゃなかったけか

243 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:47:13 ]
>Octave band pass filter bank
なるほど、FFT以外のやりかたもあるのね。検討してみます。

ピンクノイズは各オクターブ(とかの対数で等間隔の帯域)のエネルギーの密度が等しいと
何かで読んだので、正しく計算すれば自ずとフラットになるのではないかと思ったのです。
でもどう計算するとそうなるのかわからない。
logとる前の絶対値かその2乗を足すか平均するかしたあと√とる?

244 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 14:07:08 ]
> ピンクノイズは各オクターブ(とかの対数で等間隔の帯域)のエネルギーの密度が等しいと
> 何かで読んだので、正しく計算すれば自ずとフラットになるのではないかと思ったのです。

その考えで問題ないと思います。
こっちで実験したところ、ホワイトノイズのFFT値を1/3octで絶対値合計→フラット

> logとる前の絶対値かその2乗を足すか平均するかしたあと√とる?

バンド毎に log(sum(sqrt(re*re+im*im))) で大丈夫なはず。
DCTなら log(sum(abs(re)))

245 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:02:04 ]
>こっちで実験したところ、ホワイトノイズのFFT値を1/3octで絶対値合計→フラット

ピンクノイズの、だよね。
ありがとう〜


246 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:46:59 ]
>>245
> ピンクノイズの、だよね。

いや、ホワイトノイズ

247 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 21:52:15 ]
説明不足だったかも。すまん
フラットの意味によるんだけど、両対数軸上で直線って
意味なら>>245でホワイトでもピンクでもフラット。
直線かつ水平って意味なら>>245ではホワイトのみフラット。

248 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 23:22:35 ]
直線かつ水平のつもりでした。>フラット
あいまいな言葉を使ってごめんね。

> 直線かつ水平って意味なら>>245ではホワイトのみフラット。

高域にいくにしたがって加算する数が増えるからホワイトノイズは右上がりに
なりませんか?



249 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:10:35 ]
↑からさらに自分で考えてみた。
>>244 log(sum(sqrt(re*re+im*im)))
の方式で仮に1バンド=1octで出力することを考える。
1個上のバンドに行くに従って加算するデータ数が2倍になっていくわけだから、
結果は+6dB/octの右上がりになるはず。

問題は、ホワイトノイズを入れると+3dB/octの右上がりになってほしい。
sqrtとsumの順番を入れ替えると(sqrtを消して20→10でも等価)、
数が2倍になると3dB上がるので+3dB/octになる。

つまり、20*log10(sqrt(sum(re*re+im*im)))
最初に書いた、絶対値の2乗で足して平方根をとる、でいいみたい。

ピンクノイズの各バンドの平均値は1バンド上がると-3dBずつ下がっていくはず
つまり1/√2に減っていくはずで、これの2乗の次元(1/2ずつ減ってく)で
数が2倍になっていくものを合計していくと皆同じになるという理屈。

ちなみに、素直に(?)、ホワイトで水平、ピンクで右下がりにするには、
sumのところを平均にすればいいはず。
(1バンド上がるごとに2倍になる個数で割ったやつをsqrtするので、1バンド上がると
1/√2つまり-3dBさがっていく)
root mean squareってやつですね。

あ〜すっきりした。


250 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 02:46:03 ]
>>249
> 1個上のバンドに行くに従って加算するデータ数が2倍になっていくわけだから、
> 結果は+6dB/octの右上がりになるはず。

データ数が増えてもデータ値は高域に従って指数的に減っていくので、
よほど高域強調されてない限り合計しても右上がりにはなりません。

251 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 09:22:34 ]
>>249
> sqrtとsumの順番を入れ替えると

平方根の合計と合計の平方根は別のものなので入れ替えられません。
平方根の合計 sqrt(1)+sqrt(2) = 1 + 2 = 3
合計の平方根 sqrt(1 + 2) = sqrt(3) = 1.732...
素直に 20log10(sum(sqrt(re*re+im*im))) で各バンド計算して
+3dB/oct補正掛けた方が実装の見通しも良くなるような。

252 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 09:47:43 ]
まちがえた、20log10(ave(sqrt(re*re+im*im)))です。

あとsqrt(re*re+im*im)の部分は複素数の絶対値計算なので、
RMS以前のデータ準備の段階。|z|^2=re*re+im*im
RMSやりたいなら、|z|=sqrt(re*re+im*im)の各値の二乗平均平方根、
つまりsqrt(ave(|z|^2)) = sqrt(ave(re*re+im*im))にしないと変なことになる。

253 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 21:32:20 ]
> データ数が増えてもデータ値は高域に従って指数的に減っていくので、
> よほど高域強調されてない限り合計しても右上がりにはなりません。

なんか根本的な勘違い? >自分
ホワイトノイズはデータ値が(確率的には)全部等しいと思ってたのですが?

> 平方根の合計と合計の平方根は別のものなので入れ替えられません。

もちろんそうです。計算方法を変えるという意味です。

> あとsqrt(re*re+im*im)の部分は複素数の絶対値計算なので、
> RMS以前のデータ準備の段階。|z|^2=re*re+im*im
> RMSやりたいなら、|z|=sqrt(re*re+im*im)の各値の二乗平均平方根、
> つまりsqrt(ave(|z|^2)) = sqrt(ave(re*re+im*im))にしないと変なことになる。

>>249でRMSといってるのは、 20*log10(sqrt(sum(re*re+im*im))) のsumを平均に
変えたもののことで、あなたの式と同じです。


254 名前:デフォルトの名無しさん [2007/11/10(土) 11:42:09 ]
CD-TEXT の規格か仕様か、これを読み込むサンプルのあるサイトか分かりませんか。

ぐぐる用語でも分かると助かります。お願いします。

255 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:00:14 ]
>>254
REDBOOK

256 名前:254 mailto:sage [2007/11/10(土) 22:29:04 ]
>>255
有難うございます。お陰で参考になりそうなのを1つ見つけました。
英語版で 1996/12月ソニーが配布したものですが、データ構造についても
書いてあるようです。

余談ながら、ソニーは普及させたかったような雰囲気。
添付のソフト(3本)用に VB4 runtime routine が付いている。

257 名前:すみません素人です [2007/11/20(火) 11:00:15 ]
最近卒研でDSK使って音声処理する実験始めたんですけど、
高周波や低周波だけカットするLPFやHPFのプログラム(C言語)を組んだんですが、
逆に高周波とか低周波だけ増幅させるプログラムって書けるんでしょうか。
本やネットではちょっとわからなかったので、式とかサイトとか知ってる人がいたらどうかお願いします。

258 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 11:10:17 ]
カットしたのを元のに足す引く



259 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:28:09 ]
>>258さんの通り、
高周波だけをカットした結果を元の信号に(遅延・位相を合わせて)足せば低周波だけ増幅出来るわけだけど


どうして、普通はカットしか書かないのかというと、
ゲインが1を超えると、固定小数点演算だとオーバーフローするし
そもそも出力DACのレンジを越えてしまうと歪ませるしかなくなるからさ。



260 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:43:36 ]
>>257
増幅したいところ以外をカットして全体のゲインを上げる
あとは双二次で検索

261 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 12:58:40 ]
まあ、あと、増幅は、ノイズまで増幅しちゃうしね。

262 名前:257 [2007/11/20(火) 15:41:55 ]
なるほど、カットするプログラムを応用するんですね!どうりでみつからないわけです…
それではオーバーフローやノイズの問題も考えつつ取り組んでみたいと思います。
皆さん、丁寧なご回答ありがとうございました。

263 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:37:12 ]
カットして増幅とか、カットしたのをもとに足す引くとかでなくて、
ローシェルビング、ハイシェルビングフィルタでしょ。
双二次にはちがいないけど。
いわゆるトーンコントロールのロー・ハイで一般的なやつね。

ブーストするんだから、振幅に気をつけなきゃいけないのは当然

264 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 21:52:08 ]
>>263
内部的には同じことじゃね?

265 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 04:06:49 ]
>>264
まぁこのあたりは言い方の問題も結構あって、カットって言った場合に
シェルビングEQによるカットなのか、ハイパス・ローパスによるカットなのか、
ここまでのレスでもみんなバラバラの前提で喋ってたりするからねぇ。

カットして増幅しても、ただ増幅しても、相対的なゲインカーブが同じなら同じで良いと思う。
(アナログだとレベルによる非線形性がからむんで違うって話になるけど)

ハイパス・ローパスでカットして増幅する場合は、
例えばハイパスの場合カットオフ以上が-6dB/octとかの傾きで一様に減衰していく。
対してローシェルビングで持ち上げる(orハイシェルビングで落とす)方法だと、
ある時点で減衰/増幅が頭打ちになるって違いがある。

チラ裏失礼

266 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 06:39:16 ]
>高周波とか低周波だけ増幅させる

カットした結果と元信号の足し引きみたいなのは、位相や遅延を考慮しないといけないから
普通わざわざやらないよね?

267 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 07:09:13 ]
でも、数式を良く見ればf0が同じなら分母は固定で、分子だけが違う。
で、分子の変数は3つなので、
HPF/LPF/BPFの3つの組み合わせで何でも作れる事になる

ただ、ピーク位置が違うので多少f0は調整しなければいけない。

268 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 07:58:32 ]
HPFとBPFはLPFの組み合わせで作れるんじゃね



269 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:14:14 ]
実は2次の同じf0の HPF+LPF+BPF を加算すると理論的にはフラットになる
もっとも、計算精度が有限だからノイズは出るけどね。

だから1-HPF は LPFではなくて LPF+BPFになる。
その場合の特性は -6dB/Octではなくもっと悪い(1次の特性に近い)

270 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:30:47 ]
それシェルビング1っ個やるのよりメリットあんの?

271 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 08:37:47 ]
特性を可変したい場合は実際に分割するけど(可変出来るのは特性の上下だけでf0は無理だけど)

固定なら単にIIR計算としては1個でやるよ?
係数を足し算するだけだし

272 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 09:08:45 ]
3つのフィルタの係数を
gH*HPF + gM*BPF + gL*LPF
として、gH,gM,gL を調整すれば、イコライザの特性が出せる
分母は共通だから分子の係数を加算すればいい。
左右を上下させる場合、
gMは gH,gLの加重平均 gM = √(gH*gL) 程度がイーカンジ

バンドを調整する場合、綺麗にポコンと上下させるにはQも調整しないと
上下非対称に

273 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 09:50:47 ]
言葉で動作原理を述べるのは簡単だが、それをプログラムで作るのが分からない。

274 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:35:53 ]
藻前ら、先人の知恵はちゃんと活用しようぜ。

Robert Bristow-Johnson氏のCookbookの式を使えば、2次IIRフィルタ1個だけで
ピークEQもシェルビングEQも実現できるぞ。
ttp://www.musicdsp.org/files/Audio-EQ-Cookbook.txt


275 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 11:47:05 ]
やっぱり、HPF+BPF+LPFの合成だね。 BPFは加重平均だ。

公式を見るだけじゃなくて原理が判ると多少楽しいよね。

276 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 13:02:41 ]
>やっぱり、HPF+BPF+LPFの合成だね。
どーしてそうなる?
HPF+BPF+LPFの合成だと4次以上にならないか?

277 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 14:20:52 ]
>>274
それが263とかがいってる双二次フィルタですよ。
先人の知恵どころか、いま話に出てるEQなどでいちばん一般的な方法かな。
わざわざフィルタ合成みたいな概念でやるなんて聞いたことないなあ。

278 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 21:33:53 ]
>>276
合成じゃなくてフィルタ出力の加算のことを言ってるんじゃない?
lpf(bpf(hpf(x))) じゃなくて lpf(x)+bpf(x)+hpf(x) (式は適当)
普通合成っていうと前者だから>>275はかなり紛らわしいけど。



279 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:28:36 ]
根本的なことを聞きますが、LPFを作成する場合、

・FIRフィルタを用いる(入力信号に対し、フィルタ係数を畳み込み計算することで
低域通過させた出力信号を直接求める)

・FFTを利用する(入力を一旦FFTし、通過させる帯域のみを保持し、
他はゼロ埋めさせたスペクトラムを逆FFTすることで出力信号を得る)

この2通りのやり方は理想的には全く同じ挙動になるのですか?
今までFIRを使ったやり方が原理的に良く分からなかったので、FFTを使ったLPFを
作成していたのですが(周波数帯域の通過が直感的によく分かるので)、
最近勉強しなおしてFIRフィルタについて学んだところ、
時間領域において計算するだけでそのまま出力信号が得られるのが
非常に不思議に感じ、質問させていただきました。

280 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:33:20 ]
FFTのことも良く分かってないんじゃないの

281 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 01:34:01 ]
何度もすみません。追記です。

もしそうであれば、両者の特徴として
FIRの方が処理速度が速いが、後者の方が精度が高い(遷移周波数帯域幅が狭い)結果が得られる
という認識であってますか?


282 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:14:06 ]
FIRフィルタをFFTで高速計算させる事が出来るけど
それをやってるなら、そういう事は書かない筈だけどな

FFTでフィルタを作った場合、バッチ処理でやるかブロックで処理する事になる。
ブロックで処理するとブロック同士がつながらない問題が出てくると思うのだが・・・・


283 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 02:56:12 ]
>>282
ヒント: MDCT

284 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 03:18:06 ]
>>279
時間領域における入力信号とFIR係数列の畳み込み演算は、
周波数領域におけるFFTされた入力信号とFFTされたFIR係数列の各項乗算に対応する。
つまり時間領域でのFIRフィルタ係数をFFTしたのが周波数領域でのフィルタ特性。

> FIRの方が処理速度が速いが、後者の方が精度が高い(遷移周波数帯域幅が狭い)結果が得られる

FIRはn^2 FFTはnlognなのでFFTの方が速い。

周波数領域での直接設計なら遷移周波数帯域幅も何もスパっと切れるけど、
実際にはあんまり急峻に切ると時間領域のFIR係数の収束が悪くなって(要するに
Sincに近づく)、逆に打ち切り誤差が出やすくなったりして、そう簡単にはいかない。

285 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:01:03 ]
>>283 MP3でやってるように1/2 づつ窓関数をかけてズラシテフィルタをかけた後で合成すれば誤魔化せる
という事なんだけどうけど、やっぱり低い周波数にひずみが出るけどなあ

286 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:06:17 ]
「ズラシテ」フィルタってなんだろと思ったのは漏れだけでいい。

287 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 20:44:38 ]
>>285
ヒント: Time Domain Alias Cancellation (TDAC)

288 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 23:33:29 ]
ズラシテフィルタ=comb filter



289 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 00:15:00 ]
>>288
面白いがこの流れでそれはないww

290 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 10:38:11 ]
こういう事だろ? たとえばFFTのサイズを4096としたら
1024毎に分けて、1ブロック毎に、 2ブロックを取ってくる。
それに窓関数をかけるけど、このときに (1-cos)/2 みたいな 1ブロック分ズレたものと加算するとフラットになるような窓関数を使う。
で、これにFFTをかけてフィルタをかけて、逆FFTして、1ブロック前の分と加算して出力してゆく。

問題は、フィルタをかけて戻した結果が、はじめと終わりがキチンと0になって戻ってればいいけど
そうじゃないとこれがノイズになる。
だから再度窓関数をかけられるように 最初にかける 窓関数を √(1-cos)/2 つまり半角公式でsinになるわけだけど
これを2度かけると確かに戻るけど、窓関数としての性能がだいぶ悪くなる

291 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:16:44 ]
>>290
短時間FFTだね。2回掛ける方法の場合、有名どころがsin窓とかVorbis窓。
でも、FFTサイズ4096なのになんで1024ずらしで使ってるの?
2048ずらしで十分だと思うけど

MDCTで使われるTDACは、処理ブロックを重ね合わせるまで同じだけど、最初の段階で、
重ね合わせた部分でプリエコー・ポストエコーが最終的に相殺されるように処理するのが違う。

292 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:21:33 ]
あ、あと、窓関数の性能が悪いっていってるけど、
目的に合わせたトレードオフだから、一概に良い悪いは言えないと思われ
周波数分解能なら矩形窓最強ってことになる。

293 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:51:35 ]
音響レンズのシミュレーションをしてみようと思うのですが
どこから手を付けていいのやらわかりません


294 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 00:56:29 ]
いまの話では用途が解析じゃないから、矩形窓はありえないでしょうけど


295 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 01:23:37 ]
用途以前にまず何の性能か言わないと意味無い

296 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 19:59:27 ]
AGC、オート・ゲイン・コントローラが必要で、Waves MaxxVolumeは高くて
買えないため自作(VSTでもオフラインでも)しようかと思うんですが、
原理としては固定ゲイン+超長アタック/リリース(10秒〜)の
先読みリミッタという理解で正しいでしょうか?

297 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 21:38:30 ]
AGCってけっこう大雑把な呼び名で、
単にゲインアップ+リミッターだったり、RMSコンプ+リミッターだったり、
もっと別のアイデアが入っていたり、、、いろいろのような
思うように作ったらいいんでは。
ある程度まともなの作るなら先読み(リアルタイムなら出力の遅れだけど)は必要だろね。

ま、フリーのコンプやリミッターもいろいろあるけどねえ。

298 名前:デフォルトの名無しさん mailto:sage [2007/11/26(月) 23:35:05 ]
どこで質問すればいいか分からなかったので、ここで質問させてください。
フーリエ変換の本を読んで、自分もWAVEファイルを読み込んで試してみたいと思ったのですが、
肝心のプログラミングがさっぱり分かりません。
Turbo C++でやろうと思っているのですが、WAVEファイルの読み込み方も、読み込んだデータの処理の仕方も
実際にFFTを行う方法も全然分かりません。
C++自体の使い方は基本的な命令文は知っていますが、マルチメディア関連はやったことがないです。
実際のプログラミングの仕方や、参考になる本など教えていただけたら幸いです。



299 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 00:00:52 ]
あきらめたら?

300 名前:298 mailto:sage [2007/11/27(火) 02:06:25 ]
ありがとうございました。もうあきらめます。

301 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:05:16 ]
waveの読み込みぐらいgoogleに聞いてみればいいのに

302 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:32:44 ]
ttp://www13.plala.or.jp/kymats/study/multimedia.html


303 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:46:57 ]
釣りだろ? jk

304 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 06:14:46 ]
>>297
TDの最後で、全体の音量をオートメーションで調整していくのが面倒、
というのがあって、楽したいなぁと思いまして。
とりあえず先読みリミッタ式で作ってみたところ、やはりレベルの急な変化にはついて
いけないことが多いですね。かといってアタックを短くすると数秒のポンプになりますし。
大雑把に手動調整、細かいところは自動調整って形で運用してみます。
ありがとうございました。

305 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 09:15:55 ]
もしかしてみなさんはFIRだのFFTだのと言った物は既成の物があってそれを利用しているのでしょうか?

306 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 10:03:54 ]
>>305
定番もののソースはどこにでも転がってる。流用してるやつもいるだろうよ。

307 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:22:13 ]
パソコンの場合、転がってるのを使ってもいいし、自作しても何倍も速度が違わない

DSPなんかの場合、メータが必死ならFFTのライブラリなんかも公開してくれる
そうでないと当然、自分で作りこまないといけない。


308 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 13:08:48 ]
理系じゃない高校生ぐらいの数学知識でフーリエの冒険読んでみて5日くらいでFFT書けたよ。
多少あやふやなとこもあったけど。
ただしゲーム作れる程度のC言語の知識はあった。
実際にやってみて詰まったところ質問しないと意味ないよ。



309 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 14:34:09 ]
社会人になってだんだん時間なくなって、ライブラリ探すところから
始めるようになった。どうしても無かったり、仕様がゴミだったら自分で書くけどね。
目的が、使いたい機能を最小の手間で作る(で、使う)、になってるからなぁ。

310 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 15:41:45 ]
>>308先生
そのFFTソースを開示してください
ついでに chirp-Z transformも作ってください

311 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 21:32:36 ]
単にFFTを使いたいだけだったら(プログラム作成が目的でないのなら)
Scilab か GNU Octave を使ったら?
FFT機能は標準装備だし、確かWAVファイルの読み書きも出来たはず。

312 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 00:00:55 ]
まそれいっちゃうと他にも選択肢はたくさんあるけどな。
Mac OSなんかはSIMD使ってアクセラレートされたFFTライブラリが標準で提供されてたな。

313 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 03:37:54 ]
FFT(笑)

314 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 04:39:36 ]
308じゃないが、だいぶ昔に書いたFFTのコードとサンプルアプリをようやっと発掘してきたが・・・そういう空気じゃないなw

315 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 10:09:13 ]
FFTのライブラリって結構いっぱいあるけど
定番とかオススメってある?


316 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 10:19:50 ]
定番は自作。
オススメも自作。 
FFTそのものは20行もあれば書ける。
ビット逆順とか入れても40行。
面倒だったり頭を悩ませるのはソコじゃない。

317 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 10:35:29 ]
FFTで有名な場所
www.kurims.kyoto-u.ac.jp/~ooura/fftman/index.html

Delphiなら
pc.2ch.net/tech/kako/993/993457354.html
ここの207以後。


318 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 11:58:53 ]
完全自作にこしたとはないけれど、
十分な完成度というか性能というか(速度面とか)出すとこまで含めると、
それなりに時間と労力いるよね?
そこまでコミットできないし、結果が得られれば良いヘタレな俺は
やっぱりライブラリ活用でし・・・

(でもそのためのライブラリ



319 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 12:14:43 ]
コード見れば判るだろうけど、
FFTそのものの速度はチューニングしてもしなくても2倍も違わない。
というかチューニング出来る要素はそんなにない。
仮に2倍違ったとしても、パソコンの場合、それでどうしたのって程度の差でしかない。
リンク先のように最大の素数を求めてるとかならともかくさ


320 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 12:30:14 ]
SIMD化するだけで数倍速くなるよ。
ただ、PC上での話なら5年前のCPUですら素のサンプルをそのまま使っても十分な性能出てたけどね。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef