- 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/
- 166 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 08:47:14 ]
- >>165
逆位相波を重ねて雑音を消す技術は既に色々応用されていますが何か。
- 167 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 10:49:05 ]
- 音はね、エネルギーなんだよ。
だからスピーカーで音を消すにはスピーカーがエネルギーを吸収しなければいけない。 だったら吸音剤をおいた方がいいよね。 ただね、 ダクト内部のような場合は、出口で丁度圧力変化がゼロになるようにしてやれば 外に出ないというのはあるよね。 でもダクトの中のエネルギーは増えている。当然だよね。 高速道路なんかの壁のスピーカーも同じ理屈だね。
- 168 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 11:38:05 ]
- >>167
吸収しなくても逆方向のエネルギーをぶつけりゃいいじゃん。 吸音材ができることなんてタカがしれてる。
- 169 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:05:03 ]
- 運動量や圧力はマイナスになれますが
エネルギーはその2乗項なので、物理量が虚数にならなければエネルギーは消滅しません。 つまりマイナスのエネルギーというのは無いのです。 もしかして、マイナスのエネルギーという意味を、 エネルギーを閉じ込めて、その閉じ込めた空間で吸音=熱エネルギーへの変換を行うとい う意味に使っているのかもしれませんが
- 170 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:13:35 ]
- おしえてぇ♪ くだぁさい♪
この世の引力と反発力に♪ 符号の違いに意味があるのならば あなたは浮きますか?
- 171 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:14:48 ]
- >>169
音は波なので逆相を重ねりゃ弱くなる。つりあいとって合力0にすりゃいいだけ。 あんた、頭悪いね。
- 172 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:25:39 ]
- 有限の大きさの面で音場の逆相を作る事は出来ない。
音は圧力と運動量が交換しながら伝わってゆく でも圧力はスカラーだけど、運動量は方向成分を持った(つまりベクトル) で圧力も場の上にあるから、 逆相を重ねるには3次元上に圧力コントロールを行える装置を配置しなければならないわけだ。 ダクトの中や、ヘッドホンのようにその一点に絞ればその点だけをコントロールする事は可能だが 音に音をぶつけてエネルギーを吸収する事は出来ない。
- 173 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:36:33 ]
- 生半可な知識で頭の悪い屁理屈捏ねている香具師がいると聞いて来ました。
- 174 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:39:37 ]
- まったくだ。
任意の3次元空間で音が消せるというなら、 ハイファイ対応のハウリングキャンセラーなんて簡単に作れると思ってるんだろうな
- 175 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:46:04 ]
- 音の振動を伝える者をなくせばいいんじゃないの?
- 176 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 12:47:05 ]
- つ[真空ポンプ]
- 177 名前:デフォルトの名無しさん mailto:sage [2006/08/07(月) 13:05:17 ]
- 共鳴させてエネルギーを集中させてから回収するというアイデアはどう?
- 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)という指数=三角関数が必要にならない?
|

|