サウンドプログラミン ..
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ですか
Wikipedia項目リンク
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
なんでスペアナ作りたいのかしらんけど、作っても君の知識レベルでは使いこなせないから意味無いよ?
694:デフォルトの名無しさん
08/07/05 17:29:48
何を勉強したらいいですか
695:デフォルトの名無しさん
08/07/05 18:09:10
なんでdB(対数)表現を使うのか?>Wikipedia項目リンク
対数のマイナス値の意味も解ってないみたいだから、高校数学辺りの教科書で対数を勉強する。
その上で>>679で触れてる「他にあるスペアナ」のスケールの上限下限値とか確認すると見えてくるかも。
696:デフォルトの名無しさん
08/07/05 21:09:05
リア厨の予感がする
697:デフォルトの名無しさん
08/07/05 21:09:55
リア中でこれだったら逆にすげぇわ
698:デフォルトの名無しさん
08/07/05 21:21:35
今日び本読めばたいていのことは書いてあるから
付け焼刃的な知識で実装は小学生でも出来る
その本を本当に理解するのに必要な基礎知識が抜けているのは
真っ当な教育を(まだ)受けていないから
699:デフォルトの名無しさん
08/07/06 05:46:08
ゆとり世代の大学の宿題
700:デフォルトの名無しさん
08/07/06 12:10:09
「何を勉強したらいいですか」の一文は最高にイカしてるなw
広がる話題でも無いし、後釣り宣言で収束キボンヌ
701:デフォルトの名無しさん
08/07/07 10:25:18
>>694
理系の大学1年生程度の数学。対数とフーリエ変換ぐらいは理解しとけ。
702:デフォルトの名無しさん
08/07/07 10:57:25
>>694さんが >>690 なら技術的というか工学的なセンスを磨く必要があると思うよ。
プラモでもいいし電子キットでもいいし、何でもいいからとにかく
実際に何か組み立てたり 雑学でいいから色んな本を読んで、
面白そうなものは作ってみる。
有効精度とか、この結果を出すのに何が一番効くかといったあたりからね
703:デフォルトの名無しさん
08/07/08 21:25:45
FFTの話からどんどん離れてきました
704:デフォルトの名無しさん
08/07/08 21:38:58
センターキャンセル処理で単純にL-Rするとオーバーフローする。
(L-R)/2ってしたらオーバーフローはしなくなりました。
でも気になる事があります。
元の数値が奇数だったら、切捨てされておかしなことになりませんか?
705:デフォルトの名無しさん
08/07/09 07:21:49
どうおかしくなると思うかを書いてみたら?
706:デフォルトの名無しさん
08/07/09 07:29:49
(L-R)/2が3の倍数になると頭がおかしくなる。
707:デフォルトの名無しさん
08/07/09 10:08:35
例えば波形の値が
300 303 だったら0.5倍すると150 151 となって二倍して元に戻そうとしても戻らなくなるので、データがちがくなってしまうのかなと
708:デフォルトの名無しさん
08/07/09 10:31:19
標本化定理が破られたと聞いて飛んできました!
今の時代、2倍以上の周波数でサンプリングしなくても
デジタル処理を使うと元の信号を完全復元できるそうですが
マジですか?
709:デフォルトの名無しさん
08/07/09 11:07:25
>>707
元に戻すような処理をするなら、2で割らず、余裕のあるところで計算しろ。
>>708
いましてるのは周波数じゃなくてビット数の話だろw
710:デフォルトの名無しさん
08/07/09 11:46:59
元には戻さないんですが
いいのかな?って思うんです
711:デフォルトの名無しさん
08/07/09 12:51:18
>>710
センターキャンセルで1bitの誤差が問題になる場面なんてあるの? なけりゃ気にするな。
712:デフォルトの名無しさん
08/07/09 18:23:44
切り捨て(丸め)について、まじめに考えたいなら下記URLが参考になる
URLリンク(blackfin.s36.coreserver.jp)
713:デフォルトの名無しさん
08/07/09 18:59:29
まぁ2で割るんで十分でしょ
714:デフォルトの名無しさん
08/07/09 22:34:52
>>708
いやいや、完全復元じゃない。
自然界に存在する音って調波構造持ってることが多いから、
低周波から倍音の推測がある程度可能って話。
こういう話が出るたびに標本化定理が破られたとか騒ぐ馬鹿がいるけど、原理が違うから。
>>709
別件の質問じゃね?
715:デフォルトの名無しさん
08/07/09 22:37:20
>>707
(L-R)/2 だけだと当然、下位1ビットの復元無理。
その±1の差がどの程度問題になるかって話で言うと、まあ、用途しだい。
(L+R)/2 の情報もあるなら、円め方のルール決めとけば完全復元可能。
716:デフォルトの名無しさん
08/07/09 23:30:17
(L+R)/2の情報持つぐらいなら、double型で(L-R)/2の情報を保持しといたほうがよくね?
717:デフォルトの名無しさん
08/07/10 00:37:58
>>716
L, R が32ビット整数ならね。
718:デフォルトの名無しさん
08/07/10 02:36:53
>>708 >>714
もしかして、アンダーサンプリングの話では?
719:デフォルトの名無しさん
08/07/10 07:04:42
>>716
もっと手っ取り早く、L/R/0.5*(L+R)の三つを保持しとけばよくね?
720:デフォルトの名無しさん
08/07/10 07:24:42
保存が必要なのは L と Rだけだろ (L-R)/2 はその場で計算出来る
721:デフォルトの名無しさん
08/07/10 18:32:11
まぁ数だけじゃなく質もいいけどな
NT○研究所、ソ○ー アクセ○チュア
まぁ君らニートには縁のない会社ばっかりだよ
722:デフォルトの名無しさん
08/07/10 18:39:51
周波数から音名への割り当て方ってどうすればいいですか?
例えばサンプリング周波数44.1khzのデータをN=8192の高速フーリエ変換をすると、
周波数分解能は5.38[hz]。
A3=440[hz]と考える。 440[hz]付近はこんな感じになってる
403.747559 409.130859 414.51416 419.897461 425.280762 [Hz]
430.664063 [Hz] 436.047363 [Hz] 441.430664 [Hz] 446.813965 [Hz] 452.197266 [Hz]
G#3=415[hz]で、どこまでをG#のパワーとしてみなして、どこからどこまでをAのパワーとしてみなしていいかわかりません。
単純に区間を2分割だとまずいですよね
723:デフォルトの名無しさん
08/07/10 19:16:42
またこの人か・・・
724:デフォルトの名無しさん
08/07/10 19:24:57
すいません。上のFFTのひとです
725:デフォルトの名無しさん
08/07/11 06:44:30
だから、まず、有効数字ってのを体に叩き込め!
半音の比は2^(1/12) = 1.059
だから、半音の真ん中の音は 2^(0.5/12) =1.029 の所だ
440*2^(-1/12) = 415Hz
440*2^(-0.5/12) = 427Hz ここが真中
なお、 A=440Hzに対して 430Hzは Aの音じゃない。 調子外れの音だ
処理の都合で A に入れるだけって事だろ?
726:デフォルトの名無しさん
08/07/11 10:11:53
ありがとうございます。
430Hzの音はAとしてみなし、Aのパワーとして加算すべきなのか、
ゴミとして捨てるべきなのかが分かりません。
430Hzの音が実際なっていなくても、FFTすると430Hzのところにパワーが出てきてしまいますよね?
727:デフォルトの名無しさん
08/07/11 10:27:57
>>726
好きにしろ。
728:デフォルトの名無しさん
08/07/11 11:57:50
>>726 手段は目的の為にあるんであって
手段の細かい事だけ聞かれても、他人には判断のしようがない
729:デフォルトの名無しさん
08/07/11 12:51:10
厨房採譜ソフトでも作りたいんだろうよ
730:デフォルトの名無しさん
08/07/11 16:21:44
test
731:デフォルトの名無しさん
08/07/18 14:31:32
Windowsで、モールス信号を出すプログラムを作っています。
信号のオン/オフを、正弦波を生成して信号がないときには0で埋める方法で実装したのですが、
信号が切れるときにプツプツと酷いノイズが乗ってしまいました。
--
10 9 7 0 0 0 0 0 0
--
突然信号が0になってしまうのがノイズの原因と考え、信号が0に戻るまで待つことにしました。
--
10 9 7 5 3 2 0 0 0
--
これでノイズはだいぶ軽減されたのですが、まだ残っています。
何かいい方法はないでしょうか。
あまり知識がないもので、何か参考になるサイトや書籍などを教えて頂けると嬉しいです。
732:デフォルトの名無しさん
08/07/18 14:32:40
>>731
エンベロープをつけろ。短い時間でフェードイン/アウトしろ。
733:デフォルトの名無しさん
08/07/18 14:33:44
>>731
ちょっとそれ聞かせてもらえる?
734:デフォルトの名無しさん
08/07/18 15:11:36
プチプチしたほうがモールスっぽいよ
735:デフォルトの名無しさん
08/07/18 20:39:15
>>731
自前でサイン波形出力してるなら0クロス地点(付近)でカットすりゃいいだけだと思うが、
そもそも、その「10」とかって値の単位はなんだ?
モールス信号出力ライブラリみたいなのでもあんの?
736:デフォルトの名無しさん
08/07/18 22:18:14
「信号が0に戻るまで待つ」=「0クロス地点(付近)でカット」ってことじゃないの?
737:731
08/07/18 23:42:24
>>732
エンベロープ調べてみます。アタック・ディケイをかけろということでしょうか。
短い時間なのでフェードを使うという発想はありませんでした。試してみます。
>>735
>>736の通りです。数字は単なる例示なのであまり深く突っ込まないでください。
738:デフォルトの名無しさん
08/07/19 06:47:15
多分、フェードインやフェードアウトの処理は数ms〜数十ms程度の時間で良いはず。
アマチュア無線機で、この時間を調整してキークリックを低減するという改造記事を
見たことがあるし、セットモードで調整可能なメーカー製トランシーバーもある。
739:デフォルトの名無しさん
08/07/20 18:25:11
時間分解能があまり重要じゃない解析において、
手法を短時間フーリエ変換からウェーブレットにする利点ってある?
740:デフォルトの名無しさん
08/07/20 23:52:06
ある
741:デフォルトの名無しさん
08/07/21 00:03:34
具体的にどんなことですか?
742:デフォルトの名無しさん
08/07/21 00:36:27
>>741
テンプレートマッチングとかじゃね?
音声認識で使うみたいなの
743:デフォルトの名無しさん
08/07/21 00:41:43
FFTしたデータとのテンプレートマッチングでもいい気がするが
744:デフォルトの名無しさん
08/07/21 09:44:12
まあ、ウェーブレットも、マザーウェーブレットの種類次第では、
単なる窓掛け FFT でしかないし。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4987日前に更新/249 KB
担当:undef