07/12/09 11:36:04
>>336
FFTSSはライセンスがGPLじゃないんだね。
上記の著作権情報をソース/バイナリどちらであっても
含めないといけないとあります。
ダウンロードに名前とemailと目的まで入力か...
349:デフォルトの名無しさん
07/12/09 15:41:18
>>346
ども。参考にするよ。FFTとかFIRの仕組み自体の実装には興味ないんだけど、
設計法は勉強したいと思ってて、そのあたりは結局のところ自分で作らないと
勉強にならないから自分でやるよ。
ちなみに、車輪の再発明って物事の実現効率しか見てなくて、
逆に学習とか、車輪の再発明そのものが必要になる場面もあったりする。
ツッコミいれるときはその意図に注意した方がいいかも。
(今回はそのあたりの前提を言ってなかったんですまんかった)
350:デフォルトの名無しさん
07/12/09 17:15:08
学習目的のそれは、再「発明」とは違うんじゃないかな。
再開発とか再実装あたりが適切じゃないかと思う。
既存の発明の情報を得て、理解した上で実際にやってみるって作業でしょ。
再発明ってのは、まだどこにも存在してないと思い込んで、既存の発明を参考にせずに一から自分で作る話。
実装とか設計以前の着想とか発案から始めて、先人達がとっくに解決したような問題で延々悩むことになる。
まず調べろ、ってこと。
351:デフォルトの名無しさん
07/12/09 17:52:01
>>350
車輪の再発明、ってのは単に言い回しでそうなっているだけで、
最初から>>350の言う厳密な発明よりも広い、開発をも含む意味で使われてるよ。
ほぼ同じ文脈で使われるNot Invented Here症候群(自前開発以外を採用しない)の場合も、
厳密な発明って意味の他に開発の意味も含むし。
とりあえず、バタワースあたりの振幅特性だけもってくる直接設計法で
一番上のバンドで誤差吸収ってのを考えた。
352:デフォルトの名無しさん
07/12/09 20:43:06
>> 345
CiNii - 線形位相完全再構成不等分割フィルタバンクの設計
CiNii - 線形位相完全再構成不等分割FIRフィルタバンクの設計
論文みたいだね。やくにはたちそう:)
353:デフォルトの名無しさん
07/12/09 22:09:36
>>352
ありがとー! 論文は読み慣れてる(分野違うけど工学系)んで問題ないです。
FIRの方をざっくり読んだけど、他の方法で漸近的に設計しておいて
最後の1or2バンドで補償してる感じかな……。
354:デフォルトの名無しさん
07/12/28 04:01:10
>>293
音響レンズってなんだ??
355:デフォルトの名無しさん
07/12/28 04:03:00
すまん自己解決
(問題-18)
音響レンズとは何か。
どんな機能を果たしているのか。
どんな材質で出来ているのか。どのような特性があるのか。
--------------------------------------------------------------------------------
(解答-18)
音響レンズとは探触子の圧電素子より前面に配置してある構造体で、音波を収束させる目的を持つ。
生体での音速に比べ遅い音速約1000m/secのシリコンで出来ている。
凸面形状をとることにより探触子から出た超音波を収束させることが出来る。
もし、音響レンズに生体より早い音速を持つ物質を使用した場合は
凹面形状をとらないと探触子から出た超音波を収束させることが出来ない。
356:デフォルトの名無しさん
08/01/03 16:51:20
DSPの経験が全くないのですが、2nd order Butterworth lowpass filterの、カットオフ周波数(1)での、ある周波数(2)の入力の位相の変化ってどうやったら求められますか?
ディレイのフィードバックで発振させて、フィルター入れたらピッチが変わって音痴になってしまいました。位相ズレ分のディレイを補正したいんです
357:デフォルトの名無しさん
08/01/04 07:24:01
普通はZ変換にw*i を突っ込めば出ますが?
でもディレイ入れるだけでピッチが変わるって・・・・何かその前にお間違えでは?
358:デフォルトの名無しさん
08/01/04 12:35:24
サウンドプログラミングって面白いね!
359:デフォルトの名無しさん
08/01/10 00:29:29
PCM出力用のバッファからリアルタイムでスペクトルを取得する為に
自分でコーディングしたFFTに short(signed 2bytes) 要素数65536 を処理させたんですが、
頑張っても 0.22 秒ほど掛かってしまうようです。
車輪の再発明をするのもあれなので、「FFTをするなら普通はこれを使う」といった手段、
例えばもっと高速に動作する既成dllやライブラリなどは無いでしょうか?
360:デフォルトの名無しさん
08/01/10 00:50:34
速度を求めるならfftw
俺は呼び出しの簡単さ優先なんで大浦氏のFFTライブラリ
(それでも自分で書くよりも断然速い)
361:デフォルトの名無しさん
08/01/10 03:08:34
fftwなら、MKLにも同梱されているしちょっとした修正でCUFFTにも移植可能だし、
使っている人が多いと言うのも魅力だね。後は、2の冪に縛られずに済むのも手抜きにはいい。
362:デフォルトの名無しさん
08/01/10 07:21:11
>>359
整数ではなく浮動小数点でデータを与えた方が変換時間が短いと思う
もっと少ないサイズでやるなら固定小数点も考えられるけど、2^16個では固定小数点では無理
あと、そもそも1秒分以上のサンプリングデータを0.22秒で処理出来ているのだから十分高速だと思うよ。
スペクトル表示が目的なら 4096か8192点で十分でしょ。
363:デフォルトの名無しさん
08/01/10 07:22:50
>>359 SINのテーブルや、ビット反転アドレスなんかのテーブルは事前に作ってるんだよね?
これを毎回作ったり、sinを毎回計算させてたら遅いよ
364:デフォルトの名無しさん
08/01/10 08:34:20
>359
この手の最適化話するならマシンスペックと施した最適化くらいは書いとけ、といつも思う。
365:デフォルトの名無しさん
08/01/11 00:37:22
>>363
>これを毎回作ったり、sinを毎回計算させてたら遅いよ
CUDAなら毎回計算した方が早い罠。
366:デフォルトの名無しさん
08/01/12 13:05:31
OpenALを使って3Dサウンドをやってみたいのですがググって見ても断片的なblogの記事くらいしか
日本語資料が見つかりません
どなたか日本語の各種ドキュメント、書籍等をご存じの方がおりましたら教えていただけると助かります
よろしくお願いします
367:デフォルトの名無しさん
08/01/12 14:12:10
>>366
URLリンク(www.google.co.jp)
368:デフォルトの名無しさん
08/01/12 17:23:21
義務教育受けてないなら諦めろ
受けてるならなんとかなる
369:デフォルトの名無しさん
08/01/13 15:41:44
ジュニアハイスクールレベルの英語教養を舐めるなよ
370:デフォルトの名無しさん
08/01/13 16:12:26
大丈夫、いみじくも「ジュニアハイスクール」と呼ばれるところに行っている生徒程度の英語教養があるなら。
371:デフォルトの名無しさん
08/01/15 13:08:52
フェーズメータを作成しようと思うのですが、知識が無くて
困っています。参考文献や参考になるサイトがあったら教えてください。
372:デフォルトの名無しさん
08/01/15 13:19:09
フェーズメータって事は、サイン波オシレータと
そのオシレータとの位相差を表示したいって事?
それをどういう環境で作りたいの?
パソコンの場合、ディレイがハード毎に違うし、そもそも出力と入力が同じサンプルクロックとは限らないから
2CH 入力して 出力を L/Rのどっちかの端子から入力させて位相を比較するとかじゃないと
汎用性が無いだろうな
位相の測定は出力オシレータを90度位相差が出る sin/cosのベクトル積型にしておいて
sin/cos成分との掛け算で出すのが一番簡単だと思うよ
373:デフォルトの名無しさん
08/01/20 13:17:27
>>372ありがとうございます。
"sin/cosのベクトル積型"というのはどういう
事なのでしょうか。すみません馬鹿で。
374:デフォルトの名無しさん
08/01/20 16:23:40
LRでリサージュ描くんじゃだめ?
URLリンク(ja.wikipedia.org)
(なんか根本的に勘違いしてたらごめん。)
375:デフォルトの名無しさん
08/01/21 09:42:03
ベクトル積じゃなくて回転行列との掛け算だろう
| c , s |
|-s , c |
376:デフォルトの名無しさん
08/01/25 01:10:48
( ゚д゚)ノ ハイ!シツモンデス!
文書では上手く説明できないと思ったので、グラフ描きました。
URLリンク(www-2ch.net:8080)
デジタルオーディオのミキシング用に、IIRフィルタを掛けて目標の周波数帯域を取り出そうとしています。
また、リアルタイムに取得する周波数帯を変更していく予定です。
そこで、まずはsin波形で色々と試しているところなのですが、
現象の呼び名が分からないので検索できませんでした。
グラフを見て頂いて、問題箇所を確認してもらえるでしょうか。
① IIRフィルタを掛けた場合、波形が後方へズレる?と思いますが、これは正しい現象ですよね?
その場合、ズレ幅はなんと呼ばれるのでしょうか?
また、その幅をIIRの係数か何かから事前算出できるものなのでしょうか?
② また①のズレ幅ですが、周波数によって変わると思うのですが、これは正しい現象でしょうか?
③ フィルタの開始、終了時に不安定?になる区間があると思いますが、これを排除する事は可能でしょうか?
また、区間の長さを事前算出できるものなのでしょうか?
④ グラフにはありませんが、IIRフィルタの係数を徐々に変更した場合、
例えば low-pass の通過帯域を 100hz → 1サンプルづつに+1 → 1000hz と変更し、
リアルタイムに取得帯域を変更した場合、正しく計算できるものなのでしょうか?
宜しくお願いします。
377:デフォルトの名無しさん
08/01/25 01:38:35
位相という言葉すら知らずにいきなりデジタルフィルタに手を出す時代なのね・・・
378:デフォルトの名無しさん
08/01/25 02:49:15
馬鹿は際限無く馬鹿ということ
379:デフォルトの名無しさん
08/01/25 03:25:54
>>378
とりあえず、位相と窓関数とRBJAudioEQCookBookとピーキングフィルタとウェーブレット
を愚ぐれ。
しかし位相も知らずにIIRとかどうやって知ったんだろ...。
380:デフォルトの名無しさん
08/01/25 05:00:54
>>379
>>>378
>>376
381:デフォルトの名無しさん
08/01/25 09:12:27
>>376
IIRフィルタに限らずデジタルフィルタは Z変換して、そこにe^(iw) をぶち込むと
周波数特性が出ます。
周波数特性は、 複素数の絶対値がゲインで、複素数の角度が位相です。
だから、貴方がやるべきことは、Z変換を理解する事です。
それには複素数を知らなければいけませんし、
そのついでにラプラス変換とフーリエ変換も勉強しないといけません。
その後でしたら説明出来ますが、今は説明が難しいです。
382:デフォルトの名無しさん
08/01/25 09:16:58
なお、最後の質問は、Z変換を理解した段階でも、まだ答えるのは難しい問題です。
実用的には十分ゆっくり変更するなら大丈夫ですけどね
383:376
08/01/25 22:19:20
>>377
>>379
SCILAB使ってます。便利な世の中です。
>>381
とりあえずz変換を勉強中です。
今のところ、離散時間信号から複素数平面への写像と捉えてます。
まだ複素数平面状で何ができるのか勉強不足なので、相違のズレが(言葉遣いあってます?
なぜ発生するかは理解してませんが。
>>382
リアルタイムにグリグリできるパラメトリックイコライザっぽいものを
作ろうと思ってるんですが、もしかして使う手法を間違ってます?
>>378
罵倒するのはいいけど、せめて1単語でもヒント書いてよ
でないと、オレと同階層の住人。
384:デフォルトの名無しさん
08/01/25 22:21:14
>>381 相違のズレ>位相のズレ
“そうい”ってなんだよオレ...orz
385:デフォルトの名無しさん
08/01/25 22:55:33
>>384
僧衣でググれ
386:デフォルトの名無しさん
08/01/25 23:18:18
まあ、なんだ。せっかくのスレなんだしギスギスしないでも...
>>376
キーワードは「直線位相」だ。
387:デフォルトの名無しさん
08/01/25 23:29:40
>>383
プログラミングの現実的な側面から言うと、
4)1サンプル毎に変化させるような仕様は事実上不必要かと
本当に1サンプルの時間精度で制御したいなら別だけど。
実際問題として、たとえばVST plug-inならDAWによるが
数千~数万サンプル単位で波形データが渡される。
# 丸数字はやめて……
オフライン処理なら意味のある仕様かな。
その場合は1ステップ毎に係数書き換えで済むような気がする
キーワードとしては、後は群遅延とかかなぁ。
388:デフォルトの名無しさん
08/01/26 03:37:28
>>383
パライコっぽいってことはパライコとは微妙に違うの?
1サンプルごとになぜ係数を変えるの?
単にパライコなら379に書いてあるように、RBJAudioEQCookBookの係数を使って
複数のピーキングフィルタを実装してつなげればできるけど。
389:デフォルトの名無しさん
08/01/26 08:36:43
>>383
Z変換して複素数を突っ込めば、位相のズレが起きるのは当然と判る
位相のズレを起きないようにするには、虚数成分がゼロにならなければならない。
それには、分母が(1+aZ+...)なんてなってると分子が同じ係数、つまりフィルター
でない状態でなければ無理。
パラメトリックイコライザなら1サンプル毎に係数をゆっくり変更するので合ってる。
ただ、IIRの場合、その係数の変更途中で分母のゲインが変わってくるから
構成方法によっては更新速度の影響が出て来る。
でも、実用的には、ひたすらユックリ変更するという事で逃げればいい。
390:デフォルトの名無しさん
08/01/26 13:26:38
よくわかってないんだけど、1サンプル毎に係数をゆっくり変更と言ってるのって、
パライコのフェーダー操作したときの話?
391:デフォルトの名無しさん
08/01/26 13:48:51
グリグリって書いてるじゃん
392:デフォルトの名無しさん
08/01/26 17:55:34
そういえばというか、
IIRが係数を急激に変化させたとき不安定になるのって
遅延器内の値も適切に補正できれば回避できたりしないかね?
393:376
08/01/27 17:49:43
みなさん、ありがとうございます。キーワードを参考に、ネット記事と書籍を読みふけってます。
>>386
「直線位相」でググるとFIRの記述が多く見つかりましたが、IIRにも同様の内容があてはまるのでしょうか?
現在、複素数平面とかに関して勉強してるので、そのうちにでてくる気もしていますが・・・
>>387
オフライン処理になるとは思いますが、上手くいけばリアルタイムも考えてます。
それも担ってステップが少ないIIRを選んだのですが、間違いだったかな。
「群遅延」とは周波数全体の位相が同時にズレるという認識であってますか?
一応、サイトとかまわってみたのですが、どうもシックリくる説明が見つからなくて困ってます。
>>388
説明不足でした。スミマセン
パライコのように目標の周波数を引き上げるのではなくて、その周波数帯を取り出したいんです。
さらに、その帯域をリアルタイムでグリグリと移動させたいなと考えてます。
なので、ピーキングではなくてバンドパスを組み合わせたいのですが、
バンドパスさせた複数の波形をそのままミキシングすると波形が壊れてしまったので、問題と原因を探してるところです。
# 根本は数学を分かってないところが大問題なのですがw
↑改行制限で分割されました↓
394:376
08/01/27 17:50:14
>>389
>構成方法によっては更新速度の影響が出て来る。
この影響範囲(時間?)を事前に算出するような事は可能なのでしょうかあ?
# まぁ、今の僕にはできないとしてw
勉強を進めていくうちにできるようになるのか、現実的に不可能なのかだけでも教えてもらえると助かります。
>>390-391
中心周波数をリアルタイムでグリグリと変更して取り出したいと考えてます。
グライコのようにピークを線形移動させるというイメージです。
十分なサンプリングレートが取れていれば、ゆっくり係数を移動させる事ができそうなので、その方向で考えてます。
25Hz -> 20kHz へ1秒で移動の場合、44.1kHz/secで1サンプル +22.32Hzの変更となってしまいますが、
まぁ、ここまで過激な対応が可能かどうかは別として。
>>392
急激な移動が起こる各バンド帯を並列で計算しておいて、移動時に遅延させるという事でしょうか?
395:デフォルトの名無しさん
08/01/27 18:04:37
FIRの場合は遅延を入れただけの信号に対しての直線位相となる。
つまりZ^n で割った時に、
Zに複素数を入れた結果の虚数成分が常に0である必要がある。
だから、分母に遅延要素以外がある IIRでは直線位相は実現出来ない。
直線位相でなければいけないのならFIRにするしかない。
しかし、FIRで25HzのBPFなんて作ろうとしたらどれだけタップ数が必要か
しかもそれをリアルタイムにf0を更新しようとしたら、まあ無理。
やるとしたらFFTで計算させるしかないね。
常にそういうスイープするなら、
FFTで時間引き伸ばしパルスなんて作るといいのかも
とりあえず、どうして直線位相でなければいけないのか
どういう用途か判れば、アドバイスしてくれる人がいるのかも
396:デフォルトの名無しさん
08/01/27 20:37:53
>>393
>「群遅延」とは周波数全体の位相が同時にズレるという認識であってますか?
簡単にいうと、(位相遅れによる)各周波数での遅延時間。定義は位相遅れの周波数微分。
(全体で一つの群遅延ではなく、周波数毎に群遅延値が出てくる点に注意)
位相遅れ量が等しくても、周波数によって波長が変わるので遅延時間は変化する。
波長によって遅延時間が違えば当然波形が歪むので、それをチェックするために群遅延を使う。
で、周波数-位相遅れのグラフが直線になる場合を直線位相といって、
グラフが直線→位相遅れの周波数微分が一定→遅延時間(群遅延)が
全帯域で一定→波形が壊れない→(゚Д゚)ウマー
397:デフォルトの名無しさん
08/01/28 06:15:24
いまいち何を実現したいのかがわからないな。
FFTして取り出したい帯域をぶっこぬくのじゃだめなの?
目的は解析?それとも音色?
398:デフォルトの名無しさん
08/01/29 11:15:19
>バンドパスさせた複数の波形をそのままミキシングする
といってたから直線位相なんじゃまいか。
>ミキシング用 >グリグリ
ということだからVSTエフェクトでも作りたいんだろうとは読み取れるけど。
まここはDTM板じゃないので、住人も幅広く
絞って説明しないとわかってもらえないときあるかもね
単にグリグリだったらIIRのバンドパスで
f0急激に変化しないように制限すれば良さそうだけど、
複数の周波数帯取り出して合成しなきゃいけないんなら、FFTが現実的かもね。
ただこの場合はグリグリするにも周波数方向の分解能は制限をうけるから
なめらかさは犠牲になるかなあ。
399:デフォルトの名無しさん
08/01/31 20:49:43
DFTおよびFFTのプログラムを作ってみたのですが
DFTとFFTで結果がまるで違います。
しかし両方とも逆変換をすると、元の値に戻るのは確認したので
計算はあってると思うのですが、さっぱりわかりません。
実験は以下のようにやってみました。
・元信号をsin関数で作って配列Xに入れる
・XにDFTおよびFFTをかけたものを配列Fに入れる
・FにIDFTおよびIFFTをかけたものを配列Yに入れる
・XとYの実軸の値はほぼ同じ。
虚軸に誤差と思われる値が入っているのは確認しています。
何か誤差が発生していたりするのでしょうか?
400:デフォルトの名無しさん
08/01/31 23:20:47
Σsin*Xn で求めたものと FFTで求めたものでは 誤差の種類は違うよ。
80bit浮動小数点で計算してる?
64bitのdoubleだと結構4096点くらいでも気になる誤差だよ。
でも計算があってるかどうかは、サイン波を合成したのを入力してみればいいと思うのだが?
401:デフォルトの名無しさん
08/02/01 05:32:14
まさかとは思うが
DCTとFFT比較してたりしないよな
402:デフォルトの名無しさん
08/02/01 14:58:25
レス下さった方には申し訳ないのですが
もっと初歩的でした。
振幅と位相の計算をしてませんでした・・・
結果がまるで違うように見えたのは
有効数字やcos、sinなどの関数の誤差によって
あまり関係の無いパラメータが変動しているためでした。
無事FFTの計算はできるようになったので
いろいろやって見ようと思います。
ありがとうございました。
403:デフォルトの名無しさん
08/02/02 02:47:09
すみません質問です。
ステレオでLRの位相を90度ずらすと、左右に音が分離して聞こえますが、
この左右に離れている音の位置間隔を中心寄りに縮めるには、どうしたらよいのでしょうか?
0~90度の間で左右の位相幅をいじっても、90度近くないと結局音が分離したようには聞こえず、
90度近いと逆に左右に音が離れすぎてしまいます。
LRのパンニングではなく、コーラスとしてステレオ感を調節するエフェクターを実装したいのですが、
良い実装方法などありましたらご教授ください。
404:デフォルトの名無しさん
08/02/02 03:13:36
MSバランス
405:デフォルトの名無しさん
08/02/02 07:27:20
位相を弄るんじゃなくて、遅延時間を弄る方がいいと思うよ。
ただ、遅延時間をスムースに変更するのは
・100タップくらいのFIRの係数を多数用意しておく
・あらかじめ高域をカットしておいて6タップくらいのFIRで1/2遅延と按分
・内部で4倍くらいオーバーサンプリングして//
あと、遅延時間だけでは移動感が出ない。音量も変更しないと
406:デフォルトの名無しさん
08/02/02 18:05:08
音楽から和音抽出ってむずいねw
407:デフォルトの名無しさん
08/02/02 18:50:35
フーリエ変換すれば何とかならんこともない
408:デフォルトの名無しさん
08/02/02 18:58:37
そんなもんで出来るんなら苦労しないわ。
和音抽出するには、まず識別する事が必要。フーリエ変換だけじゃ無理。
409:デフォルトの名無しさん
08/02/02 20:17:04
倍音が邪魔だし
410:デフォルトの名無しさん
08/02/02 20:58:26
倍音成分含む音なら基音を簡単に見つけられる。
倍音成分が少ない(無い)音やピッチが揺れる音(ベル系)は難しい。
その音が和音だと解っているなら和音も見つけられる。調も解れば精度が上がる。
ただ、和音の中に倍音がある場合(ギターのコード等)はフーリエだけじゃ多分無理。
411:デフォルトの名無しさん
08/02/02 21:07:39
ドラムとかシンセとかいろいろ入ってると難しいだろうな
412:403
08/02/03 05:37:33
皆様回答ありがとうございます。
>>404
MSバランスって初めて聴きました。
MIDをモノラルにしてLRをステレオとして合計3つの音源で広がり感を
調節するものようですね。
なるほど、中央に音源を置いたほうがいいのかも。
ちょっと試してみたいと思います。
参照:
URLリンク(stagesounds.blog74.fc2.com)
413:403
08/02/03 05:38:06
>>405
遅延時間をいじるというのは、LRそれぞれに別のFIRをかけて、
左右の遅延時間に差をつけるということでしょうか?
コーラスの場合は、左右のディレイ分の変化、つまりピッチ感の変化の位相を
ずらすことによって、同じ音源を微妙に違うものとして耳に届けることで、ステレオ感が表現できると理解しているのですが、
FIRの場合は、左右のフィルタの係り具合、つまり音色の微妙な違いによって、ステレオ感を表現するということでしょうか?
その場合、ステレオ音の広がりの間隔をどのようにして調節するのかが理解できていないのですが、
もう少しヒントをお願いできないでしょうか?
414:デフォルトの名無しさん
08/02/03 09:00:34
遅延時間を変更するのに1サンプル遅延するのに苦労は無いけど
0.5遅延するのにどうする? 単に2つの平均を取ると、これはLPFになってしまう。
高域をあまりカットしないで0.5遅延したいというような場合には
比較的長いFIRフィルタが必要。
415:デフォルトの名無しさん
08/02/03 18:41:33
というか、コーラス等のエフェクタ用途だったら、
遅延時間の解像度はサンプル単位で十分なのでは?
というか経験的には十分だったような。(44.1KHzとかのサンプリングレートなら)
どの程度のS/Nになるかは計算できないんだけどさ。
416:デフォルトの名無しさん
08/02/03 19:00:51
それで十分というならソレでいいんじゃない?
両耳の距離が17cmとして 170/340E3*44100 で22サンプルの遅延分
1サンプル単位にカクカクと変更しても気にならないといえばならない。
とりあえず思うような特性になるかどうか試してみるといいよ
417:デフォルトの名無しさん
08/02/04 01:06:18
コード抽出なら離散ウェーブレットじゃないの
再構成しないならオクターブバンドより狭く解析できるし
時間解像度的にも有利
418:デフォルトの名無しさん
08/02/04 12:46:12
その手の題材って、研究目的とかじっくりと取り組めるのでなけりゃ、
なかなか手を出しにくいね。
いくらかうまくいったとしても、道具としての実用レベルまでは遠い道のり・・・
419:403
08/02/05 03:52:34
>>405
>>414
>>415
>>416
回答ありがとうございます。
両耳への到達時間を1サンプル以下の単位で操作するためにFIRを利用するという意味なんですね。
やっと理解しました。
ちょっと実験してみたいと思います。
ありがとうございました!
420:デフォルトの名無しさん
08/02/07 11:54:50
サウンドカード付属のマイク入力(3.5ミニ)から入力された音声を
リアルタイム(非バッチ処理)にディジタル処理するプログラムの作成を考えています.
計測機器などはその製品ごと(というか会社ごと?)にコマンドが異なりますが,
サウンドカードも同様なのでしょうか?
windows Visual C++6 での開発を考えていますが,
後にUNIX系に移植するつもりです.
関数の使いまわしが出来るのかが心配になり質問しに来ました.
お願いします.
421:デフォルトの名無しさん
08/02/07 13:23:42
入出力は処理系依存だと思うけど
422:デフォルトの名無しさん
08/02/07 14:46:24
Windowsの場合は
1 低レベル オーディオAPI
waveInOpen/waveInAddBuffer/
waveOutOpen/waveOutPrepareHeader/waveOutWrite
窓へのメッセージで貰うか、CallBackを使う。
利点:サウンドカードをインストールすれば、ほぼ確実に使え、サウンドカードを意識する必要がない
欠点:色んなサウンドカードで音切れしないように考えるバッファを大きくとってレイテンシが大きくなりがち
ステレオ以上のマルチチャンネルは対応が難しい
2 DirectSound
URLリンク(msdn.microsoft.com)
利点:エフェクタ等、便利な機能が既にそろってしまっている。
欠点:DirectXがインストールされ、一部機能は対応サウンドカードである必要がある
3 ASIO
利点:低遅延
423:420
08/02/07 16:19:16
>>421-422
ありがとうございます.
低レベルオーディオAPIを使ってみます.
424:デフォルトの名無しさん
08/02/11 00:00:11
板違いかもしれませんが、質問させてください。
WindowsMediaPlayerのプレイビューのような、音楽にシンクロしてグラフィングが
変化する物(名前がわかりません)の作成の仕方が知りたいのですが、
どのように調べていいのかもわからず困っております。
ご存知の方がいましたら、調べ方についておしえてください。
425:デフォルトの名無しさん
08/02/11 00:04:29
>>424
それはグラフィクイコライザというものです。
音の高さに合わせて、それぞれの音の高さの音の大きさを棒グラフで表示します。
WMP等はこれをリアルタイムで行います。
原理は、フーリエ変換というものを使って信号を処理してそれぞれの周波数のゲインを解析しています。
手がかりは書いた。あとは検索しろ。
426:デフォルトの名無しさん
08/02/11 00:09:05
ありがとうございます。
大変重要な手がかりをいただけました。
早速検索してきますー。
427:デフォルトの名無しさん
08/02/11 01:53:23
ス ペ ク ト ラ ム ア ナ ラ イ ザ だ
428:デフォルトの名無しさん
08/02/11 02:00:52
ワロタ
429:デフォルトの名無しさん
08/02/11 03:24:13
>>425
あれって本当にフーリエ変換なんてやってるのだろうか?
大体のふいんきが分かれば十分だからもっと簡単な実装で良いんじゃないかと思わなくもない。
430:デフォルトの名無しさん
08/02/11 04:20:34
フィルタした音を再構成して使うんじゃなければただのIIRバンドパスで十分かもね。位相回ってもパワーには影響しないし。
IIRで完全なクロスオーバー作るのは難しいから、各バンドのパワーの和を厳密に元信号と一致させたいときは使えないけど、
棒グラフ程度なら十分だと思う
431:デフォルトの名無しさん
08/02/11 04:48:13
出てくる絵が変わっていけばいいだけなら、
無理にfftかけなくてもいいだろうけど、
スペクトル出すならなんかやってんだろうね。
432:デフォルトの名無しさん
08/02/11 11:05:56
パソコンの場合は十分な演算能力あるからFFTでもOK
ただ、FFTの都度CPUの負荷が上がるから消費電流の変動がノイズとなって聞こえるという困った事に
なおMP3はそもそも周波数毎に分割されてるのを再構成してるから、その時の情報を残している
可能性もある。
マイコン内蔵のDSPなんかで実現してる場合は
IIRフィルタでも共振型というかサイン波オシレータの構成だろう。
ようするにQ無限大の共振器に単発の窓関数かけて結果を見る
1個の共振器を時分割で使い回せば負荷も軽い
433:デフォルトの名無しさん
08/02/11 12:00:41
いつもは過疎スレなのにネタが落とされるとすぐにレスが付くな。
434:デフォルトの名無しさん
08/02/11 14:22:10
なんか前スレあたりでもほぼ同じ流れみたような
そしてそこでも、スペアナをグライコとよんでるやつがw
435:デフォルトの名無しさん
08/02/11 14:25:59
前スレじゃなかったこのスレだわ>>324
436:デフォルトの名無しさん
08/02/11 14:57:35
グライコがスペアナの意味で使われてて混乱してたけど、やっぱり違ったか。
437:デフォルトの名無しさん
08/02/11 15:20:50
>>436
なんか多くの素人が同じ間違いをしてる。
音楽やってたことある人でも多いし。
おそらくコンポやカーステレオでスペアナとグライコの表示が似てるせいだろう。
438:デフォルトの名無しさん
08/02/11 16:08:10
グライコはどうやってるんだろな
IIRフィルタだっていうけど、係数を全部いっぺん変更してるんだろか?
439:デフォルトの名無しさん
08/02/11 18:45:44
双二次で検索
440:デフォルトの名無しさん
08/02/12 15:20:24
多分、一番多い実装は、
RBJ Audio-EQ-Cookbook で言うところの
双二次のピーキングIIRを複数つないでる。
441:デフォルトの名無しさん
08/02/12 17:22:50
b0 = 1 + alpha*A
b1 = -2*cos(w0)
b2 = 1 - alpha*A
a0 = 1 + alpha/A
a1 = -2*cos(w0)
a2 = 1 - alpha/A
コレって、 1/Aの部分で割算が必要だし
結局 a0で割らないといけないから、リアルタイムにこのまま計算してるとは思えないなんだよね
442:デフォルトの名無しさん
08/02/12 17:41:00
>>441
その割り算(a_i, b_i の計算)は、イコライザの設定変更時だけしかしなくて、
毎サイクルは必要ない。
443:デフォルトの名無しさん
08/02/12 18:16:13
イコライザだからAの変更は必要だよね? そうすると 1/a0も計算しないといけないよね?
だから、割り算しなくていいような構成方法あるんじゃないの?
444:デフォルトの名無しさん
08/02/12 18:31:03
設定変更時だけだし多少遅くても割り算やってる。
445:デフォルトの名無しさん
08/02/12 18:31:23
A の変更の頻度、それほど高くないはずだから、
割り算のコストをそこまでシビアに考えなくてもいいんじゃないかと。
除算器乗ってないプロセッサでも、除算表持ったり近似計算したりで、
割り算全く出来ないわけではないし。
446:デフォルトの名無しさん
08/02/12 19:04:53
逆数を乗算してもいいな
そういう話をしてるんじゃないのは分かってるけどw
447:デフォルトの名無しさん
08/02/12 20:14:14
イコライザいけるならHPFでもいけるかと思って
リアルタイムで係数書き換えたらあっさり発振した。
やっぱだめか。
448:デフォルトの名無しさん
08/02/12 20:18:37
イコライザも係数を一気に書き換えたら発振するよ
書き換えでフィードバックゲインが大きく変わるから、
結果オーバフローすると不安定になる。
449:デフォルトの名無しさん
08/02/13 03:26:05
だから俺はFIR派
450:デフォルトの名無しさん
08/02/13 08:04:25
FIRで、RBJみたいに簡単に扱える方法はあるの?
451:デフォルトの名無しさん
08/02/13 09:26:34
FIRでバンドパスフィルタを作っておけば直線位相だから
元の信号の遅延信号と加減算できるんだよ。
元の信号に足せば、そのバンドだけポコンの持ち上がるし
足せば下げられる。
IIIRでも同じなんだけどね
452:デフォルトの名無しさん
08/02/13 13:57:31
IIRは結果の加減算やろうとすると位相差のせいでうまくいかないからねぇ
てかRBJって何?
453:デフォルトの名無しさん
08/02/13 14:32:31
ググレカス
URLリンク(www.google.co.jp)
454:デフォルトの名無しさん
08/02/13 15:02:04
いや、バンドパスの頂点はゼロ位相だから 加算は可能だよ。
その特性は IIR-ピーキングイコライザのものと殆ど同じ
ただQはだいぶ調整必要なのとf0も少しズレるように思ったな
455:デフォルトの名無しさん
08/02/13 16:08:33
頂点以外ずれるから問題なんだろう
456:デフォルトの名無しさん
08/02/13 16:11:20
それを言うならIIRのピーキングイコライザも問題って事になる
457:デフォルトの名無しさん
08/02/13 16:19:57
いや、位相がずれたものを元音に加減算することが問題って話ですよ
458:デフォルトの名無しさん
08/02/13 16:34:02
だからIIRピーキングイコライザも、位相はピークでは一致するけど
その前後では ~ になる。
そして、IIRバンドパスのを加算しても、これは同じだから、同じだって
459:デフォルトの名無しさん
08/02/13 17:28:44
ん?ピーキングでもバンドパスでも位相がずれるのは当然、そりゃわかってる
問題はそれを元音に加減算することだと言ってるわけですよ。
位相がずれた音を元音に加減算したら周波数特性に影響が出るしょ?
までも、バンドパスは位相のズレ幅と同じスロープで減衰してるから、
大きな特性変化にはならないかもだけど。
まちがってたらすまん
460:デフォルトの名無しさん
08/02/13 17:45:59
速い話
IIRピーキング = 元音 + IIRバンドパス
でははない。ということ。
周波数特性が崩れる。
461:デフォルトの名無しさん
08/02/13 18:10:16
だからさあ
BPFの係数と
b0 = alpha
b1 = 0
b2 = -alpha
a0 = 1 + alpha
a1 = -2*cos(w0)
a2 = 1 - alpha
>>441 を比べてごらん
構造の違いは b1がゼロかどうかだろ?
BPFと元信号1遅延したのと重みを調整して加算したら区別付かないんだって
462:デフォルトの名無しさん
08/02/14 02:43:28
>>453
なんだ、それか。妙な略し方だなぁ……。
>>462
よく分かってないんだけど、
>>441でA=1として
b0 = 1 + alpha
b1 = -2*cos(w0)
b2 = 1 - alpha
a0 = 1 + alpha
a1 = -2*cos(w0)
a2 = 1 - alpha
a系列は共通だから分母は無視するとして、
441のH(z)の分子 = 1 + alpha - 2*cos(w0)*z^-1 + (1 - alpha)*z^-2
462のH(z)の分子 = alpha - alpha * z^-2
分子部分の違いは
1 - 2*cos(w0)*z^-1 + z^-2
これが
> BPFと元信号1遅延したのと重みを調整して加算
でどう区別つかなくなるのか知りたい……。
463:デフォルトの名無しさん
08/02/17 19:29:47
A=1の時
BPF/alpha *(1+alpha) + -2*cos(w0)*z^-1 とすれば一致するようだね
464:デフォルトの名無しさん
08/02/19 10:20:39
他スレから誘導されてきました
if文で、if (音を感知したら)
do ○○ っていう感じのプログラムを考えているのですが
その音を感知する部分で何か有効的な物ありますか?
(音はその時しか扱いません)
465:デフォルトの名無しさん
08/02/19 12:17:53
リアルタイム処理なら常に音量のゲインを見張って、
それが閾値に達したら別スレッドでdo○○に相当する関数を実行させるとか。
466:デフォルトの名無しさん
08/02/19 13:14:40
>>464
環境は? そして、その入力元は何? たとえばwindowsでマイク入力なのか、スピーカー出力なのか
467:デフォルトの名無しさん
08/02/19 20:05:30
>>465-466
ありがとう
windowsのマイク
何がしたいかっていうと
音を感知したら(どんな小さな音でもいいんだけど)、
HDDに録画をするっていうプログラムを作りたいんです。
だからゲインまでは必要ないかなとは思っています。
468:デフォルトの名無しさん
08/02/19 20:05:52
連続ごめん
マイク入力のこと↑
469:デフォルトの名無しさん
08/02/19 20:34:24
どんな小さな音でもっていうけど
録音状態でマイクからの入力が0フラットのまま安定することってなかなか無い気がするけど。
ゲインを監視しなかったら録画しっぱなしになるな。
ていうかひょっとして、聞きたいのは録音するためのAPIとか、そんな程度じゃねぇの?
470:デフォルトの名無しさん
08/02/19 21:06:25
あ、そっかそうだよね... まぁとりあえず、ゲインは後で考えます
そう、APIとかの事でした、質問が明確じゃなくてごめん。
何か良いのないかなと思って
C++を考えてるけど
471:デフォルトの名無しさん
08/02/19 22:38:08
トリガの音にもよるんじゃね?
チャイムとか時報みたいな単音かつ短い物ならFFTなりで周波数成分見て判別出来そうだけど、
比較的長めのジングルみたいなのはどこまで一致したらトリガ音と認識させるのかとか、
マイクからの入力だとちょっとした事で入力状態も変わってくると思うんだよなぁ。
472:デフォルトの名無しさん
08/02/20 00:02:27
ちょっと話はズレるんだけど、プログラムを走らせるパソコン外部の装置からのデータ入力の際に
ノイズが完全に入らないデジタルな接続ふyふyふゆいおjhy「
473:デフォルトの名無しさん
08/02/20 00:34:41
ふじこ!
474:デフォルトの名無しさん
08/02/20 04:25:26
>>467
物音がしたら一定時間録画、防犯システムみたいなもんか。
スレ一通り見た?Winでのマイク入力については
>>16 以降とか、
>>420 以降あたりが参考になりそう。
当然、環境音やアナログ回路由来のノイズとかあるから、静かだったら入力0ってことはない。
ある値を超えたら、って具合に感度(スレッショルド)は設ける必要ありますよ。
それから常に空調が入っているような部屋の場合は、
ハイパスフィルタなどを使って検出に不要な帯域をできるだけカットする必要があるかもね。
475:デフォルトの名無しさん
08/02/20 05:07:39
質問なのですが、ここらへんの技術で食べていくにはどうしたら良いのでしょう、
この中でプロで音響関連のプログラマーをやってる方っていますか?
やはりゲーム業界や計測器系の会社が多いんでしょうか?
DAWの開発会社に勤めている方とかいましたら、ぜひ職場の雰囲気など教えてほしいです。
職場での立ち位置なんかも気になります。
やっぱりマニアックな分野の分だけ、発言権は低いのでしょうか。
大学での専攻分野が音響/信号処理関連でないと難しいとかやっぱりあるのでしょうか。
476:デフォルトの名無しさん
08/02/20 06:01:23
発言権てw
477:デフォルトの名無しさん
08/02/20 10:06:59
国産DAWやシーケンサーは、プログラマ1人で作ってるものがほとんど(過去のものも含む)。
1人の作業に雰囲気もなにもない。
478:デフォルトの名無しさん
08/02/20 10:59:44
職場の雰囲気なんて社風によったり、部署毎に違ったり、面白いやつが一人いるだけで変わるもんだから聞くだけ無駄。
ゲーム業界におけるサウンドの地位は基本的に底辺。
サウンド専用のメモリをメイン側で使われたって話も聞いたことがある程。
唯一コナミだけはサウンドの発言権が強いってんで有名だったけど、それも10年くらい昔に聞いた話だし現状どうなってるかは知らない。
組み込み系やサウンドツールはボチボチ仕事転がってるから需要あるかもしんない。
ってかマ板向けの内容だなw
479:デフォルトの名無しさん
08/02/20 12:18:01
Q ここらへんの技術で食べていくには
A 自分を差別化出来るだけの技術を付けるしかない
音しか出来ないのでは駄目。
色んな事が出来た上で音も出来るのでなければならない。
算数や工業数学には強くないといけないね
480:デフォルトの名無しさん
08/02/20 13:02:34
算数は機械がやってくれるので問題ないだろ。
数学をやれ。
481:デフォルトの名無しさん
08/02/20 20:14:33
スタインバーグとか開発が海外でしかも音響専門のソフトウェア会社ならどうなのか気になる。
みんな楽しそうにやってるのか、デスマーチで死んでるのか。
482:デフォルトの名無しさん
08/02/20 22:06:48
>>479
技術よりネタだろうな、なんつーかもう何もかもやり尽された分野だし
FM音源が流行っていた時代、ソフトで音を作っていた時代が懐かしい。
今やるとするなら初音ミクみたいな奴とか
あえて技術で攻めるなら、このデータは効き難い事で有名といところで、圧縮、だがこれももう限界に近い。
他には音声認識もまだやれる事が多いかな、これは出力ではなくて入力なのでこのスレとはちょっと違う雰囲気か。
483:デフォルトの名無しさん
08/02/21 02:07:34
たしかに雰囲気は違うか
でも語らうとしたらこのスレくらいしかって気もするな
484:デフォルトの名無しさん
08/02/21 02:23:11
Visual C++ 6
SDKにて開発をしています.
こちらをコピーして,マイクから録音したものをwav形式で保存しています.
URLリンク(www7a.biglobe.ne.jp)
処理の流れを見ると,
waveInOpen
waveInPrepareHeader
waveInAddBuffer
waveInStart
>録音中
waveInStop
waveInReset
waveInUnprepareHeader
waveInClose
で,最後にSaveWave関数内で wav ファイルに落としています.
ここで,信号を wav に落とさずに信号処理を行いたいのです.
おそらく wh.lpData 内にデータが書かれていると思うのですが,
サンプリング周波数(例では8kHz)によってデータを配列に並べる処理等が分かりません.
具体的には,録音をしたデータをフーリエ変換し,そこから別の処理へと繋げるつもりです.
ご教授願います.
485:デフォルトの名無しさん
08/02/21 03:20:36
>484
>474
486:デフォルトの名無しさん
08/02/21 08:37:57
>>484
wf.nChannels = 1;
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.wBitsPerSample = 8;
wf.nBlockAlign = wf.nChannels * wf.wBitsPerSample / 8;
wf.nSamplesPerSec = 22050;
wh.lpData に モノラル 8bit 22.05KHzの配列として入力されている
FFTするなら、
wf.wBitsPerSample = 16;
として 16bit 符号付の配列として wh.lpData を扱えばいい。
連続して処理するなら、
waveInPrepareHeader
を2つ以上確保しておいて、MM_WIM_DATAメッセージを貰う都度、バッファを使いまわす事だ
487:484
08/02/21 13:28:25
>>485
もちろん目を通しましたが,わかりませんでした.
>>486
ありがとうございます.8kHzではなく22.05kHzでした.
おそらく wh.lpData 内はバイナリで書かれていると思います.
バイナリファイルから数値を読み込むのは fopen( hoge, "rb") を利用すれば良いのですが,
バイナリとして書かれているものをアスキーの配列に入れなおすには
どうしたら良いのでしょうか?
調べる中で以下のサイトに辿り着きましたが,
こちらも fopen による処理でした
URLリンク(oku.edu.mie-u.ac.jp)
よろしくお願いします.
488:デフォルトの名無しさん
08/02/21 13:47:13
チョットまだ基本的なC言語の考え方がわかってないようだ。
もう少しC言語の作法がわかる段階でないと説明する方も辛いんで勉強してくれ。
wf.wBitsPerSample = 8; だから
wh.lpData にはバイト列で入ってる 符号なし8bitだから
unsigned char *p= (unsigned char *)wh.lpData;
とやれば for 文で (p[i]-0x80 ) とでも ( *p++ - 0x80 ) とでも 処理出来る。
wf.wBitsPerSample = 16; にしてやれば 16bit 符号付になる
同じように16bit幅の符号付ポインタに代入すればいい。
489:デフォルトの名無しさん
08/02/21 14:00:14
>>488
不勉強な中,質問させていただいて申し訳ありません.
ご丁寧なレス,感謝致します.頑張ります.
490:デフォルトの名無しさん
08/02/21 14:26:16
>>487
サウンドプログラム以前の話じゃん。
スレ違いだよ。
491:デフォルトの名無しさん
08/02/25 22:35:24
Windows上で、waveOutGetDevCaps()やwaveInGetDevCaps()で取得したデバイスの、
さらに詳細な情報を得るにはどうしたら良いでしょうか?そのデバイスがUSBオーディオ
デバイスであるかどうかや、USBデバイスの場合はPIDやVID等を取得できるとうれしい
んですが。
Setup APIと組み合わせればどうにかなるかなと思ったんですが、Setup APIで取得できる
情報と、waveOutGetDevCaps()/waveInGetDevCaps()で取得できる名前とのマッチング
がとれないんですよね。WAVE APIだと、"(2)"とか"スピーカー"とか勝手についたりするし。
何か良いアイディアは無いでしょうか?
492:デフォルトの名無しさん
08/02/26 11:25:01
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E96C-E325-11CE-BFC1-08002BE10318}
を見るくらいかなあ・・・
493:デフォルトの名無しさん
08/02/28 20:52:43
質問です。
Q1.
信号を、ハミング窓をかけて50%オーバーラップしながらFFTして、
そのまま、逆FFTして、Overlap and Add した場合、信号が完全に
再現されるのでしょうか?
Q2.
信号を、sine窓かけて50%オーバーラップしてMDCTして、
そのまま逆MDCTして、再度sine窓かけて、オーバーラップすると
信号は完全に再現されるのでしょうか?
494:デフォルトの名無しさん
08/02/28 21:07:26
理論上どうだったかは忘れたけど、
少なくとも窓関数が 0 近い辺りでは誤差が大きくて、
完全な再現ってのは無理。
495:デフォルトの名無しさん
08/02/29 08:13:37
FFT->逆FFTで完全に元に戻っているのだから、
窓関数がオーバーラップ処理でフラットになるかどうかの問題。
フラットになる窓関数は 180度の位相差のものと足して1になる必要がある。
ハニング/ハミング窓は
A-(1-A)*cos(2πT/L)で 180度ズレると A+(1-A)cos(2πT/L) で加算すると2A
だから、ハニング窓は完全に戻るし、ハミング窓は 0.54*2 のゲインが残るだけ
サイン窓は 180度のズレは窓関数上は90度のズレになるので、
加算してもsin関数が残る。 そのサイズでモジュレーションした信号になってしまう
FFT->加工->逆FFTとした場合は、一般的には完全には接続しない。
MP3なんかはうまく誤魔化してるけどね。
単純に考えても、音程のある成分は位相を合わす事が出来るけど
でも位相を合わせると、ノイズは位相が合わせられないのだから 1/√2になる
496:デフォルトの名無しさん
08/03/08 16:41:59
>>495
詳しい説明ありがとうございました。
MP3は、なぜハミング窓を使わなかったのだろう、と思いまして。
sine窓の必然性が理解できてないのです。。。
497:デフォルトの名無しさん
08/03/08 17:08:38
>>496
周波数領域での加工を前提とすると、
FFT前に窓がけしないと、周波数領域の信号レベルの確度が悪くなる
逆FFT後に窓がけしないと、時間領域で接続性が悪い
上の理由から実務上2度窓がけする必要があって、かつ、2度の窓がけ後の結果の
オーバーラップが元信号に戻らないといけない。でも、han窓は1回の窓がけの
結果のオーバーラップで元に戻るように設計されてるから適さない。
で、上の条件を満たすsin窓とかVorbis窓が使われる。
498:デフォルトの名無しさん
08/03/08 20:45:14
なるほど、頭いいなー
499:デフォルトの名無しさん
08/03/15 16:21:05
すみません、質問なんですが
サウンドプログラミングに関する本で、
picか何かでのサウンドドライバの作り方とか
一連のサウンドプログラミングが説明してある組込みの書籍か雑誌が発売されてたみたいなんですが、
本のタイトルがわからなくなって探すことができません。
それっぽいキーワードでググっても出てきません。
目次を眺めただけなので、具体的な内容は違うかもしれないのですが。。。
どなたか、上記の本のことをご存じないでしょうか?
500:デフォルトの名無しさん
08/03/15 18:34:48
picってMicrochip社のPIC?
501:499
08/03/15 23:37:51
>>500
ごめんなさい、picかどうかも怪しいです。
僕はMicrochip社のPICのつもりで書きましたが、
そもそもpicじゃないかもしれないです。
質問内容が曖昧過ぎますよね。。。
今になって>>499の本にすごく興味が出てきてしまって。
502:デフォルトの名無しさん
08/03/16 08:27:07
PICだとすれば DsPIC だろうけど
503:デフォルトの名無しさん
08/03/16 08:32:06
検索したけど、コレくらいしかみつからなかった
URLリンク(gihyo.jp)
504:デフォルトの名無しさん
08/03/17 23:38:52
すげえなこれ
URLリンク(slashdot.jp)
505:デフォルトの名無しさん
08/03/18 00:01:38
ソレ、おれもおどろいたわ
どういう仕組みなのかなあ
506:デフォルトの名無しさん
08/03/18 00:45:39
基音を分解したあと上音を再構成してるんだろうけど
どの上音をどの基音に結びつけるかってのは、
あらかじめ楽器音を抽象化したサンプルのカタログから検索してるんじゃないかなぁ
507:デフォルトの名無しさん
08/03/18 05:47:11
すげえなこれ
URLリンク(sho1.jp)
508:デフォルトの名無しさん
08/03/18 10:07:14
>>506
それだと人の声とか、音の響き方が変わったときは無理じゃね?
解析中に倍音成分の偏りのテーブル作ってるんじゃないかなぁ。
試算は元波形から減算して0になればいいわけだから、その辺からも補完情報得られそうだ。
おかしなエフェクトかけた音とか食わしてみたい。
>>507
ナニガ?
サウンドプログラム的には初歩の初歩だろ。
509:デフォルトの名無しさん
08/03/18 19:54:37
位相を和音を基準に解析して、各周波数ごとにピッチ、スピード、再生タイミング等を調整できるようにしただけじゃね。
和音に分解するのにものすごい時間かかりそうだ。どちらかというとアイディアよりも速い速度を出したという努力の方が凄い。
510:デフォルトの名無しさん
08/03/18 23:43:22
>>509
短絡的に考え過ぎじゃまいか。
速度無視すりゃキミ作れる?
511:デフォルトの名無しさん
08/03/18 23:51:51
まあ、そういうこと言い出すと、情報系の研究の結構な割合が、
真新しい技術を作ることじゃなくて、既存技術を低演算量で実現ってノリよ。
512:デフォルトの名無しさん
08/03/19 00:17:18
どうせ解析がDWT、再生が可変速再生でしょ。
例えばV-Vocalとどう違うのか分からん。
新しい技術ってのは多くがまず理論の領域だからね
実践が重要な情報工学の分野は、どう実現するか、とかが重要になる。
513:デフォルトの名無しさん
08/03/19 10:05:39
>>512
アホか? どの周波数の音がどの音の倍音かってのを分解できなきゃいけないんだからV-Vocalとは全然違う。
音源分離の基礎から勉強しなおせ、このタコ。
514:デフォルトの名無しさん
08/03/19 14:34:45
>>513
さすがにサンプル全く聴かないで想像で書くとバレるかwww
ある意味安心した
サンプル聴いてみたが、全サンプル単音色なのね
これだったら、全体の倍音構成がある一つの倍音構成の重み付き和になるから
アタック検出とあわせて認識するのは可能かなー 専門が音声ですら無いから
最先端とか知らんけど
515:デフォルトの名無しさん
08/03/19 15:35:05
おまえ耳悪いんだな
516:デフォルトの名無しさん
08/03/19 18:05:43
>514
URLリンク(www.sonicstate.com)
これ見て凄さが理解出来ないなら黙って消えてくれ。
517:デフォルトの名無しさん
08/03/19 19:44:08
やってることがすごいとかすごくないとかはよくわからないんだけど、
動画の中で音をばらす最初のシーンはかなり興奮したw
518:デフォルトの名無しさん
08/03/19 20:14:00
一から楽器を演奏して曲の音源を得るコストと、そのソフトを購入して既存の少ない音源から
元の音源が分からない程にまでリミックスして曲の音源を得るコストのどちらが高いか。
勿論後者の場合はもともとの音源が第三者には追跡不可能だし人格権を主張できないほど弄ってるから著作権料なんて発生しない。
519:デフォルトの名無しさん
08/03/19 20:21:14
論点変えて楽しいか?
520:デフォルトの名無しさん
08/03/19 20:35:08
一つのどうでもいいレスに対して話の流れから脱線しているように思うなら、無視すればいいだけのこと。
521:デフォルトの名無しさん
08/03/19 20:53:43
つうか板違いだろ
522:デフォルトの名無しさん
08/03/20 02:34:17
>>516
黙って消えろは酷いなw
さて、その動画今観てみたけど、やっぱり同種の楽器のサンプルしか無いね
一つだけギターとトランペットのサンプルがあるけど、音の小さいギターの方の認識は弱くなってる
支配的な倍音構成にフォーカスしてるのかな
523:デフォルトの名無しさん
08/03/20 05:03:48
>>516はアルペジオ的なサンプルばかりなのもあーやーしーいw
けど、こっちにはギターのカッティングを分解してるビデオがある
URLリンク(www.celemony.com)
524:デフォルトの名無しさん
08/03/20 14:09:51
>>523
お、やっと話せる人が来た 嬉しい
同時発音へのアプローチはどうなんだろうね。
そっちの動画は最初に観て、その感想が>>514なんだけど、うーん。
あるいは、同時発音といえどもms単位のアタック時刻ずれがあるからそれを検出して……とかなのかなぁ。
ただ低域になると時間精度が悪くなるから、そこまでの精度がでるのかどうか。
完全に同時発音のソースとか、BBE通したソースとかでどうなるか、とか興味あるなぁ
>>516の動画でも、リバーブがきついと怪しいとか、2パートのピッチがクロスすると怪しいとか
おっちゃんも言ってるし。
って長文ごめん
525:デフォルトの名無しさん
08/03/21 10:05:41
>>524
前も書いたが、音源分離の基礎から勉強しろ。
「音源分離」でググれば、この分野の基礎技術がやまほどでてくるから。
526:デフォルトの名無しさん
08/03/21 12:09:03
>>525
あぁ、>>513で書いてるのか
ただの脊髄レスだと思って切ってたわ
音源分離ね。みてみる
527:523
08/03/21 12:35:50
君自身が「話せない人」だと思うよーw
528:デフォルトの名無しさん
08/03/21 12:50:27
>>526
無知だってことを指摘されても、自分は悪くない、と放置するからいつまでたってもバカのままなんだよ。
はっきり言って、あんたの知識レベルは非常に低い。おそらく別な場所でもさんざん叩かれてるだろ?
それは人間性に問題があるからだぞ。
529:デフォルトの名無しさん
08/03/21 14:13:53
これは酷いw
>526
なんか自身満々そうだし、試しに単音でもいいから分離アプリ作ってくれよ
音のアタックとリリース重なる部分の分離だけでも出来ればたいしたもんだと思うよ
530:デフォルトの名無しさん
08/03/21 14:20:53
>>524
専門外だと自覚してるならしゃしゃり出てくんなよ。
あんまり的外れなことばかり書くから、スレが妙な盛り上がりをしてるじゃねーか。
531:デフォルトの名無しさん
08/03/21 18:47:35
C(ド)の音色データを加工してDEFGAB~の音を作ることはできますか?
532:デフォルトの名無しさん
08/03/21 20:51:15
>>529
単音のサンプル投下希望
自前サンプルだとまた叩かれそうだから
533:デフォルトの名無しさん
08/03/21 21:00:01
>>531
できますよ
534:デフォルトの名無しさん
08/03/21 21:06:21
>>531
つ ピッチシフト
あとはフォルマント辺りを加えて調べてみるといいかも。
>>532
お前は頭大丈夫か?
これ以上叩かれる前に消えた方がいいぞ。
535:デフォルトの名無しさん
08/03/21 23:26:22
>>533-534
ありがとうございます。
536:デフォルトの名無しさん
08/03/22 03:18:19
>>531
出来るけど
音に深みが無くなる
537:デフォルトの名無しさん
08/03/22 03:25:55
なんか久しぶりに湧いてんな。
ただでさえこのスレの住人はネタに困ってるんだからあんま煽るなよ532。
しかしDirectNoteAccessすげえええええええええええええええええええ。
あまりに感動したのでYoutubeのほうもはっとこ。
URLリンク(jp.youtube.com)
538:デフォルトの名無しさん
08/03/22 10:05:53
素人なので何がすごいのかわかりません
539:デフォルトの名無しさん
08/03/22 10:34:14
>>538
カクテルを材料毎に分離して比率を変えたりして再合成するようなもの
540:デフォルトの名無しさん
08/03/22 10:37:10
それは素晴らしい
こう、チャレンジスピリッツが刺激される試みですね
541:デフォルトの名無しさん
08/03/22 10:38:08
そのうちリバースエンジニアリングが犯罪にされそうだな
542:デフォルトの名無しさん
08/03/24 09:59:47
マルチトラックな内部データを持つ同機能に見えるだけのfakeなら簡単に作れからなぁ
現物を調べないと投資を引き出すためだけの偽デモの可能性を否定できない
543:デフォルトの名無しさん
08/03/24 11:11:47
>>542
ねーよw
多少は都合のいいデータをデモに使ってるだろうけど
544:デフォルトの名無しさん
08/03/24 11:56:45
アタックが弱い楽器はトランスポーズできないのかな
545:デフォルトの名無しさん
08/03/25 23:20:04
すみません。
ピッチシフトはFFTをしないと実現できないのでしょうか?
546:デフォルトの名無しさん
08/03/25 23:22:02
IIRならなんでも
547:デフォルトの名無しさん
08/03/25 23:58:57
IIR調べましたが理解できませんでした。
単純に半音分の1.05946を時間にかけて伸ばしたり縮めたりするのは駄目ですか?
548:デフォルトの名無しさん
08/03/26 00:04:19
>>545
まず、一定間隔でサンプルを間引き/補間して
(音程も再生速度も変わる)、
その後、フレームに区切って、フレームをオーバーラップさせたり重複させたりで
再生時間を調整。
549:デフォルトの名無しさん
08/03/26 00:22:01
>>548
それならできそうです。
ありがとうございます。
550:デフォルトの名無しさん
08/03/26 00:34:57
>>549
オーバーラップさせるときに、重ね方ちょっと工夫しないとノイズっぽくなるから注意ね。
重なってるところが似たような波形になるように、
相互相関とかとって重ねる位置ずらす。
この方法で、綺麗な周期波形なら結構いい音になる。
551:デフォルトの名無しさん
08/04/14 19:34:53
最近はユーザが日本語化MOD作るからいらないよな
552:デフォルトの名無しさん
08/04/14 19:35:23
誤爆
553:デフォルトの名無しさん
08/04/19 04:13:41
高域を補完するフィルター(KENWOODのSupremeみたいな物)を作ろうと思うのですが
サウンドプログラミングはやったことが無くどのような方向から手を付ければいいか判らない状態です
まずは非リアルタイムで実験してみるつもりですが、ゆくゆくはリアルタイムで処理できるような物を作りたいです
ソースをFFT→FFT結果を元に倍音生成のスペクトラムを生成→逆FFT→ソースと合成みたいな感じになるのでしょうか…?
よろしくお願いします
554:デフォルトの名無しさん
08/04/19 07:48:04
たぶんFFTでは難しいと思うよ。
一般的にブロック・フーリエ変換の場合 周波数軸で加工すると実軸に戻した時に
ブロック同士を接続させるのが難しい。
たとえば原音から高域だけ抽出して その成分を2乗3乗したのを加算するとかどうかな
倍角公式とか3倍角公式で高音を加算出来る事になるよ
555:デフォルトの名無しさん
08/04/21 16:20:21
ピッチや再生速度を変えるにはどうすればよいですか?
サンプルを間引いたりするだけではうまくいきませんでした。
ググってもツールしかヒットしません(><;
556:デフォルトの名無しさん
08/04/21 16:51:58
>>555
>>548
557:デフォルトの名無しさん
08/04/21 16:53:09
あと、C# でよければ、
URLリンク(ufcpp.net)
にピッチシフトのコードある。
558:デフォルトの名無しさん
08/04/22 08:07:18
>>555
このスレの1つ前の過去ログの先頭にある程度詳しく書いてある。
肝心なのは
>再生速度を変更するには、上げるにも下げるにも強力なLPFが必要になる
って所。 これをサボると駄目だね
559:デフォルトの名無しさん
08/04/22 10:21:41
>>555
ディレイを使うのも手。
重複を気にせず、再生速度を変えたのをたくさん並べるだけでもそれっぽくなる。
560:デフォルトの名無しさん
08/04/22 11:48:11
>558
555じゃないけど、サボるとエイリアシングノイズが出るって事?
ピッチ上げるときはLPFかけないとマズそうなのはなんとなく解るんだけど、下げる時もLPFなの?
561:デフォルトの名無しさん
08/04/22 12:17:44
>>560
そう、アンチエイリアシング。
下げるときは、
簡単化のために、再生時間2倍、音程1/2で話すと、
元のサンプルの間に、まず、0を挿入するのね。
元のサンプルが 100, 110, 130 とかだったら、
100, 0, 110, 0, 130, 0 にする。
この状態をフーリエ変換すると、
元の周波数特性の高周波にエイリアスノイズが乗った状態になってるから、
それを LPF かけて取る。
562:デフォルトの名無しさん
08/04/22 18:45:52
0を挿入する意図が分からん。
100,100, 110,110, 130,130 じゃダメなのん。
563:デフォルトの名無しさん
08/04/22 19:10:34
>>562
それは0を挿入してから低品質な2タップFIR LPFをかけたのと同じことじゃん。
>>558>>561が言いたいのは、そのLPFをもっと強力なやつにしないと駄目よってことでしょ。
564:デフォルトの名無しさん
08/04/22 19:21:45
そうだね。 1+1/z っていうFIRフィルタの特性と同じで遮断特性は殆ど無いも同じ。
半音単位だと16:15とか16:17とかの比になるんで、
理論的には0を16個つめてFIRフィルタを通す事になるけど、
実際は0をつめる部分は掛け算しなくていいんで
565:デフォルトの名無しさん
08/04/22 23:18:36
>>562
もちろん、実際には内挿補間とかするんだけどな。
フーリエ変換の定義式に、0を挿入した奴を食わすと、理論式が綺麗なんだわ。
566:デフォルトの名無しさん
08/04/23 00:43:46
CUDA使ってる人っている?
並列処理がどれくらい速くなるんだろう。
567:sage
08/04/23 02:40:36
DCTベースでピッチシフトって(理論的に)出来ないんでしょうか?
32kHzでサンプリングした音を2048点のDCT(DCT-typeII)して、3半音分ずらして
(1720点分のデータを2048点に補完)IDCT(DCT-typeIII)してみたら、なんか
元の2048サンプルが1720サンプルの波形に変換(残りは0近辺)されたような感じ
っぽくなった(つまり単なる早回し?)んですけど…
DCTでやってるのは、FFTは使ったことあるけどDCTはなかったから。あと、実数
なので楽かと思って。だた、変換結果をみると、位相成分も混ざってか(?)
かえって扱いにくいようにも思えてきたところなんですが。
理論とか数学とかダメな方なので、実際にコード書いて実験してる次第。
ちなみにJavaでやってます。(慣れると)楽ですよ。描画も簡単だし。
568:デフォルトの名無しさん
08/04/23 09:08:37
出来ないか出来るかという話なら出来るんでしょう。
でも問題は
1、ブロックである事から接続の問題がどうしてもついてまわる事
2、周波数シフトそのものの計算の面倒さ
6:5 という比率なら5を6に移動するのは簡単だが6を7.2という事になると exp関数となる
569:デフォルトの名無しさん
08/04/23 23:01:48
> 100, 0, 110, 0, 130, 0 にする。
なんとなく、出力レベルが下がっちゃいそう。
570:デフォルトの名無しさん
08/04/23 23:04:07
じゃあその分ゲインをかければいいでしょ
571:567
08/04/24 00:02:55
>>568
>5を6に移動するのは簡単
それすら上手くいってないんですけど。DCTした5要素をどうやって6要素に
分配(シフト)すればいいのか。sinc補間で5要素から6要素を求めてみたり、
5要素を適当に6要素に分配してみたりしたけど、IDCTしたら変になります。
(振幅が一旦大きくなったあと、小さくなるような波形になるっぽい)。
なんかシフトしたら係数を掛けないといけないんでしょうか?
>exp関数となる
全然わかりませんorz。オイラーとかがからむ話なんでしょうか。
572:デフォルトの名無しさん
08/04/24 00:22:57
>>571
DCTだと、位相が無視されるからなぁ。
振幅が大きくなってる箇所があるってのは、位相が狂ってるんだと思う。
定常波だと位相が狂ってても聞こえは一緒だったりするんだけど、
立ち上がりの部分が変わっちゃうと変な聞こえになりそう。
573:デフォルトの名無しさん
08/04/24 00:24:24
周波数領域でピッチシフトするなら、フーリエ変換にしないと駄目かなぁ。
ついでに言うと、対数振幅と位相をそれぞれsincなり何なりで補間。
574:553
08/04/24 07:44:16
>>554
レス送れてすみません。ありがとうございます
1.ソースをFFTで周波数/強度に変換
2.1の周波数ごとに倍角公式、3倍角公式で倍音、3倍音を生成。音量は1の強度を元に適宜減衰
3.2を合成して補完音を生成
4.ソースと3を合成
みたいな感じでしょうか?
コーディング時には2~4は同時に行った方がメモリのリソースは節約できそうですね…
575:デフォルトの名無しさん
08/04/24 09:11:17
えと、俺が書いた事は無視する事にしたのか誤解したのか、
俺が言ってるのは、ソレで2倍3倍の信号作って位相情報をどうするのって事。
元位相のまま2倍の位置にシフトしたら2度繰り返す事に
周波数軸上で変換するのは簡単じゃないよと。
だから
1、ソースのサンプル周波数変換
2.ソースからHPFで元サンプル周波数の1/4~1/2の高域だけを抽出
3.2の2乗、3乗等の信号を作成
4.ソース+3の信号を重み調整し加算して出力
でいいんじゃないの?って事。
576:567
08/04/24 21:07:53
>>572
>DCTだと、位相が無視されるからなぁ。
シフトするときの分配をちゃんと(元の値が対応する区間を求めて、比率に
あわせて配分。言葉で書くとわかりにくいなぁ)したら、ブロック途中の
振幅の暴れはマシになったけど、なぜかブロックの先頭から末尾に向かって
減衰します。なにか、大きな位相成分がおかしいのか…
>>573
>フーリエ変換にしないと駄目かなぁ。
やっぱりそうなんでしょうか。どっちも周波数成分への変換相当だから、
DFTとDCTは同じことが出来るのかと思ってました。
577:デフォルトの名無しさん
08/04/24 23:30:07
>>576
連続フーリエ変換なら話は楽だったりするけど、
離散だと、周期の都合で妙なことになったりするかなぁ。
ピッチシフトって周期が狂う非線形処理だから、根本的に DCT・DFT と相性悪いかも。
578:デフォルトの名無しさん
08/05/09 12:43:38
和音がわからない
誰だよ白鍵と黒鍵分けたアホは
全部半音単位で管理しろや
579:デフォルトの名無しさん
08/05/09 12:48:16
>>578
頭悪いのね。
580:デフォルトの名無しさん
08/05/09 13:37:42
言われてみるとどういう基準で分けたのか気になるな。
流石に578はどうかと思うが。
581:デフォルトの名無しさん
08/05/09 13:38:17
>>579
頭良いのね。
582:デフォルトの名無しさん
08/05/09 13:47:03
音階が12なのは時間が12進なのと関係があるんか?
583:デフォルトの名無しさん
08/05/09 14:04:58
>>580
どういう基準もなにも、倍音とってったらドレミの音階が生まれるだろ。
それをオクターブ内におさまるようにしたら白鍵盤のぶんが埋まる。
そのときにだいたい半音、ってのが最少単位になってるからそれに合わせて鍵盤をわりふる。
西洋音楽の音階はだいたいそんな感じ。
>>582
倍音を拾っていってオクターブ内の音を分割した結果で、12等分がキリのいいとこに近かったんだよ。
地域によっては、12をさらに分割したのが最少単位だったりする。
584:デフォルトの名無しさん
08/05/09 14:56:59
純正律のことを言ってるのか?
いわゆる純正律はそれはそれで恣意的だと思うが。
あるいはピタゴラス音律か。
585:デフォルトの名無しさん
08/05/09 14:58:50
ようするに
ドミソ のソ 周波数比 2:3 の1.5が 2^(7/12) に近くて
ドミソ のミ 周波数比 4:5 の1.25が 2^(4/12) に近いから
最初にドミソの和音が出来て、それを展開していってドレミファソラシドって事でしょ
586:デフォルトの名無しさん
08/05/09 18:39:46
>578
プログラム関係ねぇよw
和音やコード進行は音楽関係の教則本には必ずと言っていいほど載ってるし、
当たり前な話だけどギターなんかは全部半音単位だ。
587:デフォルトの名無しさん
08/05/09 18:55:58
>>578
全部白鍵だったらどれが「ド」だか分からなくなるだろ
588:デフォルトの名無しさん
08/05/09 18:57:51
無刻印HHKを扱える奴がいるから慣れだなw
でもいやだなそんな鍵盤
589:デフォルトの名無しさん
08/05/10 01:27:16
そういう奴は周りから嫌だなと思われるのを生き甲斐としている。
疎外感と優越感の混ざった感覚。
590:デフォルトの名無しさん
08/05/12 14:45:20
ちょっと質問さしてください
WAVやAIFFを読み込んで再生するプライバックサンプラーを作りたいと思ってるんですが
音階演奏のための再生ピッチ変更(引き延ばし・縮め)って、
普通というか主流というか、どうやるものなんでしょう?
少しためしてみた感じでは、単純な一次補間でもけっこう使える感じがしたんですが
市販のサンプラーなんかはどうしてるんですかね?
591:デフォルトの名無しさん
08/05/12 16:25:42
あらかじめアップサンプリングしたデータを持っているなら1次補間でもいけるだろうし
そんなもの好きにやったらいいと思うけどな
592:デフォルトの名無しさん
08/05/12 17:33:47
DTM用で、あらかじめアップサンプリングしたデータを用意する
ようなことは想定してないです。
好きにやったらといえば返す言葉がないんですけどね・・・
サンプリングレート変換と同じといえば同じなので
もっとちゃんとした方法があることは理解してるんですが、
演奏が目的のサンプラーの類だと、
一次補間ぐらいやっとけば普通レベル??なのか気になったもので
593:デフォルトの名無しさん
08/05/12 17:39:54
>>592
URLリンク(www.psoft.co.jp)
こんなのとか?
594:デフォルトの名無しさん
08/05/12 17:49:29
>>592
いや自分でアップサンプリンしたのを内部データとして持っておけば
その1次補間でも十分実用になるという意味だよ。
アップサンプリングは元のサンプリング周波数の整数倍にすれば面倒なことは何もない
595:デフォルトの名無しさん
08/05/12 18:10:43
>>593
いえいえ、タイムストレッチ・ピッチシフトではなくて
単純な再生速度変更です。
>>594
なるほどーうまい方法ですね。
補間方法ばかり気にしてたんで、いやかなりはっとしました。
メモリは食いますけど、それなら再生時の負荷もほぼ同じのままS/Nアップしますね。
そういう実装してるのもあるのかなぁ
596:デフォルトの名無しさん
08/05/12 19:32:16
市販のサンプラー作ってた奴がいたとしても、そんなもんは企業秘密だから書けるわけねぇだろ
実装して問題が起ってるからアドバイスくれとかならともかく、抽象的すぎんぞ
597:デフォルトの名無しさん
08/05/17 18:23:59
えーと、サウンドプログラミングについての定番サイトってありますか?
やりたいのは任意のWaveファイル(サンプラーとして)+ゲームパッドを使い、
リアルタイムに強弱をつけながらパーカッションを打ち鳴らして、
打ち込んだ結果をMIDIファイルやWaveファイルに保存したいです。
こういうゲームパッドドラム?を作って、楽しく、楽に打ち込みたいのです。
598:デフォルトの名無しさん
08/05/18 06:03:46
ググレカス
599:デフォルトの名無しさん
08/05/19 07:42:48
>>597
ゲームパッドで強弱を付けるのは不可能
600:デフォルトの名無しさん
08/05/19 08:37:38
最近は感圧式ボタンや6AXISを備えたPC用ゲームパッドもあるから
一概にそうとも言えんぞ
まぁそんなの持ってる奴は少ないだろうから
テンポに合わせて自動的に裏表で強弱をつけることになるだろうがな
601:デフォルトの名無しさん
08/05/19 08:48:30
ボタンで強弱 = ストリートファイターなイメージがw
すぐにボタンが壊れたから、感圧ボタン廃止 → 6ボタン制に。
あっ、ボタンによって強弱切り換えりゃいいじゃん。
602:デフォルトの名無しさん
08/05/19 09:20:04
プレステ2のコントローラは感圧になっただろ
調節は難しいが
603:デフォルトの名無しさん
08/05/19 10:23:48
素直にMPDとか使えよ。
604:デフォルトの名無しさん
08/05/19 19:58:21
>>603
どのMPDですか
URLリンク(ja.wikipedia.org)
605:デフォルトの名無しさん
08/05/20 00:32:46
URLリンク(bookweb.kinokuniya.co.jp)
この本見たことある人いますか?なかなか内容充実してそうなんですが・・・
これからサウンドプログラミング始める人にとってどうでしょうか?
地方なんで見れる本屋がなくて・・・
606:デフォルトの名無しさん
08/05/20 00:40:08
>>605
ああ、それ結構有名。
607:デフォルトの名無しさん
08/05/20 00:47:25
>>606
使えます?定価的にも高いので、失敗したくなくて
608:デフォルトの名無しさん
08/05/20 09:37:23
MPDはゲームパッドじゃないよ
609:デフォルトの名無しさん
08/05/20 10:10:01
>>604
マジレスするが、
URLリンク(www.akai-pro.jp)
URLリンク(www.akai-pro.jp)
610:デフォルトの名無しさん
08/05/20 13:29:26
>>607
アマゾンのカスタマーレビューは参考にならないかな。
URLリンク(www.amazon.co.jp)
>>607の「使える」の定義が分からないので的外れだったらごめん。
611:デフォルトの名無しさん
08/05/20 13:43:33
本が「使える」かどうかなんて、オカズになるかどうかに決まっているじゃないか。
612:デフォルトの名無しさん
08/05/20 13:46:53
山羊かよ!
613:デフォルトの名無しさん
08/05/20 13:46:54
>>610
Amazon.comの原著のレビューはもっと熱いぜ
URLリンク(www.amazon.com)
614:デフォルトの名無しさん
08/05/20 13:56:04
>>611
ゴメン、君がその~、童貞? だとは思わなかったから……
615:デフォルトの名無しさん
08/05/29 21:35:58
waveInGetPositionを使って録音中の場所を知り(場所がa[p]だったとする)、
a[p-1024]~a[p-1]までのメモリを読んでみると、
どうもa[p-500]とか以降は、まだデータが書き込まれていないことが多い。
こういうものなの?
616:デフォルトの名無しさん
08/05/30 00:27:00
まさかとは思うが、short a[] なのに、p = mmt.u.cb とかってオチじゃねぇだろうな?
617:デフォルトの名無しさん
08/05/30 08:05:47
>>616
TIME_SAMPLESを指定しています。
まあ、waveInGetPositionで得た値から500を引いて使えばいいので、
困っているわけではないんだけど、何かすっきりしなくて。
618:デフォルトの名無しさん
08/05/30 16:52:58
学校の授業で、dsPICをつかってイコライザを作ろうと思っているのですが。。。
CDなどから音声信号をとってきて、高速A/D変換してデジタルフィルタにかけ出力という
流れ(まだ構想段階なので)でいこうと思うのですが、具体的にこれからどのように実現していけば
いいでしょうか。
619:デフォルトの名無しさん
08/05/30 20:58:59
学校の先生に聞いて来い
そのために授業料払ってんだろ
620:デフォルトの名無しさん
08/05/31 01:03:01
実は先生の方だって可能性もあるぞ。
621:デフォルトの名無しさん
08/05/31 01:16:20
恐ろしい可能性だなオイw
質問のレベルの低さから学生だと信じたいけど。
教えてクン的な釣りの可能性も。>URLリンク(www.redout.net)
622:デフォルトの名無しさん
08/05/31 06:12:23
正直 CDレベルの音質に対して dsPICってのはどうかな
16bitのDSPじゃ倍精度の演算に挑戦しないといけないぞ
イコライザが高域だけにするか、
サンプリングを11Kとかに落とすんならなんとかなるか
623:デフォルトの名無しさん
08/05/31 10:55:48
>>618
プログラム板なのでソフトウェアに限定すると、
入力部とイコライザ部と出力部を実装するといいんじゃね
624:デフォルトの名無しさん
08/06/01 22:30:36
三角波や矩形波でAの音を鳴らす・・・くらいのプログラムから始めたい初心者なのですが、
まずは何から勉強したらいいのでしょうか?
言語はC、Javaあたりならなんでもいいです。。
625:デフォルトの名無しさん
08/06/01 22:41:28
鳴らすてのがどのくらいのレベルでやりたいのかわからないけど
とりあえず任意の波形をWAVファイルを書き出せるようにやってみたら?
WAV形式で作れるようになったら鳴らすのもAPIで出来る。
626:デフォルトの名無しさん
08/06/02 05:58:34
>>624
言語に関しては熟知してるという前提で話するけど、
サイン波を画面に描画するのと同じ要領で音声出力に書き出すだけ。
書き出し方は環境に依存するけどWinでいいなら>>19辺りに解説がある。
627:デフォルトの名無しさん
08/06/02 10:11:22
>>624
ドレミの基礎。A4が440Hzとかそういうとこから。
628:デフォルトの名無しさん
08/06/02 21:04:47
採譜の達人ってあるじゃん
あれってどういうアルゴリズムだとおもう?
629:デフォルトの名無しさん
08/06/02 21:54:29
十数msec程度毎にFFTし各周波数を観察してノートオン/ノートオフを検索。
マッチングは単音ファイルの周波数の分布から。>倍音成分を多く含む音に対してsine.wavを割り当てると倍音も全部拾っている
12音階で近いノートに割り振るというアルゴリズムなので周波数の揺れる音色が取れない。>和音優先だから当然
みたいな感じじゃね?
630:デフォルトの名無しさん
08/06/03 10:44:10
>>628
どう見てもウェーブレット。単音をマザーウェーブレットにして変換するだけ。
631:624
08/06/04 00:33:42
おかげさまで出来ました。
ありがとうございます。
632:デフォルトの名無しさん
08/06/05 01:20:09
先輩方にお聞きしたい。
次のプロジェクトでサウンドプログラムの担当をすることになりました。
(社内含めてサウンドプログラムを経験している方がいないけど)
サウンドエンジン作れとのことですが、
経験則でいいのでどんなモノにしたらいいのか指針にしたいのでご意見下さい。
こんな出だしからして、音関係の知識はほぼありません。
「こういう勉強しろ」みたいなものやサイトがあればぜひ教えてください。
よろしくお願いします。
633:デフォルトの名無しさん
08/06/05 01:39:48
>632
お前の言ってる事は、
「今日からプログラマーになりました、何から勉強したらいいですか?」
っつーレベルだぞ。
何で使うシステムなのか、ハードのアクセラレーションはあるのか、
ドライバレベルなのかライブラリレベルなのか、何がしたくてどういった要求なのか。
全部スッポリ抜けてる。
634:デフォルトの名無しさん
08/06/05 02:03:14
というかどんなプロジェクトなんだか。
単純に考えてコンポーザとかゲームか。
なんだかんだ言ってサウンドはマイナーというか特殊扱いというかあまり扱わないよね。
WAVEの曲を背景にして効果音を鳴らすんなら音を足すだけでいい。
音階とかやるんなら周波数変えて合成とかする必要がある。
多分本当に初歩から勉強したいんだろうけど
とりあえずリアルタイムな事は置いといてWAVEファイルの作り方とか
簡単な波形の音の作り方とかそれで「ドレミ」を鳴らしたり和音にしたりとかから入るといいかも。
そのあたりはググれば見つかるんじゃないの。
リアルタイムな鳴らし方はWindowsならAPIかDirectX関連で探して。
他は知らん。
635:デフォルトの名無しさん
08/06/05 17:11:07
今色々教えても、それを>>632が取捨選択できるようには思いにくいなあ。
やみくもに実装だけ覚えても結局何も作れないと思うので、
>>632はまずは大まかにでもいいから仕様を決めた方がいいように思う。
(それがわからないとレスもし辛いような)
例えば単にベタのWAVファイルを鳴らすだけでいいのか、
ループも含めたBGMとして鳴らしたいとか、効果音も鳴らしたいとか。
プラットフォームは何で、それがどういう機能を持ってて、
それを補うために何を作って何を作らなくて良いのか、とか。
そうすれば何を覚えればよいのか自ずとわかるんではないだろうか。
偉そうでゴメン。
636:デフォルトの名無しさん
08/06/06 15:01:58
URLリンク(www.musicdsp.org)
こういったたぐいの日本語サイトないかな?
637:デフォルトの名無しさん
08/06/06 15:47:17
ない
638:632
08/06/07 09:29:34
633,634,635>>
本当にすいません、指摘のまんま基本的な情報が抜けてました。
プロジェクトはPS3のゲームです。
詳しい要望が出てきてないので、設計をどうしたらいいかと悩んでました。
自分ではBGM,SEを単に流す程度しか思いつかず、
ゲーム系でサウンドエンジン作った方がいれば、
どんな機能をいれたのか知りたかったわけです。
633>>
ありがとうございます、おかげで少し落ち着きました。
初めての事でビビり過ぎてたと思います。言われて我に返りました。
634,635>>
PS3で何が出来るのかを探してはいるのですが、
音楽知識が無いままドキュメントを読んでるので、
自分では理解が不十分な感じがするのです。
なので、デジタルサウンドの基礎から勉強しなければと思いました。
639:デフォルトの名無しさん
08/06/07 13:15:46
PS3のゲーム作れるとはすごいなぁ。
640:デフォルトの名無しさん
08/06/07 14:02:04
ゲーム機ならライブラリとサンプルがあるはずだから基礎研究ならその辺弄ってあそんでりゃおk
プロジェクト進行中ならチーフなり企画なりから何らかの仕様が降りてきてんじゃね?
641:デフォルトの名無しさん
08/06/07 17:54:02
3Dとかのエフェクトエンジンなのか
MIDIデータとかの再生エンジンなのか
ボイスとかのエンジンなのか
それとも全部一式? 一人ではキツイだろな
642:デフォルトの名無しさん
08/06/07 22:16:31
バグゲーになりそうな悪寒。
643:632
08/06/08 02:36:15
641>>
「MIDIも使いたいかも」みたいのは聞いた覚えがありますが、
上からの正式要件ではないので、一応対応するつもりです。
あとは5.1ch対応と3Dエフェクト(?どこぞの方向から音がする感じ)も…。
ちなみにボイスのエンジンとはどんなことするんでしょう。
なんかボイスの管理がどうとかリファレンスにあったけど、
音とは違うのだろうか。
バグゲーにはならないように頑張ります。
初めて一人で任された仕事なので、上でも一喝されてますしなんとかやってみる。
厳しいと感じたらまたアドバイスや気合もらいにきます。
644:デフォルトの名無しさん
08/06/08 10:49:05
ここは電話じゃないのか(´・ω・´)
645:デフォルトの名無しさん
08/06/08 10:49:54
ごばく
646:デフォルトの名無しさん
08/06/08 20:33:43
URLリンク(www.cri-mw.co.jp)
どうせライセンスを買う金が勿体無いから同等の技術を開発しろってところだろうな
647:デフォルトの名無しさん
08/06/08 20:52:32
ライセンス買っておけば不具合があっても相手持ちにできるのに…
自社で作ったら自分で責任取らないといけないよな
648:デフォルトの名無しさん
08/06/08 22:03:43
CRIのは高いだけで良かった記憶ねぇなぁ。
649:デフォルトの名無しさん
08/06/09 02:04:43
>632
PS3の仕様は知らんからなんとも言えんけど
効果音とボイスは違うんかいな。
いや、PS3だ。違うかもしれない。
650:デフォルトの名無しさん
08/06/09 10:07:57
ノベルゲーでも作るんだろ
ボイスはストリーム、効果音とBGMはオンメモリ・MIDIシーケンスで
みたいな?
651:デフォルトの名無しさん
08/06/09 23:58:40
話ぶったぎってすいません、
デューティ比が50%である矩形波は普通の音に聞こえるのですが、
25%、12.5%になると雑音が混じったような音が出ます。(ビー、ガガガなど)
これはサンプリングレートと音程の関係でこうなってしまうのでしょうか?
また、なぜ50%の時はこういった雑音が入ってないように聞えるのでしょうか?
652:デフォルトの名無しさん
08/06/10 00:36:26
50%の時が一番サイン波に形近いからなぁ。
逆に、12.5%のとかは、クリック音が並んでるような音に近い。
653:デフォルトの名無しさん
08/06/10 00:54:00
>>651
それぞれの周波数成分見れば一目瞭然
654:デフォルトの名無しさん
08/06/10 01:26:25
>>651
50%だけ普通ってのはわからんが、
サンプリングレートに対して、半端な周波数を鳴らしているんじゃないのかな。かつ波形処理が簡易的な出力。
そうすると、山や谷の部分の間隔が1サンプル多い部分とそうでない部分とが出てくる。
それを聞くと、周波数の違う音が混じって、汚く聞こえる。
655:デフォルトの名無しさん
08/06/10 02:02:16
ビーはともかく、ガガガは確実に元の周波数より長い周期でうなってるな。
だから、>>652-653の理由だけでは説明が付かない。
656:デフォルトの名無しさん
08/06/10 10:28:57
波形うpしろ、解析してやっから
657:デフォルトの名無しさん
08/06/10 12:54:43
>>651
定サンプリングレートだと、サイン波より矩形波の方が難しい波形なんだよ。
普通に0,1で出せると思ってたら甘いよ。
過去ログを見てみるといいよ
URLリンク(pc5.2ch.net)
658:デフォルトの名無しさん
08/06/10 18:35:41
なるほどなぁ、矩形波生成した時点ですでにエイリアシングノイズがのってるのか。
659:651
08/06/10 21:02:12
過去ログ読みました。勉強になります。
>>651については>>654さんのおっしゃるとおりだと思います。
現在は、
フェーズの増加
phase+=( freq*(PI*2/sampleRate) );
値を返す
val=(phase<PI/8)? 1.0:-1.0;
こんな感じで補正が全くありません。
phaseにLPFをあてて倍音をカットすればいいのでしょうか?
無知ですいません。。
660:632
08/06/11 01:27:24
>>649
私も「ボイスって声?だよな…」と一瞬考えたのですが、
ドキュメントの文脈と合わないので質問してみたんです。
で、調べてみるとシンセサイザとかで言う「音色」のことのようでした。
ドキュメント自体にそのように明言されていないので自信ないですが、
きっと音楽系の仕事をしてる人にはありきたりな内容かも知れません。
そんな感じで資料読むにも、
電子方面の音楽知識や単語を勉強したいところです。
「ディジタル・サウンド処理入門」って本でも読んでみます。
661:デフォルトの名無しさん
08/06/11 07:15:54
>>659
パルス=デルタ関数の帯域カットしたデータを 4~32倍のオーバーサンプリングした結果をテーブルとしてもって
おいて
8倍なら
( round(phase*8) mod 8) から 8個単位のこのテーブルを引き
その結果を立ち上がり側なら積算、立下りながら減算する。
最初からデルタ関数ではなく、ステップにしたら良いと思うだろうけど
周波数が高くなってくると、デルタ関数同士がオーバーラップするようになるから
デルタ関数を積分した方が良い。
662:デフォルトの名無しさん
08/06/11 18:38:33
>>659
僕は、画像で言うアンチエイリアスの様な方法をやりましたが(画像処理での方法は知らないが結果的にそうなった)、
普通に聞く分には全く問題ないものの、良~く聞くと若干ノイズが聞こえる。
綺麗な矩形波は
URLリンク(www.slack.net)
これを使ったエミュレーターの音は、全くノイズが聞こえないです。
663:651
08/06/11 23:01:14
なるほどです。
>>662の帯域制限は>>661と同じ事なんでしょうか。(難しい…)
>>659のコードを、
phase+=freq;
val=(phase<(sampleRate/8))? 1.0:-1.0;
こんな感じで書き直したら、以前あったノイズはなくなりました。
(VirtualNES(NSF)で鳴らした音と比較してます)
なんでノイズが消えたのか、よくわかってませんが・・・。
とりあえずこれで作成してみようと思います。
>>661>>662の方法はまだ理解できないのでこれから勉強します。
ありがとうございました。
664:デフォルトの名無しさん
08/06/12 08:20:38
> >>662の帯域制限は>>661と同じ事なんでしょうか。(難しい…)
方式が違う。 662 はサイン波合成で矩形波を作っている。
リアルタイム合成するにはサイン波を1,3,5,7の奇数倍周波数で位相を合わせて作れないといけない。
665:デフォルトの名無しさん
08/06/13 17:49:51
サウンドプログラミングを学ぶためにローパスフィルタを作ろうと考えました。
方法としては波形データ→FFT→特定の周波数以上のところを0に書き換え→逆FFT
というのを考えたんですが、いざコーディングするとなると全く出来ないです。
wavデータを順番に配列に突っ込むというのは出来たんですが・・・
なにか参考になるサイトなどありますか?
666:デフォルトの名無しさん
08/06/13 18:05:18
>>665
Wikipedia。デジタル・フィルタの基礎から勉強したほうがいい。
そのあとで↓
URLリンク(www.musicdsp.org)
667:デフォルトの名無しさん
08/06/13 18:19:07
>>666
英語はきついっすw
668:デフォルトの名無しさん
08/06/13 19:48:34
じゃぁ本買いな
669:デフォルトの名無しさん
08/06/13 20:33:30
勉強する気もねぇ乞食かよ・・・
670:デフォルトの名無しさん
08/06/14 03:10:02
>>632
多分ゲームで必要になるのはストリームしながら再生、停止。
メモリに常駐している音(効果音、クリック音)の再生。
それらの音のボリュームの全体操作。
(画面が切り替わった時に前の効果音が残ったりしちゃうから。)
サウンド用の領域が溢れた時に音を鳴らさない、その旨を伝える手段。
場合によってはストリーム音のクロスフェード
(前の音を段々小さくして変わりに次の音を徐々に入れていく。)
それはなくても徐々に音を消す処理は必須。(いきなり消すとノイズが入る。)
この辺はハードが色々用意してくれてるだろうから、勢いでなんとかなる。
一番大変なのは、どの場面でも必要になるサウンド処理は、別スレッドで管理されることが多い。
サウンドはスレッドセーフで作らないと後で大変なことに。
後、BGMをストリームで流すとディスク上で常にシークが入る。
ロードを頻繁にするデータは、ディスクの外側よりBGMの隣にデータを配置した方が早くなる場合もある。
昔、隣の席でゲームのサウンドを開発している人を見た感想でした。
671:デフォルトの名無しさん
08/06/14 10:50:28
,,,,,,,,,,_
,ィヾヾヾヾシiミ、
rミ゙`` ミミ、
{i ミミミl
i゙i ,,,ノ 、,,-=、 ミミミ サウンドプログラム
{_i=・}-{_=・`} ̄レゥ:}
l ̄,,,,_,゙ ̄` :::ン フフン
|/ _;__,、ヽ..::/l
ヽ.~ニ~ ' .::::ノ/ }\_
_,,.-‐' `ー '"::/ / |  ̄`''ー-、
r‐''" ./ i\/ / | / ヽ
/ / | /;;;ヽ、 l ヽ / ノ /}
672:デフォルトの名無しさん
08/06/14 11:56:49
シミュ系のプログラムやってる人おる?
昔のビンテージエフェクターの回路図をソフトウェアでシミュとか
673:デフォルトの名無しさん
08/06/14 17:55:44
いけいけどんどんて
674:デフォルトの名無しさん
08/06/14 20:30:15
>>668
どんな本が良いですか?
そもそも公式に書かれた記号の意味が分からない
俺のようなものでは読むだけ無駄ですか? orz
675:デフォルトの名無しさん
08/06/14 22:53:08
勉強しろ
676:デフォルトの名無しさん
08/06/15 15:27:42
OHMの「マンガでわかるフーリエ解析」辺りから入ればいいんでねぇの?
677:デフォルトの名無しさん
08/06/21 00:41:08
音声をFFTして周波数領域でなんか処理してるプログラムのソースないですか?参考にしたい
678:デフォルトの名無しさん
08/06/21 07:17:21
キーコンをFFTで周波数領域でやってる人がいたと思うけど
granul 分割統合法の方がシンプルで良好なようだよ。
ほかにはFFTはタップ数の多いFIRフィルタを計算するのに
計算量を減らすのに使われる。
周波数軸上で直接加工するのは難しいよ
679:デフォルトの名無しさん
08/06/28 12:51:17
音声の実信号x[n]があります。
↓
点数4096のFFTをかける
↓
4096/2個のDFT値(実部と虚部)
Xr[n] Xi[n]を得る。
↓
パワースペクトル計算し
xp[i] = Xr[i]*Xr[i] + Xi[i]*Xi[i]
対数とってdbに
db[i]= 10*log[10] xp[i]
という手順でスペクトル解析するプログラムを組みました。
入力として1khzのsin波を入力すると
1khz付近の値が一番大きく130[db]ぐらいになります。
これは正しい
しかし、10khzでも値が50ぐらいあって、
他にあるスペアナのように綺麗にピークがでません。
原因とかわかりますか?困っています
680:679
08/06/28 14:37:47
あと窓関数としてハミング窓かけています
681:デフォルトの名無しさん
08/06/28 14:42:02
80db差って10^8ってことだよねえ
682:デフォルトの名無しさん
08/06/28 16:37:27
って事は別に普通だということですか?
フリーのスペアナだとそんなことはないんですが
683:デフォルトの名無しさん
08/06/28 18:19:11
入力x[n]のパワーは?
窓関数外した時の結果は?
S/Nの閾値は?
684:デフォルトの名無しさん
08/06/30 09:45:51
音声の実信号ってのが16bitPCMなんじゃないの?
そうするとデジタル誤差が丁度それくらいだと思うよ
685:デフォルトの名無しさん
08/06/30 14:57:22
実信号x[n]の代わりに、sin関数で生成した配列を入力に使って
理想状態のテストをやってみたら?
その後、入力の位相をずらしてみたり、DCオフセットを追加してみたり、
16bitとか24bitに量子化するなど、各種の条件でテストしたら
どの要素がどのように影響しているのかが見えてくると思う
686:デフォルトの名無しさん
08/07/03 19:51:24
>>683
窓関数いろいろ変えても良い結果はでないですね。
S/Nを区別する処理はしてません
>>684
そういうもんですかね?
>>685
例えば800Hzのsin波とかどうすればいいんでしょうか
687:デフォルトの名無しさん
08/07/04 14:56:28
>例えば800Hzのsin波とかどうすればいいんでしょうか
#include <math.h>
#define PI 3.14159265
#define NN 4096
#define Fs 10000.0 /* Sampling freq. 10kHz */
#define Freq1 800.0 /* Signal freq. 800Hz */
int i;
double x[NN];
for(i=0;i<NN;i++)
x[i] = sin(i*2.0*PI*Freq1/Fs);
688:デフォルトの名無しさん
08/07/04 17:01:01
>>686
16bitで量子化してると 6*15=90dBしかS/Nはないよ。
サイン波をソフト上で16bitのデータを作って入れても-105dB程度下にノイズが出てくる
689:デフォルトの名無しさん
08/07/04 20:34:29
サウンドの基礎が解ってないようだし、初心者本なり教科書なり読んで勉強するべき。
690:デフォルトの名無しさん
08/07/05 12:59:11
sin関数で生成したのでテストしてみました。1000hzのsin波で、サンプリング周波数は10k
FFTは4096点で、窓関数はハミングです
値はパワースペクトルです。
988.769531 [Hz]: 60.407160
991.210938 [Hz]: 52.110974
993.652344 [Hz]: 0.011060
996.093750 [Hz]: 6921.740936
998.535156 [Hz]: 681334.211257
1000.976563 [Hz]: 946209.472048
1003.417969 [Hz]: 31271.077880
1005.859375 [Hz]: 19.035879
1008.300781 [Hz]: 43.300825
なかなかいい結果になりました。993hzで値が小さいのが気になりますが。
97.656250 [Hz]: 0.061772
100.097656 [Hz]: 0.061831
102.539063 [Hz]: 0.061892
>>688
このあたりがノイズってことですよね。対数とってdbにするとマイナスでてきちゃうし
>>689
一応読んで勉強したつもりなんですが・・・ dbがマイナスとはどういうことでしょうか?音を吸収する?
691:デフォルトの名無しさん
08/07/05 13:04:31
>>689
分かってないのはサウンドの基礎だけではなかったようだ
692:デフォルトの名無しさん
08/07/05 13:17:42
1、 ムダな精度で表示するな
2、 周波数も対数化する方法を考えろ
693:デフォルトの名無しさん
08/07/05 17:23:02
>>690
なんでスペアナ作りたいのかしらんけど、作っても君の知識レベルでは使いこなせないから意味無いよ?