[表示 : 全て 最新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/

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の規格書とかお金出せば買えるよ






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

前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