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


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

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



1 名前:デフォルトの名無しさん [2006/04/21(金) 07:54:35 ]
音のプログラミング処理について語りましょう

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


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

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

178 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 13:34:10 ]
クインケ管のように穴が開いてるのに音が外に出ない現象を 【消す】 と呼んでるという事でいいのでは?

179 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 13:40:07 ]
>>178
クインケ管
ttp://www.geocities.co.jp/Technopolis-Mars/8494/NEWS/ypc147/ypc147.htm



180 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 16:21:53 ]
そこの実験発表、いちいち面白いよな

181 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 17:39:23 ]
消音の原理
www.cepstrum.co.jp/products/anckit/ancbasic.html

まさしくクインケ管の原理で
上流下流と書いてるように、左からの音を消すというより
左からの音を反射している。 つまり仮想の壁を作る技術にすぎない。


182 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 17:47:19 ]
でも 反射するという事は、>>177のいうように 左からの音についてダクトを
ヘルムホルツ共鳴器に換えてしまっているのかもしれない。

183 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 17:55:33 ]
つまり進行方向⇒
A ----++++----++++----++++----++++----++++
B ++++----++++----++++----++++----++++----

A+B なら完全に消えるけど、
スピーカーからの音は左右に反対位相(反対進行方向)で伝わる
++++----++++----++++----++++----++++----
+++----++++----++--++----++++----++++---
++----++++----++----++----++++----++++--
+----++++----++------++----++++----++++-
----++++----++---++---++----++++----++++
この進行波を加算すると、スピーカーの所で反射されているのと同じ

184 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 18:08:53 ]
反射以外の吸音原理:

 ダクトを2又にすれば、片方の通路の音は当然1/2になる。
 つまりそこで反対位相で振幅1/2になるようにスピーカーをコントロール出来れば
 スピーカーがエネルギーを1/2吸収した事になる

185 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 18:34:22 ]
床天井壁が均質な部屋に明かりが灯っている。
明かりを壁が αだけ吸収し (1-α) 反射するとする。

反射した光は再度反射するから  (1-α)+ (1-α)^2+ (1-α)^3 .... と無限に反射する
部屋の明るさは 真っ黒な壁の部屋にくらべて Σ(1-α)^n 倍明るくなる。
αが小さくなると、この倍率はとても大きくなる。
白い壁、明るい色の床の狭い部屋は蛍光灯1灯でも十分明るい。
しかし、壁に黒い学生服をかけるだけで突然暗くなる。
学生服が光を吸収してしまうからだ。

同じ事は音についても言える。 部屋の中で音は壁で何度も反射される故に音は大きくなる。
この原理で増幅された音は、一箇所で吸音するだけで一瞬で小さくなる。
これを電気的に起こせば

186 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 18:38:13 ]
光のように音を吸収できる素材なんてない。



187 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 21:08:44 ]
音のように光を吸収できる素材なんてない。

188 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 22:52:23 ]
観測者の位置でだけ消音状態にしたいんじゃないのか?


189 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 23:27:28 ]
・耳から入る音以外(体が感じる音)をどう消すのか
・既に届いてる音に対して、プログラムで対処するなら>>150の言うように周期性から予測して打ち消すしかない
・上記方法の場合でも環境依存をどう対処するか(マイクとヘッドホンの配置と特性、PCの構成等)

>>143
汎用的な物は限りなく無理に近いと思うけど、
環境依存覚悟で実験してみる価値はあるんじゃね?

190 名前:デフォルトの名無しさん [2006/08/08(火) 01:49:16 ]
音消してくれるエアーカーテンほしいよね。

それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。
超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。
あの技術とか使ってできないかな。

191 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 03:00:21 ]
>>190

>音消してくれるエアーカーテンほしいよね。

音波レンズというものがあるので、焦点が自分の方に来ないようにしてしまえば
エアカーテンに相当するものは可能だと思う

3次元に広がる音をピンポイントで消すには
上で何度か言われている(言ってるひとは勘違いしてるみたいだけど)
逆位相の部分での干渉を利用すれば出来なくはない
ただしピンポイントなので他の場所は静かにならないし
3次元的にはエネルギーも決して無くなる訳ではない


>それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。
>超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。
>あの技術とか使ってできないかな。

すこしずらした非可聴周波数音を二つのスピーカーから発生させて
その二つのベクトルの交わる部分のみずれからくるうなりで
可聴周波数を再現するという話が出たことがあると思う




192 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 07:50:58 ]
>>188
その位置だけ消音といっても、3次元空間内でそういう点を作るのは難しい
もし可能だとしても、そこで定在波を作ってるようなものなので、
節と腹が生じる。 節で音量がゼロなら、腹では音量は2倍になるという事になる。

耳が2つあり音速は330メートル/秒程度なので、300Hz以上では
両方の耳に節が来るような定在波を作る事は出来ない

193 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 08:03:12 ]
右耳と左耳の間隔が〜1m近くあるデカ頭の人キター

194 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 08:06:10 ]
頭の直径が1mもあるわけねぇ〜だろ

  330 [m] / ( 300 [Hz] × 2 ) = 0.505 [m]

>>192の頭の直径は 50cmしかないんだよ。


195 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 08:06:44 ]
↑ 0.55 [m] orz

196 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 08:49:17 ]
>>194
>>192の頭の直径は 50cmしかないんだよ。
充分でかいよ。漏れの肩幅でさえそんなにないよ。



197 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 09:04:39 ]
だから実際実用化されてるらしいでないの。
ただソフトウェアでとなると遅延時間がでかくなるから(一番でかいのはA/D/Aレイテンシー)、
そうとう条件は厳しくなるだろうね。

198 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 09:48:32 ]
-6dB sin(30度)=0.5 だから  330 [m] / ( 300 [Hz] × 12 )  約9cm 
子供の頭?

199 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 09:50:18 ]
そういや180度の場所も節だな

200 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 09:58:03 ]
>>193-194 いいか、お前ら、

0  90 180 270 360

---______---~~~~~~---______---

節  腹 節 腹 節


波長が 1メートルなら 腹はその1/4と3/4のところだ

201 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 10:07:07 ]
そうか、電話なんかは300Hz以下カットしてて、耳の感度が悪いのは 頭の大きさから来てるのか!

202 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 10:07:26 ]
>>197
逆相で音を弱くするので実用化されてる例は、
踏み切り、病院、救急車、消音ヘッドフォン、高速道路、新幹線の線路などなど。

203 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 10:24:50 ]
でも音を単に反射してるのだとすれば、高速道路なんかは高いマンションなんかは逆にうるさくなってるのかも

204 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 11:07:10 ]
>>198
丁度頭の中央を狙えばそんなものじゃないの

頭の幅のデータ
ttp://homepage3.nifty.com/orangejuice/head2.html
平均 
男 16.2cm
女 15.6cm

205 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 14:09:44 ]
定在波と進行波で検索したリンクで初めて勘違いに気が付いた。
圧力と|速度| って 90度位相差が出るのは定在波の時だけで 進行波は同相だったのか


206 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 14:23:47 ]
ダクトの中に細いフィラメントを沢山配線して通電する事で加熱
熱膨張で進行波を打ち消してしまうというのはどうだ?



207 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 14:55:09 ]
プログラミングの話が全然出てこないのは何故?

208 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 15:47:21 ]
>>207 何か質問があるならどうぞ

209 名前:デフォルトの名無しさん [2006/08/08(火) 21:19:28 ]
DPCMのいいエディタご存じないですか?
それとも、無きゃ作っちまえ、なスレですか?

210 名前:デフォルトの名無しさん mailto:sage [2006/08/08(火) 22:43:58 ]
>>209
それがローカルルールの範囲内の質問なんですか?

211 名前:デフォルトの名無しさん mailto:sage [2006/08/09(水) 08:00:56 ]
エディタといっても、波形を表示してそれをカットペースト+エフェクトするくらいだからなあ
波形をマウスで作ったりしたってまともな音にならない


212 名前:デフォルトの名無しさん [2006/08/12(土) 08:12:36 ]
www.miraikan.jst.go.jp/idea/head_01.html

213 名前:デフォルトの名無しさん [2006/08/14(月) 02:21:43 ]
MP3のエンコーダのライブラリでライセンスフリーのものってありますか?
ご存知でしたらどなたか教えていただけませんか。デコーダはあるんだけど。

214 名前:デフォルトの名無しさん mailto:sage [2006/08/14(月) 03:06:13 ]
>>213
ない

つか、もし配布元が問題ないといっても、F社やらT社は絶対それを認めないだろ

215 名前:デフォルトの名無しさん [2006/08/14(月) 17:50:08 ]
>>214
ではMP3のエンコーダ自体を自ら実装すれば問題のでしょうか?


216 名前:デフォルトの名無しさん mailto:sage [2006/08/14(月) 18:15:24 ]
>>215
フォーマット自体には特許の及ぶところではないというのは当たり前になっているわけで、
それゆえに、LZWの特許が有効だったときも無圧縮GIFは問題無いという考えが主流だった

そう考えると、確かmp3も圧縮アルゴリズムの特許は例の2社が持っていたはずで、
それなら無圧縮mp3は問題ないことになる。

だが、それってmp3の意味無いじゃん。



217 名前:デフォルトの名無しさん mailto:sage [2006/08/16(水) 13:41:26 ]
午後みたいに、インストーラーでコンパイルするという荒技もあるけどな。

しかし、あれは酷いやり方だな。
賛同はできん。
素直にソースだけ公開しとけば問題ないのに。

218 名前:デフォルトの名無しさん [2006/08/16(水) 23:44:51 ]
音ゲーで使えるようなくらいの遅延の少ないエフェクトの掛け方を探してます。

C#.NETで、DirectSoundのSecondaryBufferのエフェクトを使ってみたんだけど、
バッファに書き込んでから音が鳴るまでの時間が200msecくらいもあって、結構使えない。
そこで腹をくくってその辺りの処理を自前でやろうかと。

複数のwaveを鳴らして、その合成音にリアルタイムにリバーブエフェクトをかけるのって、

再生用バッファにwaveを加算(サンプル毎足し算)
その波形に対して随時インパルス応答を適用する

こんな感じで合ってますか?

219 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 07:05:55 ]
あってるよ。 問題は飽和に対しての処理だけさ

220 名前:デフォルトの名無しさん [2006/08/17(木) 08:37:15 ]
午後でいくつかまとめて処理すると
ファイル名が入れ替わったりするバグありますよね?

221 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 08:54:04 ]
>>220知らん。 つーか板違い

222 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 10:07:16 ]
>>218
ASIOとかWDMとかに最適化しないとめちゃめちゃ遅れるよ。

223 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 16:09:30 ]
>>220
翌日の朝やればいいじゃん


224 名前:218 [2006/08/17(木) 17:29:50 ]
試しに2秒のwaveに100kbくらいのインパルス応答をFIRフィルタで適用してみたら
処理に糞時間かかった。。ノイズもいっぱい。

このやり方じゃダメですか?

ちなみに使ったインパルス応答
ttp://noisevault.com/nv/index.php?option=com_remository&Itemid=29&func=fileinfo&filecatid=55&parent=category
これのm1_44.wav

>>222
うちのオンボードじゃASIO4ALL入れても無理でした。

225 名前:218 mailto:sage [2006/08/17(木) 17:52:43 ]
録音して波形を見てみたら、ノイズは>>219の忠告通り飽和が原因っぽかった。
飛び出したサンプルだけとりあえず範囲内に凹ましてみたけどノイズは和らいだだけ。
やっぱりその周辺も同じ比率でなだめないといけない?
処理に時間かかって仕方なす

226 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:04:28 ]
インパルス応答をそのまま掛け算したら遅いのが当然
といってFFTで掛け算回数を減らす高速化をするとブロック処理になって、希望じゃないでしょ。

だからリバーブなら思い切って一定時間の遅延にしてしまうのがいいんじゃないの?
その遅延にIIR2時のLPFかければそれらしくなるさ。



227 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 18:59:33 ]
デジタルリバーブの基礎から勉強したら?

リアルタイム性を重視してリバーブをかけるなら、
ディレイ時間の違うIIRフィルタの結果をさらにIIRフィルタに通すのが基本。

今のCPU速度だとゲームでコンボリューション・リバーブは非常識。

228 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 19:13:01 ]
EAXのリバーブとか使えないか?
幾分ハードウェア処理だから軽いだろ

229 名前:218 mailto:sage [2006/08/17(木) 21:29:11 ]
IIRで何とかなるならそれに決めたいんだけど、探してきた↓のサンプルだと音が曇ってしまった。
ttp://www.morikita.co.jp/soft/7832/iir2.c
フィルタが悪いだけ?良いフィルタのサンプルは無いだろうか。

>>227
フィルタ1の出力をフィルタ2の入力にして、その出力を適用という作業をサンプル毎に行う
と解釈してみた。

>>228
SDKが見つからないよう

230 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 22:34:37 ]
遅延が…遅延がぁぁっ!

231 名前:デフォルトの名無しさん mailto:sage [2006/08/17(木) 22:43:59 ]
係数が…係数がぁぁっ!

232 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 06:37:49 ]
>>229
2次のIIRフィルターは LPFならf0とQで係数が決まるけど、それぞれいくらにしてるの?
Q=0.7程度にして f0を変化させてみたら?

それから、あくまでも遅延した方にだけIIRをかけて、元の信号と加算するんだよ。
加算した結果飽和するなら音量を下げるAGCを使うか
飽和しないように a , (1-a) の比率で加算するか

233 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 12:05:06 ]
ああ、まさか>>229のソースで係数そのまま使ったって事?
そのレベルならとりあえず1次のLPFでやってみたら?

過去ログ のレス14より
www.2chdat.net/data/html/01111704/996171508.html

1次のLPFは
w =2*π*f0/22050.0;
r =tan(w/2);
b =(1-r)/(1+r)

・・・・・略・・・・

y:=b*(x-y)+y と計算します


xが入力で yが出力だよ そしてyはグローバルに取るんだよ。
でbを可変してみて感じのいい所を探してみるといいよ

高域をもう少し減衰させたいなら2段するといいよ

234 名前:218 mailto:sage [2006/08/18(金) 19:48:30 ]
フィルタ係数の算出方法があったのか( ゚д゚)…今見見返してみると過去ログが宝の山に見える。

そういえばさっきから全然残響音が出ないなぁと思って考えてみたんだけど、
1サンプル前じゃなくてもっと前のサンプルをフィードバックすれば良かったのか!?
っと気づいてから今更>>226の意味を理解した。ぁーぁー

それから1次なり2次のIIRを掛けて高音減衰させれば良い感じになるのか。
一応これでそれっぽいのは聞こえるようになったよう。みんなありがとうヽ(゚∀゚)ノ

後はこれとミキシングがどのくらいのレスポンスで出来るかどうかー

235 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 19:52:51 ]
IIRは発振しないようにパラメータ選びは慎重にしてね( ´∀`)b

236 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 01:44:34 ]
>>9-11を参考にして、ブロックのサイズを凡そ0.1秒にして、
音程変化の内速度調整を実装したところ、
再生速度を0.5倍にするところまでは非常にスムーズな音でこれを実現できました。

しかし、0.5を下回る倍率(〜x0.4)になった途端、音声が毒電波状態です。

現時点での実装は
・ブロックの間引き(重複)
・ブロックの窓関数処理
のみで、
・空白を優先
・繰り返しを配慮
という二点は実装していません。
自分の作っているプログラムでは効率が悪すぎて、
この二点を実装しようとすると処理時間が不足するおそれがあり、
何よりこの二点の効率の良い実装方法が思いつかなかったので。

よくよく考えてみると、この機能を実装しているプレイヤの内のいくつかは、
やはり0.5倍を下限に置いている様なのですが・・・。


何か良い解決方法はありますでしょうか?
また、それはどのような方法か教えてください。



237 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 03:24:13 ]
ァ・・・もしかしてサンプリング定理と関係があるのか・・・?0.5倍ってのが2の逆数であることから考えても・・

238 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 05:11:04 ]
やっぱ厳密にはオーバーサンプリング+アンチエイリアスを
かけてから処理すべきとこなんじゃないの

239 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 07:28:47 ]
音程が変っているのなら、サンプリング速度が変化しているからどこかの段階でLPFを入れておく必要があるよ。
そうじゃないと折り返し雑音が問題になる。
綺麗な音にしたいなら、最低2倍のオーバーサンプリングしておいた方がいいかもね。

音程が変らずに再生速度だけ変化させてるならサンプリング定理の問題じゃない
0.5を下回る場合に問題が出るという事は
0.5を下回ると同じ音を3度以上繰り返し利用しなければならなくなるけど
その処理がはいってないんじゃないの

240 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:10:42 ]
>>238-239
書き方が悪くてすみません。
「音程を変化させずに速度変化をした」
処理です。
>>239
いいえ、3度以上の繰り返しについても問題なく実装しているはずです。
DirectSound+C#なので、部分抜き出しが難しいですが・・、
0.5以上1倍以下ではどれだけ細かい指定をしても平気なので、
ここにバグがあるわけでは無い・・・とは思うのですが。

 decimal readCount = 0;
 decimal readSpeed = 0.4;

 for(writePoint=0;writePoint<(一秒分のバッファ長);writePoint+=(0.1秒分のバッファ長))
 {
  readCount += (double)readSpeed;
  for(i=0;i<readCount;i++)
  {
   /* [readBufferに0.1秒分読み込み] */
  }
  /* [readBufferから書き込み用バッファにwritePoint位置でコピー] */
  readCount -= (int)readCount;
 }
 /* [書き込み用バッファを再生バッファにコピー] */

という感じでの実装です。
なんだっけ、グラフィックとかで良く使う「斜めの直線を整数型のみで計算するアルゴリズム」を応用した感じなのですが。

241 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:12:30 ]
あ、Shift+Enter間違えて押してしまった・・・。
改行と書き込みがメッセとは逆だから間違えるなぁ・・・

とりあえず、お二人のご意見から
オーバーサンプリング+アンチエイリアスについても実装を検討してみます。

242 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:16:02 ]
あともう一点追記です。
240で示したソースの中で、i以外の変数はすべて
クラススコープです。iのみがメソッドスコープになっております。
readCountがメソッド呼び出し毎にリセット、というわけではありません。

おまけに分かりづらくてすみません・・・。

243 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:24:22 ]
音程が変化していないという事は、サンプリングレートが変化してないわけでしょ?
だったら オーバサンプリングとかLPFは必要ないよ。

で、やっぱり3度利用する部分に単純にバグがあるのだと思うよ
もっとも3度も利用すると違和感があるという事なら当然そうだろうけどね

あまり2倍以上遅くする場合は、やっぱり無音期間を検出して、そこを出来るだけ引き延ばす方がいいと思うよ


たとえば0.1秒のブロックを0.05くらいに小さくして、そのブロックの音量が今までの音量より一定比率より小さいなら、
その部分の繰り返し回数を出来るだけ多くするとか


244 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:31:35 ]
まてよ >>240の定数だと、引き伸ばしではなくて短縮なんだよね?

短縮で0.1秒単位に2ブロック以上連続してすてるようになると、音声だと何を言ってるのか判らないようになってしまう。

そこまで強力に短縮するなら、
まず周期性を検出して周期の整数倍の
もっと小さいブロック (1/30)〜1/60のような(ブロックというよりgranul) サイズにして
それを捨てるようにする。必要があるよ。

245 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:35:11 ]
サウンドプログラムの本ってあんまりないよね

246 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:40:53 ]
!バグ見つけた!

>>243
バッファを注意深く見たところ、きちんと三度利用されるところは三度利用されていました。
ですが、読み込み時に窓関数をかけるのではなく、書き込み時に窓関数をかけていたため、
 一回目の利用>二回目の利用>三回目の利用
と、窓関数により一気に減衰していました。
これをなおしましたが、やはり違和感は酷いです。
どうやらご提案の通り、きちんと無音期間や繰り返し周期の懸念を行わないといけないようです。

>>244
いいえ、短縮ではなく延長です。
なぜならreadCountは
一回目のループで0.4→読み込まない(readBufferはデフォルト0配列)
  →書き込みバッファには0が書き込まれる
二回目のループで0.8→読み込まない
  →書き込みバッファには0が書き込まれる
三回目のループで1.2→読み込む(readBufferには0〜0.1秒分の)
  →書き込みバッファには0〜0.1秒分のデータが書き込まれる
四回目のループで0.6→読み込まない
  →書き込みバッファには0〜0.1秒分のデータが書き込まれる
五回目のループで1.0→読み込む
  →書き込みバッファには0.1〜0.2秒分のデータが書き込まれる
という感じに機能するので・・・。



247 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:48:58 ]
出来るだけ無音期間を検出して無音期間を引き延ばすのが第一
次善は、周期を検出してその周期の整数倍にgranulを切り出して
それを並べる

音声の場合は周期の揺らぎが音声らしさを作ってるから
母音の部分の極端な引き伸ばしは巧くゆかないけどね(周期性が増すと声が変ってしまうから)
やらないよりはマシ

248 名前:236 mailto:sage [2006/08/19(土) 09:52:20 ]
うん、どうやらその方法をとるしか無い様ですね。
・・・分かり切ったことを聞いたようで、すみませんでした。

しかしそうすると演算量が極端にあがるなぁ・・・
全量ノルムチェックと倍速調整か・・・うは、頭いてえ

249 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:07:55 ]
Σx^2はそんなコストはかららないでしょ
周期検出の方が計算コストの低いのを探すのは大変でしょ

250 名前:236 mailto:sage [2006/08/19(土) 10:22:12 ]
>>249
やぁ、せっかくあちこちダイエットしたのになぁ、ってボヤキです。
再生に関係しない他のところが処理コスト食い過ぎで、
再生するとCPU利用率が3%くらい跳ね上がるもんですから。

実質的な問題はただ単に面倒くさいだけです、本当にすみません。

251 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:23:57 ]
急に内容が難しすぎ。

252 名前:236 mailto:sage [2006/08/19(土) 10:32:11 ]
・・・確率論的に乱数で処理の是非を決定して無音部分の処理確率をあげt

いや、やめておこう

253 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:40:30 ]
>>234
毎サンプルデータ毎に
Xを入力 Yを出力 配列をM, rwp,

Y = X*(1-g) + LPF( M[ (rwp +T) % SIZE] ) *g

M[rwp] = Y

rwp=rwp % SIZE;

てな計算になるだけだから、別に遅延などそう必要ないでしょ

254 名前:デフォルトの名無しさん [2006/08/27(日) 18:27:58 ]
QuickTimeSDKつかいづらい・・・・・・・

255 名前:デフォルトの名無しさん [2006/08/30(水) 15:08:42 ]
波形を合成する機能をもったライブラリって例えば
どのようなのがありますか?

256 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 16:11:14 ]
DirectSound



257 名前:デフォルトの名無しさん [2006/08/30(水) 23:33:24 ]
8000Hz,8bitで取り込んだ音の中に、1KHzの音が混じってるかどうかだけをリアルタイムに調べたいんですが、低スペックマシンで処理するのにおすすめの方法はありますか?

258 名前:デフォルトの名無しさん [2006/08/30(水) 23:36:44 ]
FFTを応用すればどうとでも出来るとおも

259 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 10:30:18 ]
>>257
フィルタ使うのが軽い。

260 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 10:31:42 ]
バンドパスフィルタを使って音量レベルを計ればいいんだ

261 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 13:25:22 ]
音程を変えるのに FFT を使ってるソフトがあるらしいのだが、
どういう風に使ってるんだろう。
単純に区間に区切って FFT かけて周波数を n 倍して戻すのって、
時間軸で重複させるのと等価だよなぁ。
位相をうまく合わせればちっとは良くなる気もするが、窓関数かけてたら
ほとんど影響なさそうだし。

262 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 14:44:40 ]
>>261
ヒント:フォルマント

263 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 07:53:32 ]
>>17 を参照。

264 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 15:20:35 ]
> 全体を一度に収まる大きなサイズのFFTで行う方法
これ試したことあるけど、まともな音にならない。
長い区間をフーリエ変換しても、意味のある情報は得られないと思う。

> ピッチシフトは周波数軸での単なるシフトではなく、指数的移動なので
これの意味が良くわからん。定数倍すりゃいいだけじゃないの?

265 名前:デフォルトの名無しさん [2006/09/01(金) 19:12:02 ]
>>264
恐らく「音程」に対して周波数係数が「指数」になるって言いたいんじゃないかな。

 音程   周波数
  -12   *2^(-12/12)
  -11   *2^(-11/12)
  ・・・   ・・・
  -1   *2^(-1/12)
  ±0    *2^(±0)
  +1   *2^(+1/12)
  ・・・   ・・・
  +11   *2^(11/12)
  +12   *2^(12/12

だから・・・

まあ何かを勘違いしている恐れがあるけど

266 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 20:15:03 ]
その周波数軸の定数倍をどう実現してるの?
たとえば 2^(+1/12) = 1.05946309435929526 となって綺麗な比率にはならない
特に低周波は目が荒くなるわけで

これを旨く処理するには exp(2πki)という指数=三角関数が必要にならない?



267 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 22:00:18 ]
>>266
指数的な補完が必要ってことか。なるほど。そこまで考えてなかった。

でも、上にも書いてあるけど、周波数軸を a 倍するのって
時間軸を 1/a 倍するのと同じだよね。(音量は a 倍違うけども)
FFT 使う意味がいまいち分からないなぁ。

268 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 23:23:01 ]
DARU/PITCH-SHIFTER!だと音程+1で1.05946314って表示されるよ。
綺麗な比率では無いけど考え方はあってるんじゃないの。

周波数軸上でスペクトルを上下させるのがピッチシフトだっけ?

269 名前:デフォルトの名無しさん mailto:sage [2006/09/02(土) 11:50:35 ]
>>267
たしかに。
下限周波数 f_low [Hz]で周波数スペクトルを測定するには、
有限の時間1/f_low [sec.]かかるので、
結局のところグレイン・サイズ 1/f_low [sec.]で
グレイン操作して、ピッチシフトを表現することしかできないね

270 名前:デフォルトの名無しさん mailto:sage [2006/10/05(木) 00:10:57 ]

ttp://pc.watch.impress.co.jp/docs/2004/0204/nishikawa.htm




ttp://www.drk7.jp/MT/archives/000120.html



271 名前:デフォルトの名無しさん [2006/10/11(水) 18:43:00 ]
今、ASIO2.0のSDKのサンプルをいじってるんだが、どこで再生しているのかわからない。
誰か教えてくれません?

272 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:35:32 ]
ASIO_Init()の中をループしている最中にbufferSwitchTimeInfo()がcallbackで呼ばれる
と思った

273 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:37:45 ]
いやbufferSwitch()か・・・まぁその辺

274 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 00:30:37 ]
確かにここらへんが怪しいとは思うんだけど、どういじくったら音を出せるのかがわからない。

asioCallbacks.bufferSwitch = &bufferSwitch;
asioCallbacks.sampleRateDidChange = &sampleRateChanged;
asioCallbacks.asioMessage = &asioMessages;
asioCallbacks.bufferSwitchTimeInfo = &bufferSwitchTimeInfo;

誰か音を出す方法を教えてくださいな。

275 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 00:57:17 ]
あ、ごめんinit()は自作関数だったかもw 昔書いたのを適当に眺めて書き込んだんで・・・
再生するサンプルソースがあると思うけど要するにその辺のcallback定義して開始すると
ASIOのsystemからbufferSwitchTimeInfo()が呼ばれる。
その中で要求された形式に応じてbuffを充填して戻る

無音だかを再生するサンプルがあると思うんで〜Info()にbreakpoint貼って
要求されたcaseのmemsetを適当な波形を返すようにしてみるとか、その辺からやってみては。

276 名前:デフォルトの名無しさん [2006/10/25(水) 23:43:20 ]
bufferSwitchTimeInfo()をいじくったら音が出るようになったよ!
さんくす!
でもなんか音が途切れ途切れ。。。ブツブツだわ。

どうしたらスムースになるんだ?
誰かわかる人助けてください。



277 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 04:28:22 ]
まだキャプチャーした音を再生するところまでしか作ってない「ヘボな段階」なので、
ファイル書き出し機能を作ってから聞けばいいのかもしれないのですが、
書き出し機能を作るときからおおまかな部分について知っておいた方がいいかなと
思いましたので、質問です。

キャプチャして録音しながら
DVDレコーダなんかでよくあるタイムシフトの機能を扱いたいと思っているのですが、

どういった手順になるのでしょうか?おおまかな流れについて教えて下さい。
waveもしくはmp3をストリームして録音しているときに単純にそのファイルを
開いて再生するだけなのでしょうか?
それとも、何かあらかじめ準備しなければならいことがあったり
特別な手順を踏んでタイムシフト用のファイルを作ったりしないといけないのでしょうか?

mp3でタイムシフトやるときとwaveでタイムシフトやるときのファイル形式による懸念点などありましたら、
それも教えて欲しいです。mp3でやってもwaveでやっても一緒なのでしょうか?

278 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 09:19:09 ]
Adudacity でタイムシフト再生なんか出来たか?

279 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 09:20:00 ]
あ、Audacityスレとまちがえてかいてしまったごめんよ。

280 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 12:41:11 ]
>>277
FILE_SHARE_READでCreateFile()してやればいいんじゃね?
録音用のHANDLEと再生用のHANDLEで別にCreateFile()すればseek位置で干渉しないし。

wavはLR&チャンネルのバウンダリさえ気をつければどっから再生しても問題無いけど、
mp3は[4バイトのヘッダ+データ]のブロック単位でシークする必要がある。

てかmp3使うならエンコード/デコードのライブラリが必要。
フリーで転がってるソースはエンコはgogo、デコードはmpg123辺りかなぁ。

281 名前:277 mailto:sage [2006/10/28(土) 18:54:05 ]
>>280
どうも、ありがとうございます。
それほど複雑な処理を必要としないさそうで、ちょっと安心しました。
waveとmp3でやり方が大きく違いそうだということもわかりました。特にmp3は敷居が高そうですね。
とりあえずwaveでタイムシフトを実現させることを目指そうと思います。

こんなプログラムは探せばに既にあるんでしょうけど、勉強を兼ねて自分でやってみようと思います。
ありがとうございました。

282 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 18:55:56 ]
ADPCMの詳しい資料ってありませんか?

283 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 20:40:10 ]
CCITTの規格書とかお金出せば買えるよ

284 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 01:30:14 ]
>> 282
何が知りたいの?

285 名前:デフォルトの名無しさん [2006/11/04(土) 15:55:44 ]
OpenALでサウンドプログラムを組んでみたいんだけど入門的なサイトって無いだろうか?

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

adlib.rsch.tuis.ac.jp/~akira/unix/ossprog/src/short/parrot.c
録音は↑のプログラムをベースにしています。
どなたかアドバイスをお願いします。
説明不足だったらすみません。




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

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

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

289 名前:デフォルトの名無しさん [2006/11/05(日) 01:01:41 ]
>>287
すいません。

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


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


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

291 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 02:12:00 ]
>>290
質問する板が違います
二度と来るな

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

293 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 02:41:50 ]
>>292
自分で作ればこの板でおk

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

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

295 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 03:18:53 ]
>>294
wavか何かに変換すればいいんじゃね?

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

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

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

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



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


298 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 04:02:59 ]
了解しますた。

299 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:18:27 ]
フリーソフトを使う事をプログラミングだと思ってるのか

300 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:32:01 ]
>>299
バイナリから直に数値データって取れんの?

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

302 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 12:40:47 ]
>>301
普通ってどうやるの?

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

304 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 13:20:44 ]
>>303
どの言語がお勧め?

305 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 13:45:23 ]
>>304
日本語でおk

306 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:00:48 ]
>>304-305
吹いたw




307 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:28:46 ]
>>303
ほんとに知ってて言ってるのこの人?

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

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

310 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 15:12:33 ]
>>309
短時間FFTはなにかまずい?

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

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

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

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

314 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:26:21 ]
ググレカス

315 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:31:40 ]
オープンソースだからソース見ればいいよ

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



317 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 22:49:27 ]
www.openal.org/lists.html
公式のメーリングリストで聞けば?

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

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

319 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 02:11:07 ]
>>318
MIDIデバイスを二つ用意したら?

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


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

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

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

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

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

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

326 名前:324 mailto:sage [2006/12/14(木) 03:35:29 ]
とりあえず95以降。
95で大丈夫ならその後でも大丈夫な気がするんですけど。



327 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 10:05:40 ]
>>326
95は2000やXPとは根本的に別モノ。

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

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

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

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

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

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

333 名前:デフォルトの名無しさん [2006/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 名前:デフォルトの名無しさん [2006/12/14(木) 23:10:48 ]
すまん間違えた。
4. を修正

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

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

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



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

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

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

339 名前:デフォルトの名無しさん mailto:sage [2006/12/15(金) 02:15:13 ]
本人が満足するのが一番の解でYO

340 名前:329 mailto:sage [2006/12/15(金) 02:17:36 ]
メーターだったらそんな感じで十分なんでしょうけど、リミッター作ってるとこでして。

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



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


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

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

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



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

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

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


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

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

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

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

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

355 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 00:16:19 ]
>>353
結局全て LPFなのさ

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



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

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

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

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

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

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

361 名前:352 mailto:sage [2006/12/21(木) 21:24:16 ]
すいません、ハイパスについては間違えてたみたいですね・・・

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

363 名前:デフォルトの名無しさん mailto:sage [2006/12/21(木) 23:55:15 ]
1sec/44100 → (1/44100)秒

364 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 01:01:27 ]
sec per samplingrate?

365 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 01:48:01 ]
いちサンプル

366 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 03:34:30 ]
sample per rate



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

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

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

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

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

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

372 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 00:08:53 ]
>>371
板違い。

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

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

375 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 07:49:50 ]
>>371
ゲーム作ってるの?

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



377 名前:デフォルトの名無しさん mailto:sage [2006/12/26(火) 15:12:35 ]
>>371
クリエイティブのサウンドカードだろ?
仕様だ。

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

378 名前: 【吉】 [2007/01/01(月) 03:43:35 ]
あけおめ♪

379 名前:デフォルトの名無しさん mailto:sage [2007/01/01(月) 13:25:07 ]
黙れよ

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

381 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 21:13:43 ]
ぉぃぉぃ…

382 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 20:41:58 ]
低速フーリエ変換ってないの?

383 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 23:35:48 ]
DFT?

384 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:14:21 ]
筆算

385 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 10:20:29 ]
>>382
バタフライ演算をしなけりゃ低速だよ。

386 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 16:11:17 ]
普通にDFTでええんちゃう?



387 名前:デフォルトの名無しさん [2007/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 (フェーズ ボコーダ ; 位相ボコーダ)の実装
 
     参考資料:
 
         www.panix.com/~jens/pvoc-dolson.par
             Phase Vocoder のチュートリアル。「ミュージシャンにもわかるように」
             書かれており、数学音痴フレンドリー。
 
         www.dspdimension.com/
             無料(オープンソースではない)の Time Stretcher/Pitch Shifterの
             DIRACや、各種アルゴリズムの説明、
             Pitch Shifter の説明的なソースコードなど。
 
         soundlab.cs.princeton.edu/software/rt_pvc/
             real-time phase vocoder analysis/synthesis library + visualization
             ソースあり。
*/

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


389 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 00:31:38 ]
longでええやん

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

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


391 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 11:31:37 ]
>>390
16bitはshortに入れているのに?

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

393 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 13:29:51 ]
しかしBitsPerSampleにはいくらでも入れられる
入れるだけなら自由だ

394 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 17:36:11 ]
本気で言ってるなら池沼。

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

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



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

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

399 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 22:06:11 ]
>>398
加算した後でレベル調整でもすればいいんじゃね?

400 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 23:50:53 ]
レベル調整は先にやったほうが良くない?

401 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 13:09:25 ]
>>399-401
みんなありがとう。
やっぱ足して割ればいいのか。

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

404 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 20:48:50 ]
左右に振るだけじゃないの?

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

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

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

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

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



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

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

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

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

410 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 02:09:49 ]
正解は >>407-408

411 名前:デフォルトの名無しさん [2007/03/19(月) 12:27:37 ]
誰かDAW作ってくれ

412 名前:デフォルトの名無しさん mailto:sage [2007/03/20(火) 10:48:51 ]
>>411
frieve

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

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

415 名前:413 mailto:sage [2007/03/31(土) 10:55:39 ]
コーラスとフランジャーは モジュレーション大きさだけの違いだけなんですか?


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



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

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


419 名前:413 mailto:sage [2007/03/31(土) 12:34:58 ]
サンキュです

420 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 12:36:08 ]
いえいえ。

421 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 18:59:37 ]
ぉぃぉぃ

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


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

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

424 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 00:33:53 ]
おまぃに関してはおまぃの判断に任せる

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

426 名前:413 mailto:sage [2007/04/02(月) 12:28:37 ]
勉強になります。



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

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

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

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

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

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

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

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

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

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

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


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



437 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 14:05:58 ]
>>436
こういうのってリアルタイム入出力できるの?

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

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

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

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

厨?

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

442 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 08:23:46 ]
>>441
それも既出。

443 名前:デフォルトの名無しさん [2007/04/07(土) 10:12:17 ]
>>435

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

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

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

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

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

ttp://junzo.10gallon.jp/





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

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

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

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

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



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

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

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

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

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

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

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

451 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 21:32:48 ]
素人談義状態だな

452 名前:445 mailto:sage [2007/04/07(土) 22:14:09 ]
>>450
なるほどです。
ちょっと調べてたらなぜ畳み込みにFFTが使われるのか、とてもわかりやすい説明みつけました。
ttp://www.nextftp.com/swlabo/m0_pctech/hp_ultraprecision/up_815_1.htm

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

453 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 05:27:24 ]
>>451
煽りはいいから >>447 の試してソース公開してみろって

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

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

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


456 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 11:01:08 ]
聞きかじり&妄想が延々と続きます・・・



457 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 12:01:09 ]
ttp://www.knufinke.de/sir/index_en.html

459 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:18:43 ]
>>449

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

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

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

ttp://www.ludd.luth.se/~torger/brutefir.html


460 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 15:53:22 ]
ひたすらゴッグルさんのご神託を貼り付けるだけのスレw

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

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

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


464 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 16:54:40 ]
じゃあ 俺も妄想ね。

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

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

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

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


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

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

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



467 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:26:36 ]
レイテンシー以前の話かよw

468 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:42:11 ]
>>464
単精度でFFT方式を10万タップで使うと、結果は上位8bitまでしか信用出来なくなる
浮動小数点なので、相対誤差だから十分良いといえば良いのだけどね

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

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



470 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 18:15:45 ]
計算間違いしてた
こうか?
 (((N/M)+M*( 1+4*log(N)/log(2)))/(N)

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


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


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

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

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

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

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

475 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 19:59:18 ]
10万個読み出し * 10ns と思われ リードタイム?

476 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/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 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:31:31 ]
> データは16bit固定小数点で保持すれば十分だろう。
> 実用的には係数も16bit で十分。

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

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

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

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

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

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

483 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:48:45 ]
おk

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

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

485 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 20:55:01 ]
もーどーでもいいや。
結論出たら教えてくれ。

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

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



487 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:06:57 ]
DSPだと積和を1クロックで処理できるって売りを良く聞くけど
Intel入ってるとかだとどうなの? 例えば10クロック必要なら単純に
3GのCPUでも300M個の処理しかできないよね。
3億タップ!?って感じはするけど実際に使えるリソース考えると
>>464の言うリード時間の問題がほとんどになる気がする。

>>477
何個分割して処理しようが結局メモリからキャッシュにフィルタ係数なり入力信号なりを
リードしてから計算しないといけなくなるから無意味。
始めからCPUキャッシュ上に係数も信号も保持していないと駄目ぽ。

>>464
の言う1/10000sec が 1/1000sec の間違いだという仮定ならますますPCでの
リアルタイム畳み込みは時間軸では厳しくなりそうですね。
あと揚げ足とるようだけど10万個の係数読むなら10万個の入力信号も
読まないといけないわけで合計20万個のデータリードになるよ^^;
ということは 1/500sec が一度の積和に必要なメモリリード時間になるが。。。

キャッシュから外れたら無理だね。と思わせる時間だよなこれw

逆に質問、キャッシュ内データのアクセスタイムってどれくらいなんだろ。
ナノのオーダーじゃ全然遅いよね。ピコとかのオーダーなのかな

488 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:09:20 ]
>>486 の結論2は明らかに間違っている。

489 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:10:01 ]
って書いたら真上で 487が指摘していた うぇw

490 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 21:20:08 ]
>>487 もしかして、話についていけない?

フィルタの計算は、1サンプル毎にデータがズレて
t0↓ d  e  f  g  h  i  j  k
t1↓ c  d  e  f  g  h  i  j
t2↓ b  c  d  e  f  g  h  i
t3↓ a  b  c  d  e  f  g  h
係数器は同じ係数が使われる。
   c0 c1 c2 c3 c4 c6  c7

f0の時点で、 d*c0+e*c1+ ・・・・ だけでなく
d*c1+e*c2+・・・・ や
d*c2+e*c3+・・・・ を先に計算しておけば
t1の時点では c*c0だけを
t2の時点では b*c0+c*c1を計算するだけでいい というわけ

で、先に計算する時に計算順をキャッシュのサイズで分割すればいいだろ?
って話をしてるわけさ

491 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:00:44 ]
ようするに、
遅延器の後ろの部分は、先に計算出来るから
計算順を変更してしまって、
1サンプルでは同じ遅延器部分を何度も計算してしまうようにしちゃえばいいって事だな

で、細かく分割して計算順を変更する手間を考えたら、
だったらFFTで計算しちゃえよと

492 名前:デフォルトの名無しさん [2007/04/08(日) 22:03:03 ]
スルー

493 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:05:51 ]
>>490全然計算量減ってないあたりが笑えた


494 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:11:37 ]
ん?  計算量は同じだけど、t0に計算が集中してしまうね



495 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:18:05 ]
しかもt8以降は計算量一定

一体何を言いたかったの?

496 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:28:23 ]
こんだけ説明されて判らんのか? どこが判らんの?



497 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:32:40 ]
>>494
例ではそうなってるけど、
実際は、これを分割するわけ、キャッシュに入るサイズで分割すれば
キャッシュの出入り回数はそれだけ実質へらせられる

498 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 22:46:22 ]
とりあえず誰かこれプログラムにしてみてよ
話それから

499 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:18:17 ]
1/2分割の手順

N2=N/2-1
Σ(0..N){c[i]*d[i]} =c[0]*d[0]+c[1]*d[1] +・・・c[N]*d[N]

R1=Σ(2..N2) {c[i]*d[i]} S1=Σ(N2..N) {c[i]*d[i]}
R2=Σ(2..N2) {c[i]*d[i-1]} S2=Σ(N2..N) {c[i]*d[i-1]}


2サンプル毎に
偶数目では S1=Σ(N2..N) {c[i]*d[i]} と S2=Σ(N2..N) {c[i]*d[i-1]} を計算 
Σ(0..N){c[i]*d[i]} =c[0]*d[0]+c[1]*d[1] +R1+S1で求める

奇数目では R1=Σ(2..N2) {c[i]*d[i]} と R2=Σ(2..N2) {c[i]*d[i-1]} を計算
新しいサンプリングデータがdnewとして
c[0]*dnew+Σ(1..N){c[i]*d[i]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める

そしてデータは2ワードシフトする

500 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:19:36 ]
訂正
× c[0]*dnew+Σ(1..N){c[i]*d[i]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める
○ c[0]*dnew+Σ(1..N){c[i]*d[i-1]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める


501 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 23:51:28 ]
こういう計算する時の遅延器ってみんなどう実現してるのかな
DSPの場合はモジュラアドレッシングがあるからいいけど
PCの場合、俺がやった事があるのは

1、2のべき乗のサイズのバッファ取って and 演算で計算
   [(wp+i) & (BufSize-1) ]
  案外、効率が悪い

2、メモリを2倍とって wpの位置に書く時 [wp]と[wp+N] の2箇所に書いて
 読む時はそのまま [wp+i] でアクセス
  効率はいいけど、メモリが2倍必要
  仮想記憶用のテーブルにアクセス出来れば、メモリを2度割り付ければいいんだろけど

他にいい方法ある?
 メモリをその都度moveするコードはありえないとして


502 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 01:03:17 ]
何この流れ。
最近は、リアルタイムの意味を取り違えている人がいるから困ったもんだ。 (あのドラマ、リアルタイムで見た とか。お前の視覚神経はコンピューターか)

503 名前:デフォルトの名無しさん [2007/04/09(月) 01:04:27 ]
スルー推奨

504 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 10:47:29 ]
リアルだったら殴ってるよタイム

505 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 13:29:27 ]
流れぶったぎって初歩的な質問を・・・
0〜1のリニアなスロープを聴感上リニアにしたいのですが、いい方法ありますか?
-96〜0などとしてデシベル換算だと、0が0にならないですよね。
あるいは良く近似するカーブを得る軽い方法などありますか?
(自分は累乗をよく使うのですが、近似というところではイマイチで・・・)

506 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 13:38:18 ]
指数カーブに適当に0を通る関数を掛け算したら?
(a^x)*x^b
とか bを 1/2 つまり平方根なんて良く使うよ



507 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 14:44:14 ]
平方根掛けいいですね。
試してみましたが、かなり近似しつつ0を通るようにできますね。いいこと教わりました。
リアルタイムで毎回計算する用途だと平方根はちょっと重いですかね?
類似した方法も、いろいろ試してみたいとおもいます

508 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 18:34:32 ]
a^x と √x のどっちが重いかという話なら、同じ程度だと思うが
PCならテーブル作って間を直線補間するし
DSPなら4〜5次くらいに級数近似するし

509 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:18:11 ]
パッタリ止まったなぁw

で、ソースまだ?

510 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 02:05:59 ]
クレ房きました

511 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 02:08:10 ]
オレ、勝手にやってる

512 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 05:37:57 ]
流れが止まった・ ∪´∀`)モキュ

513 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 06:44:22 ]
ソースって・・・・ >>499の以上に必要か?

FFTを使えば、計算量もメモリアクセスも激減するのに、
こっちは計算量は減らない。 当然メモリアクセスも。
ただ同じ領域を2度使うからキャッシュが効き易いというだけじゃ、試す必要もない
理論的に可能かどうかは式みれば判るだろ

514 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 06:08:28 ]
>>501
モジュラアドレッシングって巡回アドレッシングの事だよね?
Tiでいうところのサーキュラドレッシングモードみたいな。

最近のPCだとSSEでシフトレジスタ用意されてるからほぼ同じことできるよ。
そうじゃなかったらメモリ2倍使う2番目の方法が一番現実的な気がする

>>513
まぁまぁそう言わないで。
初心者さんにしてみたらFFTなんか使う方法よりもサクッとフィルタ係数畳み込める
時間軸での方が分かりやすいし書きやすいってのはあるんじゃない?
溢れさえ気にしなければそのままソースかけるし。

515 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 08:32:25 ]
モジュラアドレッシング は モジュロ(modulo)アドレッシング の typo だろけど
SSEで モジュロアドレッシングってどうやるの?

516 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 03:20:32 ]
すごい止まったなぁ。。。



517 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 10:15:41 ]
DSPじゃないんだから、モジュロ・アドレッシングなんてできるわけない、
ムリに再現しようとしても動作が重くなるだけで意味ない、って誰か書けよ。

518 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 10:46:28 ]
直前まで、FIRフィルタ処理の話をしてるんだろ?
モジュロアドレッシングつかわずにどう実装するんだ?

519 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 11:43:45 ]
>>518
単純に、ループと配列を使って、掛け算したのを足していく。
逆になんでモジュロアドレッシングがなきゃできないんだ?

520 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 11:58:13 ]
>>519
ソレはバッチ処理の場合だろ?

1サンプルづつデータを受信して、処理する場合、モジュロで処理しないの?

521 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 12:29:19 ]
普通に書いたら、

wp := ( wp-1+length(data) ) mod length(data);
data[wp]:= 新データ;

sum:=0;
for i:=low(c) to High(c) do sum:=sum+ c[i] * data[ (i + wp) mod length(data) )] ;


だな。 もしかして、この mod がモジュロアドレッシングなのか?


522 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 12:32:07 ]
それなんていう言語の擬似コード?

523 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 14:02:00 ]
   // :/:::::/::::::.!:::|:::: !::::::::、:::::::::::::::::、::ヽ::::::::ヽ
   !|:::/::::::.!:::::::|:::∧::::|、::::::::!.、:::::::::::::ヽ: !:::::::::: !
  i:l: ::|:/:::.!::::::ii|_:| ヽ:::!l\:::!'、\::::::::::::!::!::::::::::::.!
.  |/l:::.!|, :::ヽ::::l'l:lヽ、ヽ:|l'´ヾr==ミ、:::::::|::|:::::::!::::: !
   |::.!l:.!::::::lヽ|,==、 `'    ヽ   \:|:: !: ::: !::::::.!   うるさいうるさいうるさい!
   l/ `ヽ::|:::l     , - 、       ll'::::!.l:::::.!:::::::.!
       l`l::.!!     l/ ̄ ヽ    /.!::::.!:|::::::.!:::::::l
       !::::.!.!ヽ   ヽ   ノ  /::::|:::::|::.!:::::.!:::::::.!
      .!::::| !::::.` ー 、._ ´ ,/  |::: !:::::|:::l::::::.!:::::::|
       |:::::|.!::::.!:::::.!:::::::::`Г    l-,|::::.!::::|::::::.!:::::::|
      |::::::l':::::.!::::::|:::::_, -/}    /:l:::::lー-: !:::::::.!
      !::::::|:::::_!, .‐' ´.:.:.:!r- 、_ /.:.:.:!::::l// /`ヽ:: !
.     |::::::|/ ヽヽ.:.:.:.:.:.lィーミ./.:. :.:.:.!:::.!/  /   !::.!
.     |:::::::! ヽ ヽヽ.:.:.:.ヽ  / .:.:/ !::::|   /   |::::!

524 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 15:22:39 ]
>>522
PascalとかSmalltalkとかじゃないか?

525 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 15:50:35 ]
>>501
3、積和を2度に別ける
wp〜最後までと
 先頭〜 に


526 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 01:57:52 ]
久しぶりにパスカルチックな言語書く人みたわwwwwwwwww
:= なんてほんま涙がでそうやわ。

ここ見てる人はシフトレジスタ知らない人なんだねと心底思った。



527 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 07:12:04 ]
シフトレジスタ?
シフト命令の間違いか? だとしても、この話題のどこにシフト命令が?

528 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 10:20:39 ]
>>526
コンパイラが勝手にやってくれるところだろ。

529 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 12:51:26 ]
>>526
このスレと過去ログを := で検索してごらん
www.2chdat.net/data/html/01111704/996171508.html

たぶんあなたが思うより多かった筈だ。
たぶん、スレ参加者の半数くらいは windowsではDelphi使ってるカモ

530 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 13:07:03 ]
×スレ参加者の半数くらいは windowsではDelphi使ってる
○Delphi使ってる香具師が一人で頑張っている

531 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 13:35:49 ]
":= "が登場したのはフィルター計算とサイン波音源の話くらいかな

532 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 05:00:43 ]
:= 書いてるの明らかに一人だけじゃないかww

>>530に禿げ同

533 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 07:28:59 ]
Delphiは良いと思うよ

534 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 07:38:28 ]
うん。低レベルAPIのラッパコンポ作っておけば、
実験するときはポトペタで簡単にコード試せるし
GUI付けて、他人に試してもらうの便利。
BCBもいいけどコンパイルの早さでDelphiだな

535 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 10:13:19 ]
Delphiは完成品が重いし、コンポーネントはバグ抱えてるし、
意外とほかでの応用がきかないし、どうかな…。

536 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 10:23:18 ]
自分の場合、windows上だけで完成するわけじゃないからテスト用
アルゴリズムを評価してもらうためと自分のテスト用ね。
コンポーネントのバグは知らない。テスト用だから気にもしてないのかもね



537 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 10:32:50 ]
>>534
お前はまずPCを買い換えろ。
テストコード程度でコンパイル速度に顕著な差が出るってどんなマシン使ってんだ・・・

538 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 10:51:14 ]
Delphiは完成品がとても軽いのだが・・・・もしかしていまだにDelphi5使ってるから?

>>535はどのバージョンが何と比べて重いの?

539 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 19:16:28 ]
PC を買い換えたら Delphi の完成品の速度も、BCB のコンパイル速度も上がるな(w

540 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 12:42:36 ]
パソコンが速くなっても、BCBだとF9押して3秒くらい
Delphiは1秒以内。 実行ファイルそのままクリックしてる感覚と変わらない
だからCで書いたコードのテストでもDelphiからコマンドラインでBCCでコンパイルして
pascalでテスト部は書いてるな

541 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 12:45:38 ]
Delphi派は判ったから、他の人は何で書いてるのか知りたいな。
MATLABとか多そうだけど

542 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 16:35:04 ]
ノシ
MatlabとJava

543 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:22:31 ]
それ以前にこのスレはどうゆう人が多いのかな
DSP使った組み込み向け信号処理屋みたいな人とか、
PC向けリアルタイム処理(音楽関連アプリやVSTとかDXプラグインとか)やってるひととかさ。
それによってだいぶ違うよね?
前々からそれによって微妙に話しが食い違うときがあった気が。
いわゆるゲーム屋とかでは、このスレみたいなやれFIRとかFFTとかいう話題にならないし

544 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 18:54:32 ]
音を利用するプログラムを作ろうとしてるか、音データを処理するプログラムを作ろうとしてるかだけでもだいぶ違うな。

545 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 19:22:09 ]
>>543
ところがどっこい
エンタメ系サーバ書いてる奴がPhaseVocoder使ってたりするw

546 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:06:25 ]
私ゃ信号処理屋だから参考にしてるだけ。
まぁでも、光もナノテクの世界では音みたいなもんだしね。



547 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:11:30 ]
非現実的な妄想発言を見てしまった

548 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:13:00 ]
>>185書いた人?

549 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:13:00 ]
低学歴が犯しがちなトンでも発言だな

550 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:37:05 ]
このスレ 面白いんだけど、ドレが正解かよく判らん所もあるな

551 名前:546 mailto:sage [2007/04/21(土) 21:37:39 ]
私ゃ>185じゃないよ。

光の回折でエッジが暈けるから位相を反転して合成しようとか、
光の密度が均一じゃないから反射を利用して均一にしようとか、
そういう話を実際の光源でテストする前にシミュレーションする仕事が
よく来るのよ。実際何がどうしてそうなるのかなんてよく判らんけどね。

552 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 21:40:29 ]
じゃ>>185は正解なの? 
あと >>109は?

553 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 22:52:39 ]
低学歴なんでよくわからないけど、
スペクトル分解(フーリエ解析)なんかは、
電磁波でも音波でも全く同じ数学なんじゃないの?

554 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 23:09:21 ]
>>553
光と音は波としての性質は同じだが、目と耳は構造も機能も全く違うからな。

555 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 23:30:56 ]
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクwをやっているのかkwskw

556 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 23:52:11 ]
まあいいじゃないの、そんなとこに食いつかなくても



557 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 00:04:21 ]
はいやっぱり逃げたね
いくらなんでも愚かすぎる光学技術者だと思ったら
やっぱネタか


558 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 00:17:39 ]
画像処理と音声処理の共通点の無さは異常

559 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 00:21:20 ]
決まり文句も出たところでこのへんで

560 名前:546 mailto:sage [2007/04/22(日) 05:54:18 ]
面白いなぁ、勝手放題で。
信号としての特性に似たところがあるってのを似たようなもんだって書き間違えただけでこれだ。
それに私は自分が光学技術者だなんて一言も書いてないのだけれど。

561 名前:デフォルトの名無しさん [2007/04/22(日) 08:06:15 ]
だいじょぶ、俺は信じるよ

562 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 08:35:52 ]
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクをやっているのかちゃんと言ってごらん


563 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 08:37:10 ]
>>545
PhaseVocoderを何に使うんだろうね

564 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 10:04:38 ]
>>109の音は干渉しても消えないというのは

・光の波は進行方向に垂直だから進行方向が異なっても
 合成した場合、電界変化がゼロになった場所は磁界変化もゼロで、その場所では検出出来ない


音の波は、
tmhf.eng.shizuoka.ac.jp/m5/yanafuku/resonance/wave.htm
・進行波は運動量変化が進行方向に生じるので、方向が違うならベクトル加算しても消えない
・定在波は、運動量変化と圧力は90度位相がズレているので、圧力変化が最小の場所は運動量最大である

だから音の波は干渉では消えない。 
>>181 のように仮想の壁で反射する事でダクト消音は出来るが、これは干渉ではない。


・・・という理解で正しい?

565 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 10:25:13 ]
高卒かよw

566 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 10:35:27 ]
V



567 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 10:37:43 ]
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクをやっているのかちゃんと言ってごらん

568 名前:546 mailto:sage [2007/04/22(日) 11:49:46 ]
私自身はナノテク技術者やってるわけじゃないんだけどな。
まぁ、同じレスがコピペされている段階で相手にするだけ無駄か。

569 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:03:50 ]
お前は自分の発言に責任を持っていない。
まともな神経を持った人間とは言い難いな

570 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:09:18 ]
この人は2ちゃんに何を期待しているのだろう・・・

571 名前:546 mailto:sage [2007/04/22(日) 12:09:31 ]
みんなごめんね☆

何か寂しくなっちゃって全然関係ないこと書き込みしちゃいました。

反省したので明日ボウズにしてきます。

(;_;)



572 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 12:30:47 ]
>>569
侮辱的な発言ありがとう
ちゃんと責任とれよ

573 名前:546≠571 mailto:sage [2007/04/22(日) 13:19:56 ]
あ〜あ、もう収集つかないね。

574 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 15:08:07 ]
今どき絵に描いたような煽りにつきあうなよ。

575 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 15:46:49 ]
>>564
ホントに光も磁界変化はゼロになるのかな?
2つの送信アンテナ1,2 で逆相で送信して、等距離の3の位置で受信すると考える

@      A
 \   /
   \/
   B

電界を検出するアンテナでは、3の位置では逆相で打ち消される
では、バーアンテナを3の位置に取り付けたらどうだろ? 
1−2に平行の場合は、話の通り、検出出来ない。 
バーアンテナを1の同心円方向に設置すれば2に対して指向性が働いて受信出来てしまうんじゃないのか?

576 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 17:21:31 ]
電磁波の場合、そのバーアンテナを設置した事で、状態が変化してしまうよ。
バーアンテナをその向きに設置したことでバーアンテナに磁界変化が起きる=然電界も変化するわけで、
バーアンテナを設置したことで、普通のアンテナでも受信出来る位置になってしまうわけ




577 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:29:07 ]
おまえら電波かよw

578 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:40:00 ]
波の物理的なイメージってのは、難しいよね。
だから、こういうのをしっかり掴む為にも、こういう議論は有意義だと思う

579 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 18:54:37 ]
>>577
デムパというよか、電子回路系なんだろうよ
この不思議な議論の流れから察するに

580 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 22:54:13 ]
電子回路系、、、ってのもずいぶんと無知な言い方だが
とりあえずスレ違いの域なのは確かだな

581 名前:デフォルトの名無しさん mailto:sage [2007/04/22(日) 22:57:33 ]
ムリな言い訳しなさんな
あんた向いてないよ

582 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 01:58:28 ]
軌道修正を行います。
完了推定時間、9分です。

583 名前:デフォルトの名無しさん mailto:sage [2007/04/23(月) 07:31:03 ]
スタジオエンジニアとか、ホール設計とかだと、300Hzの音聞きながら、
部屋の中に波長1mの定在波をイメージしてたりするんだろか?

584 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 01:27:43 ]
オレ、しないな。

585 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 01:49:55 ]
音を聴きながら波形をイメージすることはあるよな?
この音は丸っこい、とかカクカクしてる、とか。

586 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 03:09:57 ]
>583,>585
スレ違い。
プログラミング関係ねぇし、お前が何イメージしてるかなんてどーでもいい。



587 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 04:08:07 ]
プログラミングならグラフをイメージしないとやっていけないだろ
この音の振幅は・・・周波数は・・・・・だめだ、差分適応PCMは圧縮できそうにない・・・・・・

588 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 07:03:29 ]
>>586
スレ違いだと思うなら、何かネタをフルべきだと思う。
それじゃ潰し屋だ。

プログラミングネタは、APIの呼び出し関係は
それぞれの環境依存がすぎて本人特定されちゃうくらいなわけで、
まあ各自マニュアル嫁って事で、話題にし辛い。

アルゴリズムネタにどうしても流れてしまうのは仕方ないと思うが・・・限界があるよな。

でも、そろそろ新人さんのhelp meネタがあってもよさそうなんだが・・・・
怖がらずに質問してくれていいんだよ>>新人さん

589 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 09:17:25 ]
昔、質問したら、難しい物理方程式を出されて全く理解不能だった。
プログラムの実例を教えて欲しかったんだが。 物理の勉強をしに来たわけじゃないので。

590 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 09:29:47 ]
なるほど。 でも方程式を教えてくれただけでも良かったと思うのだが?
さすがにコードまでは書いてくれんでしょ

591 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 09:58:17 ]
人はそれを丸投げと言うからな。

592 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:10:10 ]
理屈を知ってないと応用が利かないしねえ。
いちいち質問する訳にも逝かないだろう。


音関係の弄りやすいライブラリって何?
やっぱりダイレクトエックスとか?

593 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:11:43 ]
>>589
数式が読めない人は、プログラムの前に数学を勉強すべき。
仕組みが理解できてないと、問題があったときに対処できないだろ?

594 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:13:12 ]
今は googleさんがあるから、キーワード一つ教えてくれれば、後はなんとかなるものな

595 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:14:56 ]
で、検索したらこのスレがヒットするという

596 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 10:59:08 ]
そして質問してみて、にちゃんの洗礼を受ける。
にちゃんねらーとしてにちゃん教に入信しました。他の宗教は信仰しては逝けません。



597 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 18:57:23 ]
やろうとすること次第であって、大半のことは中〜高校数学程度で足りるしょ。
複雑な数式理解できないと話しにならないような場面は限られてる。
数式が出てきても必ずしも理解する必要はないし、道具として使い方知ってれば事は足りる。
そこそこ詳しい人ってのは、必要以上に難しく説明しがちなもんだわさ。

598 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 19:05:21 ]
おめえはホント口先ばっか達者で話題が乏しいな

599 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 19:48:33 ]
>>597
高等教育とはそんなものじゃないよ。
中卒の方ですか?

600 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 19:53:50 ]
だからさ道具と思って知ってるだけじゃ応用効かないって話。
答えが見つかればそれを道具として中身を理解せずに使えば良いじゃんって頭悪い。

601 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 19:57:13 ]
じゃあ質問します
アナログアンプのシミュレータを作りたいと思ってるです。
真空管なんかは飽和歪みがひとつの特徴らしいのですが、そのほかに注目するべき点はどこでしょう。
位相特性みたいな話しをよく聞くのですが、
この場合の位相特性とは具体的にどうゆうことなんでしょう?
アナログアンプ的な特徴的な位相特性とはなんでしょう?

602 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 20:18:17 ]
                           _ , ─ - 、
                       , -‐'´      ヽー 、
                      , .'´        ソー     ヽ
                 -≠Z´, ,           ヽ    ヽ
                   / / / / /,        、  ヽ   ヽ
                    / イ ,' ,' .ィハ l  ! 、  、  ',   ',   !
                 /' ,'.i ! .l /l.l l  !、 l  ヽ  i  |    l
                   l' l k l l7`|'-、.ヽ lヽ. ト、 ヽ  | l l   l
                   l ハ i .{lr≠、ヽ \‐ヘ'ヽヽl-. トl !   i l
                      |' .',lx!i !|::;:}    _,r≠=、卜!' ,'.   |.!ヾ、
                      i'l ー'    !l、::::;:}》. //`y イ'|'  `
                          lヽ   '    `ー'/ .//,.ノ/ |
             l 、    ,、   |/ ヽ、 -    /ソ /ィX.、
            r┴-'ニ< ヽ--、   ` ーz- ' ´/ィ'´ヽヽ、ヽ
             てー  _`._j弋ー' ヽ、.,r,ニ-´ー ´.     l l.l }
         , -‐y‐ '{ /´::::::、ヽ. ̄ヽy'-´ヽヽヽ       l l !'
          ,〃'´    Y´:::::::::::::}  /ー:、:::::::ヽ', ',       l l !
        {、ヽ     l:.:::::::::::::::l /:::::::::::::ヽ:::::l | l       ///
        | ヽヽ、   i::::::::::::::::l/::::::::::::::::::::i;:::l l l    ,r ニ 'l
>>597・・・中卒のDQN旋盤工と推測・・・性交経験なし・・・

603 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:05:27 ]
自分で測定するのが一番いいのだろうけど、
回路シミュレータでやってる人がいるので
www.geocities.jp/ltspice_swcadiii/tube/index.html

これをベースにやればどう?

604 名前:601 mailto:sage [2007/04/24(火) 21:42:16 ]
あー参考になりそうだけどむずかしいな。。。回路設計とかの知識はまったくないもんで。
きほんてきなことなんだけど位相特性というのは、
周波数成分ごとの信号の遅れ(ディレイ)と単純に考えていいの??
ここのページのグラフだと、高域成分ほど遅れてると見るんでしょか。
実際に周波数特性をフラットなまま周波数成分ごとの遅れをシミュレーションするとしたら、
どういう実装方法になるんだろう。

605 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 21:58:23 ]
位相特性は位相特性 高域程ってあのグラフは1Mまで伸びてるから

10KHzで360度だから1遅延程度を入れて位相特性図を描きなおした方がいいと思う
位相だけを補正するなら 
 APF=オールパスフィルタ
が 検索キーワード


606 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:00:45 ]
ようわからんけどFFTで帯域ごとに処理でいんでね?



607 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:05:36 ]
FFTで帯域ごとにってのは・・・
 短時間FFTで周波数軸上で音の加工は基本的に出来ない。
 短時間FFTを使うならFIRフィルタの高速計算の目的で

位相特性だけを加工したいなら、オールパスフィルタ( IIRフィルタ)を複数組み合わせるのが最適
オールパスフィルタには1次と2次があり、
どちらも実現式は非常に簡単。

googleさんで調べて、ダメならまた聞いて。

608 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:25:15 ]
DTM板の関連スレを焼きなおしてるだけじゃん最近の話題って
なんでそんな貧しい行為に必死になるかな


609 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 22:40:03 ]
高域だけを遅延すりゃいいのなら、FIRフィルタでも出来る
0, 0.038394
1, -0.188396
2, 0.958548
3, 0.191451
これで大体高域が90度回る

低域で位相を回したいならIIR-オールパスフィルタでないと面倒だ

610 名前:デフォルトの名無しさん mailto:sage [2007/04/24(火) 23:01:38 ]
これで44.1Kサンプルで3.5K付近から90度回せられる。 遅らせたいなら係数の順番を逆にする
0, 0.0370952
1, 0.0338991
2, 0.0622815
3, 0.0796952
4, 0.1040610
5, 0.1494064
6, 0.1928090
7, 0.2834788
8, 0.7217380
9, -0.5518646
10, -0.1280079
11, -0.0307499
12, -0.0003218
13, 0.0023316
14, 0.0115652
15, 0.0163134
16, 0.0076485
17, 0.0086209

611 名前:601 mailto:sage [2007/04/24(火) 23:07:07 ]
オールパスフィルタって、存在はは知ってたけどこうゆうときに使えるのか。
とりあえずフィルタの実験に入ることにします。
FIRも係数このぐらいのなら低負荷でいけますね。(てか設計すんの速いですね・・・

612 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 01:13:29 ]
設計はMatlabでポンだよ。

613 名前:601 mailto:sage [2007/04/25(水) 01:18:18 ]
位相いじるの面白いですね、オーディオ的にかなりいい経験です。
オールパスフィルタをスタックしたりして極端なことやってみてるのですが
スペアナ見てるぶんには周波数特性変わらないのに、
ほんとに音の太さとか(というと曖昧だけど)ニュアンスが変わって
特にベースやキックなんかの低音楽器はわかりやすいですね。
周波数特性だけじゃ出音は語れないっての痛感・・・

614 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 02:33:15 ]
本来は位相も含めて周波数特性というんだが、スペアナとかで見える値は振幅の絶対値
でしかないわけだから本来の周波数情報のうち大部分欠落した情報を見せられているから
無理もない話なのかもしれん。

615 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 03:03:57 ]
真空管の振幅を実際見てないとイメージしにくいだろうなあ。
経験的にどうなるかは知ってても、知らない人に説明できる自信は無い。orz

なんとなくプラグイン買う金がないから自分でなんとかしよう的な雰囲気はあるよね。
PCでシュミレーションもいいけど、実際に回路設計して半田ごてで制作するのも楽しいと思うよ。

616 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 06:30:10 ]
> 本来は位相も含めて周波数特性というんだが

位相の周波数的変化を群速度という。



617 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 10:12:43 ]
理屈抜きで音だけでいいなら、
素の音と、軽くディストーションをかけてLPFを通したものをまぜて、
それにディストーションをかけてHPFを通すと、アンプの音になる。

役立つ参考リンク
www.harmony-central.com/Guitar/guitar-amp-evolution.html
www.harmony-central.com/Guitar/guitar-amp-evolution.html

618 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 10:16:01 ]
なんだここ荒してたのもアイツだったのか
世も末だな

619 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 17:16:41 ]
何をいまさら

620 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 08:29:57 ]
FIRフィルタで位相が変化しないフィルタが作れるっていうのは、それは遅延を無視してるからだよね?

621 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 08:46:44 ]
よし、googleさんで、このスレがヒットするように書き込み

オールパスフィルタで フェーズシフタとかワウワウ とか

622 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 22:50:54 ]
前から思ってたのだが、
このスレってスレタイから想像するのと微妙に雰囲気違う気がするな。
次回から【FFT】デジタル信号処理プログラミング【IIR/FIR】とかにしてはw

623 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 23:18:18 ]
それは悲しい。

624 名前:デフォルトの名無しさん mailto:sage [2007/04/26(木) 23:40:49 ]
>>622
おまいはスレタイからどんな想像するのか言ってみろ

625 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 00:47:34 ]
いやほら、サウンドのプログラミング、サウンドをプログラムするというと
もっとサウンドそのものというか、コンテンツ自体に近いイメージないか?
あとゲーム系。実際サウンドプログラマーと呼ばれる職種があるしさ
シンセなんかの音色を作ったりするのもサウンドプログラミングと呼ばれることがあるしな。

626 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:00:32 ]
おすすめ2ちゃんねるに注目w



627 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:16:41 ]
>>625
その辺はDTM板で扱う話題のような。

まあ、紛らわしいのは良くないんで次スレは「音声処理」にでもするか?
「デジタル信号処理」は音声以外にもいろいろあるし。


628 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:25:03 ]
>>625
シンセの音色はマズイが、その上はまあスレ違いとは言われないだろ

629 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:35:29 ]
自分は「サウンドプログラミング」の語感からだと音に関しての出力段に近い処理の事のニュアンスが強いな。
このスレの流れだと「信号処理」(デジタルに限らないが周波数は可聴領域)って感じかしらん?



630 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 01:49:05 ]
そんなに話題の幅を狭めなくても、音に関する処理全般をプログラム板的に扱うスレ、でいいじゃん。


631 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 02:47:44 ]
このスレでよく出てくるようなデジタルフィルターや、いろいろな変換/解析技術とか、
デジタルオーディオを扱うソフトウェア技術を総称してなんと呼ぶのか、ということだな。
DSPプログラミング、とかもありかな。

632 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 04:42:50 ]
サウンドの技術屋なんてただでさえ多くないんだから別に細分化しなくてもいいでしょ。
ドライバ語ってもいいし、MIDIデータ語ってもいいじゃない。

633 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 06:12:38 ]
同意

それにしても
サウンドプログラミングというと、楽器機材のオペレーションや打ち込みを意味したり
サウンドエンジニアというと、音楽スタジオのレコーディング・ミキシングエンジニアを意味したりするから
世の中ややこしいわな・・・
音楽スタジオのエンジニアのほうもそう言ってたの聞いたことある

634 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 06:32:14 ]
空理空論ばっかりの荒しうぜぇ

635 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 07:48:40 ]
まあ、プログラム板にある時点で察しろってことだな。

636 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 10:05:21 ]
シンセの音作りや、効果音の鳴らし方の質問も答えるよ。



637 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 10:46:00 ]
MIDIデータの音長に1/fのゆらぎを与えるプログラムの書き方を教えてください

638 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 10:57:13 ]
1/fゆらぎ というのは、周波数に反比例してノイズが大きくなる事
正規乱数を累積すればいいのだが、正直にやると、発散してしまう。

単純に乱数を2個取って は cは小さい係数として
d := ( (rand()-rand())*c + d*(1-c) );

この d を単位時間毎に更新しては、オフセットとして加算しては?


639 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 10:59:12 ]
>>637
ランダムに値を増減する、というのを何度も繰り返すと、
元の値に近い部分が最も多く、元の値から離れたものが最も少なくなる。
これが一番簡単な1/fゆらぎの作り方。

640 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 12:02:55 ]
ゲーム業界の狭い呼称を世界標準と勘違いされてもねえ。
ここは音響全般のプログラミングでしょ。

ゲームとか楽曲とかのエンジニアはミュージックプログラミングの方が近い。
DTM板の方が適当だろうね。プログラムあんまり関係ないし。ソフトでどう表現するかの方が主体。

641 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 15:28:54 ]
Flashでサウンドプログラミングしてる人っている?
いろいろできるみたいなんだけど。
www.dtmm.co.jp/archives/2007/04/flashmod.html

642 名前:デフォルトの名無しさん mailto:sage [2007/04/27(金) 20:32:19 ]
>>641
おお興味ある。
前からFlashでリアルタイムのサウンド処理できたらと思ってたんだけど、不可能とあきらめてた。
で、びっくりしたんでざくっと調べてみたんだけど、
最新のFlash CS3(FLASH 9) with ActionScript3で可能になってきたっぽいな
ランタイムVM(Flash player)もインタープリタ式からJITコンパイラに変わったり
すげすげ

643 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 01:51:29 ]
もうねすれ違いでわりぃんだけど
ECMAScriptのJIT実装ってどうやって型の解決してんだか、そっちが気になったのと
AMラジオの帯域だと今時のCPUで処理可能なんだなと思うとサウンドプログラミングって名前で良いのかとちょいと疑問に思う(w


644 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 07:08:22 ]
もう支離滅裂やん
いい加減にしろキチガイ

645 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 08:06:19 ]
AS3ってJTIとかそういうのじゃなくて
単なる実行エンジンの改良で早くなったときいたんだけど。
というかマジちんこ痒い。

646 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 08:10:14 ]
いい加減にしろよ



647 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 08:27:41 ]
といって、このスレでf0/Qがコントロール出来るフィルタ教えろと言っても教えてくれんだろ?

648 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 09:18:10 ]
pc.watch.impress.co.jp/docs/2006/1122/mobile357.htm
2.7MHzの1bit信号を88.2kHzのPCMに変換するデシメーションフィルタ
って、あるけど
www.sony.jp/products/Consumer/SACD/format/index.html
サンプリング周波数は2.8224MHzとあるから64倍でしかないのだから

コレって何てこと無い単なるFIRのLPFだよね?
演算負荷下げる為にFFT使う程度だと思えるのだが

649 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 13:06:20 ]
なんだよソフトウェア・ラジオの話題かよ
そんなInterfaceの過去記事みたいな話題を
いまさらここでやって何になるの?

何かハッタリをこいたつもりなのかこの親父は

650 名前:デフォルトの名無しさん mailto:sage [2007/04/28(土) 13:07:42 ]
>>648はDSDかよ

651 名前:デフォルトの名無しさん [2007/04/30(月) 08:57:31 ]
Winampのプラグインか、VSTプラグインで、エフェクタ系のプログラムを
作ってみたいのですが、何かいい参考書、文献、Webなどありませんか?
みなさんは、サウンドプログラミングを始めるとき、何をとっかかりにして
スタートしたんですか?







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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