サウンドプログラミン ..
[2ch|▼Menu]
286:デフォルトの名無しさん
06/11/05 00:01:03
linuxでC言語使ってサウンドプログラミングやってます。
録音したデータにFFTをかけたいんですが、
データの渡し方が分かりません。

URLリンク(adlib.rsch.tuis.ac.jp)
録音は↑のプログラムをベースにしています。
どなたかアドバイスをお願いします。
説明不足だったらすみません。


287:デフォルトの名無しさん
06/11/05 00:14:45
>>286
> linuxでC言語使ってサウンドプログラミングやってます。
> 録音したデータにFFTをかけたいんですが、
> データの渡し方が分かりません。

ここで聞くような内容じゃないだろ。
プログラム初心者板にでも行った方が幸せになれる。

288:デフォルトの名無しさん
06/11/05 00:25:33
read したとき bufに指定のフォーマット、サイズで
データが納まってるのでそれを処理すればよい。

289:デフォルトの名無しさん
06/11/05 01:01:41
>>287
すいません。

>>288
ありがとうございます。
解決しました。


290:デフォルトの名無しさん
06/11/05 02:00:31
あるmp3のファイルの波形データをサンプリングするフリーソフトってありますか?
time WavAmp
1   1.235
2   -0.256
3   8.242
4   -0.319


みたいな感じで、テキストデータに保存できるソフトです

291:デフォルトの名無しさん
06/11/05 02:12:00
>>290
質問する板が違います
二度と来るな

292:デフォルトの名無しさん
06/11/05 02:13:06
またきちゃいました(>_<)
質問する板ってどこ?

293:デフォルトの名無しさん
06/11/05 02:41:50
>>292
自分で作ればこの板でおk

294:デフォルトの名無しさん
06/11/05 03:12:10
>>293
実は自分でもジャンルがよく分かってないんです。
フーリェ変換や波形分析するのはここのスレの人なのかなって
スレ一覧見て思ったので聞いてみたのです。
完全体セルの「笑えよベジータ」って声があるんだけど、それをフーリェ変換したら
どうなるのかなと思ったもので。

フーリェ変換のプログラムは持っているので、
あとは時間きざみごとの波形データが数値として取れれば…

295:デフォルトの名無しさん
06/11/05 03:18:53
>>294
wavか何かに変換すればいいんじゃね?

296:デフォルトの名無しさん
06/11/05 03:51:06
>>295
wavに変換すれば解析可能なソフトがあるってことですかね?
何しろ、サウンドプログラミングはズブの素人なのです。

確か、数秒のファイルでもwavにすると500KBくらいになりますよね。
プログラムのソースで500KBって結構なデータ量になります。

音楽データにどのような情報が入っているのかは分からないのですが、
ただ、欲しい情報は「波のきざみ幅」と「きざみ幅ごとの振幅」の
二つのデータなのです。

単純に波の振幅と刻幅を抽出するソフトがあれば紹介してもらいたいのです。
プログラム板一覧を見て、このスレの人なら知ってる人がいるのかなと思って質問しました。

297:デフォルトの名無しさん
06/11/05 03:59:53
ソフトウェア板辺りで質問スレ探すかLinux板で同系列のスレ探しなさい。


298:デフォルトの名無しさん
06/11/05 04:02:59
了解しますた。

299:デフォルトの名無しさん
06/11/05 19:18:27
フリーソフトを使う事をプログラミングだと思ってるのか

300:デフォルトの名無しさん
06/11/05 22:32:01
>>299
バイナリから直に数値データって取れんの?

301:デフォルトの名無しさん
06/11/05 22:59:31
>>300
普通に取れるけど、取れても取れなくても、
フリーソフトを使う事をプログラミングとは言わない。

302:デフォルトの名無しさん
06/11/06 12:40:47
>>301
普通ってどうやるの?

303:デフォルトの名無しさん
06/11/06 13:06:21
>>302
普通にバイナリファイルを読み込めばいい。
バイナリファイルの読み込み方はスレ違い。初心者スレにでも池。
音声ファイルのフォーマットが知りたければぐぐれ。

304:デフォルトの名無しさん
06/11/06 13:20:44
>>303
どの言語がお勧め?

305:デフォルトの名無しさん
06/11/06 13:45:23
>>304
日本語でおk

306:デフォルトの名無しさん
06/11/06 14:00:48
>>304-305
吹いたw


307:デフォルトの名無しさん
06/11/06 14:28:46
>>303
ほんとに知ってて言ってるのこの人?

308:デフォルトの名無しさん
06/11/06 14:39:36
>>294
ソフトを自分で作ってやるなら
1、とりあえずMP3ファイルを 16bitWAV形式に変換して保存しよう(ツールは探してね)
2、WAV形式のファイルをバイナリでオープンして、(RIFF+チャンク)で検索してデータを取り出そう
3、かけたいFFTのサイズ以下になるように窓関数をかける -->判らなければ検索してね
4、FFTをかける(ステレオなら2変数を複素FFTでやる方法を使うといいよ)
5、周波数成分毎に絶対値を出しそう
  FFTは周波数は比例軸で出るので、大抵は対数軸にしたいと思うので、ココがまあキモになるね

309:デフォルトの名無しさん
06/11/06 14:51:08
で、たぶん >>294のやりたいのは
短時間FFTを使って ソノグラム表示もどきをやりたいのだと思う

310:デフォルトの名無しさん
06/11/06 15:12:33
>>309
短時間FFTはなにかまずい?

311:デフォルトの名無しさん
06/11/06 15:26:54
>>308
あ、ありがとうございます。
これで作業の方針をきめられそうです。

御迷惑お掛けしました。
ありがとうございました。

312:デフォルトの名無しさん
06/11/06 16:03:51
>>310
まずくはないよ。
等Qの特性で分割して表示したいとか言い出すと、短時間FFTだと逆にメンドクサイだけで

313:デフォルトの名無しさん
06/11/06 17:24:35
OpenALのプログラムを勉強したいのですが初心者にも参考になるサイトはありませんか?
環境はOSがWindows2000,IDEはVisualStudio2003です。
まだOpenALのSDKは入れていないのでそのあたりから解説してくれているサイトであると助かります。

314:デフォルトの名無しさん
06/11/06 17:26:21
ググレカス

315:デフォルトの名無しさん
06/11/06 17:31:40
オープンソースだからソース見ればいいよ

316:デフォルトの名無しさん
06/11/10 16:31:33
WindowsVISTAに移行することを考え、今までのDirectSoundベースで組んできた
プログラムを全てOpenALに以降することを考えています。そこでお聞きしたいのですが、
DirectSoundベースのプログラムはクライアントPCにDirectXがインストールされていれば
ハードウェアだろうかソフトウェアだろうが問題なく音を再生することが出来ました。
これがOpenALに移行するとクライアント側のPCには最低限何をインストールしておく
必要があるでしょうか?またクリエイティブのサウンドカード(EAXをサポートしたもの)、
その他のサウンドカード、オンボードサウンド、で違いというのは生じますか?

317:デフォルトの名無しさん
06/11/10 22:49:27
URLリンク(www.openal.org)
公式のメーリングリストで聞けば?

318:デフォルトの名無しさん
06/11/28 01:48:49
a.midとb.midを同時再生するプログラムを書きたいのですが、
変数を二つ用意しても、二つ目を再生するところで
「指定したMIDIデバイスは既に使用されています。開放されるのをまってください」
という警告が出てしまいます。

mmsystem.hを使う方法で解決策はないでしょうか。

319:デフォルトの名無しさん
06/11/28 02:11:07
>>318
MIDIデバイスを二つ用意したら?

320:デフォルトの名無しさん
06/11/28 02:16:24
>>319
MIDIデバイスを二つ用意とはどのようにすればよいのでしょうか?
ハード面でということですか?
環境としては、PCにMIDIインターフェースをつなぎMIDI音源で音を鳴らしてます。


321:デフォルトの名無しさん
06/11/28 03:51:29
>>320
まず環境を書け。
使ってる言語、OS、再生に使用してるライブラリ、最低このくらいは質問時に書いとけ。
それとデバイスの意味がわからないならそこから調べ直せ。

MIDIはWAVEと違って同一デバイスに複数ストリームを流せないから、
MIDIOUTが2ポートあるデバイスで、例えばSC88なりに別々に流すしかない。

322:デフォルトの名無しさん
06/11/30 23:47:20
実験音楽的に、二つのmidiをマージしたいって事では…?

323:デフォルトの名無しさん
06/12/01 00:35:28
まぁそれだったら流す前に自分でトラックをマージしちゃえばいいだけのことだけどね

324:デフォルトの名無しさん
06/12/13 02:15:53
windows系ですけど、
MM_WOM_DONEなどのメッセージ処理中はwaveOutWriteとか使えないって記述をたまに見るんですけど実際どうなんですか。

325:デフォルトの名無しさん
06/12/13 07:45:02
windows系といっても色々。
昔は割り込み=コールバックだったり
タスクスイッチされてなかったりと

326:324
06/12/14 03:35:29
とりあえず95以降。
95で大丈夫ならその後でも大丈夫な気がするんですけど。

327:デフォルトの名無しさん
06/12/14 10:05:40
>>326
95は2000やXPとは根本的に別モノ。

328:デフォルトの名無しさん
06/12/14 13:05:50
95, 98, Me は MS-DOS だと思った方がいいぞ。馬糞にホイップクリーム。

329:デフォルトの名無しさん
06/12/14 18:00:56
アルゴリズムの質問なんですがここでいいですかね?
オーディオストリームのピークホールド処理(過去nサンプル中の最大値を出力)を作っているのですが、
一番安直と思われる方法=過去nサンプルをバッファしといて毎フレームでバッファ内を全サーチ
という方法で作ったところ、ちょっと重いです。高速な方法はないでしょうか。

330:デフォルトの名無しさん
06/12/14 18:26:50
>>329
1.過去の最高値と今の値を比較し、今の値が高ければ最高値を更新し、カウンタを0に
2.カウンタをインクリメント
3.カウンタが一定値を超えたら、過去nサンプル中の最高値を検出し、カウンタをそこからの値に

ってやりかたはどう? nの値によっては比較回数が減るよ。

331:デフォルトの名無しさん
06/12/14 18:53:14
>>330
おー、なるほど、すばらしいです。
聞いてよかった。早速試してみますー

332:デフォルトの名無しさん
06/12/14 22:04:56
>>330
ご報告、
入力波形の傾向によっても負荷の具合が変動するってことになりますが
平均して初めの方法よりかなり速いです。まじありがとうございます。

333:デフォルトの名無しさん
06/12/14 23:09:33
>>330-332
それならば「最高値」を2つ持つようにすればどうだ?
それぞれA値・B値と呼ぶことにする。

1.A値と今の値を比較し、今の値が高ければA値を更新し、カウンタを0、B値を0に
2.カウンタをインクリメント
3.B値と今の値を比較し、今の値が高ければB値を更新、カウンタの値を記憶
4.カウンタが一定値を超えたら、記憶しておいた値に更新、A値にB値を代入し、B値を0に

334:デフォルトの名無しさん
06/12/14 23:10:48
すまん間違えた。
4. を修正

4.カウンタがnを超えたら、(n-記憶しておいた値)に更新、A値にB値を代入し、B値を0に

335:デフォルトの名無しさん
06/12/14 23:12:00
ん、なんか微妙に違うかもしれない。
ともかく、1位だけじゃなく2位も記憶しておけばいいんじゃないかってことだ。

336:デフォルトの名無しさん
06/12/14 23:54:00
>>333
試してみるまでもなくダメっぽいな・・・

337:329
06/12/15 00:04:49
1位の期限が切れたとき、途中で保存しておいた2位を新しい1位とするみたいな感じですよね?
実はじぶんもそうゆうの考えたんですがね、ややこしくてあきらめちゃったんですよね。
そう簡単にはいかなかったような・・・

これって一見とても単純な処理なのに、速いアルゴリズム考えようとすると、
思いのほかアレ?て感じゃありません?
だから330の即レスはけっこう目からうろこですた

338:デフォルトの名無しさん
06/12/15 01:17:37
2位なんているの?
ビデオのメーター見てても2秒毎にリセットしてるだけだよ。

339:デフォルトの名無しさん
06/12/15 02:15:13
本人が満足するのが一番の解でYO

340:329
06/12/15 02:17:36
メーターだったらそんな感じで十分なんでしょうけど、リミッター作ってるとこでして。

341:デフォルトの名無しさん
06/12/15 10:36:30
WAVデータのサンプリング変換って、どーやりますか?
例えば、11025で8ビットのものは、1バイトの音声データの羅列で、
22050で16ビットのものは、2バイトの音声データの羅列で、
22050は、11025の2倍だから、22050を11025にするには、
out[0] = in[1];
out[2] = in[5];
out[3] = in[9];

とやってくだけでOKだと思った。
が、音がザーザーです。


342:デフォルトの名無しさん
06/12/15 10:49:48
>>340
メーターだとこんなやり方もある。
あなろぐ VU メーターっぽい動き。リミッターにも使えるんじゃない?
過去のpeakを減衰させて現在値と比べる方法。
peak = peak * 0.999; // peak = max(peak-k, 0) でもなんでもいい。減衰するように。
peak = max( peak, current_sample);



343:デフォルトの名無しさん
06/12/15 10:52:44
>>341
8bit PCM は、ふつー符号無しデータで、0x00が負の最大、0x80が無音、
0xffが正の最大。


344:デフォルトの名無しさん
06/12/15 10:52:52
>>341
リサンプリング LPF とかでググってみて。
手を抜く場合には単純に out[0] = (in[0] + in[2]) / 2 とか。

345:デフォルトの名無しさん
06/12/15 12:30:44
>>343
いまく行きました。ありがとうございました。
>>344
2バイト値を1バイト値に変換する場合、単に上位バイトを格納すれば良いだけです。
これで、256で除算したことになります。

346:デフォルトの名無しさん
06/12/15 12:32:37
>>345
サンプリング周波数 22050Hz のデータから 11025Hz への変換かとオモタ

347:デフォルトの名無しさん
06/12/15 12:38:08
>>343
16bitPCMは符合有りなんだっけ?

348:デフォルトの名無しさん
06/12/15 12:52:55
22050Hz から 11025Hz にする場合、たんに間引けばいいだけじゃん?
平均取ると何か良くなる?

349:デフォルトの名無しさん
06/12/15 13:10:50
>>347
WAVのPCMに関しては、そう。
それ以外の文脈だと、符号有り8bitや符号無し16bitのPCMももちろん使
われることがある。


350:デフォルトの名無しさん
06/12/15 16:48:16
>348
それだとエイリアシングノイズ乗るでそ。
344のでも1/2以上のリサンプリングで乗るけど。
詳しくはFIRとかIIRとかで調べてみて。

351:デフォルトの名無しさん
06/12/15 17:18:03
>>348
サンプリングレート変換の時はLPFを通して先に高域をカットしなきゃダメ。
中途半端な周波数落としをするときはウェーブレットなんかで補間したほうがノイズが減る。

352:デフォルトの名無しさん
06/12/20 14:26:55
FIRフィルタ(ローパス/ハイパス)のインパルスを
カットオフ周波数をパラメタとしてリアルタイムで生成したいんですが、
どこかにcコードサンプルとかないでしょうかね?
数学を理解して自分で書くのは無理そうでして・・・

353:デフォルトの名無しさん
06/12/20 21:48:52
>>341
幾何学的な手法なら、三次曲線で補完とか、ガウシアンフィルタかける方法もあるぞ。

354:デフォルトの名無しさん
06/12/21 00:15:30
>>352
sinc関数  sinc(x)=sin(x)/(x) にあなたの好みの肩特性の窓関数をかけるだけ
だが、あなたの好みが判りません。

355:デフォルトの名無しさん
06/12/21 00:16:19
>>353
結局全て LPFなのさ

356:デフォルトの名無しさん
06/12/21 01:54:43
>>354
そんなにシンプルな感じなんですか?
でもすいません、sincだけでは意味がわからないです・・・
xはなんでしょう?どこでフィルターの種類やカットオフはどこで決まるのでしょう。
窓はhammingでよいかと思います。

357:デフォルトの名無しさん
06/12/21 07:05:28
判ったよ。手取り足取り教えてくれというわけだ。
sincは検索用のキーワード これで検索しろって意味だ

w:=2*π*f0/fs として
xが0でなければ sin( x * w) /x xが0の時 w
xを整数で±の窓関数の範囲で、窓関数を掛け算

で,ゲインがπあるから、それは除算するし、窓関数のゲイン分も掛け算すると

358:デフォルトの名無しさん
06/12/21 07:14:27
フィルターの種類は、実際に係数を設定してどんな特性になるか見てみりゃいいだろ
理想LPFと理想HPFは 足せばフラット = 1 になるから 中央値以外は符号が反転するだけだ

359:デフォルトの名無しさん
06/12/21 10:34:01
>>355
そうなんだけど、フーリエ変換しないでいいからとっつきやすいかな、と。

360:352
06/12/21 15:28:35
>>357-358
おしえていただいた内容と、徹夜でネットをしらべまくった結果、
数学はさておき、無事うまく動作するコードが書けました。
思ってたよりシンプルなコードになったので驚きです。
ハイパスはローパス用のインパルス応答の振幅が反転された形になるんですね。
プログラムが生成したインパルス応答からフィルタ特性を解析したところ、特性も良好でした。
どうもありがとうございました。

361:352
06/12/21 21:24:16
すいません、ハイパスについては間違えてたみたいですね・・・

362:デフォルトの名無しさん
06/12/21 23:33:28
サンプリングレートが44100/1secだとすると、この場合の1sec/44100の単位はなんて呼称すれば良いんでしょうか

363:デフォルトの名無しさん
06/12/21 23:55:15
1sec/44100 → (1/44100)秒

364:デフォルトの名無しさん
06/12/22 01:01:27
sec per samplingrate?

365:デフォルトの名無しさん
06/12/22 01:48:01
いちサンプル

366:デフォルトの名無しさん
06/12/22 03:34:30
sample per rate

367:デフォルトの名無しさん
06/12/22 07:19:21
>>361
もう判ったと思うけど 中央の係数のみ 1-a の関係になって、他の係数は負数にすればいいだけ

368:デフォルトの名無しさん
06/12/22 13:42:29
ASIO SDKのhostサンプルがシンプル過ぎるのもどうかと思う今日この頃。
やっと音が出た…orz

369:369
06/12/23 22:12:57
なんかディスクI/Oが少しでも集中すると再生が途切れる…。
やっぱりスレッド使って処理を分けないとダメか。

370:368
06/12/25 10:56:31
なんか適当にスレッド作って
読込処理を非同期にして
少し多くバッファリングしたら
飛ばなくなった。

出来たプログラムはwavの非圧縮PCMしか
再生できないけどなんだか嬉しい。

371:デフォルトの名無しさん
06/12/25 22:03:51
ゲームに関して何だけどPCにマイクを接続して喋ってるんだけど
EAXを使ったゲームを起動するととたんに俺のヴォイスにエコーが
かかるようになる。どうもそのPCゲームがEAXを使っているとそれに
つられてマイク入力の音声にもエコーみたいな効果が強制的に
かけられてしまうらしい。これって現状仕方がないことなん(´・ω・`)?

372:デフォルトの名無しさん
06/12/26 00:08:53
>>371
板違い。

373:デフォルトの名無しさん
06/12/26 02:36:50
>>372
ゲーム系のサウンドプログラムもこのスレの範疇かと。

374:デフォルトの名無しさん
06/12/26 05:49:50
サウンドプログラム? どこが?
ゲームの設定かOSの設定だろ?

375:デフォルトの名無しさん
06/12/26 07:49:50
>>371
ゲーム作ってるの?

376:デフォルトの名無しさん
06/12/26 10:06:05
>>371
非サラウンド環境でEAXを使ったら、そらエコーがかかっただけみたいになるがな。

377:デフォルトの名無しさん
06/12/26 15:12:35
>>371
クリエイティブのサウンドカードだろ?
仕様だ。

市場を一社独占させるとどうなるかの好例だな。

378: 【吉】
07/01/01 03:43:35
あけおめ♪

379:デフォルトの名無しさん
07/01/01 13:25:07
黙れよ

380:デフォルトの名無しさん
07/01/11 20:06:07
…FFTで… いや、ごめん。 いいや……。(´・ω・`)

381:デフォルトの名無しさん
07/01/15 21:13:43
ぉぃぉぃ…

382:デフォルトの名無しさん
07/01/16 20:41:58
低速フーリエ変換ってないの?

383:デフォルトの名無しさん
07/01/16 23:35:48
DFT?

384:デフォルトの名無しさん
07/01/17 00:14:21
筆算

385:デフォルトの名無しさん
07/01/17 10:20:29
>>382
バタフライ演算をしなけりゃ低速だよ。

386:デフォルトの名無しさん
07/01/17 16:11:17
普通にDFTでええんちゃう?

387:デフォルトの名無しさん
07/01/18 21:42:16
>>6 >>13 >>17
/*
    Risa [りさ]   alias 吉里吉里3 [kirikiri-3]
     stands for "Risa Is a Stagecraft Architecture"
    Copyright (C) 2000-2007 W.Dee <dee@kikyou.info> and contributors

    See details of license at "license.txt"
*/
/*
     Phase Vocoder (フェーズ ボコーダ ; 位相ボコーダ)の実装
 
     参考資料:
 
         URLリンク(www.panix.com)
             Phase Vocoder のチュートリアル。「ミュージシャンにもわかるように」
             書かれており、数学音痴フレンドリー。
 
         URLリンク(www.dspdimension.com)
             無料(オープンソースではない)の Time Stretcher/Pitch Shifterの
             DIRACや、各種アルゴリズムの説明、
             Pitch Shifter の説明的なソースコードなど。
 
         URLリンク(soundlab.cs.princeton.edu)
             real-time phase vocoder analysis/synthesis library + visualization
             ソースあり。
*/

388:デフォルトの名無しさん
07/02/13 23:56:25
WAVで16bitの場合はサンプルごとにshort型にいれてるんだけど、
24bitの場合はどうすんの?
32bitは各サンプルをfloatにぶち込めばOK?


389:デフォルトの名無しさん
07/02/14 00:31:38
longでええやん

390:デフォルトの名無しさん
07/02/15 07:11:45
パソコンで処理をする目的なら、入力が何bitだろうと64bit浮動小数点で処理するのが楽だろう

・・・・整数演算の方が早いというような事を言いたい人なら別だが


391:デフォルトの名無しさん
07/02/15 11:31:37
>>390
16bitはshortに入れているのに?

392:デフォルトの名無しさん
07/02/15 12:19:02
wavファイル(RIFFフォーマット)の話だろ?
WAVE_FORMAT_PCM(=1)は整数の8bit,16bitしか定義されてないんじゃね?

393:デフォルトの名無しさん
07/02/15 13:29:51
しかしBitsPerSampleにはいくらでも入れられる
入れるだけなら自由だ

394:デフォルトの名無しさん
07/02/15 17:36:11
本気で言ってるなら池沼。

395:デフォルトの名無しさん
07/02/16 00:41:30
内部は64bit浮動小数点、外部とのやりとりは24bit整数、あたりが標準的?

396:デフォルトの名無しさん
07/02/16 04:09:13
>>395
全然。
例えばそこらのアプリの音声再生プラグインは、音質よりも軽くしたい場合が多いでしょ。

397:デフォルトの名無しさん
07/02/16 04:11:09
逆に、音声処理で精度が欲しいってんなら、内部80bit浮動小数点が使える環境を利用するだろうしさ。

398:デフォルトの名無しさん
07/02/22 20:54:32
複数のPCMを単一のPCMにミックスしたいんだけどどうすりゃいいのかわからない。

399:デフォルトの名無しさん
07/02/22 22:06:11
>>398
加算した後でレベル調整でもすればいいんじゃね?

400:デフォルトの名無しさん
07/02/22 23:50:53
レベル調整は先にやったほうが良くない?

401:デフォルトの名無しさん
07/02/23 07:55:27
PCMは8bitか16bitだから 32bit型に一度入れてから割り算すればいい

たとえばA,B,Cを 30%:20%:20% でMIXする場合
int vrA=30;
int vrB=20;
int vrC=20;
int total=vrA+vrB+vrC;

int w= A*vrA+B*vrB+C*vrC;
return w / total;
}




402:デフォルトの名無しさん
07/02/25 13:09:25
>>399-401
みんなありがとう。
やっぱ足して割ればいいのか。

403:デフォルトの名無しさん
07/03/15 11:42:48
ステレオWavデータのPAN設定のやり方教えてくださ
ぐぐったけど、どうも該当するものが発見できなかったんで

404:デフォルトの名無しさん
07/03/15 20:48:50
左右に振るだけじゃないの?

405:デフォルトの名無しさん
07/03/15 21:06:13
たぶんパンを振るとき左右それぞれにどういう演算するかって話だろ
その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
この場合だとセンターの時音量下がって聞こえるけどね。
DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
この場合センターの時音が大きく聞こえる

406:デフォルトの名無しさん
07/03/15 21:22:13
>>405
> その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
> この場合だとセンターの時音量下がって聞こえるけどね。

つか、左寄せの場合もセンターの場合も右寄せの場合も同じ音量

> DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
> この場合センターの時音が大きく聞こえる

この場合は正解。センターの時は、左寄せ, 右寄せの時の倍 (+6dB) になる

407:デフォルトの名無しさん
07/03/15 21:29:00
>>405
・音のエネルギーは振幅の2乗に比例する
・聴覚は対数特性
この辺がヒントになるかも。

408:デフォルトの名無しさん
07/03/15 22:24:48
ハードウェア・ミキサーだとセンターは3dB落ちがデフォ。
PAN振りっきりならスピーカーは1本しか鳴らないけど
センター時は2本同音量で鳴るから音量は3dBアップ。
これを補正するための3dBダウン。
これでL-C-RとPAN移動させても横一直線で移動する。

6dBダウンは再生/演奏時にモノ・ミックスされるケースを想定してのもの。
(回路内のミックスは電圧なので6dBアップ)
ハードウェア・シンセはモノ・アウトも装備する関係でそうしてあると。

409:デフォルトの名無しさん
07/03/15 22:36:58
>>406
ん?センターは-3dbでしょ?
20*log(sqrt(0.5^2 + 0.5^2)) = -3.010299956639811
でいいんだよね?
だからDirectXの場合だと+3dbだったと前勉強したときは思ったんだけど・・・
間違ってる?

410:デフォルトの名無しさん
07/03/16 02:09:49
正解は >>407-408

411:デフォルトの名無しさん
07/03/19 12:27:37
誰かDAW作ってくれ

412:デフォルトの名無しさん
07/03/20 10:48:51
>>411
frieve

413:デフォルトの名無しさん
07/03/31 10:17:20
エフェクトのコーラスのうねりは時間で変化させるんですか?
それともpitchを変化させるんですか。

414:デフォルトの名無しさん
07/03/31 10:39:30
コーラス:
入力音を二つに分岐させる。
片方にモジュレーション(周波数変調)をかける。
二つを加算して出力。

415:413
07/03/31 10:55:39
コーラスとフランジャーは モジュレーション大きさだけの違いだけなんですか?


416:デフォルトの名無しさん
07/03/31 11:45:55
・モジュレーション幅
・モジュレーション速度
・フィードバック量
・分岐させた二つの加算割合
などを変化させることによってコーラス/ビブラート/フランジャーなどが作れる。

417:デフォルトの名無しさん
07/03/31 11:50:26
>>416
それの大きさで呼び名が変わるってこと?
なんどもすんません。

418:デフォルトの名無しさん
07/03/31 12:30:34
そういうこと。
モジュレーション幅が広めで速度が速いとコーラスっぽくて、
モジュレーション幅が狭めで速度が遅いとフランジャーっぽい。
フランジャーの場合はフィードバック量も関係してくることが多い。


419:413
07/03/31 12:34:58
サンキュです

420:デフォルトの名無しさん
07/03/31 12:36:08
いえいえ。

421:デフォルトの名無しさん
07/04/01 18:59:37
ぉぃぉぃ

一応混じれ酢すると
ふらんじゃー: 数ms以下の短いディレイに変調をかけ、元音とミックスして、
         中〜高音域のコムフィルター効果でメタリックな響きを出す
こーらす   :数十〜ms程度の比較的長いディレイに変調をかけ、元音とミックスして、
         (たぶん超低域のコムフィルター効果で)アンビエントな音のウネリを出す


422:418
07/04/01 22:34:53
>>421
補足サンキュ。418では変調速度と変調幅だけしか言及してなかった。
(変調幅を大きくする≒ディレイ値を大きくしないといけない
 という勝手な理解をしてしまったよ。)
確かにディレイ値のほうが大きな影響があるな。

423:デフォルトの名無しさん
07/04/02 00:32:07
だけど、コーラスのきついやつがフランジャー、って理解でそう間違ってないでしょ?

424:デフォルトの名無しさん
07/04/02 00:33:53
おまぃに関してはおまぃの判断に任せる

425:デフォルトの名無しさん
07/04/02 01:31:19
コーラスのディレイの短いやつがフランジャー、って理解で間違ってない。

426:413
07/04/02 12:28:37
勉強になります。

427:418
07/04/02 16:25:13
理工系の大学とかで学術論文にアクセスできるのであれば、
Jon Dattorro. "Effect Design, Part 2: Delay-Line Modulation and Chorus". Journal of Audio Engineering Society, October 1997.
とか、あとは「DAFx」という書籍もエフェクト関係の勉強になる。

両方とも英語なのがタマニキズ。

428:デフォルトの名無しさん
07/04/02 17:10:08
>>425
登場経緯的には、フランジャーが先だよね? 浅めに(?)かけてみたら 12 弦っぽい
効果があって、それ目的でパラメーター調整しやすいようにアレンジして製品化した、と。

429:413
07/04/04 09:16:25
>>427
DAFxはいろいろ載ってておもしろそうですね。
Jon Dattorro  Effect Designは見れなかった。残念
ただ、英語はダメなので気長にみてみます。

430:デフォルトの名無しさん
07/04/04 09:21:13
基本的にはパラメーターのレンジを変えた、同じエフェクトと思っていいと思うけど、
実際には目的の違いから異なるアイデアを盛り込んでる場合が多いと思うよ。
たとえばコーラスはぶ厚く広げるのが目的だからディレイラインがすごく多いものとか、
変調が周期波形じゃないものとか、イロイロと。
そのへんがエフェクターの個性になってくわけだが。

431:デフォルトの名無しさん
07/04/06 04:03:47
今までDSP買ってエフェクターやら作ってたんだけど、ふと思った。
いい加減今のPCならリアルタイム入出力のFIR処理くらい出来るんじゃないかと。
これが出来ればあらかじめフィルタ係数用意して切り替えるようにすれば
ソフトウェアエフェクターってできそうだし。
で、作って見たがあえなく撃沈。音途切れ途切れ。

何が問題なんでしょう??
100万タップくらいのFIRなら余裕で動くと思ってたのに。

432:デフォルトの名無しさん
07/04/06 07:58:42
あまり詳しくないのであれなんだが
とりあえずSSEは使った?(PowerPCならAltivec
大きいFIRはFFT利用して劇的に計算コスト減らした実装ができるんじゃなかったけか?

433:デフォルトの名無しさん
07/04/06 08:02:06
ちなみにリアルタイム入出力のコンボリューションリバーブとか普通にありますよ。

434:デフォルトの名無しさん
07/04/06 09:20:49
たいてい432の言うようにFFTかましてるよね。だからレイテンシーが問題になることも。

435:デフォルトの名無しさん
07/04/06 12:33:04
>>431
ハードウェアのことあんまり詳しくないんだけどフィルタ係数や入力信号のバッファ
がL1 L2 超えて外部になると一気にメモリ転送の問題が発生する気がする
メモリのレイテンシーって結構デカイ気がするけど詳しい人教えて

>>433
ちょっと俺も興味あるんだけど そのソフトの詳細希望

>>434
リアルタイムでFFTだとレイテンシーもだけどブロック間の繋ぎがどうなるんだろ


436:デフォルトの名無しさん
07/04/06 13:31:52
>そのソフトの詳細
今時のPCの音楽制作環境のことまるで知らないの??
コンボリューションリバーブなんかはここ数年流行っててすでに一般的。たくさんあるぞ。
「コンボリューション VST」とかでぐぐってみなはれ

437:デフォルトの名無しさん
07/04/06 14:05:58
>>436
こういうのってリアルタイム入出力できるの?

438:デフォルトの名無しさん
07/04/07 00:06:50
>>435
ブロック間のつなぎはoverlap-and-addでやるだけなので、大丈夫。

439:デフォルトの名無しさん
07/04/07 07:49:56
>>437
DSPプログラミングやってて、今時そうゆうの知らないことのほうが驚きですよ。
音楽制作と無関係な業界でやってる技術者だったりすると案外そうゆうもんですかね。

「DSP」っていう言葉も昔は主に専用チップ、Digital Signal Processorのことを指していたけど、
汎用PCによるリアルタイム処理が台頭してきた今は、
意味が広がってデジタル信号処理全般、Digital Signal Processingというニュアンスですよ。

440:デフォルトの名無しさん
07/04/07 08:12:27
FIRネタの書き込みは、どの板も具体的な話が欠落してるなw

厨?

441:デフォルトの名無しさん
07/04/07 08:18:37
>440
単純に大量のかけ算するだけなら簡単だが、
FFT応用するとかいうと詳しい人なかなかいないんでしょ。
そうゆうおまいは?

442:デフォルトの名無しさん
07/04/07 08:23:46
>>441
それも既出。

443:デフォルトの名無しさん
07/04/07 10:12:17
>>435

ここでは板違いかもしれないけど、
たとえば、foobar2000のイコライザは8192Tapの
firフィルタで、畳み込みにfftを利用している。

foobar2000のプラグインのconvolverは、大きな
インパルスファイルを指定してやれば、
数万Tapの畳み込みも音がとぎれず再生する
こちらも畳み込みにfftを利用。
(Tap数は表示されるFFT Length の半分)

firフィルタはどうしてもレイテンシがでかくなるから
リアルタイムの演奏や画像との同期は難しいけど
パソコン上のファイルを変形させるならかなり使える。

「fft overlap save」でググるよろし。

こことかは、お勉強の過程が書いてあって
参考になるかも。

URLリンク(junzo.10gallon.jp)





444:デフォルトの名無しさん
07/04/07 15:15:53
結局のところ今のPCじゃ時間軸での畳み込みはまだ無理ってことでFA?

多分 436はその辺は考えてなかったんだろな
知識ひけらかす前に 431の質問を汲み取ってやれ

445:デフォルトの名無しさん
07/04/07 15:43:51
すいません、畳み込みリバーブのプラグインとかは時間軸での畳み込みとは違うんですか?

446:デフォルトの名無しさん
07/04/07 16:45:19
今手元に可逆圧縮済みrawがあって、これをwavにしなければならないんですけど、
・rawデータはwavのヘッダ無し波形
・どういう形で圧縮されているのか分からないのでデコードしようがない

一体圧縮済みrawはどういうフォーマットなんでしょうか?

447:デフォルトの名無しさん
07/04/07 17:22:42
>>445
畳み込みリバーブと書いてあっても
実際はインパルス応答 入力信号を両方FFTしてオーバーラップ法を使った
周波数軸での畳み込みをしているのでは無いかということ

この辺りは説明書とかみると書いてあるのかな?

実際に最近のCPUで誰か真っ当な時間軸での畳み込みやって
何タップくらいいけるのか測定してみてくれYO

ぉ サウンドプログラミグっぽくなってきたなおぃ

448:デフォルトの名無しさん
07/04/07 17:25:30
あ もちろんリアルタイム入出力での話ね
オフラインなら何億タップだろうがメモリがあるかぎりいけるだろうからw

449:445
07/04/07 19:29:09
>>447
さらにすいません、
真っ当な時間軸での畳み込みというのと、FFTを使った周波数軸での畳み込み、
というのは結果が違うのですか?
FFTを使った方法は軽いけどあくまで別物なんですか?

450:デフォルトの名無しさん
07/04/07 21:14:20
>>449
(精度の問題を除いて)時間軸畳み込みと全く同じ結果が得られる方法がある。

451:デフォルトの名無しさん
07/04/07 21:32:48
素人談義状態だな

452:445
07/04/07 22:14:09
>>450
なるほどです。
ちょっと調べてたらなぜ畳み込みにFFTが使われるのか、とてもわかりやすい説明みつけました。
URLリンク(www.nextftp.com)

周波数軸での畳み込み?、、、というのにあたるのかどうかよく理解できないのですが、
とにかく概算で約200倍速く計算できるようなこと書いてありました。
自分はFFT自体あまり理解できてないのですが、これ読むと魔法のようすね。

453:デフォルトの名無しさん
07/04/08 02:24:08
>>452
オーダーが違うからね。
FIR 長を N として、
普通に時間領域で畳み込みすると、O(N^2)
FFT 使うと、O(N lon N)。

長さ N で FFT しちゃうと、そのサイトにある通り、循環畳み込みになっちゃうから、
実際には長さ2倍にして、半分 0 埋めてとかやる。
で、FFT + 周波数領域で掛け算 + 逆FFT ってなるんだけど、
2N log 2N + N + 2N log 2N とかで演算回数かかるけど、
O(N log N) だから、何千・何万タップとかになると圧倒的にこっちが早い。


454:デフォルトの名無しさん
07/04/08 05:27:24
>>451
煽りはいいから >>447 の試してソース公開してみろって

455:デフォルトの名無しさん
07/04/08 10:04:31
>>447
わざわざ最新のCPUを買わなくなって計算の見積もりは出来るだろ。
そりゃ、DSPと違って、PCの場合は演算能力の見積もりは難しいけど
44.1Kで 100万(1M)となると、モノラルで44.1G/Sの積和能力が必要になる
ゲーム機のGPUなんかでは、無理に思えない数字に見えるだろうが
パソコンだと、あと10年程先だろうね

確かに100万となると20bitにもなるわけでゲーム機のような単精度でいくら
高速でも意味はないわけだけどさ。

あ、FFTを補助的に使ってリアルタイムに実現する方法もあるんで


456:デフォルトの名無しさん
07/04/08 11:01:08
聞きかじり&妄想が延々と続きます・・・

457:デフォルトの名無しさん
07/04/08 11:30:08
2^20のFFTを使うとすると 1048576-1000000 = 48576 サンプルが丁度いいサイズになる
1.1秒毎に22秒ほどのデータをFFTして処理するので、計算時間を無視して1.1秒の遅延が必要になる。
計算時間はこのシステムが動く最悪値と考えれば2.2秒の遅延が必要になる

別けて計算する方法は、1サンプルあたりのFIRフィルタの計算は
Σ C[i]*D[i]
たとえば 現在から1万サンプルのデータDaと 99万Dbに別けると
Σ C[i]*D[i] = ΣC[i]*Da[i] + ΣC[i]*Db[i]
ΣC[i]*Db[i]は1万サンプル以上前のデータなので、FFTを使う方法で1万サンプル分を先に計算出来る
残った1万サンプルだけをリアルタイムに計算すればいい
計算量は44100*10000 = 441M/Secなので、今のPCなら不可能な数字ではない

458:デフォルトの名無しさん
07/04/08 12:01:09
URLリンク(www.knufinke.de)

459:デフォルトの名無しさん
07/04/08 15:18:43
>>449

直線畳み込みと循環畳み込みをfftを利用して行うこととは
数学的に完全に等価です。

ですから、数千Tappを超えるfirフィルタの処理を行うとき
時間軸での畳み込み(直線畳み込み)をやるのは
無意味だと思いますね。

これが最強、最有名です。

URLリンク(www.ludd.luth.se)


460:デフォルトの名無しさん
07/04/08 15:53:22
ひたすらゴッグルさんのご神託を貼り付けるだけのスレw

461:デフォルトの名無しさん
07/04/08 15:57:07
この議論、数ヶ月前にも見たw

462:デフォルトの名無しさん
07/04/08 16:32:43
FFTを使う方法でもリアルタイムに出来るというのは前回無かったように思うが?

463:デフォルトの名無しさん
07/04/08 16:49:50
で、この議論のどこら辺でリアルタイム手法が提案されたって?


464:デフォルトの名無しさん
07/04/08 16:54:40
じゃあ 俺も妄想ね。

単精度32bitステレオで扱おうと思うとデータ量だけで
フィルタ係数分左右で1タップ8byte 入力信号とあわせると16byteの記憶領域が必要。
10万タップの時点で既に1.6Mの記憶領域が必要になってしまう。

それがどうしたという感じだが、もしこのデータを外部メモリから読み出そうとすると
最近のメモリで読み出しレイテンシーが10nsくらいだから
信号と係数を逐次読み込んで毎回積和をとるとしたら
1/10000sec が毎回読み出しだけで消費されてしまう時間。
さらにこれに積和時間と入力信号保持用にリングバッファなりしなければならない。
MMXにシフトレジスタ命令はあったはずだが。
まぁこれ考えるとCPUキャッシュから外れるとメモリ読み出し時間
が一番のボトルネックになる気がするんだけど。
10万タップもまったく現実的じゃないよな。
サンプリング8kでギリギリ読み出しが間に合う速度くらいw

とするとL1最低でもL2にデータ保持できる量=最大次数 くらいのノリにならねぇか?

キャッシュも自分でフルに使える分けじゃないし
かなりローレベルなプログラミング技術が要求されるよなぁ


465:デフォルトの名無しさん
07/04/08 17:01:39
何msまでの遅延ならリアルタイムと見なせるだろうか。
30msくらい遅れると明らかに違和感が出るよな。
10msくらいならおk?

466:デフォルトの名無しさん
07/04/08 17:05:21
>>465
そもそも今いっているリアルタイムはそういう意味ではない。

一定量の遅延があるだけで出力し続けれるのならそれはリアルタイム処理。
 入力→演算→出力 
の流れが次の入力が来るまでに終っているかどうか(1サンプル内で演算が終っているかどうか)
がリアルタイム処理の定義だと思われ

467:デフォルトの名無しさん
07/04/08 17:26:36
レイテンシー以前の話かよw

468:デフォルトの名無しさん
07/04/08 17:35:23
>>463
もちろんPCの場合はCODECとの通信がブロックでやってくるから、意味はないのだけど
1サンプル毎に答えを出す手法について提案されているじゃないか?

でも、コレ計算量の削減になるのかな?

256点で考えてみよう。
64点を時間領域で 残りの192点をFFTで行うとする
c0*d0+ ・・・ +c63*d63 とc64*d64+・・・c255*d255
前半は O((N/4)^2)=O(N^2/16) =4096
後半は、64サンプル毎に256点のデータで行えば 64サンプル毎に1回処理するので
4*(2N log 2N + N + 2N log 2N )=4*2*N*( 1+2*log2N) = 4*2*256*17= 34816

うーん

469:デフォルトの名無しさん
07/04/08 17:42:11
>>464
単精度でFFT方式を10万タップで使うと、結果は上位8bitまでしか信用出来なくなる
浮動小数点なので、相対誤差だから十分良いといえば良いのだけどね

あと10万タップくらいならFFTでやれば今のPCならリアルタイム処理は行えるよ
実際やってるし。

だって2秒に1回計算すりゃいいんだから余裕。
素直に書いたルーチンでも1秒に10回くらいは計算出来てるよ。



470:デフォルトの名無しさん
07/04/08 17:56:28
256点でなく、一般化して考えてみる
M分割した1/Mを時間領域で 残りをFFTで行うとする
この方式との比率は、
((N/M)^2 + M*2*N*( 1+2*log(N)/log(2)))/(N^2)

N=2^8ではダメだったが、
N=2^16 M=16を代入すると 約1/50
N=2^20 にすると 1/200 と大きいほど改善するようだ

さらに、細かく分割して効率化すれば、もっと効率上がるのかも

471:デフォルトの名無しさん
07/04/08 18:15:45
計算間違いしてた
こうか?
 (((N/M)+M*( 1+4*log(N)/log(2)))/(N)

N=2^16 M=16を代入すると 約1/12 でしかない


472:デフォルトの名無しさん
07/04/08 18:24:13
10万タップにあてはめてみるとN=16 M=32で約1/20
この時の負荷はFFTだけで計算した場合の100倍近い


473:デフォルトの名無しさん
07/04/08 19:50:03
>>464
確かに時間軸での畳み込みをプログラムで実装するとそこが問題になりそうだ。
ハードのこと全然詳しくないんだが。
というかその後の話が全部周波数軸での話しになってるのが妙にうけた。
あきらかに>>464の話は時間軸での計算なのになw

FFTでの畳み込みは確かに早いんだけど精度とかアルゴリズム的なこと考慮しないといけないから面倒だな。
そういった意味では時間軸での畳み込みの限界を俺も見てみたい気がする。

474:デフォルトの名無しさん
07/04/08 19:55:58
> 最近のメモリで読み出しレイテンシーが10nsくらいだから
> 信号と係数を逐次読み込んで毎回積和をとるとしたら
> 1/10000sec が毎回読み出しだけで消費されてしまう時間。

1/10000[sec]/10[ns]=10^-4/10^-8=10^4[word]

1/10000secって一体なんの話?

475:デフォルトの名無しさん
07/04/08 19:59:18
10万個読み出し * 10ns と思われ リードタイム?

476:デフォルトの名無しさん
07/04/08 20:03:51
10^5[個]×10^-8[sec]=10^-3
10万個なら1/1000がメモリ読み込み時間
10^6[個]×10^-8[sec]=10^-2
100万個なら1/100がメモリ読み込み時間


477:デフォルトの名無しさん
07/04/08 20:28:02
FFTを使おうが、Σdt[i]*c[i]の演算は時間軸での計算だと思うけどな
単にFFTを使って掛け算を高速化しているのにすぎないわけで

>>464
まず、
係数については柔軟性を持たせる為に浮動小数点というのは悪くないが
データは16bit固定小数点で保持すれば十分だろう。
実用的には係数も16bit で十分。
(この場合でも積和累計レジスタには 16+16-1+17=48bit が必要)
その場合、途中係数が0が続く部分が大量に出る。
なぜなら全部が1のデータでも計算結果は2bitオーバフローしてしまうのだから。
だから0の部分をリスト形式でスキップすれば計算量は多少小さくなるかもね

キャッシュについては、
Σc[i]*d[i] は 分解出来るわけだから、たとえば256サンプル毎に
キャッシュに入るサイズで分割して計算すれば、問題ないだろう

478:デフォルトの名無しさん
07/04/08 20:31:31
> データは16bit固定小数点で保持すれば十分だろう。
> 実用的には係数も16bit で十分。

ゲーム用途なら実用的かも。
音楽用途だと精度が低すぎ。
例えばリバーブの消えかけ部分のS/N比が低くなるだろう。

479:デフォルトの名無しさん
07/04/08 20:38:18
>>478
リバーブの場合でも全体にスケーリングすれば十分さ。
逆にどこもかしこも係数が大きい100Kワードの係数があったとすれば
結果は簡単にオーバーフローしてしまう。

全部の係数が+1か-1であってもオバーフローするんだからさ

480:デフォルトの名無しさん
07/04/08 20:41:18
ふーん。
固定小数点+スケーリングって事は、
トータルでは浮動小数点演算なわけだ。

481:デフォルトの名無しさん
07/04/08 20:42:56
あ、ごめん。
データと係数は16bit固定小数でも
内部演算結果は48bitになるっつう話ね。了解。

482:デフォルトの名無しさん
07/04/08 20:46:55
64bitマシンならともかく、現行CPUだと16+16-1+17=48bitを固定小数点で計算するには
桁上げが必要になるわけで、浮動小数点レジスタで計算させた方がいいと思うよ

483:デフォルトの名無しさん
07/04/08 20:48:45
おk

一体なんのための固定小数点だったんだろうね?

484:デフォルトの名無しさん
07/04/08 20:52:21
PCのインターフェースは44.1K 16bitステレオなのだから
16bit固定小数点の選択で何の過不足も無いと思うのだが?

485:デフォルトの名無しさん
07/04/08 20:55:01
もーどーでもいいや。
結論出たら教えてくれ。

486:デフォルトの名無しさん
07/04/08 21:05:08
じゃ、ここまでの勝手なまとめ
1、FFTを使う場合でもレイテンシ1のフィルタは実現可能
   ただし計算量はそれなりに増える
   それでも係数器が巨大ならFFTを使わない方法よりもずっと高速

2、FFTを使わない場合でもキャッシュサイズが溢れる心配については不要
  キャッシュに入るサイズにFFTでレイテンシ1のフィルタを作る時と同じように分割すればいいだけ
  だったらFFT使えよと


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4932日前に更新/170 KB
担当:undef