5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

サウンドプログラミング

1 :デフォルトの名無しさん:2001/07/27(金) 03:18
アナログ音源やFM音源などのエミュレートや、
MODトラッカー,MIDIシーケンサの技術的な話題に関するスレ

2 :デフォルトの名無しさん:2001/07/27(金) 03:34
http://www.buzz2.com/

3 :デフォルトの名無しさん:2001/07/27(金) 06:04
VCO-VCF-VCA

4 :デフォルトの名無しさん:2001/07/27(金) 08:51
スレ立てた奴がネタを出さないスレは、煽られるか廃れるだけ
他人に頼るだけの奴はスレ立てるな

5 :デフォルトの名無しさん:2001/07/28(土) 02:08
ネタねーのかよ
sage

6 :デフォルトの名無しさん:2001/07/28(土) 02:28
スレ立てたやつは自分の興味のある内容について
現状でも希望でもいいから書け

7 :not 1:2001/07/28(土) 14:27
本出てるぞage
ttp://www.cactussoft.co.jp/books.htm
win限定なのは痛いが、まぁ仕方ない。

でもwinのAPIをunixの奴(read()/write())に比べると
なんでこんな面倒なんだ?とむかついてくる。

ソフト音源作ってみたいなあ。
テキトウにそれっぽく書いて(winで)やってみたら
全然処理が間に合わなかった(わら
まだまだスキル足りない模様。
unix用(語弊あり?)のオプソの奴のソースでも
じっくり読んでみるか…
#なんでウニかというと、上記のように出力の仕掛けが単純なので、
#いらんこと気にせず読めるはずだから。

>>3
TVO-TVF-TVA は労陸(LA音源)だっけ?

8 :デフォルトの名無しさん:2001/07/29(日) 02:01
興味ありage
自分もFM音源(OPM)のエミュ作りたいと思ってたら、すでにあって消沈。
ttp://homepage1.nifty.com/mpuusan/x68sound/x68soundbody.htm
ソースも公開されてるし...

>>3
VCFのアルゴリズム知ってたら誰か教えて、できればレゾナンス付きのやつ

9 :デフォルトの名無しさん:2001/07/29(日) 02:20
直流成分を除去するアルゴリズムを教えて下さい。
あるNESエミュのソースを見たのですが理解できません。

10 :デフォルトの名無しさん:2001/07/29(日) 02:24
>>8
>VCF

この板でしかも「アルゴリズム」って質問の仕方だってことは
ソフト(デジタル)でやる話と思うが、
ならばFIRフィルタやIIRフィルタを使うんじゃないかやっぱり?

アナログのコンデンサ的フィルタと
デジタルのディレイ的フィルタじゃ
定数のかましかたが全然違うが、
そのへんは適宜行列計算かなんかで
相互変換すればいいんじゃないかと想像する。

そういえばアナログシンセの真髄は、デバイスの癖のせいで
(MOOGの)理論通りに音が出ない、という点に尽きる。
だから、馬鹿正直に理論を実装しただけじゃ
それこそLA音源並の音になる。

11 :デフォルトの名無しさん:2001/07/29(日) 02:40
>>9
平均値を引けばいいだけ.

12 :デフォルトの名無しさん:2001/07/29(日) 02:47
>>10 LAのSquareWaveは大好きだ・・・

13 :デフォルトの名無しさん:2001/07/29(日) 03:14
オートワウやリングモジュレーターとか、
アナログエフェクターの回路図読める様な人ならエミュレートって
多分簡単なんだろうね。
(自分はハンダコデは使ったことはあるけど回路図読めない)

>>8
昔図書館で、「自作する電子楽器」みたいな本に
そういう回路図とかのってた気がするけど、
そういうのって役に立つのかな

14 :デフォルトの名無しさん:2001/07/29(日) 08:18
>>8
VCFは 2次LPFで良いでしょう

LPFだけなら簡易な
w=πf/f0 として f=カットオフ周波数 f0をサンプリング周波数
w^2/(1-(2-w*a-w^2)*Z+(1-w*a)*ZZ)  Zはz^-1の事
で良いでしょう。
 レゾナンスはフィードバックをかける事ですが、aを調整してゆくと実現出来ます
ただし0から負の領域は発振領域ですから、なだらかなクリップ処理をかけると
いいでしょう

ちなみに数式で 1/(1+a1*Z+a2*Z*Z)は 入力x出力yとして
y= x-(1つ前のy)*a1-(2つ前のy)*a2
結局 LPFは ww:=w*w ; a1=2-w*a-ww; a2:=-(1-w*a);
y:=x*ww-a1*y1-a2*y2;
y2:=y1;
y1:=y;
result:=y;


>>9 それはLPFという処理です。 カットオフしたい周波数によって2次か1次かを
  決めます。たとえば数ヘルツでカットオフしたいなら1次でOKです

1次のLPFは
w =2*π*f0/22050.0;
r =tan(w/2);
b =(1-r)/(1+r)
(1-b)(1+Z) Zはz^-1の事
------------
2(1-bZ)
か簡易には
1-(1-b)    bは1-f/f0 程度
---------
(1-(1-b)Z)
でもOKです。 分母は
y:=x+(1-b)y ;ですから 分子bをxにかけて
y:=b*(x-y)+y と計算します

15 :デフォルトの名無しさん:2001/07/29(日) 08:31
なお、2次LPFは 14の式では高い周波数になるとアナログとの特性のズレが極端になります
サンプリング44.1Kで4KHz程度で処理したいなら 周波数を1/2にして
分子を(1+Z)^2にするといいでしょう

この方式だと正確には
w0 =2*π*f0/fsample;
w =tan(w0/2);

     w*w*(1+Z)^2
------------------------------------
(1+αw+ww) -2(1-ww)Z + (1-αw+ww)Z^2

となります。 

16 :デフォルトの名無しさん:2001/07/29(日) 10:32
http://www.mirai.ne.jp/~mitsuman/mag/lab/digitalfilter.htm
> アナログフィルタのシミュレーション(?)とそのフィルタの特性を
> ラプラス変換で確かめます.
> またディジタルフィルタを作成し,z変換で特性を調べます.

ここにいろいろ書いてある。レゾナンスも。

17 :>>14:2001/07/29(日) 11:36
この辺の情報に詳しい書籍やwebページない?
俺、大学行ってないから、どうしてこうなるのか知りたいんだけど

18 :デフォルトの名無しさん:2001/07/29(日) 12:03
友情リンク

OggVorbisを使うスレ
http://piza2.2ch.net/test/read.cgi?bbs=tech&key=992580185

19 :14:2001/07/29(日) 20:34
>>17 俺も大学行ってないよ。
 とりあえず三角関数と複素数が判ってれば利用するのに支障無し

20 :8:2001/07/29(日) 23:29
>>14
ありがとう、2次IIRでいけるのね。
固定小数点で、16Mhz程度の組込用16bitCPUで出来ないかと考えてたけど
やっぱりSHクラスのCPUで浮動小数点DSPを使わなきゃ無理そうですね。
パラメータ変わったときの係数再計算も重そう。
最近はやりのバーチャルアナログシンセはどんなCPU使ってんだろう?

>>13
S(アナログ)からZ(デジタル)への変換って結構計算が重いと思います。
結構複雑な式だった記憶が...
精度良くかつ安直にやると次数も増加するんじゃないかな。

21 :>>19:2001/07/30(月) 02:34
んー、利用するだけですか。
公式丸暗記はあまり好きじゃないので、
原理を知りたいのですが。

これ知らないと、自分でフィルタ作れないですしね

22 :14:2001/07/30(月) 07:01
あれ? >>14>>9 へのレスは間違いだ。
除去というのは取り出す事じゃなくて取り除くことだから LPFじゃなくてHPFだね

>>20
固定少数点だと、厳しいのは
w^2の項があって、wを可変するとたぶん可変範囲は8bit程度
必要だから処理は24bit程度でやらなければいけないからかな

係数の再計算はそれほど大変じゃない。tanだけあらかじめ
係数と、その差分をたテーブルにしとけばいいでしょ。
そんなに係数の更新は急ぐ訳じゃないし。


ところでクロック16MというとH8かM16C?
 という事はサンプリングは10K程度かな?
それなら出来ない範囲じゃないと思うけど

23 :14:2001/07/30(月) 07:16
なんか、キミの事がよく判らんが、こんなサイトはどうだ? >>21
ttp://www.signal.tutics.tut.ac.jp/~dspcai/mtanaka/filter.html

24 :8:2001/07/31(火) 01:32
>>14
今のところできたらいいな程度にしか考えてませんが、仕様は
AKI H8とかM16Cなどの5千円以下で手に入るCPUボードで外RAM,ROMなし
サンプリング20KHz、2VCO、EG&VCA、VCF(レゾナンス有り)構成のMIDIから
操作するバーチャルモノシンセってとこです。

係数更新の許容範囲は、数十msぐらいかなぁ。

やはりボトルネックはVCFと非同期のMIDIの受信割り込みかと思うけど。
20KHz=>800cycle@16Mhzだからどのみち、直感的な意見ですが
浮動小数点積和はスピードで厳しいでしょう。
とりあえずゆっくり頭を冷やして、全体の処理構成と各処理の重さを
検討して見ようかな。


25 :14:2001/07/31(火) 07:40
ああ、浮動小数点積和は厳しいな 固定少数点で計算した方がいいよ

非同期のMIDI受信はそう厳しくないよ31.25Kbpsだからしれてる。
M16CでCで素直に書いてもおいつく

VCFを作るのにこんな方法はどうだろ?

どうせVCOでサイン波ジェネレータは作るから、2相のサイン波が
出るようにしておく。つまり複素数でいえば e(-iwt)の信号ね
これを元信号と掛算すると周波数軸上でシフトした事になる
このシフトした状態(複素数)に1次のLPFを回転周波数に応じて
かける。これに2相のサイン波を再度掛算する。今度はe(jwt)ね
するとwの周波数のBPFが出来る

掛算は4回必要だけど2次のフィルターのように係数にシビア
じゃないし綺麗でしょ?

26 :デフォルトの名無しさん:2001/08/02(木) 07:40
>>14
ww:=w*w ; a1=2-w*a-ww; a2:=-(1-w*a);
y:=x*ww-a1*y1-a2*y2;
この式だけど、

a1,a2を代入して
y := (2-b*w-w*w)*y1 - (1-b*w)*y2 + w*w*x

分解して
y :=y1-(y2-y1)+(y2-y1)*b*w+(x-y1)*w*w

y :=y1-(y2-y1)+{ (y2-y1)*b + (x-y1)*w }*w
とやれば、
wはおよそ2πf0/fs (f0が共振周波数 fsがサンプリング)
だから係数更新し易い。

27 :デフォルトの名無しさん:2001/08/03(金) 22:16
おしれーた

28 :デフォルトの名無しさん:2001/08/04(土) 12:07
稲本がんばれ

29 :デフォルトの名無しさん:2001/08/04(土) 12:09
小野もな

30 :デフォルトの名無しさん:2001/08/04(土) 22:30
>>14
アナログのレゾナンス付LPFの伝達関数
H(s)=w^2/(s^2+(w/Q)*s+w^2)
に双一次変換の公式
s=(2/T)*(1-Z^-1)/(1+Z^-1) Tはサンプリング周期
を代入してみたけど
そんな簡単な式になりそうになかった。
どのような元式を使ったか教えてください。

>>25
それってエーリアスは問題にならないの?
またこの方法だとレゾナンスは無しでしょうか?

なんかプログラムじゃなくて数学色が強くなってきたね。

31 :デフォルトの名無しさん:2001/08/05(日) 06:30
>>30
双一次変換した方は >>15
>>14 はいわゆる共振型
 wが大きくなるとアナログと外れて来るけど
低い周波数ではよく一致する。 周波数特性描かせて見たら判る


サイン波をかけ周波数シフトした上でフィルターをかける方法は
かけるフィルターがLPF以外だと折り畳みの問題がある

例えば 20Kサンプリングで 8KHzの音に3KHzのサイン波をかけたら
5KHzと11KHz 11KHzは折り返されて 9KHzの音と区別がつかない

ただ、2相でやってる事に注意。 複素数の場合、位相関係を
揃えればサンプリング20Kで20K迄表現出来る。

32 :デフォルトの名無しさん:2001/08/05(日) 07:54
ちなみに双一次変換の分母は 係数を
 U =√(1+aw+w*w)
 b =a/U;
 w'=2w/U;

とすれば >>14の分母の形に変形出来る つまり >>26の形に変形出来る
w =tan(2πf0/fs/2) だからf0/fsが小さければ
w = 2πf0/fs/2 また U=1 としていい
   
さらに低い周波数に対しては双一次変換分子の(1+Z)^2 は殆ど利かない
wが小さければ分母の効果だけでも十分というのが理屈

33 :デフォルトの名無しさん:2001/08/05(日) 08:47
>>32
俺がいま言おうとしてたのに。

34 :デフォルトの名無しさん:2001/08/06(月) 11:32
Zじゃなくて Z^(-1) じゃないのか?

35 :34:2001/08/06(月) 11:33
スマン >>14でそう書いてるな・・・・。

36 :デフォルトの名無しさん:2001/08/08(水) 01:26
もーフィングとかもエミュれる?

37 :デフォルトの名無しさん:2001/08/08(水) 22:59
>>36
Emuのあれですか?
そもそもあれが大雑把にいってどんな処理なのかが判りません私(T_T)
時間領域でグラフをMorphingやったって単に音声をMIXしただけにしかならない(藁)から、
周波数領域でグラフをMorphingするって感じでしょうか?

38 :デフォルトの名無しさん:2001/08/08(水) 23:49
ここの人は何を読んで勉強したのでしょうか?
自分は数学は少しできますが、音声についてはまったく分かりません。

39 :デフォルトの名無しさん:2001/08/09(木) 22:17
昔のアーケードで良く使われていたFM音源のOPMエミュは(重いけど)
あるみたいですが、DX7のエミュとかって無いでしょうか。

40 :デフォルトの名無しさん:2001/08/09(木) 22:19
>>39
答えるかどうか、熟慮しています。15日までまってください。

41 :デフォルトの名無しさん:2001/08/09(木) 22:57
>>40
期待される答え(^^;の人の行いはそれはそれで称えるに値する行いなんだけど、
それは別として、4OPと6OPって結局はOP数とパラメータが違うだけだよね。
なんで今まで無かったんだ?というのは、激しい不思議。
4OPな奴(おぷそのも有るよね)を改造してとりあえず6にした人とか
既にいないの?

ところで15って…終戦っすか?

>>38
漏れは関係ないが、それ方面な友人の挙動を見て推察するに、
たとえばトラ技なんかを愛読していたよ。

42 :デフォルトの名無しさん:2001/08/09(木) 23:53
>>38
情報系の学校の授業とその教科書
アナログ領域は数学のフーリエ級数、デジタル領域はデジタル信号処理とか
DSPってタイトルがついてる本なら基礎理論はだいたい同じことが書いてある。
俺はあまり理解はしてませんがね。

あとDTMマガジンとか、インターフェース、
デザインウエーブの連載かな。

>>41
エミュ作るのに必要なチップの仕様書が手に入らないからでは?
OPMやOPLなら昔のパソコンの取説や解説書なんかに内部構成とか、
パラメータの計算式やテーブル値が載ってるけど、
DX7のやつって見たことない。

あと実は激重だからとか...

43 :デフォルトの名無しさん:2001/08/10(金) 00:20
>42
1〜2年前ぐらいまでは重かったけど、
最近のPCなら余裕でしょ。
あと、YAMAHAがチップの仕様書を公開してるとは思えない。
有料で入手できるかもしれないですが

44 :デフォルトの名無しさん:2001/08/10(金) 02:31
age

45 :デフォルトの名無しさん:2001/08/10(金) 03:01
DX7IID

46 :デフォルトの名無しさん:2001/08/10(金) 09:01
>>42
4OPのエミュって、仕様書読んで作ったんでしょうか?
てっきりパラメータ突っ込んで出力音をオシロやスペアナとかで
観察して挙動を見切ったのだと思ってたよ。

>>43
んだ。単なるサイン波(というかtable読み出し)なんだから、
フィルタでいろいろやる音源より軽い可能性も。

7のチップは出してないねえ。一番安いのはMU用プラグインボード?
楽器としてはTX802なんかが中古で一万くらいで有るけどさ(藁
なんでチップ出さなかったんだろ。面白かったのに。

47 :デフォルトの名無しさん:2001/08/10(金) 23:28
>>46
たしかに書籍のデータは観測して書いてるかも。

ttp://www.yamaha.co.jp/product/lsi/prod/index.html
でも今では、これぐらいまで一般の人が見れるんだから、パソコンメーカには
同じ程度の資料があって取説を書いてるはず。
このような資料と実機測定あとパラメータいじりながらの耳ミミコピ、
プログラムスキルがあれば6OPだろうとエミュは作れると思います。

>>43
知人から聞いた話ですが昔、YAMAHAへFM音源ICの資料請求したがもらえなかったと。
いまでもそうじゃないかなぁ。
あと1年ぐらい前だったか海外のYAMAHAサイトに古いFMのカタログがあったらしいが
自分が見に行ったときはすでにリンク切れてました。

48 :デフォルトの名無しさん:2001/08/12(日) 00:05
オシロスコープage

49 :デフォルトの名無しさん:2001/08/12(日) 01:36
javaSoundAPI使ったプログラムない?

50 :通りすがりの名無しさん:2001/08/13(月) 12:21
サウンドプログラミングスレですか。面白いですね。

さておき、いきなり質問で恐縮ですが、
WinAmp のプラグインについて質問があります。

WinAmp のプラグインに、
「レンダリング波形数とレンダリング先のバッファを指定すると
波形を吐き出してくれる。繰り返し実行すると、再生ポイントが
進んでいく。これらの機能は、プラグイン単体で動作できる。」
というような仕様の、波形レンダリング関数(または手段)は
用意されているでしょうか?
ざっと仕様をみたところでは、内部で再生スレッドを立ち上げたり、
WinAmp と連動したり、ややこしい作りになっているようで、
上記の関数は表には見えていない様でした。

WinAmp のプラグイン単体で再活用できれば、
世間に存在する多種多様のサウンドフォーマットの資産を、
ゲームの BGM など、WinAmp 上での再生以外の用途で活用できるのですが。

51 :通りすがりの名無しさん:2001/08/13(月) 12:25
>>47
> でも今では、これぐらいまで一般の人が見れるんだから、

YAMAHA も随分とオープンになったもんですなぁ。

52 :デフォルトの名無しさん:2001/08/13(月) 23:49
>>51
でも、mLANって非OPENなんでしょ?ライセンス料とか取るって言ってる。
OPENなMIDIが世界標準になったのとは大違いだ。

過去のシンセの説明書をwww経由で無料DLできる(PDFとか)ようになってるんで、
過去に対しては結構OPEN化が進んでいるのかも知れないけど、
それは単に未来の大儲けのために過去の垢を捨てているだけじゃないかな。
垢でも有り難がる人は世界じゅうに居るのでYAMAHAにとって問題なし。

>>49
やってみたいなあ。漏れはMIDIだけで挫折しそうだが。
おっとこのスレはMIDIも守備範囲だっけ。すまん。

1.3で搭載されたMIDI(SMFじゃなくMIDIプロトコルそのものの)サポートは、
実用性がどうなのかは別として気概は凄いと思った。
汎用言語メーカー(藁)たるSUNが、MIDI MessageとMIDI Eventの区別を
厳格に定義するようなAPIを、最初から作っちゃうんだもんなあ。
まぁきわめてJAVAらしいといえばそのとおり。

というわけで、実際に使った人の声聞きたい。
あの厳格なクラス構成をきっちり使ったのかどうかとか、ね。

53 :デフォルトの名無しさん:2001/08/13(月) 23:52
>>50
本当に出来るなら面白いですね。
試しにソフト音源とかを作ってみるときに足回りとして転用できそう。

ところでVSTって、音源ソフト(プログインとか)を作る側から見て、なんなのでしょう?
ソフト作るための資料としてFREEなものは有りますか?APIとかの。

54 :デフォルトの名無しさん:2001/08/14(火) 00:30
YM2203ならコミケでどっかのサークルが資料として載っけていたのを
見たな・・・

>>51
半導体を売っている会社でWebにデータシートが載せていない方がいまは
珍しいと思う。

55 :デフォルトの名無しさん:2001/08/15(水) 09:20
>>53
steinbergのpageを見るべし。
developer登録すればSDKはダウンロードできる。

56 :デフォルトの名無しさん:2001/08/17(金) 22:00
age

57 :デフォルトの名無しさん:2001/08/19(日) 04:30
>>50
input plug-inのこと?
DSPならApollo等他のソフトでも使えるけど、
inputの方はwinampと連動してるから無理かなーってことか?
なんとかできんことはない気がするね。

58 :デフォルトの名無しさん:2001/08/24(金) 09:50
ちょっと話は変わるんですが、
Cubaseのプラグインを作るために参考になるサイトとかってありますか?

59 :デフォルトの名無しさん:2001/08/24(金) 11:17
ttp://www.interq.or.jp/jazz/kuniox/

60 :デフォルトの名無しさん:2001/08/24(金) 11:29
WO=〜
めちゃめちゃありがとう>>59

61 :デフォルトの名無しさん:01/09/03 03:45 ID:LXi6Pi92
22050Hzのwaveファイルを44100Hzにバッチ的に変換したいと
思っているんですが、自分でこういった処理を作る場合、
波形の2度書き(↓)以外になにかすることってあるんでしょうか。
22050Hz         44100Hz
_| ̄|_| ̄|_→__| ̄ ̄|__| ̄ ̄|__
考えられるのって曲線補完とかですかね?
参考になるサイトなどありましたら教えてください。

62 :デフォルトの名無しさん:01/09/03 07:48 ID:3fY0oBq.
>>61
2次補間でもそれなりな結果になりますが
 本に載ってるより一般的な方法は、
 1)間をゼロで埋める
 2)前サンプリング周波数÷2より少し低い周波数で強力なLPFをかける

というものです

63 :デフォルトの名無しさん:01/09/03 08:06 ID:zmFVSFBM
えっと、標準MIDIフォーマットの規格にはループないですけど、
規格外のループイベントではどんなのがあるでしょうか?

とりあえず、RPGツクール2000の
コントロールチェンジ111番だけ確認したです。

64 :デフォルトの名無しさん:01/09/03 12:12 ID:ewvSMjxY
>>61

リサンプル?
マルチレートFIRフィルタ使ったら?

あるいは、変換後のサンプル位置から変換前のサンプル位置へ
マッピングして、その時小数座標になるから、シンク関数で補完する。

65 :デフォルトの名無しさん:01/09/03 12:23 ID:XtwpCTmA
MAX/MSPあげ

66 :64:01/09/03 12:23 ID:ewvSMjxY
追記

Windowsなら、

ttp://www.intel.co.jp/jp/developer/vtune/perflibst/index.htm

にあるインテル信号処理ライブラリのマルチレートFIRフィルタ使うと楽。
nsp?FirLowpass_Proc()で、まず前サンプリングレート÷2のローパスフィルタを設計し
nsp?FirlInitMr()で初期化して、
nsp?Fir()に掛ける。

Windows以外だとそれ使えないから、その場合はこれ参考にするといい。
ソースコードつき。
ttp://www.geocities.co.jp/Technopolis/9674/ssrc/

67 :デフォルトの名無しさん:01/09/03 12:59 ID:nCTaZ.02
>>66
インテル信号処理ライブラリって便利なのがあるんだね。
これは使わなきゃ損だ。

ところでこの場合、実際にFIRかけるとき、入力データは2個に1個は0だから
その辺は工夫しないと、演算が無駄に増えてしまうね。

>>64
シンク関数を使う場合はどうしたらいいの?
ハミング窓とかの窓関数をかけて範囲を有限にしてから演算すればいいのかな?

68 :64:01/09/03 15:19 ID:ewvSMjxY
>>67

>ところでこの場合、実際にFIRかけるとき、入力データは2個に1個は0だから
>その辺は工夫しないと、演算が無駄に増えてしまうね。

そういう用途向けにちゃんと複数サンプルをまとめて扱うブロック版の関数がある。
内部ではちゃんと無駄な計算を省いてあるらしい。
リサンプルなら、それに1秒単位でぶち込めばよいと思う。

SSEとか使えれば当然活用してくれるので、速度的には結構信頼できる。
精度がどうなのかは、今いち漏れにはよくわからない。

シンク関数は、窓かけて有限にして扱う。
どのくらいの精度のリサンプルをしたいかによるが、
近似関数使うといいかもしれない。

リアルタイム処理するなら、精度を落としてよく4近傍とかで行う。
某書籍のサンプルでは
0<=|x|<1では
w(x)=1-2*x*x+|x*x*x|;
1<=|x|<2では
w(x)=4-8*|x|+5*x*x-|x*x*x|
2<=|x|では
w(x)=0
なんて近似を使ってやってるのを見たことある。
この関数は、左右対称で、x=0のとき1で、その他の整数座標では0になる特性をもつ。
近傍4サンプルでこの関数の頂点(x,y)=(0,1)がそのサンプルの座標にくるようにあてがって、
合計を取ると、それが補完された波形になる。

エフェクトとかの処理でリアルタイムに高速な処理が必要とされるなら、
精度は低いが上述の方法でやる。
単なるリサンプラで、処理に時間がかかってもいいのならFIRフィルタ使った方がいいだろう。

69 :デフォルトの名無しさん:01/09/03 18:26 ID:nCTaZ.02
>>68
Sinc関数のそんな近似があったんだ。ということは。
22050Hzのサンプリングデータ I(0) I(1) I(2) ... に対して
44100Hzのサンプリングデータ O(0) O(1) O(2) ... は
 O(2n) = I(n)
 O(2n+1) = -0.125*I(n-1) + 0.625*I(n) + 0.625*I(n+1) + -0.125*I(n+2)
たったこれだけの演算でよいわけね。これはメチャ速そうだ。
これでどれくらいの音質を確保できるんだろう?
実際に聞き比べた感じでは分からないレベルなのかな?

70 :デフォルトの名無しさん:01/09/03 19:19 ID:nCTaZ.02
ところで便乗質問だけど、
>>62の2)の工程で使うLPFは直線位相特性を持つ必要があるので、
普通はFIRフィルタを使うと思うんだけど、
聞いたところによると直線位相特性を持つIIRフィルタもあるとか。
これってどんなの? このサンプリングレート変換処理に直線位相IIRフィルタって使えるんですか?
また直線位相IIRフィルタの欠点って何かありますか?

71 :デフォルトの名無しさん:01/09/03 20:59 ID:56CCihG6
>>63
AnnexMIDIはスムーズな無限ループ・途中から繰り返すループが可能だ。
ゲーム向けの仕様なんだろな。
でもこれスタンダードMIDIフォーマットじゃないんだよね。

72 :aruru:01/09/03 21:46 ID:.hT78Mno
SB Live!とかの音源をMIDIからではなくて、直接いじるようなイメージの
APIはあるんでしょうか?
MIDIと普通のサウンド出力以外の使い道があるなら活用したいんだけどな〜

73 :61:01/09/03 22:15 ID:U9hn1Usc
みなさんどうもです。
なんかやたら難しそうですね。
とりあえずは簡単そうなssrcを解析してみようと思います。
ありがとうございました。

74 :デフォルトの名無しさん:01/09/03 23:52 ID:TwJ99J86
>61
前に同じようなことをやったんだけど、やってみるとサウンドカード側で
補間されていることが分かって愕然としたことがあるよ。
補間せずに44k化したものより、22kのwaveをそのまま再生したほうが
音質がよかったってことね。
なんで補間しても音質が変わらないのか最初分からなかった。

75 :デフォルトの名無しさん:01/09/04 12:00 ID:DASKlEA.
>>74
単にD/Aの出力が結果的に線形補間に見えてるだけじゃなくて?

76 :デフォルトの名無しさん:01/09/04 15:16 ID:rccG4HwI
>>74

補完しても音質はかわらんだろう。むしろ大抵下がるだろう。
そのまま22kで再生した方が音質が良かったのは、
つかったサンプルレートコンバータのエンジンより、
サウンドカード内蔵もしくはドライバレベルで用意されている
サンプルレートコンバータの方が精度が良かっただけ。
必ずしも良いとは限らんさ。特に安物サウンドカードだった日には、鬱氏だぞ。

>>70

漏れも興味ある。数学もしくは信号処理詳しい人の回答きぼーん。

>>74

ssrc解析するよりインテルの奴使うほうが簡単だよ。
漏れはssrcの解析はあきらめたクチ。
解析っつーか、SSE化をあきらめたんだけど。

77 :デフォルトの名無しさん:01/09/04 15:19 ID:rccG4HwI
>>69

音質はかなり悪いと思われ。
ま、用途によって変わるだろうが。

その式は、音程を変えずに再生速度を上げるとか、
ビブラートとかのエフェクト中で使うために
ごくごく簡略化された計算だから。
そういう用途向けで無いとそれだとちと辛い。

78 :デフォルトの名無しさん:01/09/14 06:32
関係無いけど、CASIO FZ-1(サンプラ)とかはサンプルの再生周波数36khz
だったけど、なんであんな中途半端な周波数だったんでしょう?
CDの存在する時代ですよね?
音は(当時にしては)結構良かったけど。

79 :デフォルトの名無しさん:01/09/14 06:57
SC-88ProやSC-8850も36kHz出力ですぞ。
高音成分まったく出てこないので、めっちゃやな感じ。
プロユースにゃもっと高いヤツ買えって
Rolandの声が聞こえてきそうだ。

80 :デフォルトの名無しさん:01/09/14 07:05
>>79
そりゃ初耳。
ありがとう

81 :デフォルトの名無しさん:01/09/14 09:23
>>63
>えっと、標準MIDIフォーマットの規格にはループないですけど、
>規格外のループイベントではどんなのがあるでしょうか?

「規格外」ということは「標準」じゃないということなので、
好きなだけ作れば出現する(でもそれは既にSMFではない)、というだけのこと。

>とりあえず、RPGツクール2000の
>コントロールチェンジ111番だけ確認したです。

一生探し回ってください。原理的にその捜索の旅には終了は定義されていない。
今日もまたどっかのドキュが新たなフォーマットを…

CtrlChangeでループの指示ねえ。大昔のオープンリールテープで
低い音を感知したら反転するってのがあったそうだが、
パイプオルガンだと時折誤作動したそうだ(藁
あんまり特異なことをしても空しいぞ、という教訓だと思われ。

>>65
>MAX/MSPあげ

ついでにPureDataあげ

82 :81:01/09/14 09:28
>規格外のループイベント
変なフォーマットを陳列する博物館を作りたいのでもない限り、そんなものに関心示すのは無駄。
もともとSMFは(そういう用途には)効率悪いんで、
使いやすいフォーマットを別途自作する方向で考えたほうが実りが多いぞ。

83 :デフォルトの名無しさん:01/09/14 10:01
After Touch でループの会社もあったよ・・・
>そんなものに関心示すのは無駄。
そゆことなのでsage

84 :63:01/09/14 11:22
>>81-83
あー、そういうことは百も承知しとるっすよ。
なんか他にもとんでもねーものが一部で普及しとるんちゃうかと
興味本位で訊いただけなのに。しく。鬱。

85 :デフォルトの名無しさん:01/09/14 12:03
まあまあ。

86 :デフォルトの名無しさん:01/09/14 22:44
>>84
一部で普及というか、ある閉じた環境でなら通用する方法なら、
多分沢山あると思いますよ。閉じてんだから、その環境で通用
すれば何やっても良いわけですし。

私が知っているものでもControlChangeの組(始点と終点)で
ループを表現しています。実際にはそのCCを付けた元データを
変換して最終的なデータ(似非SMF)にするわけですが。

87 : :01/09/15 01:05
このスレまじでためになるからあげ!

88 :83:01/09/15 11:45
>84
泣かせちった。ゴメン。
興味本位って事ならそうだなー、
ドリームキャストっていくつかのMIDIを組み合わせて、
イントロやループ部を構成する上部構造のシーケンスがあったような。

89 :デフォルトの名無しさん:01/09/22 16:18
age

90 :デフォルトの名無しさん:01/09/23 14:11
>>88
ラッパーを被せてそれによって機能拡張する、というならば
全然反則じゃないと思われ。
単にそれ自体をSMFと名乗らせるのが詐欺なだけ。

>>86
CCを埋めるというお約束を使ったSMFというなら、一応Standardだな。
ただ、効果は世間一般に保証されるわけじゃないだけで。
使いそうもない鍵盤の端っこに、Start/Stopとかの機能を割り当てて
リモコンできるシーケンサ、とかと同じレベル。

それならば許せるが、未定義イベントなんか作った(使った)ら、市なす!
少なくともStandardじゃない。

91 :83:01/09/24 07:11
>90
いや、SMFとは言ってなかったよ。たしかその時点で、
aiffとかと一緒にしてpackになってたと思う。(うろおぼえ)
SMF or Not を気にする人って
シーケンサを作ったりしてる人なの?

92 :デフォルトの名無しさん:01/09/30 00:18
>>59
WinでBorand C++Builderでコンパイルする方法の情報は存じありませんでしょうか?

サンプルのADelayをmakeしようとADelay.dspから必要なファイルを読み取り、
それらをすべてプロジェクトに登録して、ADelay.DLLまで出来たんですが...
VSTのフォルダーに突っ込んでもCubaseVST32が認識してくれませんでした。

93 :デフォルトの名無しさん:01/10/01 04:00
age
だれかやってるだろうからgoogleで英語で検索してみたら?

94 :92:01/10/02 00:25
>>93
それぐらいはすでに実行済みです。
意外な程、VSTiのプログラムまで手を出してる人は少ないみたい。
ソースの中に、CBUILDERの条件マクロがあるし、MFCとか使ってないから
やる方法はあるんだろうと踏んでるんですが。
素直にVisualC++を手に入れろってことかなぁ...
ちなみにDLLのことはほとんど解らないです。

95 :=94:01/10/02 00:30
>>93
失礼!!英語ですね。
今やったら引っかかりました。
どうもありがとう。
#ばかだな俺。

96 :デフォルトの名無しさん:01/10/02 03:10
フリープログラマーなんですが
この手のノウハウを武器に、個人で商売するのってやっぱ
むずいかなー。
みなさん、かなり詳しいようですが、何か仕事にいかしていますか?
それとも趣味ですか?

こんなにサウンドプログラマーな人がいるってびっくり。
画像系の会社だと、サウンドっていうと「再生、停止」の概念
要するに、鳴ればそれでいい
くらいの認識だもんね

97 :DB02:01/10/03 23:21
シンセを作る会社にいるならともかく、一般にわからせること自体が
難しいよな。
理解がなければ、絶対わかってもらえそうにないし。

98 :デフォルトの名無しさん:01/10/04 14:38
むしろ波形の知識を生かして測定機メーカーに行くのはどうか。
なに、周波数の桁が2つ3つ上がるだけだ(w

99 :デフォルトの名無しさん:01/10/16 16:26
他の所にも書いたのですが、質問させて下さい。
普通のCDや音楽データをDJmixのように、段々盛り上げていくような
曲順に勝手にしてくれるようなプログラミングが
(理想としては)作りたいと思うのですが何を勉強したらよいでしょうか。
単にBPM速い曲と遅い曲に分けるだけでもいいです。
当方何も知りません。とりあえずCとjavaぐらいです。Windows使ってます。
C++とMIDIプログラミングについて勉強しようかと思ってはいますが
それで方向性正しいのかもわかりません。
本も1冊ぐらいしか見つからない&サウンドプログラミングについて
詳しく説明しているHPもあまり無い感じだったので聞いてみました。
もしそういうHPがあったらそれも教えていただけるとうれしいです。
っていうかこの考えは実現できますか?
またはとっくに実現されてますか?
質問自体が馬鹿ですか?
本当に何も知りません。よろしくお願いします。

100 :デフォルトの名無しさん:01/10/16 16:52
ACIDとかあーいう奴でしょー?
違うかな。生成じゃないのか。


とりもあえず、MIDIよりPCMの方が楽だと思う。

101 :99:01/10/16 17:45
ACIDっていうのは作曲ソフトですか?
よく分かりませんが、要するにCDプレーヤーのランダム再生機能を、
例えばゆっくりした曲から激しい曲になるような、
ある意図に基づいたランダム再生(?)をしたいので
作曲とかではない感じですが、取り敢えずこういうものは制作可能なんでしょうか?
ともかくPCMについても調べます。ありがとうございます。

102 :デフォルトの名無しさん:01/10/16 18:37
>>99 BPMを調べるのはWinampのプラグインで実現されてた
ような気がする。で、今調べてみた。
http://www.winamp.com/plugins/detail.jhtml?componentId=6564

103 :197:01/10/16 22:25
>>99

MIDIなら元々BPMが埋め込まれているし、
その他のPCMに出来る形式なら、>>102の言ってる奴のように
推測することができる場合もある。
PopsとかRockなら、フーリエ変換でもして、低域のゲインの推移を追って、
ある程度の間隔の規則性を持って変化するはずだから、それから推測が可能。
クラシックとかは難しいんぢゃないのかなぁ。
とりあえず、プログラミング自体あまり詳しくないのなら、道は遠いとおもう。

104 :99:01/10/17 18:53
>>102-103
レスありがとうございます。大変参考になります。

うーん、遠いですか、C,javaぐらいじゃ駄目ってことっすよね。
どのくらい遠いんでしょうか…むう。
まあ逆に考えればちょっと詳しくなれば近くなるのかなと、
とりあえずクラシックは無視してもいいかなと、
微妙に勉強してみます。

105 :103:01/10/18 16:43
>>104
とりあえず、フーリエ変換か、ウェーブレット変換を調べてみ。
ポリフェーズフィルタとか、FIRフィルタでもいいや。
その辺の周波数軸で扱える理論が理解できるようなら、道は近いと思われ。

まずは、いちばん簡単で高速なので、フーリエ変換をお勧め。
つーかもっとも基本(?)だし。

106 :104:01/10/19 15:32
>>105
おおーっ。ありがとうございます!
「一応」大学生なのでフーリエ変換は習ったような習ってないような・・・アハ。
勉強し直します〜〜。

107 :名無しさん:01/10/20 15:58
さっぱりわからないですけど、とりあえず興味あるので応援age

108 :デフォルトの名無しさん:01/10/20 17:03
どうせMIDIの話かと思ったら、結構まじめにDSPの話題じゃん。

109 :103:01/10/20 23:39
>>106

大学でやったのは、一般的なフーリエ変換だと思われ。
漏れが言っているフーリエ変換は、その大学でならったフーリエ変換のうち、
特殊な事例である離散フーリエ変換のことだよ。
調べるのなら、一応キーワードは『離散 & フーリエ変換』にしといた方が、
作るだけなら早いかも。
ま、一応一般的なフーリエ変換の概要は知っておいた方が、
のちのち役に立つと思うけど。

110 :デフォルトの名無しさん:01/10/20 23:47
サイン波合成だけで、任意のパルス幅のパルス波はどうつくればいいんでしょうか?
方形波:f(t) = 馬=1->∞ (4r/π)(2n-1)sin((2n-1)ωt)
って基本式だと、パルス幅は波長の50%ですよね。。。これを
10%とか40%とかにするには、どんな方法あるんでしょうか?
ちょと、数学ネタにちかいけど、現在ソフトシンセつくってます。
VCOの難関はあとは、パルスワイズモジュレーションだけなんだけどな。。。
どなたかよろしくおねがいします。

111 :デフォルトの名無しさん:01/10/21 00:19
>>110
厳密には無限まで足しあわせてはじめて方形波になるわけだから
やっぱさ、合成じゃなくて
if(t<0.4) r=1.0;
else r=-1.0;
(ただしtは[0,1]でループ)

ってやれば?

112 :デフォルトの名無しさん:01/10/21 00:41
>111
その方法だと、無限に高次倍音をふくむので、エイリアスノイズ(だとおもう)が発生するんです。
特に、サンプリング周波数44.1KHzで、1KHz以上を再生すると「ピー」とか「ジー」とか
基本周波数とは全然関係ない成分が目だって、聴くに耐えないんですよ。
(シンセサイザと名乗る以上は、これは問題と思ってます。)
2通りの解決策をかんがえてるんです。

策)再生波形そのものを、ナイキスト周波数以上の倍音を含まないように
合成する。つまり、適当な次数まで足しあわせて終わらせます。高い周波数になれば
なるほどサイン波に近づくわけです。

この方法でノイズが消えるのは実験済みなので、あとは、
パルス幅可変にして、合成できれば、ばっちりかと、思ってるんです。
が、、、、いかがでしょう。

113 :デフォルトの名無しさん:01/10/21 00:52
俺音楽にもちょっと才能あんだ
どうせ波だからゆくゆくはやるつもり。

114 :Delあめ猫にゃ:01/10/21 08:55
>>112 理論的にはそれでいいにゃ

パルス幅を可変にする方法は 方形波じゃなくて
帯域制限されたパルス波を基本にして、
 プラスのパルスとマイナスのパルスを積分すればいいにゃ

115 :デフォルトの名無しさん:01/10/21 10:59
>>111 にフィルタをかけて20kHz以上の周波数をそぎ落とすという方法はどう?

116 :114:01/10/21 11:25
>>115 オーバーサンプリングする必要があるよ

117 :デフォルトの名無しさん:01/10/21 19:49
>114
ありがとうございます
しかし、まず、プラスとマイナスのパルス作ろうとしたら、うまくいかないです。
パルスって、どうやってつくるんだろ。
てっきり、基音の全整数倍音を同じ大きさで含むものがパルスだとおもって、
サイン足しあわしたら、こんな感じ、
_|___|___|___|___
 |   |   |   |

で、脳波やんけこれ、プラスもマイナスもなくなってしもた。。。
なんか、まちがってるんでしょうか?
うーむ。

118 :デフォルトの名無しさん:01/10/21 19:52
>>117
すんまそん。
絵が乱れてる。。。
―╂─―╂─―╂─―╂─
こんな感じ。に訂正

119 :114:01/10/21 20:19
もしかして sinを重ねたんじゃ? パルスは偶関数だからcosを重ねないと


それから、無理にスパッと切らなくても 1/exp(x^2) みたいなので我慢するとか
これのフーリエ変換は√π*exp(w^2/4)になるから

120 :114:01/10/21 20:24
×√π*exp(w^2/4)
○√π/exp(w^2/4)

121 :デフォルトの名無しさん:01/10/21 20:53
おーーー、パルス幅かわりました!
あめ猫さんのいうとおり、上パルスと、下パルスの位相ずらして、
たして、積分したら、幅かわりました。むひひ
みんさんありがとう!!
119>
COSでいけました。
なるほど、1/exp(x^2) でもそれっぽくなりますね、

>115,116
どしても、だめなら、その策を考えてました。

実は、昨日この掲示板をはじめて知って、質問したんですが、
みなさん、高度なスキルをお持ちですね。
この掲示板だけじゃ、もったいないなー。
メーリングリストとかで、情報共有できると、いいのになー

122 :デフォルトの名無しさん:01/10/21 21:45
121に自己フォロー
結局、上向きののこぎり波と、下向きのノコギリ波とカメハメ波に0
を乗算したものをずらして足せば任意のパルス波が
得られちゃうのでした。。。うーん、単純。すっきり。
パルス波って積分すると、ノコギリ波になるのでした。

123 :デフォルトの名無しさん:01/10/21 21:47
DXiとか作れる人います?

124 :デフォルトの名無しさん:01/10/21 23:00
DXi、まだ作ったことないけど、DXi対応にしようとおもってます。
VSTiでもいいけど。これも経験無し。
全然調査してないけど、、、特定のエキスポート関数を持ったDLL作る
ようなもんじゃないのかな?難しいのですか?
いいサンプル、資料あります?

125 :デフォルトの名無しさん:01/10/22 00:57
非常にいいスレありがとう

126 :デフォルトの名無しさん:01/10/22 12:57
>>86
PSのライブラリで使える SEQ フォーマットがもろそれ系ですな。

127 :106:01/10/22 14:56
>>109
ありがとごじゃります〜〜〜♪
ガムバリます。

128 :デフォルトの名無しさん:01/10/22 21:23
>>124
自分も2chのどっかの掲示板で知ったんだけど

VSTiのSDKサンプル付
ttp://www.steinberg.net/developers/VST2SDKLicence.phtml

DXiのSDK同じくサンプル有
ttp://www.directxfiles.com/developers.htm

どっちも落としたけど、自分のコンパイラがC++Builderのため、
VSTiはサンプルはコンパイルできたけどCubase(DEMO版だけど)で認識できず、
DXiにいたっては、WizardがVC++Ver6専用、サンプルもMFC使用していて
使い物になりませんでした。;_;
素直にVC++買ったほうがいいのかなぁ...

129 :デフォルトの名無しさん:01/10/23 21:07
DXi作ろうとしてる人同士で情報交換しませんか?
DXiのサンプルコンパイルしたんですが
COMを使ってるので、レジストリに登録しなきゃならないとかで
上手くできません
ちなみに、まだ英語の説明書を読んでません

130 :デフォルトの名無しさん:01/10/23 23:19
>128
ありがとうございます。
DXiサンプル、早速ダウンして、ながめていじくりたおしてみました。
MFCですな〜。BorlandC用に作り変えますか?難しいのかな?

>129
情報交換いいですね。
ちなみに、
レジストリへの登録は、VC使っていれば、ビルドの最終フェーズで行われて
いますよ。ちなみに、SONARできちんと、発音されるところまで動作確認でき
ました。

情報交換、どっかにMLつくりますよ。
作ったら、ここにアドレス書きますね。

131 :1:01/10/23 23:42
正直、こんなにスレが成長してるとは
思いませんでした。

132 :128:01/10/24 00:27
思い出した,VSTiのSDKはこのスレでの既出リンクより、
DXiのSDKはGoogleで検索してリンク見つけたんだ。

>>129
情報交換なら、この掲示板に行ってあげてください。
ttp://freebbs.around.ne.jp/article/d/dspfunc/1/index.html
実はDXiについて検索していて引っかかったのがここです。

>>130
サンプルのビルト,動作確認までできましたか、おめでとうございます。
こっちはしばらくの間、ソース眺めてたんですが、ボーランドへの移植は厳しそうです。
DXiのサンプル"Tonar"ってやつですよね。
これサンプルの癖に複雑なことやってるから、plug-Inの核心部分
クラスCTonarのソースですら理解できず、DXiの挙動がつかめません。
#インタフェースが複雑なのは、DirectXの全体に言えますが...
VSTiの方が、サンプルがシンプルで、インタフェースも簡単だから
理解しやすかったです。

とにかくお二人ともがんばってください。

133 :129:01/10/25 21:43
ちょっと用事があって、時間空けちゃいました
申し訳ないです
人数少なさそうですが、情報交換しましょう

>レジストリへの登録は、VC使っていれば、ビルドの最終フェーズで行われて
>いますよ。
え、そうなんですか?
さっそくリビルドしてみました
(ビルドじゃ駄目なんですね)

\Debug\Tonar.dll
1 個のファイルをコピーしました
指定されたパスが見つかりません。
0 個のファイルをコピーしました。
c:\winnt\system32\cmd.exe の実行エラー

Tonar.dll - エラー 1、警告 0
なんてのがでちゃいました
で、バッチビルドでクリーンしてからリビルドしたらできました

ttp://isweb37.infoseek.co.jp/art/dtmp/
ここに掲示板を作るので、ここで情報交換しませんか?

134 :デフォルトの名無しさん:01/10/26 00:27
>133
私もfreeml.comに、音楽プログラミングMLつくってしまった。。。
そのうち、公開されるので、そのときはよろしく。
とりあえず、そっちいきますよ。

135 :133:01/10/26 07:41
>>134
どうもです
相当がんばらないと、情報交換じゃなくて
情報もらうだけになっちゃいますね、私は・・・
土日でがんばってみます

MLはぜひ参加させてくださいね

136 :デフォルトの名無しさん:01/10/26 16:29
おれもcubaseのプラグインを作ってみたいなぁ

49 KB
■ このスレッドは過去ログ倉庫に格納されています

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)