サウンドプログラミング5

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
音のプログラミング処理について語りましょう

各エフェクタの組み合わせとか、
プログラミング外の話題はDTM板の方がいいよ

サウンドプログラミング4
http://pc11.2ch.net/test/read.cgi/tech/1185340076/

サウンドプログラミング3
http://pc11.2ch.net/test/read.cgi/tech/1145573675/

サウンドプログラミング2
http://pc8.2ch.net/test/read.cgi/tech/1091054082/

サウンドプログラミング
http://pc5.2ch.net/tech/kako/996/996171508.html
2デフォルトの名無しさん:2009/01/11(日) 13:43:52
用語を統一するために

リアルタイム
 バッチ処理の対語で、ゼロレイテンシの事ではない。 
 遅延はあっても途切れずに処理する事をいう

レイテンシ
 ADCからDACまでにかかる時間の事だったり
 DSPの掛け算なんかで命令から実際に答えが出るまでの命令サイクル数の事だったり

DSP
 デジタル・シグナル・プロセッサ の場合は信号処理用のMPUの事
 デジタル信号処理の事を言う場合もある
3デフォルトの名無しさん:2009/01/11(日) 19:27:14
あげ
4デフォルトの名無しさん:2009/01/11(日) 20:14:47
音でプログラミングなのかと思った
5デフォルトの名無しさん:2009/01/11(日) 21:47:35
ディレイってどうやって作ればいいですか?
6デフォルトの名無しさん:2009/01/11(日) 22:57:57
アフリカへ行き部族間対立を煽り負けた者たちを欧米へ拉致る
7デフォルトの名無しさん:2009/01/11(日) 23:20:40
>>5
バッファ領域と、バッファの先頭をさすポインタを用意して、ポインタをぐるぐるまわして、読み出しと書き込みをする。
8デフォルトの名無しさん:2009/01/11(日) 23:24:34
ディレイタイムとかミックス量とかそういうパラメタはどうするんですか
9デフォルトの名無しさん:2009/01/12(月) 05:24:40
出力を一定時間遅延させて(ディレイタイム)一定量掛けて(ミックス量)加算すれば終わりなんじゃないの
10デフォルトの名無しさん:2009/01/12(月) 16:34:52
ho
11デフォルトの名無しさん:2009/01/12(月) 17:04:58
>>9
入力信号列をx[n]としたとき、y[n]をどう計算すればいいでしょうか?

512サンプル等ずつで計算するんでしょうか?
12デフォルトの名無しさん:2009/01/12(月) 18:10:15
>>11
たとえば y[0...n] と、ポインタ p を用意するだろ?
バッファに詰めるのは、y[p] = x; p++; if(p>n)p=0; を動かし続けりゃいいだけ。
取り出すのは、pからディレイタイムに応じたぶんだけ前の部分。y[p-サンプル数]な。
13デフォルトの名無しさん:2009/01/12(月) 18:13:41
インパルス応答との畳み込みとかいう事は考えなくていいということですか?
その演算が畳み込みになってるんですかね?
14デフォルトの名無しさん:2009/01/12(月) 23:15:32
畳み込み演算を使ってディレイを実現するプログラムを書いてみなよ
そこから0との掛け算の部分を取りのぞいたら>9や>12と同じものが完成
ディレイは文字通りある時間後だけに応答するわけで、畳み込みする間でもない
15デフォルトの名無しさん:2009/01/13(火) 00:15:57
>>8
おれはバッファをポインタでぐるぐる循環させて、
循環バッファか(考え方ではFIFOバッファ)
でバッファの長さがディレイタイム
バッファに残すレベルがディレイの音の大きさ
で、2週目以降バッファに書き込むとき前のも
一定割合でミックスしたらフィードバックディレイ
ってやってた
16デフォルトの名無しさん:2009/01/13(火) 00:39:48
そういうDSPのソースコードあるとこないかな?
17デフォルトの名無しさん:2009/01/13(火) 01:08:16
>>16
そういう?
ディレイだったら俺のだったらあげるけど。
理論書いてあるとこはあるけどね
ライブラリはどこでもありそうだけどね
おれは使わないからしらねけど
18デフォルトの名無しさん:2009/01/13(火) 01:23:13
詳細にアルゴリズムを教わっても組めない人は、プログラミングに向かないと思う。

ま、組めない奴は
http://www.musicdsp.org/
でも行け。
19デフォルトの名無しさん:2009/01/13(火) 06:51:34
今度はアセンブラのソースが無いとか言い出しそうな勢いだな。
20デフォルトの名無しさん:2009/01/13(火) 10:10:58
>>17
amp = 0.5;
delaytimenum = snd.fsamp * 0.3;
rptime = 2;

for (int i = 0; i < snd.num; i++)
{
sndout.s[i] = snd.s[i];

for (int j = 1; j <= rptime; j++)
{
int n,m;
m = (int)((double)n - (double)j * delaytime);

if (m >= 0)
{
sndout.s[n] += pow(amp, (double)j) * snd.s[m];
}
}
}

こんな感じですかね?17さんのも参考にしたいので見せていただけるとありがたいです

>>18 参考にしてみます
21デフォルトの名無しさん:2009/01/13(火) 11:47:57
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
22デフォルトの名無しさん:2009/01/13(火) 13:15:17
ディレイって、単に音が遅れて聞こえるだけじゃなかったのか。
23デフォルトの名無しさん:2009/01/13(火) 15:32:41
アナログディレイみたいにハイ落ちを再現したりするとめんどうだけどね
24デフォルトの名無しさん:2009/01/13(火) 20:31:30
マイクインやステレオインからリアルタイムに波形を取得する関数ってあるんですか?
25デフォルトの名無しさん:2009/01/13(火) 20:53:58
>>22
そうだけど、それを現在のに加算すると
効果が得られる。
時差あるから周波数特性がギザギザになる。
>>20
delayタイム以外は直に書き込んであるけど…
一個サンプルを入れると一個返ってくる見たいな
感じで作った。
//delaysample=delaytime(ms)*サンプリング周波数/1000
int delay1(int in,int delaysample){
static int delaybuf[20000];
static int delaycousor=0;

if(delaycousor>=delaysample)delaycousor=-1;

delaybuf[++delaycousor]=in;

return(delaybuf[delaycousor]*0.75+delaybuf[((delaycousor+1>delaysample)?0:delaycousor+1)]*0.25);
//return(delaybuf[delaycousor]*0.75+delaybuf[delaycousor+1]*0.25);


}//func end
26デフォルトの名無しさん:2009/01/15(木) 20:35:27
うーむなんかこのスレ新しくなるたびに同じこと繰り返してるよな。
どっかに過去ログまとめたほうがいいかね。
27デフォルトの名無しさん:2009/01/15(木) 20:42:11
>>26
うん
28デフォルトの名無しさん:2009/01/16(金) 06:15:59
プログラムの勉強をするなら動画圧縮か音声圧縮がいいということでサウンドプログラミングを始めたんですが
全く音の知識は無いんですが、周波数を変更する場合の存在しない中間サンプリング点を打つ場合
直線上に打つのは酷いってのはわかるんですが、補間で曲線上に打っても同じぐらい酷いと思うんですが
これはどうやって打てばいいんですか?
29デフォルトの名無しさん:2009/01/16(金) 09:53:05
>直線上に打つのは酷いってのはわかるんですが
ひどくない
たとえばフーリエ変換して周波数成分を欲しい領域に移動して
逆フーリエ変換すれば得られる等
30デフォルトの名無しさん:2009/01/16(金) 10:44:04
過去スレでよくフーリエ変換って出てくるので知ってはいるんですが
あれって一定の範囲内ってのがいいかげんで、
しかも途切れが含まれなかったり単音じゃないと酷いと思うんですが
ほんとにこれが主流なんですか?数学と無理やり抱き合わせるんじゃなくて
音専用の予測アルゴリズムとかはないんでしょうか?
31デフォルトの名無しさん:2009/01/16(金) 12:20:24
>>28
中間点をとるっていうのは

__ ̄ ̄__ ̄ ̄



___― ̄ ̄ ̄―___― ̄ ̄ ̄

みたいになるっていう意味でしょうか?
32デフォルトの名無しさん:2009/01/16(金) 13:02:04
バイリニア補完とかバイキュービック補完とかガウス補完とかシンク補完とかの話?
リアルタイム性の必要な処理なら、足して2で割るのもよく使われるよ。
33デフォルトの名無しさん:2009/01/16(金) 14:50:50
>>31
そうです。
>>32
いやニュートンとかスプラインのことをいったんですが、どのみち音に特化してなければ同じですが。
足して2で割るって酷くないですか?間が飛びぬけて山谷になってるかもしれないのに
それって意外な事実ですよね。実際変換ソフトなら全部似たり寄ったりだと思って使ってました
34デフォルトの名無しさん:2009/01/16(金) 15:04:53
>>33
あなたがするべき事は実際に大量のデータで統計を取る事だな
音情報である以前にスピーカーを振動させるための電圧である事も考慮しつつ
35デフォルトの名無しさん:2009/01/16(金) 16:02:04
>>34
なんか英文を直訳したような文章だな
36デフォルトの名無しさん:2009/01/16(金) 19:29:17
>プログラムの勉強をするなら動画圧縮か音声圧縮がいいということで
これの根拠が分からない。ファイル圧縮ならまだ一般的な感じもするが。
37デフォルトの名無しさん:2009/01/16(金) 20:06:50
シャノンからやり直せ。
38デフォルトの名無しさん:2009/01/16(金) 21:05:19
>>33
サンプリング定理
39デフォルトの名無しさん:2009/01/16(金) 21:25:39
>>33
速度を気にしないなら、周波数領域に変換してから間を埋めろ。
40デフォルトの名無しさん:2009/01/16(金) 21:38:10
いっつも思うけど、周波数領域に
変換すると、時間分解能みたいのが
ゆるくなるから音質悪くなる希ガス
41デフォルトの名無しさん:2009/01/16(金) 21:57:16
>>40
DCT自体は可逆だぜ。
速度やらサイズやらのために細かい部分を捨てることが多いだけで。
42デフォルトの名無しさん:2009/01/16(金) 22:05:29
>>41
可逆なのは無限に加算したときだけじゃないの
普通は切り捨てるからそこで音質落ちるんだよ
程度問題だけど人間の耳で分からないレベルで
気にならなければOKでしょ
43デフォルトの名無しさん:2009/01/16(金) 22:10:14
音にDCTしてもなぁ…
44デフォルトの名無しさん:2009/01/16(金) 23:33:43
>>42
扱うのはデジタルデータなんだから無限に加算する必要なんざねーよ。
45デフォルトの名無しさん:2009/01/16(金) 23:39:15
てことは、かなり細かく分割して周波数領域に
変換するってこと?
46デフォルトの名無しさん:2009/01/17(土) 00:00:59
ウェーブレットでやれ。
47デフォルトの名無しさん:2009/01/17(土) 08:36:00
WDM Kernel StreamingをASIOでラッパーするドライバを作ってみた

AsioKs
http://fanzo.real-sound.net/iCubicProject/
48デフォルトの名無しさん:2009/01/19(月) 18:19:02
49デフォルトの名無しさん:2009/01/21(水) 10:51:49
DNAはやくリリースされないかな
50デフォルトの名無しさん:2009/01/24(土) 11:24:36
DirectNoteAccess?
51デフォルトの名無しさん:2009/01/24(土) 16:08:40
ディレイとエコーの違いが分からない orz
ディレイは少し前の入力値を、現入力値に加算
エコーは少し前の出力値を、現入力値に加算
という理解で合ってるのかな・・・
52デフォルトの名無しさん:2009/01/25(日) 15:10:53
エコー=リバーブ?
53デフォルトの名無しさん:2009/01/25(日) 16:15:46
エコーはこだまだろ
やほーーー、yahoo...
54デフォルトの名無しさん:2009/01/25(日) 19:40:15
ディレイもエコーも同じだよ
55デフォルトの名無しさん:2009/01/25(日) 23:34:17
俺も>>54と同じ意見。 ディレイ=エコー=やまびこ、で、リバーブが風呂場で音が響く感じ。
56デフォルトの名無しさん:2009/01/26(月) 09:08:59
俺の認識では、エコー=風呂場の響き だな。 
5755:2009/01/26(月) 11:14:09
>>56
じゃあ、リバーブはどう認識してるの?w
5855:2009/01/26(月) 11:18:52
エコー
* (ギリシア*kh*)ギリシア神話のニンフ。ヘラの怒りを買って他人のことばを繰り返すことしかできなくなる。ナルキッソスを恋したがその愛を告げられず、苦悩の果てに声だけ残り、こだまになったという。
* (英echo)
1 こだま。やまびこ。
2 残響。

国語大辞典では、↑だそうだよ。
>>56の風呂場でヤッホーと叫ぶと、2、3秒してからヤッホーが戻ってくるのか?w
59デフォルトの名無しさん:2009/01/26(月) 11:32:25
リバーブと風呂場は残響というか壁の反響音だよな
6055:2009/01/26(月) 11:54:09
だから、教会やコンクリートの部屋や洞窟の複雑な反射音を小さな機械で再現しようとしたのがリバーブなんだよ、ばか。
61デフォルトの名無しさん:2009/01/26(月) 12:08:53
ディレイは純粋に遅らせるだけ ドライとの合成は別問題
リバーブは残響
リバーブの実装方法の中にはディレイを用いるものもある
6255:2009/01/26(月) 12:09:42
だから、ディレイ=エコー=やまびこのプログラムは簡単だと思う。
パラメーターは、原音にたいし、何秒後に何回返すか、音質をどう変化させていくか、音量をどう変化させていくか、
ぐらいしかないと思う。
リバーブは、原音にたいし、0.01秒後ぐらいから反射が始まって、全体的にワオ〜ンという音を作らなければならないから難しいと思う。俺は全然わからないw
6355:2009/01/26(月) 12:24:27
仮にリバーブが出来たとしても、リバーブをかけた時に、聞く人が心地よくなければダメだからむずかしい。
リバーブの製品でも「これ風呂場リバーブじゃん」ってバカにされるからね。
64デフォルトの名無しさん:2009/01/26(月) 13:17:53
スプリングエコーって言うのあるじゃん。
あれは山びこじゃなくて、風呂系の響きだよな。
65デフォルトの名無しさん:2009/01/26(月) 18:57:13
風呂場で聞けばいいじゃないのもう
66デフォルトの名無しさん:2009/01/27(火) 01:24:59
おまいらちょっとはググったらいんでないか
エコーはフィードバックディレイだ
リバーブはディレイタイム(レベルも?)のばらばらな
無数のディレイを加算して再現したりしなかったり
いろんな方法があるみたい
>>64
スプリングリバーブは、昔アナログのころ
バネのある空間に音を飛ばして戻ってきた
音をリバーブとして(ry
67デフォルトの名無しさん:2009/01/27(火) 17:16:01
バネのある空間って何だ
68デフォルトの名無しさん:2009/01/27(火) 23:30:42
69デフォルトの名無しさん:2009/01/30(金) 11:49:27
等ラウドネス曲線を扱ったプログラミングがしたいのですが、
調べた限りグラフばかりで、グラフから読み取るのは精度的にも問題ありそうなので、
周波数毎のゲインの数値データが欲しかったりします。

1) Web等で数値データとして配布されていますか?
2) もしなければ下記の仕様書の購入を検討するのですが、
そもそも仕様書自体には数値データは含まれているのでしょうか?
ISO226:2003 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=34222
70デフォルトの名無しさん:2009/01/30(金) 23:58:53
>>69
でかい本屋で立ち読みできるからいってみたら?
71デフォルトの名無しさん:2009/01/31(土) 21:20:01
>>71
なるほど、その手が。
ありがとうございます。早速行ってみます。
72デフォルトの名無しさん:2009/02/06(金) 15:52:38
あげ
73デフォルトの名無しさん:2009/02/06(金) 21:11:17
>>72
そんなさがってた?
74デフォルトの名無しさん:2009/02/08(日) 22:06:58
うん、もう海底まじかだったよ
75デフォルトの名無しさん:2009/02/08(日) 22:54:44
>>6
それはドゥレイだろ!
76デフォルトの名無しさん:2009/02/09(月) 21:47:30
>>75
超遅レス乙
77デフォルトの名無しさん:2009/02/13(金) 12:54:22
再生速度の変更ってどうやればいいですか?



2 3 4 5ってデータがあったら
2 2 3 3 4 4 5 5にしたらいいんですか?これで再生速度50%?
78デフォルトの名無しさん:2009/02/13(金) 17:46:22
>>77
やってみるといいよ
79デフォルトの名無しさん:2009/02/13(金) 21:19:47
>>77
こんなん

23456789   ←6〜9をフェードアウト
   23456789←2〜5をフェードイン
80デフォルトの名無しさん:2009/02/14(土) 01:21:02
波形はそのままでサンプリングレートを下げるだけ
81デフォルトの名無しさん:2009/02/14(土) 10:09:26
それだと音程も下がるよね
82デフォルトの名無しさん:2009/02/14(土) 13:11:10
補完すればいいんじゃね
83デフォルトの名無しさん:2009/02/17(火) 00:00:50
84デフォルトの名無しさん:2009/02/17(火) 03:00:39
すみません質問ですが、Mpeg-4の規格のドキュメントってどこかにないでしょうか。
mp4の音と映像を分離したいと思っているのですが。
85デフォルトの名無しさん:2009/02/17(火) 07:44:34
86デフォルトの名無しさん:2009/02/17(火) 10:55:52
mp4のdemuxくらいなら俺だったらmp4boxのソースを参照しちゃうな
ライセンスはLGPLになるが
87デフォルトの名無しさん:2009/02/20(金) 23:08:07
>>83
おー、それ買ってみた
今度よもと
88デフォルトの名無しさん:2009/03/08(日) 12:03:38
ImageMagickの音版みたいなツール群ってありませんか?
89デフォルトの名無しさん:2009/03/08(日) 14:55:07
具体的に、何ができることを期待している?
90デフォルトの名無しさん:2009/03/08(日) 15:16:16
>>89
ノーマライズしたり無音部分を取り除いたり
簡単な帯域通過フィルタができたりするコマンドラインツールです
91デフォルトの名無しさん:2009/03/08(日) 16:45:41
>>90
つ sox
92デフォルトの名無しさん:2009/03/08(日) 18:43:41
>>91
まさにこんなやつです!
さんくす
93デフォルトの名無しさん:2009/03/08(日) 22:10:08
winXP, VC++2005 でサウンド入出力プログラムを作っています.
SDK,低レベルAPIを使っています.
入力,出力共にマルチバッファリングを行っているのですが,
入力と再生の間に,バッファ数に従う遅延が生じてしまいます.
体感では,(1バッファに録音する秒数 * 用意したバッファ数)秒
の遅延が生じていると思われます.

リアルタイムに近い動作を実現したいため,
1バッファに録音する秒数(RecSEC)を短くしています.
現在の設定では RecSEC = 0.005 [sec/buffer] です.
バッファ数が少ないと音声がブツブツと途切れてしまいますが,
バッファ数を増やす事で解決しました.

これで遅延量が少ない動作が実現できたと思っていたのですが,
RecSEC = 0.1 として実行してみたところ,約0.1[sec]の遅延を期待していたのですが
約(0.1*バッファ数)[sec] という大きな遅延となってしまいました.

ソースコードをアップしましたので,解決方法をご教授願います.
waveInStart の実行位置を変えてみる等色々とやってみましたが
よくわかりませんでした.

pass: sagehoge
ttp://www2.uploda.org/uporg2074476.txt.html

アルゴリズムによる遅延を解消したいです.
よろしくお願いします.
94デフォルトの名無しさん:2009/03/08(日) 22:57:41
>>93
遅延云々以前に入力と出力を同期させてないように見える

バッファ単位の入力完了イベントでたった今読み取ったバッファを
出力にまわす、という処理をしなくてはならないのに、
入力と出力を同時に走らせてタイミングは運にまかせてるから
録音よりも再生が先行してたまたまバッファまるまる1周分の遅れ
が生じているのでは

waveXXXは使ったことないので推測でしかないが
95デフォルトの名無しさん:2009/03/09(月) 10:37:27
InバッファとOutバッファを共有したいのは分かるが
別々に用意してコピーする方がいいかもしらん
96デフォルトの名無しさん:2009/03/09(月) 15:32:05
別に分けた所で割り込み間隔が短いと負荷時にあっさり逆転する。
まー、デバイスによるのかもしんないけど、
waveIn/waveOut系は互いに同期取ってるわけでも無いし保証も無かったと思うから
一番短い理論上可能な「1バッファ分のレイテンシ」すら難しいと思うよ。
97 ◆0uxK91AxII :2009/03/09(月) 15:47:17
>>93
頭が悪すぎてハナシにならない。
98デフォルトの名無しさん:2009/03/09(月) 15:56:28
コテハンでいきなり罵倒か。NG対象にしてくれといわんばかりだな
99デフォルトの名無しさん:2009/03/09(月) 19:07:47
基地外参上ってアピールしてるんだろ
10093:2009/03/09(月) 22:03:47
>>94
私自信 wave*** を使い始めたばかりなので
(それが免罪符だとは考えていませんが)
よく分かりません.検討致します.

>>95
ありがとうございます.
それは何故でしょうか?

>>96
「1バッファ分」が理想的ですが,
用意したバッファ分のレイテンシとなる事が避けられたら満足です.

>>97
解決策が分かるのですね.
お暇な時にアドバイスをお願いします.

101デフォルトの名無しさん:2009/03/10(火) 09:12:54
WinXPで音楽のテンポを変更する処理を実装したいです。
音楽が入ったWAVファイルの音程を変えずにテンポを変えたいです。
普通はどのように実装するものでしょうか?
WAVEFORMATEX のサンプリングレートを変更するとテンポは変わりますが音程も変わってしまいます。
102デフォルトの名無しさん:2009/03/10(火) 09:29:10
タイムストレッチとかそのへんのキーワードでぐぐってみれば
103デフォルトの名無しさん:2009/03/10(火) 10:02:28
音程を変えずにテンポ変えるのって難しいよね
104デフォルトの名無しさん:2009/03/10(火) 10:19:24
単純に考えればテンポを下げるときは波形データを間引きし
テンポを上げるときは波形データを2倍した後間引きするとか
音質は保証の限りではないが
105デフォルトの名無しさん:2009/03/10(火) 10:19:28
106デフォルトの名無しさん:2009/03/10(火) 11:07:13
スレ毎に同じ質問が繰り返されてる気がするw
テンプレ化か、FAQとサンプルソースのwikiとかあった方がいいのかねぇ
107デフォルトの名無しさん:2009/03/10(火) 13:11:15
テンプレが増えてきたら、wikiあると便利だろうね
108デフォルトの名無しさん:2009/03/10(火) 13:30:21
スレ毎どころかスレ内でも繰り返してるぞ
>>101>>77-83 と同じだろ
109デフォルトの名無しさん:2009/03/10(火) 13:36:56
だな。ろくに知りもしないのに見当違いの回答しちゃう人が混ざってる点も同じ
110デフォルトの名無しさん:2009/03/10(火) 16:13:23
じゃ正しいソースください
111デフォルトの名無しさん:2009/03/10(火) 21:11:14
>>101
タイムストレッチはここの説明が分かりやすいかもな。
実装したことないけどw作ったらUPよろw

音声再生速度変換 : もっとゆっくりしゃべって!
http://blogs.msdn.com/windows_multimedia_jp/archive/2009/03/04/9458418.aspx
112デフォルトの名無しさん:2009/03/10(火) 21:21:39
>>110
つ105
113デフォルトの名無しさん:2009/03/10(火) 23:43:39
>>105って
200Hzの音を2倍速にするとき
10msに一度30万ステップの自己相関するん?

リアルタイムだと厳しそうね
114デフォルトの名無しさん:2009/03/11(水) 21:04:04
???
115デフォルトの名無しさん:2009/03/11(水) 22:19:07
>>113
そうしないと元の音との互換性が低くなるだろ
116デフォルトの名無しさん:2009/03/12(木) 02:24:19
>>113
ディレイっぽく聞こえるのを低減させるために
オーバーラップさせる時間を周期性としてる

周期性を求めるのに自己相関使ってるのは
FFTに比べ低音を考慮したときの精度がいいからとか
実装が楽だからとかじゃね
117デフォルトの名無しさん:2009/03/16(月) 01:30:58
>>101
それって結構難しいのよ
論文読むのがいいかなぁ…
118デフォルトの名無しさん:2009/03/16(月) 07:28:37
ttp://nis-ei.eng.hokudai.ac.jp/~aoki/laboratory04.html
7.実験6:再生速度の制御
↑で十分じゃん
119デフォルトの名無しさん:2009/03/16(月) 18:55:07
聴いた感じでは十分とは言いがたい
120デフォルトの名無しさん:2009/03/16(月) 19:06:41
単音ならまだしも
音楽となるとMIDIのようなソースレベルでテンポを変えないと無理だろ
121デフォルトの名無しさん:2009/03/16(月) 19:11:06
そこをなんとかするのがサウンドプログラミング
122デフォルトの名無しさん:2009/03/16(月) 19:19:35
適当な区間ごとに離散フーリエ変換で周波数解析して
それを合成すればなんとかなるかもしらん
123デフォルトの名無しさん:2009/03/16(月) 22:40:16
>>122
それはむずかしい

un4seenってとこのライブラリ
たしかオープンソースの再生速度変更が
けっこう優秀。
WMPより優秀と思う
124デフォルトの名無しさん:2009/03/20(金) 13:20:45
サウンドプログラマーな先輩方にお聞きしたい。
WaveTone(ttp://www.vector.co.jp/soft/win95/art/se421780.html)
↑このソフトはどういった変換でスペクトル算出しているのか見当つきますでしょうか。

当方、FFTで似たようなプログラムを組んでみたのですが、低音域の周波数分解能があまりに悪く、
実用とはほど遠い結果になりましたので、先輩方のお知恵をお貸し頂きたいです。
何卒よろしくお願い申し上げます。
125デフォルトの名無しさん:2009/03/20(金) 14:42:06
FFTのポイント数を増やすのはダメ?
ゼロ詰めしたりフレーム長を増やしたりしてね.
126デフォルトの名無しさん:2009/03/21(土) 12:18:51
>>124
・FFT結果から山を見つけて頂点を補完
・各音階に属する周波数成分で平均化(画像縮小アルゴリズムの面積平均法みたいな感じ?)
サイトの画像見る限りでは低音の精度は粗いからFFT後になんか処理してると思われ
127デフォルトの名無しさん:2009/03/23(月) 00:42:11
ローパスフィルタで分けてから低音域だけ取り出すとか
128デフォルトの名無しさん:2009/03/27(金) 00:26:38
>>123
みつからないけどどこ?
129デフォルトの名無しさん:2009/03/27(金) 05:51:08
すみませんタイム(ピッチ)シフトを実装したいのですが、
質問させてください。

速度とともにピッチが変更されてもかまわないのですが、
たとえば98%遅くするなど、単純な整数比ではない場合はどう実装すればよいのでしょうか。

アップサンプリング/ダウンサンプリングの手法ではこれは実現できないのでしょうか?
80%〜120%の間で、速度を変更したいです。
よろしくお願いします。
130デフォルトの名無しさん:2009/03/27(金) 07:37:39
>>128
ttp://www.un4seen.com/
ttp://www12.plala.or.jp/mojo/Delphi/delphi6-Z.html

タイムストレッチはたしかbass_fx

>>129
>>118でも見れ
98%の速度にするには、100×nサンプル再生した後
2×nサンプル戻った位置から再生する
131デフォルトの名無しさん:2009/03/27(金) 12:56:11
ピッチも変わっていいならTimidityのソースを見てみたら?
132デフォルトの名無しさん:2009/03/28(土) 21:46:56
ほんとは間引く前にローパスフィルタだっけ?
あれかけないとノイズがでることがある
133デフォルトの名無しさん:2009/04/03(金) 23:28:05
いらない
134デフォルトの名無しさん:2009/04/08(水) 02:00:47
FIRフィルタをそのまま実装するのと、
同じ係数で短時間FFTしてオーバーラップするのとは
同じ事でしょうか? 異なる場合は、どのような点が異なるのでしょうか?
135デフォルトの名無しさん:2009/04/08(水) 18:02:31
136デフォルトの名無しさん:2009/04/09(木) 02:53:22
>>135
ありがとうございますー
137デフォルトの名無しさん:2009/04/15(水) 00:57:20
VSTでイコライザを作ってます。
RBJ Audio-EQ-Cookbook見ながらピーキングフィルタを使ってシングルバンドのEQらしきものは実装できました。
これをLOWとHIGHの2バンドにしようとしてるのですがうまくいきません。
この場合、どんなふうにコードを書けばいいのでしょうか?
138デフォルトの名無しさん:2009/04/15(水) 01:30:12
ピーキング2つって意味ならIIRフィルタ2つ作ってに直列に通す

トンコロ的な、2~3バンドで全体を調整できるようなものにしたいなら
シェルビングタイプ2つにして直列に通す
139デフォルトの名無しさん:2009/04/15(水) 22:35:18
>>138
ありがとうございます。
ピーキング2つを並べてLOW,HIGHの順でやってるんですが、
LOWの効きがシングルのときよりかなり弱く(効いてない?)なってしまうんです。
「直列」っていうのをちゃんとプログラミングできてないんですかね・・・
140デフォルトの名無しさん:2009/04/20(月) 13:53:01
ASIO対応の録音再生ソフトって、素人では作れないですか?
141デフォルトの名無しさん:2009/04/20(月) 14:02:52
そんなことないでしょ、どうしてそう思った?
142デフォルトの名無しさん:2009/04/20(月) 23:30:39
商用ソフトしか存在しないから。

なんか、ASIOSDKがあるらしいので、入手できた。
143デフォルトの名無しさん:2009/04/20(月) 23:44:55
どんだけ無知だよ。。。
144129:2009/04/25(土) 17:54:51
>>130

亀ですみませんが、ありがとうございます。

100*nサンプルを再生バッファに入力した後、2*nサンプルもどってバッファを入力する処理を実装してみたのですが、
再生時にノイズが乗ってしまいました。

波形の接続部分がきれいに合わないためだと思うんですが、
これにローパスフィルタをかければノイズは消えるものなのでしょうか。
それとも僕の方法がまちがっていますか?

こわれたテーププレーヤーのような効果をデジタルで実装するのに他に何か有効な方法はないでしょうか。


よろしくお願いします。


145デフォルトの名無しさん:2009/04/25(土) 18:16:44
>>144
いきなり切替えたらノイズが出るので、
フェードアウト・フェードインさせながら切替えないといけない

http://floor13.sakura.ne.jp/book03/book03.html
のchapter11.zip
146デフォルトの名無しさん:2009/04/25(土) 18:45:52
クロスフェードってやつな
147129:2009/04/25(土) 19:04:13
>>145

おおお、ありがとうございます。
なるほどお, この本買って読んでみます。
148デフォルトの名無しさん:2009/04/27(月) 00:48:41
>>135
便乗ですまんけど、
FFTは暗黙に処理範囲の両端が繰り返すけど、FIRだと繰り返さないよね
ブロック処理ってそのあたり大丈夫なのかな?
149デフォルトの名無しさん:2009/04/27(月) 15:47:10
質問が曖昧でなにが大丈夫なんだ?
FIRだと切れ目無くできるからいいけど
FFTはぶった切るから窓関数+最後
オーバーラップが必要ってことか
150デフォルトの名無しさん:2009/04/27(月) 22:15:45
FIR相当の処理をFFTでやると、両端がループしてるから区間の最後の方の
計算値が区間の最初の方に影響するってことだろJK
151デフォルトの名無しさん:2009/04/28(火) 00:15:26
周波数成分いじって逆FFTしてまた窓かけてオーバーラップするからいんじゃね?
152148:2009/04/28(火) 00:21:42
分かりやすくするために極端な例だけど、例えば前半全てゼロ、
後半ピンクノイズみたいな波形があって、それをFFTして周波数成分を
操作して戻すと、ゼロだった前半部に微小な波形が出るよね。
要するにプリエコー、ポストエコーなんだけど、
これはオーバーラップだと解決できないと思うんだ。
153デフォルトの名無しさん:2009/04/28(火) 00:57:45
>>152
FFTは時間成分ないんだから当たり前
154デフォルトの名無しさん:2009/04/28(火) 01:27:08
>>153
んと、解決できない、でOK?
とすると、>>135は無効ってことになるけど・・・
155デフォルトの名無しさん:2009/04/28(火) 07:55:33
感覚でものを言っちゃいかん 数式で検証してくれ
156デフォルトの名無しさん:2009/04/28(火) 21:36:30
Androidでサウンド系アプリ作った人いる?
157デフォルトの名無しさん:2009/04/29(水) 04:49:22
>>149
一回の計算についてはFIRもFFTと同じくブロック処理以外の
何ものでもないのだが? 
どちらも対象の有限長のブロック以外は全然計算対象に入っ
ていない。

FIRの代わりにFFTを使う時、FIRでの場合と同じように1サン
プルづつずらしてFFTを行い、その結果を正しく評価すれば
FIRでの場合と同じ結果が得られるんじゃない?
ただ、それだと普通にFIRやるよりも計算量が増えるので、
それをひっくり返す手法としてオーバーラップ法があるの
だと理解してるが?
158デフォルトの名無しさん:2009/04/29(水) 14:31:42
>>157
てことは、オーバーラップは単に計算量対策で、
FIRとFFT+オーバーラップは本来は代替不可能ってことか。
159デフォルトの名無しさん:2009/04/29(水) 22:26:47
>>157
一回の計算についてはプログラミング上
ブロック処理にしてもしなくても
出力はFIRならいっしょだからそれは考えないとして。
FIRとFFTの違いはサンプル数の違いがでかくないか?
FFTはサンプル数でかくしないと周波数領域で操作できる
周波数ステップ荒くなるし
FIRは少なくてもある程度できる。
サンプル数大きくするとそれだけFFTの計算に入れる時間が
大きくなるから時間分解能下がる
FIRはリアルタイム処理だから時間分解能最大。
それでサンプル数が一緒での議論だと、
FFTは実際(データが何かにもよるけど)窓関数とかかけなきゃ
だめだからそれだけデータ量そこでへっちゃうから、
最終処理後のデータの品質さがる
だから目的に合わせて選べばいんでは

160デフォルトの名無しさん:2009/04/29(水) 22:40:47
>>159
いまいち良くわからんのだが、、

>FFTはサンプル数でかくしないと ... FIRは少なくてもある程度できる。

同じステップ数として、FFTの時間領域で、FIRフィルタの
設計上のカーブを各点で取ったフィルタ処理は違うもの?
違うとすればどの辺りが?

> サンプル数大きくすると ... 大きくなるから時間分解能下がる

時間分解能はサンプリング周波数で固定だと思うけど、、、
短時間FFTのオーバーラップ回数が少なくなるってこと?

> FFTは ... それだけデータ量そこでへっちゃうから、

データ量は減らないと思う。
161デフォルトの名無しさん:2009/04/29(水) 23:35:07
>>160
FFT/FIRの基本的な仕組みすら理解出来てねーだろお前。
159の説明は波形処理の基礎だぞ。
まずは自分で調べて考えろ、なんでも聞いて済まそうとすんな。
162デフォルトの名無しさん:2009/04/30(木) 00:00:23
>>161
ただ罵倒するだけのレスは無価値ですよ、いつもの方。
163デフォルトの名無しさん:2009/04/30(木) 01:51:36
>>160
あの、
ここでの説明だとあれだから本買ってきた方がいいよ。
最初の方は強いて言えば違わないけど、
それぞれの癖とか特徴とかできることできないことあるから
目的に応じたいい方をえらべよ

二つ目は
>サンプル数大きくするとそれだけFFTの計算に入れる時間が
>大きくなるから時間分解能下がる
これはFFTの時間分解能だから。
160が言ってるのは多分サンプリング定理とかそこら辺の
波形のデジタル化の時の時間分解能の事をいってるんかな?
FFTの原理とか時間領域-周波数領域のサイトとか本とかみればわかると思うけど

みつめ
何バイトとかのデータ量はへらないけど、なんというか削ってるんだから論理的な
データ量は減るよね?
たとえばwav->mp3圧縮の時みたいな感じで
たとえばデータを波形ととらえて周波数領域に変換して周波数高い一部分を少なくして
時間領域に戻してもバイトは変わらない。でも何か(なんらかの情報)は減っている。
164デフォルトの名無しさん:2009/04/30(木) 02:02:29
>>163
うーん……難しくていいので正確に書いてもらえると嬉しいです。
理解してるとかしていないのかという問題よりも、163の説明の中の
一つ一つの用語が式とか定理のうち具体的に何を指しているのかが曖昧すぎて分からない。

> FFTの時間分解能

>>160の時間分解能は指摘の通りデジタル化の際の時間分解能です。
で、説明だとFFTという変換自体にに時間分解能ってパラメータなり特性が存在するんですよね?

> データ量
窓かけの周波数特性でサイドローブが出る話ですよね。
歪みは出ると思いますが、それが情報が減っているということ?
165デフォルトの名無しさん:2009/04/30(木) 05:43:39
>>159
>FFTはサンプル数でかくしないと周波数領域で操作できる
>周波数ステップ荒くなるし
>FIRは少なくてもある程度できる。

そんなことない。
「NタップのFIR」は「サイズNのFFT+周波数領域での積和演算」
と等価でしょ?
166デフォルトの名無しさん:2009/04/30(木) 21:11:03
>>165
「ある程度」だから実用性を考えての
ことだよ
小さいタップ数で同じ事ができるんだったら
小さい方がいいだろ
167デフォルトの名無しさん:2009/04/30(木) 21:35:01
>>164
一般的なFFTの話だが
FFTはサンプル数を大きくすれば周波数分解能はあがるが、
それだけ時間領域でも…
たとえば音楽だと22050hz、4096FFTだと一回のFFTで
4096サンプル=0.185秒分のデータが必要になる
音楽だと0.185秒だとテンポの速い音楽だと音符が2個分
含まれていることもあるかもしれない。(極端な話)
上のFFTだと5.38hzごとの周波数領域のデータだ。

このようにFFTではサンプル数を大きくすれば得られる周波数データの
hzの間隔は少なくなり詳しく得られるが、それだけたくさんの時間を
計算に組み入れなければならないので、いらないデータも含まれるかも
しれない。sin波だったらずっと同じだからいいけど、PCMなんかだと
刻一刻と周波数成分が変わっていってるので(音楽なので刻一刻と
かわらないとおかしいが)一回の計算にいれる時間は少ない方が
その時点の周波数は正確に表れる。

この文を読めばFFTの時間分解能、周波数分解能の意味は
なんとなくわかるだろ
168デフォルトの名無しさん:2009/04/30(木) 22:12:17
>>167
いやそれはとっくに分かってるんだが・・・
ピッチ検出ならゼロクロスなりケプストラムなり使うし。

で、そもそもの疑問である
>>163
> 最初の方は強いて言えば違わないけど、
これをkwsk
169165:2009/05/02(土) 05:33:05
>>166
>小さいタップ数で同じ事ができる

俺はそんなことは出来ないと理解してるのだが?
170デフォルトの名無しさん:2009/05/06(水) 22:11:32
便乗レスだけど、

>>168
NタップのFIRをFFTで実装しようとすると時系列データもN用意して
Circular ConvをConvにするため最低Length=2N+1のDFTを行う必要がある。
(信号分析しないから窓掛けしないとする)
DFT自体は丸め誤差とかを除いたら単なる座標変換だから周波数領域での掛け算も
時間領域の畳み込みも等価なんだけど、フレーム単位で処理する必要があるから
出力時には最低Nサンプルの遅れがある。
反面、FIRだと過去Nサンプルのバッファを用意して置けば新しいサンプルが入ったときに
バッファからフィルタの出力をその時点で得られる。

同じ性能を発揮するのに必要なタップ数が変わることはありえないし、
時系列でFIRを処理するから周波数分解能が云々とか、それを座標変換した
領域で作業するから周波数分解能が云々ってないし、考慮する要件は数理的なものよりも
処理時間やFFT-IFFTするオーバーヘッドや誤差への許容に関すること。
更に言えば、Portaudioみたいに最初にデータをバッファにためてバッファがいっぱいになったら
コールバックを呼ぶようなやつだったら、正直FIRを時間ドメインでやろうが周波数でやろうが
変わらない。

リアルタイム性を重視するフィルタだったらFIRを時系列で畳み込む方がいい場合もある。
特にタップ長が短い場合。
171デフォルトの名無しさん:2009/05/20(水) 23:46:32
質問いい?

VistaでWin32APIのmidiOut〜系でMIDIを出力しているんだが、
どうにも我慢ならないほどの遅延が発生する(200ms程度)。
出力先をデフォルトのMIDIマッパーの代わりに、Timidity++→ASIOにしても同程度の遅延が発生するので、
多分APIに問題があるんだと思う。

そこで、他のAPIに乗り換えようかと思ったんだが、
DirectMusicは消滅した上に64bitアプリで使えないようなので、
他の選択肢が欲しい。
なんかないかな?
172デフォルトの名無しさん:2009/05/20(水) 23:53:35
MIDIならしょうがない
173デフォルトの名無しさん:2009/05/21(木) 00:02:12
しょうがないのか。 適当な音源自前で実装するか……サンクス。
174デフォルトの名無しさん:2009/05/21(木) 09:57:02
Timidity++側、ASIO側にバッファがあれば同様の遅延は発生するだろ
APIを疑う前になぜMIDIインタフェース+外部音源の組み合わせで試さないのか不思議だな
175デフォルトの名無しさん:2009/05/21(木) 10:22:23
>>171
少なくともXPまでの環境でmidiOutで200msecも遅延するとか聞いたこと無い
Vistaのドライバとかの問題だと思うが、ソフトMIDI音源とかで試してみた?
176デフォルトの名無しさん:2009/05/21(木) 12:35:56
>>174
外部音源とか持ってねーよwwww
Timidity++のGUIからmidiファイルを再生してみたけど、たぶん遅延してない。

>>175
全く違うハードウェア構成の2台のVistaで同様の遅延が発生してる。
で、さっきXPマシンで試験したけど遅延しない。

何ヶ所かの英語フォーラムで、Vistaだと遅延が発生するという報告があるのよ。
177デフォルトの名無しさん:2009/05/21(木) 13:33:55
いや、MIDIファイルの再生じゃ遅延してるかどうかなんて分からんだろう・・・
なんにせよmidiOUtの問題じゃないと思うんだが

VISTA環境があれば試すんだがなぁ
178177:2009/05/21(木) 13:36:32
>>173には同意してるかんね
179デフォルトの名無しさん:2009/05/21(木) 13:59:15
ソースが公開されてるDAWやシーケンサがMIDIをどう発音しているか確かめたら?
あとTimidity++自体に遅延があるからASIOを使ってもMSGSより遅いぞ
180デフォルトの名無しさん:2009/05/31(日) 17:26:05
ogg vorbisのエンコードについて詳しく書かれたサイトありますか?
公式見ても初期化部分しか書かれてなくて何をすればいいのかすらわからん
181デフォルトの名無しさん:2009/05/31(日) 21:03:25
>>180
oggのlibならexamplesディレクトリに encoder_example.c があると思うけど、それじゃだめなん?
182デフォルトの名無しさん:2009/06/05(金) 13:24:01
ogg vorbisのエンコード上手くいかない・・・
183デフォルトの名無しさん:2009/06/06(土) 14:21:40
自作のフィルターを組んでメモリ上に全てのデータを置いてランダムアクセスで
メモリ上を飛び回って処理をしているのですが、音源の時間に比べて20倍の処理速度が掛かります。
DSPとやらを使えばもっと高速にできるらしいのですが、どうやって使えばいいのでしょうか?
Google先生に効いてもネット上に資料はあまりなく、困っています。
VC++9.0SP1を使ってプログラミングをしています。誰かVC++からのDSPの使い方を教えてください。
184デフォルトの名無しさん:2009/06/06(土) 16:19:54
とりあえずどんなフィルタか書かんと
DSPは単純な演算を高速に(あるいは並列に)こなすものだから
処理の種類によっちゃ効果がない
185デフォルトの名無しさん:2009/06/07(日) 02:42:57
>>183
どんなマシン使って20倍なのかわからないけど、
最近のPCでそのスコアならアルゴリズムから見直さないとどのみち無理な気が。

一言にDSPっていってもピンキリだし、PCから使うならどこかの評価ボードみたいなの買うしかないんじゃないかな?
本気でDSPに手出すなら開発キット&コンパイラで数十万、仕事じゃないなら個人に販売してくれるかってのも微妙な所。
たぶん想像してるよりもはるかに敷居高いと思う。

波形処理の高速化なら一番お手軽なSIMDに手出してみれば?
モノによっては5〜10倍くらい期待出来る。
186デフォルトの名無しさん:2009/06/09(火) 13:12:40
G.722とG.722.1 Cの、GPL/LGPLでないソースを探していますが、どこにありますか?
187デフォルトの名無しさん:2009/06/09(火) 18:29:55
誰かにそのソースを渡す
アルゴリズムと定数だけそいつから聞き出して自分で実装する
188デフォルトの名無しさん:2009/06/09(火) 20:49:19
そして定数の中にGPLの文字がひっそりと含まれていて自爆するわけですね
189デフォルトの名無しさん:2009/06/09(火) 21:05:53
ogg vorbis以外で意匠フリーでブロードキャスト向けの音声圧縮ってありますか?
190デフォルトの名無しさん:2009/06/09(火) 21:30:33
189!=186と仮定して、G.722
191186:2009/06/11(木) 12:55:56
結局Speex使うことにしました
192デフォルトの名無しさん:2009/06/26(金) 18:55:46
スペアナ作りたいですが、窓掛けしてFFTして絶対値取れば完成ですか?
193デフォルトの名無しさん:2009/06/26(金) 19:03:43
いや、表示せんと。
194デフォルトの名無しさん:2009/06/26(金) 21:17:35
テキストで吐けば十分
リアルタイムじゃないなら
195デフォルトの名無しさん:2009/06/28(日) 21:04:34
すいません。
WindowsXPでサウンドデバイスを2つ以上インストールしているマシンがあるとします。
再生デバイスと録音デバイスにそれぞれ別の物を設定しているとして、
録音デバイスから入力した音声をそのままダイレクトに再生デバイスから出力させることは
できますか?
196デフォルトの名無しさん:2009/06/28(日) 23:57:27
OS上の機能では無理だったと思うよ。

プログラム作っていいなら AudioIn → プログラム → AudioOut は簡単に実装できる。
まぁ、レイテンシは発生してしまうけど。

Virtual Audio Cable とか既存のツール使ったらプログラム組まなくても簡単にいけるかな。
197デフォルトの名無しさん:2009/07/02(木) 15:13:37
DirectXスレからきました。

DirectSound で再生しながら、
横軸に周波数、縦軸に音量を表すようなグラフを
リアルタイムで描きたいです。
とりあえずWAVを再生するところはできてるんですけど、
そのようなグラフを描くにはどうすればいいですか?

一応↓のコードを手に入れたのですが、どういうふうに使えば... ?
ttp://www5.airnet.ne.jp/tomy/cpro/sslib8.htm
198デフォルトの名無しさん:2009/07/02(木) 17:40:48
やる気がなければ帰れ。
199デフォルトの名無しさん:2009/07/02(木) 18:21:18
>>197
テストアプリ書いてデバッガなりコマンドプロンプトなりに変換結果出してみるとかやってみた?
サイン波形なりを食わしてみればすぐ理解できる
200デフォルトの名無しさん:2009/07/02(木) 23:50:01
>>197のプログラムをコンパイルするとkが初期化されてない警告が出るんですけど、
これは0 で初期化して問題ないですか?
あと、iter は何の値なんでしょうか??
201デフォルトの名無しさん:2009/07/03(金) 00:53:28
んー、一通り目通せばすぐ気付くだろうに、ホントにやる気ないのな

fft2(), fft2x()のjのforループでkは使われてない→たぶんコピペって k += nmax を消し忘れ
iterはループ回数の演算省略用じゃね? 0渡せば勝手に計算するようになってるだろ
202デフォルトの名無しさん:2009/07/05(日) 23:56:30
RolandのVariPhraseってあるじゃん
あれってなにがすごいの?
203デフォルトの名無しさん:2009/07/07(火) 21:12:01
>>202
当時のチップの速度でリアルタイムにピッチやらフォルマントやらを操作して、それをもとに音作りできるところ。
204デフォルトの名無しさん:2009/07/09(木) 23:57:30
ケプストラムについて教えてください。

n個の時間領域のデータxn(t)をFFTし、

Xk(f)のパワースペクトルを得たとします。(k=n/2)

パワースペクトルの自然対数を取り、IFFTすると思うのですが、IFFTするには
実部と虚部の情報が必要ですよね?パワースペクトルの対数をとったら、虚部が
わからなくなってしまいますよね。
そのところでわからなくて困っています。わかる方教えてください。
205デフォルトの名無しさん:2009/07/10(金) 00:15:43
>>204
IFFTは別に虚部がなくてもいいです.
それとスペクトルのkはnのままでいいと思います.
スペクトルは偶関数になってるので,IFFTすれば実数成分(ケプストラム)が求まると思います.
206デフォルトの名無しさん:2009/08/15(土) 03:03:10
MMEやDirectSound対応のスペアナソフトやレベルメーターのソフトみたいな音を入力して解析してリアルタイムで表示する系統のソフトって、
半日以上とか1日とか数日とか、長時間起動してると、必ず反応がかなり遅れるようになるけど、それはなぜ?
複数のソフト、いろいろな環境で再現性があるのでOSの問題なんだろうかと思うんですが。
たとえばwavespetcraとかDeskTopLevelMeterとか、他にも山ほどあります。
207デフォルトの名無しさん:2009/08/15(土) 11:25:17
システム時計とサンプラ側の時計(たとえば44.1kHz)がビミョーにずれてくのかもね
208デフォルトの名無しさん:2009/08/16(日) 15:56:49
ソレ系のソフト以外でも、何でも遅くなってないか?
多分、ただのページングだよ。
209デフォルトの名無しさん:2009/08/17(月) 16:48:43
WinVista/VC++expでサウンドプログラミングをしているのですが、
リアルタイム(1バッファ遅延)に入力→加工→出力を行うAPIを探しています。
調べたところWDM?ではカーネルミキサを通す分遅延がありすぎて話にならない
ディフォルト出力ならKernel Streamingが良いと聞きました。
Win32APIのwaveXXXX関数は、関数の内容的にハードウェアに直接アクセスしてるように思えるのですが
実際のところ、Winのカーネルミキサを経由していたりするのでしょうか?
210デフォルトの名無しさん:2009/08/17(月) 23:22:46
「ハードウェアに直接アクセス」なんて危険なAPIは基本的に存在しない

waveIn()/waveOut()で遅延がネックになるレベルならPCでの処理は難しいと思うが、
WinAPIよりはリアルタイム処理に向いてると言われるASIO使ってみれば?
211デフォルトの名無しさん:2009/08/17(月) 23:54:39
CoreAudioAPI
212デフォルトの名無しさん:2009/08/18(火) 00:49:41
DirectX
213デフォルトの名無しさん:2009/08/18(火) 10:04:27
>>211
DirectXはミキサ通すはず。
>>212
VistaはCoreAudioっていうんだな。Macかとオモタ
214デフォルトの名無しさん:2009/08/19(水) 00:03:48
音程を変えずに速度を変える処理って、100msとかの短い間隔のかたまりで処理するタイプが定番なんですかね。
ゆっくりさせると、響いている様になってしまい良くないです。
NHKテレビで、波形の山を増やすとか言ってたが、
波形の山一個単位(一周期単位)でコピーして増やしたり減らしたりするアルゴリズムを僕は考えていたのですが、実現されていないのでしょうか。
215デフォルトの名無しさん:2009/08/19(水) 00:09:28
>>214
ちょうどいい間隔でスキマがうまるならそれでいいだろうよ。
どうせギャップができて似たような音になると思うけど。
216デフォルトの名無しさん:2009/08/19(水) 00:25:22
>>214
ピッチ検出の話になるが、ゼロクロス検出の精度が実際微妙ってことを
考えると、似たような理由で何かの障害があるんだと思うよ
217デフォルトの名無しさん:2009/08/19(水) 10:22:13
含まれる周波数の最小公倍数な周期、いわゆるf0周期が短く明確なら良好な結果になるが
が、実際の音声は周波数はおろか振幅エネルギーも
時間変動する
よってf0の定義自体がまず困難
少しでもずれがあればパルスノイズが発生(矩形窓の場合)

蛇足だか、なんだかんだで窓関数は有効だよ。
目的に応じて最適な窓関数とオーバーラップ数の設計をすればいいし
218デフォルトの名無しさん:2009/08/19(水) 19:03:38
>>214
nhkでそんな話してくれるの?KWSK
219デフォルトの名無しさん:2009/08/20(木) 01:06:24
反応速度を優先するならグラニュラー(ディレイを使ったものも一緒)
音質を優先するなら、周波数領域に変換してからリリース部なんかを中心に引き伸ばせ。
220デフォルトの名無しさん:2009/08/20(木) 23:02:58
ここの人たちって、お仕事はなにを?
221デフォルトの名無しさん:2009/08/21(金) 04:29:17
無職
222デフォルトの名無しさん:2009/08/21(金) 05:37:43
マ板でやれ
223デフォルトの名無しさん:2009/08/21(金) 10:13:29
自宅警備員
224デフォルトの名無しさん:2009/08/21(金) 18:53:17
音関係に詳しいから仕事もそれ関連かと
225デフォルトの名無しさん:2009/08/21(金) 19:06:27
だからなにやってんのって話だ
226214:2009/08/24(月) 00:24:34
なるほど、なかなか難しい訳ですね。 ありがとうございました。
>>218
昔の高校情報Aでやってました。
227デフォルトの名無しさん:2009/08/24(月) 00:29:44
最近の高校生は信号処理とかもするのか
228デフォルトの名無しさん:2009/08/24(月) 01:41:47
うろ覚えだけど昔工房でフーリエ変換習ってた奴もここに居たしな。
229デフォルトの名無しさん:2009/08/24(月) 02:07:02
高専なら普通に教えてそうだね
230デフォルトの名無しさん:2009/08/24(月) 06:21:32
証明はともかく使いかただけなら工房でも分かる罠
231デフォルトの名無しさん:2009/08/24(月) 06:22:50
は?何?それがどうした?
232デフォルトの名無しさん:2009/08/24(月) 06:32:01
なんか変なレスきた
233デフォルトの名無しさん:2009/09/10(木) 15:14:29
FM合成、もしくはFM変調などについて学べる書籍またはサイトは無いでしょうか?
簡単な波形合成を行うプログラムを作っているのですが、中々FMについて理解が進みませんorz
234デフォルトの名無しさん:2009/09/10(木) 16:38:49
「FM音源」と組み合わせて検索かければ解説からサンプルコード、FM音源ドライバのソースまでなんでも見つかんね?
235デフォルトの名無しさん:2009/09/11(金) 16:57:04
wikipediaで調べるといい。
236デフォルトの名無しさん:2009/09/11(金) 19:18:03
サウンドプログラミングに限らず、離散信号処理で辞典的役割をしてくれるもしくはできるだけ広範囲をカバーした本があったら教えてください
237デフォルトの名無しさん:2009/09/11(金) 21:43:38
238デフォルトの名無しさん:2009/09/17(木) 14:46:03
ttp://www.seventhstring.com/
ここのTranscribe!ってソフトのタイムストレッチ/ピッチシフトがめちゃ精度良いように思うんだけど、
どうやって実現してるか先輩方わかります?
239デフォルトの名無しさん:2009/09/20(日) 19:13:26
そんな糞ソフトよりAutoTuneとかのほうが糞精度いい
240デフォルトの名無しさん:2009/09/20(日) 19:17:06
ポジティブな形容にも「糞」って付けるものなの?
241デフォルトの名無しさん:2009/09/20(日) 19:21:31
ワンピースみろよ。
242デフォルトの名無しさん:2009/09/20(日) 19:50:04
着てる
243デフォルトの名無しさん:2009/09/20(日) 19:54:57
ワンピース着るような清楚な女は一度も見たことないわ(清楚でなくてもだけど(ワンピース着てる奴に限ってビッチ多いらしいけど(童貞だから知らないけど)))
244デフォルトの名無しさん:2009/09/20(日) 19:57:43
lisp厨がきたぞー
245デフォルトの名無しさん:2009/09/23(水) 20:42:23
WaveOut系APIで、waveOutWriteで送った後のデータ書き換えたらマズいのかな
(waveOutPrepareHeaderで指定したWAVEHDR構造体のlpDataの参照先のデータのことね)
やってみたら一応動作はしたんだけど、これが出来るならWaveOut系APIの遅延も短く出来るよな
246デフォルトの名無しさん:2009/09/23(水) 22:22:23
俺もそれやった事あるんだけど、結局資料が見つからずに有耶無耶になってサウンドプログラミングやめた。
247デフォルトの名無しさん:2009/09/23(水) 23:00:21
>>245
woWriteの後はデータ管理としてはOS側だろ?
バグ作り込むようなもんだからできるできない以前にやらない
仕様として保証されていない動作に依存するようになるとデバッグが泥沼だよ
248デフォルトの名無しさん:2009/09/25(金) 11:49:05
Replaygainを自作プログラムに実装すべく考えているのですが
良く分かりません。教えていただけないでしょうか。

実際、色々調べてみてある程度はわかったのですが、
「Peak Amplitude」があまりよくわからなかったのと、
音量設定の単位がdbになっているので、設定の仕方が難しい、
合わせにくいというところでつまずき、そのままになっていました。

現在わかったことは、ピーク時の振幅(Peak Amplitude)、
トラックごとに音量を設定する値(Radio Replay Gain Adjustment)、
アルバム単位で設定する値(Audiophile Replay Gain Adjustment)
の3項目でタグが構成されていて、これらの値を使って音量をdb単位で調整する、
ということです。

タグの読取りはそれぞれの形式(tta,ape,mp3)で異なるが、
提供されているライブラリを使えば読取りは比較的簡単に出来る。

というところまでは行きついたのですが、
実際に読み取った値からどう処理するかが難しく、
実装するのが難しい状況です。

今考えているのが、勝手にdbの単位を独自の値に置き換えて(0dbが125とか)、
音量を調整すればいいのかも?と思っているのですが、
それにしても、ピーク時の振幅(Peak Amplitude)がよくわからないので、
どう使って良いか悩み、ここでつまずいています。

ご存じの方、教えていただけないでしょうか。
249デフォルトの名無しさん:2009/09/25(金) 21:42:49
>>248
全てはdBとリニアの変換くらいは自在にできるようにしてからだ。
Peak Apmplitudeは意味そのまんま最大振幅と思うんだが。最大はmaximumだとか言うなよ?
250デフォルトの名無しさん:2009/09/26(土) 03:12:01
dBーリニア変換

dB = 20log(A/B) log:常用対数
(パワーの場合は10log(A/B))

例)
Aが1、Bが10の時AはBに対して20dB落ち(-20dB)

上記のような比を表す他に、dBV, dBu, dBmなど、具体的な単位
(例えば1Vなどの電圧)に対する比を計算し、実際の値を表すこともある

例)
0dBm = 1 mW
251デフォルトの名無しさん:2009/09/26(土) 16:45:56
>>249-250
ありがとうございます。
試行錯誤してみます。
252デフォルトの名無しさん:2009/09/26(土) 17:22:01
色々な楽器の倍音構成をある程度記載したサイトもしくは書籍などないでしょうか?
ピアノについては見つけられたものの、そのほかの楽器が中々見つけられません
253デフォルトの名無しさん:2009/09/26(土) 19:15:25
Peak Apmplitudeについても、何となくわかりました。
曲によって振幅が違うから、その状況を表しているんですね。
それにしても、何故「1」が最大値なんでしょうか。
「1」の基準は何でしょうか?

質問ばかりで申し訳ないのですが、ご存じの方教えてください。
よろしくお願いいたします。
254デフォルトの名無しさん:2009/09/26(土) 19:24:26
少しは自分で考えないと相手にされないよ
もうされてないと思うけど
255デフォルトの名無しさん:2009/09/27(日) 03:19:10
>>252
自分でスペアナ通せよ。

>>253
Maxが100%=1だと計算しやすいから。
256デフォルトの名無しさん:2009/09/27(日) 04:00:30
>>255
本当にありがとうございます。
257デフォルトの名無しさん:2009/09/29(火) 14:23:14
適当なGM音源モジュールを買ってMIDIで鳴らして録音
リアルな音じゃなくても、倍音構成を調べるくらいには使えるんでない?
258デフォルトの名無しさん:2009/09/30(水) 20:15:57
本当にありがとうございます。
259デフォルトの名無しさん:2009/10/06(火) 05:56:05
デシベルの計算式がまったく理解できなくて死にたい
-25dBから-30dBに音量が下がったら振幅値にいくつかければいいんだ…
260デフォルトの名無しさん:2009/10/06(火) 06:14:42
まず日本語からだな
261デフォルトの名無しさん:2009/10/06(火) 06:34:53
振幅100の正弦波を基準として(これが0dB?)音量が-5dB下がったときの振幅値を知りたいんだ…
説明すらできねぇ…
262デフォルトの名無しさん:2009/10/06(火) 07:07:58
-25dBの正弦波を、-30dBの正弦波にしたいって事だよね?
>>250 の逆の変換になるので、この場合、10^(-5/20)を掛ければよいはずです。
263デフォルトの名無しさん:2009/10/06(火) 09:42:46
dB = 20log(A/B) log:常用対数
(パワーの場合は10log(A/B))

-25dBから-30dBに音量が下がったら振幅値にいくつかければいいんだ…

-25dBの正弦波を、-30dBの正弦波にしたいって事だよね?
>>250 の逆の変換になるので、この場合、10^(-5/20)を掛ければよいはずです。

264デフォルトの名無しさん:2009/10/06(火) 10:40:13
>>262-263
ありがとうございます!まさにコレが知りたかったんです…
教えていただいたことを参考にして
ttp://geocities.yahoo.co.jp/gl/flawtips0/view?.date=20050324
を試してみたのですが、同じ波形を得ることが出来ませんorz
計算は間違えてないと思うのですが…表が誤っているのでしょうか?
265デフォルトの名無しさん:2009/10/06(火) 13:59:15
logとかフーリェ級数にピンとこないってことはreal中学生かな?
http://www.geocities.jp/flawtips0/Pic/wav2.html#p14
ここを見ると周波数分布の山の高さがdbと合ってるから表は間違ってないと思う
266デフォルトの名無しさん:2009/10/06(火) 15:02:14
まあ特に独学で始める場合は年齢関係なく中学生レベルに見える
質問しちゃったりするしね。どんな分野でも。
育て直しじゃないが、学習のプロセスをゼロから辿り直すわけで。

日本語が中高生レベルに見える点にはあえてつっこまない
267デフォルトの名無しさん:2009/10/06(火) 17:22:03
268デフォルトの名無しさん:2009/10/06(火) 19:34:08
質問する前に少しは考えるなり調べるなりしろよ・・・
検索すればすぐにわかるんだろそんなこと
269デフォルトの名無しさん:2009/10/06(火) 19:36:59
>>264
重ね合わせる高周波の位相がずれてるとうまくいかないよ
270デフォルトの名無しさん:2009/10/06(火) 20:59:51
はいそうですか
271デフォルトの名無しさん:2009/10/06(火) 23:41:37
アー確かに、そういう奴いそうだわ
272デフォルトの名無しさん:2009/10/07(水) 07:29:49
>>264
まず試してみたソースを出せ、話はそれからだ
273デフォルトの名無しさん:2009/10/08(木) 22:17:03
>>245
違うバッファに用意しとけばいんじゃない?
メモリーのコピー作業はそんなに重くない
とこだよね
書き方によるけど
274デフォルトの名無しさん:2009/11/02(月) 14:47:39
まぁ、大抵はめんどくさいから6dBで2倍(-6dBで半分)にしちまうけどな
275デフォルトの名無しさん:2009/11/17(火) 13:12:21
-6dbは半分じゃなくて1/2乗だろ。
半分は1/2倍。
276デフォルトの名無しさん:2009/11/17(火) 21:11:57
1/2乗は-3dB
277デフォルトの名無しさん:2009/11/17(火) 23:25:32
えっ
278デフォルトの名無しさん:2009/11/18(水) 01:42:20
馬鹿がいるな
279デフォルトの名無しさん:2009/11/18(水) 04:35:38
逆立ちしたら草食性哺乳類一種鯨偶蹄目になっちまうな
280デフォルトの名無しさん:2009/11/18(水) 07:08:02
281デフォルトの名無しさん:2009/11/18(水) 08:21:50
ものすごくリバーブが掛けられたゲーム音楽CDに発憤して
リバーブ成分を取り除いてみたことはあるな
そこからサラウンドに繋げられたか・・・
282デフォルトの名無しさん:2009/11/24(火) 12:58:22
>>276
ばーか、エネルギーは振れ幅の二乗だろ。アホ
283デフォルトの名無しさん:2009/11/24(火) 13:47:16
>>282
いつからエネルギーの話になったんだろうか
ああ脳内で世界が固定されちゃってるんですね
284デフォルトの名無しさん:2009/11/24(火) 14:04:51
>>274
×>>275
×>>276
285デフォルトの名無しさん:2009/11/24(火) 14:10:04
ttp://ja.wikipedia.org/wiki/デシベル
20log10(b/a) = 10log10((b/a)^2)
286デフォルトの名無しさん:2009/11/24(火) 14:25:19
20*log10(2) = 6.02 dB
20*log10(1/2) = -6.02 dB
287デフォルトの名無しさん:2009/12/12(土) 14:30:44
288デフォルトの名無しさん:2009/12/23(水) 05:08:00
Windowsで、ネットワークから受信した音声データを
スピーカーに再生するプログラムを書いてるんだけど
再生の方が速くて困ってる。

具体的には、
20ms間隔で20ms分の音声データをwaveOutWriteで書き込んでるんだけど、
waveOutProcのコールバックが0〜15ms間隔くらいで返ってくる。

waveOutAPIってこういうもんなの?
289デフォルトの名無しさん:2009/12/23(水) 05:19:10
yes
290デフォルトの名無しさん:2009/12/23(水) 13:45:32
バッファが十分たまれば間隔は落ちる
291デフォルトの名無しさん:2009/12/24(木) 21:40:04
DirectSound使え
292デフォルトの名無しさん:2009/12/24(木) 21:42:34
そこでWASAPIですよ
293デフォルトの名無しさん:2010/01/07(木) 22:02:10
Visual Basic 2005以降 or C#2005以降ならそこそこ開発できるスキルは持っています。
C言語はなんとなくわかりますが,非常に苦手です。
C++はわかりません。
VBでPCMデータをアップサンプリングするプログラムを作った経験はあります。

こんな私にもわかるようなASIO SDKの使い方を解説したサイトまたは書籍などご存じありませんでしょうか?
294デフォルトの名無しさん:2010/01/09(土) 00:00:32
無理
295デフォルトの名無しさん:2010/01/09(土) 15:41:28
デジタルフィルタがむずかしい。
296デフォルトの名無しさん:2010/01/10(日) 10:01:36
「***が苦手です」とか「###が苦手です」って言う人は何が難しくて自分にできないか考えたことはあるの?
それがASIO SDKとどう結びつくかを他人に説明する気はないの?
297デフォルトの名無しさん:2010/01/10(日) 15:04:01
山葵?
298デフォルトの名無しさん:2010/02/10(水) 10:44:38
Windowsでbeep音だけで音階を作るサンプルコードがあれば教えてよ
299デフォルトの名無しさん:2010/02/10(水) 11:52:49
>>298
double cdef[] = {3.0, 5.0, 7.0, 8.0, 10.0, 12.0, 14.0, 15.0};
for (int i = 0; i < 8; ++i)
{
DWORD freq = (DWORD)(440.0 * pow(2.0, cdef[i]/12.0));
Beep(freq, 500);
}
300デフォルトの名無しさん:2010/02/10(水) 12:04:09
先越されてしまった。
がんばって作った俺の努力の結晶が無駄に・・・
http://codepad.org/VxXlvVkM
301デフォルトの名無しさん:2010/02/10(水) 12:13:17
MMLまで作ったのかw
302デフォルトの名無しさん:2010/02/10(水) 17:28:35
4分割多重MML再現したくなったw
303デフォルトの名無しさん:2010/02/12(金) 21:39:59
>>300
努力した内に入らないよw
304デフォルトの名無しさん:2010/02/13(土) 21:52:44
BASICでbeep文だけで声を鳴らすサンプルコードがあれば教えてよ
305デフォルトの名無しさん:2010/02/13(土) 22:02:26
>>300
久し振りに笑うプログラムに出会った
これは面白い
Windowsにこのような機能がまだ残されていたとはw
306デフォルトの名無しさん:2010/02/13(土) 22:03:09
何BASIC?
307デフォルトの名無しさん:2010/03/01(月) 03:52:18
FFTを勉強中です
基本的な質問で悪いんだけども
周波数ごとの音量ってのは
実部のスペクトル?
それとも実部と虚部から求めるパワースペクトル?
308デフォルトの名無しさん:2010/03/01(月) 03:57:21
補足です
パワースペクトルが音量に相当するなら
実部=0、虚部≠0の場合
周波数は無いのに、音量はあるのか?
実部が音量に相当するなら、パワースペクトルの意味ってなに?
とか、よくわかんなくなっちゃったのです
309デフォルトの名無しさん:2010/03/01(月) 05:09:56
310デフォルトの名無しさん:2010/03/03(水) 01:10:53
>>309
読みました。
たしかにアニメーションついててわかりやすいですね。
んで、周波数ごとの音量に相当するのは、
パワースペクトルってことですね。
ありがとうございました。
311デフォルトの名無しさん:2010/04/23(金) 22:54:20
SIMDなフィルタプログラムの英語か日本語のチュートリアル、どこかにありませんか?CPUには拘りません。
312デフォルトの名無しさん:2010/05/11(火) 22:50:57
アップサンプリング時にゼロ補間してもスペクトルが変化しない理由ってなんでしょうか?
313デフォルトの名無しさん:2010/05/13(木) 23:02:00
補間のあとのLPFで鏡像になって出てくるスペクトルをカットしてるから。
314デフォルトの名無しさん:2010/06/03(木) 09:06:10
wavファイルの合成について相談です。

現在2つのwavファイルを読み込み、データ部を足し算することで「両方同時になっているwavファイル」を作成、出力することができました。
ここで疑問なのですが、16bitWAVの場合、データ部の値は
-32768〜32767
となりますが、2つの足し算なら「int型に変えたあと足して、限界を超えたら丸めこみ、shortの範囲に戻す」すればいいとわかります。

ですが、3つの音を足すとなると、丸めこみを最後に一括してやるか、足すたびにやるかで結果が変わってしまいます。
例:
丸め(30000 + 30000 - 10000) = 32767
丸め(丸め(30000 + 30000) - 10000) = 22767

今はまだ、足す音が3つと決まっているから1単位時間毎にintで計算>shortで吐き出しで問題ないのです。
が、もし「任意にユーザーの選択により次々音を足し算できるツール」のようなものを作る場合
やはり単位時間毎に一旦intとしてバッファを作り、WAVファイルとして出力する際に丸めこむべきなのでしょうか?
315デフォルトの名無しさん:2010/06/03(木) 11:52:39
先に個数で割ればいいだろう
316デフォルトの名無しさん:2010/06/03(木) 13:11:05
>>315
個数で割る。というのがよくわかりませんが、任意に追加できるため個数はその場その場で定まらないのを想定しています。

例えばAとBを合成して、とりあえずそれを再生。
ユーザーがそれを聞き、「やっぱりCも合成しよう」となった時などを想定しています。

AとBの合成音を再生するために、合成音を出力するバッファを用意しますよね。
その後Cを合成するのが決定した時、
・再度A、Bのデータもひっぱってきて、3音合成する
というよりは
・A+Bの合成音にCを合成する
ほうがメモリー効率や処理速度などで有利そうです。

ですがそれだと丸めこみ問題がでてしまいます。
317デフォルトの名無しさん:2010/06/03(木) 13:35:55
普通は64bitとか128bitで計算して最後に戻すのよ。
318デフォルトの名無しさん:2010/06/03(木) 14:55:02
>>普通は64bit
一体16bit音源を何万個合成するつもりだよw
319デフォルトの名無しさん:2010/06/04(金) 00:22:21
>>316
> その後Cを合成するのが決定した時、

そんだけ仕様が未確定だと汎用的にプログラム書くしかないから効率もクソもない。
数百万サンプル程度の加算が問題になるような環境ならできることの自由度を下げる以外ない。

あと「〜そう」で目についたところを最適化するのはほぼ最悪の戦略。
かなりの確率で最適化ポイントを間違う
320デフォルトの名無しさん:2010/06/04(金) 17:33:01
ごめんねぼくはdouble厨なので
321デフォルトの名無しさん:2010/06/04(金) 20:45:17
コンプレッサ実装すれば?
r = 初期値1.0
出力サンプル = 合成サンプル * r
出力サンプルが16bit幅超えたら、r = abs(合成サンプル) / 32768.0 で更新
r < 1.0 なら時間経過と共に少しずつ1.0へ戻してやる

実用レベルで実装するなら細かいノウハウとかあるからDSP関係の文献自分で調べて
322デフォルトの名無しさん:2010/06/05(土) 00:00:11
>>314は「丸め」とか用語が適切じゃないからちょっと知識が不足してる感じがするね。
俺もコンプレッサ/リミッタ関連について調べてみることをお勧めする。
323デフォルトの名無しさん:2010/06/08(火) 11:34:15
コンプレッサーはデータを改変してしまうからよくないだろ。
ノーマライズすればいい。
324デフォルトの名無しさん:2010/06/08(火) 18:08:07
いまどき整数とか面倒
不動明王を使うだろ普通
325デフォルトの名無しさん:2010/06/09(水) 09:59:47
恐れ入谷の鬼子母神
326デフォルトの名無しさん:2010/06/11(金) 21:27:02
>>314
分解能32ビットとかで作業用データ配列を作成すると良い。すべて加算した後16ビットレンジに収まるよう最適化する。

一旦WAVファイルをセーブした後、さらに別のWAVファイル加算したいときは、16ビットでは精度が不足するので、
以下の方法を取る。

WAVファイルの分解能をfloatか24ビットとする。フォーマットの設定が16ビットと異なるがちゃんと再生されるWAVファイル
を作成することができる。

参考:
WAVEFORMATEX構造体
WAVE_FORMAT_IEEE_FLOAT
327デフォルトの名無しさん:2010/06/11(金) 21:35:42
float
-> WAVEFORMATEX
24ビット
-> WAVEFORMATEXTENSIBLE
328デフォルトの名無しさん:2010/06/20(日) 01:58:19
midiデータから波形を作成するにはどうすればいいですか?
329デフォルトの名無しさん:2010/06/20(日) 11:29:53
ソフトウェア音源でファイルに出力する
330デフォルトの名無しさん:2010/06/20(日) 17:38:34
waveout
331デフォルトの名無しさん:2010/06/21(月) 02:37:19
中古楽器屋でMT-32というのを探して買ってくるんだ
332デフォルトの名無しさん:2010/06/21(月) 02:40:31
ソフトウェア音源を作りたいって話だろ!
333デフォルトの名無しさん:2010/06/21(月) 13:39:43
MT-32まだ持ってるなーw
334デフォルトの名無しさん:2010/06/21(月) 18:37:52
それGM非対応や!
335デフォルトの名無しさん:2010/06/22(火) 17:59:37
ソフトウェア音源を作るにはどうすればいいですか?
336デフォルトの名無しさん:2010/06/22(火) 18:04:23
どんなのが作りたいんだ?
337デフォルトの名無しさん:2010/06/22(火) 18:27:24
MIDIデータには、どの楽器でどの高さの音をどのくらいの強さで出すか
とかそんなデータが入ってる。
この楽器の音は演奏する側が用意しなきゃならない。
実際の楽器の音などをサンプリングして内蔵しておいて要求に合わせて
編集して出すことになると思うよ。
338デフォルトの名無しさん:2010/06/22(火) 18:56:28
今で言うところのマルウェア認定のwingrooveまだ使ってるわ
339デフォルトの名無しさん:2010/06/22(火) 21:27:55
波形データの作成はできても、OSのサウンドAPIに鳴らさせるのがやっかい。
340デフォルトの名無しさん:2010/06/23(水) 02:34:56
そこは定型処理だからほぼ悩む所じゃないけどな
341デフォルトの名無しさん:2010/06/23(水) 06:13:28
>>338
破壊型のウィルスだろう
342デフォルトの名無しさん:2010/06/23(水) 09:18:12
ワレザー乙
343デフォルトの名無しさん:2010/06/23(水) 10:26:03
波形データをサンプリングせずにプログラムのみで作成したいのです
344デフォルトの名無しさん:2010/06/23(水) 10:36:19
そんな当たり前のことを質問するような椰子に何を言っても無駄だYO
345デフォルトの名無しさん:2010/06/23(水) 10:41:08
>>343
そしたら普通に式書いてそれでウェーブ作ればいいじゃない。
まずはサイン波でやってみそ
346デフォルトの名無しさん:2010/06/23(水) 10:41:16
ウイルス 寄生 自己増殖
ワーム 非寄生 自己増殖もしくは移動
トロイ 寄生 非自己増殖
マルウェア 上記を含む迷惑ソフト全般
347デフォルトの名無しさん:2010/06/24(木) 20:27:32
ウィルス対策ソフト 寄生 定義ファイルのダウンロードによる自己増殖 有料
348デフォルトの名無しさん:2010/06/25(金) 12:45:15
メガデモ的なサウンド演奏プログラムを作りたいな。
できる限り少ない容量で、いい音を出すって言う。
349デフォルトの名無しさん:2010/06/25(金) 19:40:32
メガデモはやり始めたらキリがない。
350デフォルトの名無しさん:2010/06/25(金) 21:47:45
>>343
シンセ作りたいってことでしょ?
ニコニコ動画にJavaでソフトシンセ作ってる人がいるよ。

ところでこのスレの住人でJava使ってる人いる?
Javaにサウンドプログラミングは耐えられるかな。
351デフォルトの名無しさん:2010/06/26(土) 11:40:24
イコライザーってどうやるのでしょうか?
キーワードだけでもいいので教えていただけると幸いです
352デフォルトの名無しさん:2010/06/26(土) 12:20:10
>>350
Java自体は問題ない。Javaで書かれた音楽ソフトもある。

>>351
http://www.musicdsp.org/files/Audio-EQ-Cookbook.txt
353デフォルトの名無しさん:2010/06/26(土) 13:15:16
>>352
ありがとうございます!読ませていただきます。
354デフォルトの名無しさん:2010/06/26(土) 16:58:02
>>335
つ ttp://msdn.microsoft.com/en-us/library/ff537519(VS.85).aspx

カーネルモードで動くドライバーを書く必要がある
素人では無理
355デフォルトの名無しさん:2010/06/26(土) 19:15:35
ソフトウェアMIDI音源だったらそうだろうけどさ
356デフォルトの名無しさん:2010/06/27(日) 13:00:21
ここの人たちは仕事をなにを?
357デフォルトの名無しさん:2010/06/27(日) 13:02:37
仕事がない鬱だ死のう
358デフォルトの名無しさん:2010/06/27(日) 20:25:49
DFTで周波数分解能をあげるためにゼロ詰めしたりしますが、なぜこれが許されるのですか?

元の波形のスペクトルを変えてしまっていることになりませんか?
359デフォルトの名無しさん:2010/06/27(日) 20:36:58
それで増えるのは元々のナイキスト周波数を超える部分だから削れば問題なし
360デフォルトの名無しさん:2010/06/27(日) 20:47:45
ということは、結局周波数分解能はあがらないということですか?

1

361デフォルトの名無しさん:2010/06/27(日) 22:33:32
>>350
おお、ありがとう。
これをC++に移植してみるよ。
362デフォルトの名無しさん:2010/06/30(水) 12:37:42
ナイキスト周波数のサイン波ってパルス波になってるから
元の周波数は保存できても音質みたいなのは絶対違うと思うけど
なんで誰も突っ込まないのか不思議。
363デフォルトの名無しさん:2010/06/30(水) 12:47:02
厳密な矩形波なら帯域が無限大まで伸びてる。
それをナイキスト周波数でばっさり切る理想的なローパスフィルタを通せば、
元の通りのサイン波が出てくる。
364デフォルトの名無しさん:2010/06/30(水) 13:30:12
0埋めの理由が、本当に周波数分解能を上げるためなのかどうか、って話?
365デフォルトの名無しさん:2010/06/30(水) 21:39:22
>>363
それよりも位相がずれてたら、波形がなくなるよな
そっちが問題
366デフォルトの名無しさん:2010/07/01(木) 21:40:22
単に2倍を越える周波数でサンプリング云々ではなく、実際にはもっと難しい計算があるらしく、それを行うと位相のタイミングのずれは無問題らしい。
367デフォルトの名無しさん:2010/07/01(木) 21:45:27
あ、サンプリング定理の話じゃないのか。まあいいか。
368デフォルトの名無しさん:2010/07/01(木) 22:24:22
>>366
どういうこと??詳しく
サンプリングポイントを最高周波数の位相に合わせてシフトするの?
369デフォルトの名無しさん:2010/07/02(金) 11:07:18
370デフォルトの名無しさん:2010/07/02(金) 14:02:38
>>360
0埋めしてDFTサイズ増やしたって本当の意味での分解能が上がるわけないでしょ。
ただsinc補完される(丸くのっぺりした波形になる)だけだよ。
371デフォルトの名無しさん:2010/07/03(土) 19:28:49
つまりアップサンプリングでサンプリングレートを上げている=周波数分解能があがっている

ということですよね?ただアップサンプル時に差し込んだ0に意味がないと
372デフォルトの名無しさん:2010/07/05(月) 13:58:12
パルス波はサイン波と違って倍音を含むだろ?
サンプリングレートの半分のサイン波はパルス波になってるだろ?
でもサンプリングレートの半分以上の周波数は出ないはずだろ?
ではパルス波の倍音はどこにいったの?
373デフォルトの名無しさん:2010/07/05(月) 14:24:51
周波数帯域無限大のマイクとかスピーカーとかケーブルを持っている人はうらやましいですね(棒)
374デフォルトの名無しさん:2010/07/05(月) 14:47:56
鼓膜もね
375デフォルトの名無しさん:2010/07/05(月) 15:12:31
きっと頭にデジタル入力端子が付いてるんだよ
376デフォルトの名無しさん:2010/07/05(月) 15:41:19
>>372
ナイキストレートで折り返す
377デフォルトの名無しさん:2010/07/05(月) 15:59:37
折り返しが自分と重なって、表現できないんじゃないかな
378デフォルトの名無しさん:2010/07/06(火) 19:25:07
>>372
>サンプリングレートの半分のサイン波はパルス波になってるだろ?
意味不明
379デフォルトの名無しさん:2010/07/06(火) 20:56:45
1サンプルで半周期ってことだろ
380デフォルトの名無しさん:2010/07/08(木) 22:53:42
0.5fsの純粋なサイン波なら普通に0.5fsのサイン波としてデータ化されるでしょ。
どこから「パルス波」が出てくるのかわけわからん。
0.5fsを超える周波数成分がある信号なら超えてる部分は折り返すし、倍音(1.0fs)
成分があるならそれは折り返してDC成分になる。
381380:2010/07/08(木) 23:57:43
「普通に」というのは訂正。
初期位相によっては振幅がどっかいっちゃう(最悪0になる)。
382デフォルトの名無しさん:2010/07/09(金) 00:03:46
プログラム上はDCオフセット許容していいもの?
カップリングコンデンサが大抵入るから16〜20Hzぐらいの余裕が必要?
383デフォルトの名無しさん:2010/07/12(月) 22:36:01
ASIOプログラミングに初挑戦してるんですが、
ASIO SDK 2.2 についてきた hostsample をビルドすると
(hostsample.vcproj を VC++2008 でオープン)
Debugビルド → 正常に動く
Releaseビルド → 動かない
となってしまいます><
たどってみると、ASIOGetChannels()がReleaseビルドの時は
おかしな値を返してる(outputチャンネル数が2なのに8と)ようです・・・
何がだめなのでしょうか?
384デフォルトの名無しさん:2010/07/12(月) 22:39:52
だめな点がだめなのだと思いますよ
385デフォルトの名無しさん:2010/07/12(月) 23:02:23
ASIOは音源チップやドライバに影響されまくった経験あるので
とりあえずばっさり違うPCでデバッグするのが吉
386デフォルトの名無しさん:2010/07/12(月) 23:06:12
自己解決しました
387383:2010/07/12(月) 23:23:29
>>385
ありがとうございます
見た感じシンプルで間違えようが無さそうなんですけどねー>hostsample
ライブラリとかプロジェクトの設定まわりでもう少しもがいてみます
一応ASIO対応のプレーヤーからは音が出るので正しいやり方はあるんでしょうね・・・
388デフォルトの名無しさん:2010/07/12(月) 23:29:24
いえいえ
389デフォルトの名無しさん:2010/07/12(月) 23:30:34
おまえアク禁な
390デフォルトの名無しさん:2010/07/13(火) 15:00:48
漏れもASIOで音を出したいな。
391デフォルトの名無しさん:2010/07/23(金) 00:17:24
他スレから誘導されてきました
質問させてください
サーバでwavファイルをいろいろ操作しながらストリーミング配信のようなことをしたいので、
その方法を模索中です

具体的には、ドップラー効果を付加したwavファイルをクライアントに聞かせたいのですが、
ストリームで流すためにはどのようにwavファイルを生成すればよいでしょうか?
392デフォルトの名無しさん:2010/07/23(金) 01:56:36
波形作り終わってる前提ならタダのRIFF-WAVEフォーマットでおくりゃーいーじゃんか
393デフォルトの名無しさん:2010/07/23(金) 03:35:46
waveのファイル読み書きするプログラムを組んでます。
波形のデータはすぐに読み込むことが出来たのですが、
ここから時間ごとの音量のグラフを作るにはどうすればいいですか?
394デフォルトの名無しさん:2010/07/23(金) 06:59:43
波形は取れたんだろ? なら後は好きなようにプロットしろ。このスレの領分じゃねぇ
395デフォルトの名無しさん:2010/07/23(金) 15:08:29
音量を得る方法はこのスレの範疇だろがよ
二乗平均平方根でググれ
396デフォルトの名無しさん:2010/07/23(金) 17:14:45

>>393
音量とは何かって事とWavファイルの情報は何を意味するのかを考えてごらん
397393:2010/07/23(金) 18:11:22
無事、望んでいた結果が出ました。
ありがとうございます。
398デフォルトの名無しさん:2010/07/23(金) 23:43:47
時間毎に最大値を表示したらいけないの?

二乗平均平方根とか大学行くと勉強するのでしょうか。
399デフォルトの名無しさん:2010/07/24(土) 00:14:49
おまえには関係ねえよ
400デフォルトの名無しさん:2010/07/24(土) 04:19:29
そっちはPEAKだな
波形のクリッピングを検知するのに使われる
聴覚上の音量とはほど遠いぞ
401デフォルトの名無しさん:2010/07/24(土) 10:33:48
耳へのダメージを測るためにエネルギー計算をします
402デフォルトの名無しさん:2010/07/26(月) 21:41:54
1/3octで帯域分割してラウドネス求めろ
もしくは聴覚フィルタシミュレーションしろ
パターソンの論文でも嫁
403デフォルトの名無しさん:2010/07/27(火) 13:26:07
>>400
アナログなメーターの動作か?
あれはピークじゃないんだ。
404デフォルトの名無しさん:2010/07/27(火) 23:55:51
聴感上の音量とかピークとかと耳へのダメージもほど遠いと思うんだ
405デフォルトの名無しさん:2010/09/16(木) 08:39:48
>>393
遅レスですまんが、ラウドネス計算をするプログラム見つけたので貼っとく。
http://d.hatena.ne.jp/amarui/20100223/1266893744
406デフォルトの名無しさん:2010/10/28(木) 08:47:48

ピッチシフトですごく遅いピッチのときに
ノイズを軽減する良い方法ってありますか?
なるべく処理が重くない実装を探しています。
407デフォルトの名無しさん:2010/10/28(木) 18:50:58
面倒なんでボリュームを落としてる
408デフォルトの名無しさん:2010/11/04(木) 23:07:08
FFTの勉強してるんですが
FFTで求まったフーリエ級数にどんな処理をして逆FFTすれば
ピッチの変更が出来ますか?
409デフォルトの名無しさん:2010/11/05(金) 03:46:20
簡単なMML音源のようなもの作ってみたんですが、音量上げるとすぐクリッピングするし
音量下げると個々の音が小さくて困ってます。
皆様どう対処されてるんでしょう
410デフォルトの名無しさん:2010/11/09(火) 13:10:43
>>408
ピッチの変更を、音色とテンポを変えずにピッチだけ変更とエスパーしてみる
FFTを勉強し始めたレベルでは、この課題は難しすぐる
マジで答えると本が書ける

ローパス・ハイパスなんかのフィルターや
ハムキャンセラーやイコライザーから始めては

>>409
どんな音源波形か知らんが、サイン波にエンベロープをかけた程度なら
その現象がおこる

音の強さは音量によるのではなく、アタック部分の音質による
ノイズやインパルス成分

サンプリング音を使うのも手だが、ちゃんとした音源作りは難しいよ
411デフォルトの名無しさん:2010/11/09(火) 19:05:40
リミッターの話じゃないのかな。俺の知る限り銀の弾丸はない。
412デフォルトの名無しさん:2010/11/27(土) 00:20:04
NintendoDSiに入ってる録音した音をトランペット風に変化させるってどんなアルゴリズムなのかな?
413デフォルトの名無しさん:2010/11/27(土) 06:24:18
サンプルを
414デフォルトの名無しさん:2010/11/27(土) 14:08:44
周波数を変えずに波形だけ変えるんじゃまいか
415デフォルトの名無しさん:2010/11/27(土) 18:19:42
ピッチとレベルを抽出して、サンプラーを叩く
かな?
416デフォルトの名無しさん:2010/11/28(日) 21:27:27
PCMはならしてないとおもうなー
417デフォルトの名無しさん:2010/11/29(月) 12:19:36
だったら、元音から一波切り出してループ再生
エンベロープをトランペット風にアレンジ
418デフォルトの名無しさん:2010/12/03(金) 23:50:49
BLITってのの原理がいまいちよくわからないんだけど、
日本語で解説してあるページってありませんか?
musicdspとかに英語で解説してあるテキストはあるんですが、わかんない……
419デフォルトの名無しさん:2011/01/05(水) 23:52:35
瞬時周波数ってどういうもの?
何に役立つのかがわからん
420デフォルトの名無しさん:2011/01/17(月) 10:45:40
自動車の速度メーターと同じ
421デフォルトの名無しさん:2011/05/11(水) 13:54:57.62
保守
422デフォルトの名無しさん:2011/05/11(水) 20:02:21.43
点検
423デフォルトの名無しさん:2011/05/14(土) 02:39:14.50
424デフォルトの名無しさん:2011/05/14(土) 17:46:14.44
結構本格的に実装されてるのはいいが
リアルタイムだとCPUパワー余っててもブツ切れだな

>>418
今更かもしれないけど、要は矩形波や鋸波の倍音構成を
正弦波の合成で再現してやれば絶対に折り返しノイズが発生しないって理屈
425デフォルトの名無しさん:2011/05/14(土) 18:35:41.66
>>424
その理屈自体はわかりますが、実際にリアルタイムに正弦波で矩形波とかを合成すると
どう足掻いても音が飛んでしまいプチノイズの嵐になるわけで。
それを避ける為の合理的な計算なんかも恐らくBLITってのには含まれてると思うんですが。
どっちかってーとそっちを知りたい。
426デフォルトの名無しさん:2011/05/14(土) 19:32:35.23
単純計算で、200Hzを合成すると20kHzまでとして100個か
427デフォルトの名無しさん:2011/05/14(土) 20:15:42.12
FFTするサンプル数増やすと、パワーの最大値が増えるのはなぜですか?
10000Hzの正弦波waveファイル(16bit)を窓関数なしでFFTしたとき
サンプル数が以下のときの最大のパワーは
1024 は 15701165
2048 は 25431718
4096 は 62699682
8192 は 101021697
でした
同じ正弦波なのに最大値が違うのが
なんか納得行かないんです
428デフォルトの名無しさん:2011/05/14(土) 23:25:45.40
>>425
BLITは>>424で解説した理屈以上のものじゃないぞ
実装時は基音を元にした各倍音の位相テーブルを作っておいて
合成するのが一般的・・・なハズだ。俺もそんなに多くの実装を目にしたわけじゃないが
429デフォルトの名無しさん:2011/05/14(土) 23:31:20.13
>>427
1024サンプルで正弦波が途切れるwaveファイルに
各サンプル数でFFTをかけてみたらどうなるかな?
430デフォルトの名無しさん:2011/05/14(土) 23:36:14.42
1Hzの正弦波のテーブル作っといて、希望の周波数をインターバルにテーブルを
読んでく、っていう手法の解説を(それとは関係ないけど)昔読んだことがある。

440個ごとに読み出せば440Hzの波形が出てくる、ってことね。
431デフォルトの名無しさん:2011/05/15(日) 00:04:26.79
DDSのハードウェア実装はそんなんだったかな。
432デフォルトの名無しさん:2011/05/15(日) 00:16:43.77
>>429
回答ありがとうございます
ご指示の通りサンプル数453のwaveファイルで試したところ
以下のような結果になりました(FFT時に、波形の無い部分は0埋め)
1024 … 7200310
2048 … 7200310
4096 … 7284914
8192 … 7284914
4096と8192が微妙に違いますが、ほぼ同一の値が得られました

この結果はつまり、>>427で値が違ったのは
切り出した波形の総エネルギーが違うから
という理解でいいんでしょうか?
最大パワーは2048なら1024の2倍、4096なら4倍になるというような感じで
433デフォルトの名無しさん:2011/05/15(日) 12:42:05.05
>>432
その解釈でいいと思う.
DFTの定義によるけど,サンプルを総和することになるからFFTポイント増やすと値は増えるはず.
そのFFTの値をそのまま逆変換する場合,サンプル数で割るから値は増えずに元に戻るよ.
http://ja.wikipedia.org/wiki/離散フーリエ変換
434デフォルトの名無しさん:2011/05/15(日) 23:06:01.47
>>433
ありがとうございました
独学でやってるんで
ふとした疑問を聞ける人がいなくて困ってたんです
助かりました
435デフォルトの名無しさん:2011/05/16(月) 08:58:32.29
OpenALにはハード毎の同時発音数制限が無いのでしょうか?
手持ちの2つのデバイスで再生させると、両方とも一応256ソースまではAL_NO_ERRORで同時再生できてしまいました。音は潰れますが。
ソフトウェア処理だからだとしたら、逆にハードウェアでOpenALに対応していたら発音数が256以下だったりするのでしょうか?
436デフォルトの名無しさん:2011/05/16(月) 09:56:29.19
あった気がする
もうあんまり覚えてないけれど、十何個かそこらしか生成できなかった記憶が
437デフォルトの名無しさん:2011/05/16(月) 15:42:28.67
取り敢えず仕様としては決まってないよな
実装依存だと思う
438デフォルトの名無しさん:2011/06/01(水) 18:46:50.15
44100のWAVE波形を半音上げ下げするにはレートをいくつにすればいいんですか
439デフォルトの名無しさん:2011/06/01(水) 20:31:34.74
1オクターブ上が2倍
1オクターブは12半音
なので半音上は2^(1/12)倍
あとは計算して
440デフォルトの名無しさん:2011/06/01(水) 20:49:34.76
thx
あと、音ってなんで足して2で割ると混ざるの?
すごい不思議なんだけど
441デフォルトの名無しさん:2011/06/01(水) 23:39:43.31
足す操作そのものが混ぜることだから。
水面の波紋も同じ。
442sage:2011/06/10(金) 12:50:15.47
VSTで簡単なVUメーターを作ってるんだけど、
VSTGUIを使って、Idle()のなかで描画するようにしたら、なんだか動きが遅くて・・

VUメータのようなものを描画するときは、
「GDI+」とか、「directX」で描画したほうがいいのかな・・?

誰か、詳しい人おしえてくらはい
443デフォルトの名無しさん:2011/06/10(金) 13:29:46.46
リアルタイムな描画をもとめないならGDIで描画したほうが楽だよ。
444sage:2011/06/10(金) 13:42:33.15
ありがとう!
ひとまず、GDIでやってみます。
445デフォルトの名無しさん:2011/06/12(日) 03:56:21.18
VSTはDTM板にもスレがあるので参考に
446デフォルトの名無しさん:2011/07/13(水) 23:20:28.69
1bitのデータをマルチビットのPCMに変換したいのですが,
全くイメージできずに行き詰っています。

PCMであれば間に0を挟んでアップサンプリング,FFT,
LPFといった処理をしたことはあるのですが,1ビットは
ちんぷんかんぷんで・・・
どなたか,勉強のしかたをアドバイスいただけないでしょうか?

PS3でのDSD→PCM変換は教科書どおりにやっているから音
質がよいといった表現を見かけますが,その教科書に相
当する考え方をまずは知りたいと思っています。
447デフォルトの名無しさん:2011/07/13(水) 23:49:06.80
本物のDACもLPF通すだけみたいな状態だし
単純にLPFのあと間引きすればいいんじゃないの?
448デフォルトの名無しさん:2011/07/14(木) 22:49:54.08
1ビットのデータにどうやってLPFをかければいいかわかりません。

PCMであれば,

倍精度浮動小数点の配列→FFT→LPF→逆FFT→倍精度浮動小数点の配列

という手法ならわかるのですが,1ビットのときは???
449デフォルトの名無しさん:2011/07/15(金) 05:18:09.01
>>446
+1と-1の集合だから
落とし込みたいサンプリング周波数の範囲で足し算して割るだけ
450デフォルトの名無しさん:2011/07/15(金) 22:58:53.96
>>449
ごめんなさい。よくわかりません。

>+1と-1の集合だから
これはわかりました。1と0ではないのすね。

>落とし込みたいサンプリング周波数の範囲で足し算して割るだけ
ここがわかりません。
もしよろしければ,もう少し具体的にお教えいただけるとありがたいのですが。
1bit 2822400Hz→16bit 44100Hzだとどのような計算になるでしょうか?

2822400個の配列があるとして,
0〜44099の1or-1を合計して,その値を44100で割るという事になるのでしょうか?

あれ,でもこれだと1秒間に64サンプリングしかできない・・・



451デフォルトの名無しさん:2011/07/15(金) 23:25:44.27
単純なFIRフィルタも理解できないのか?
とりあえず答えの一つみたいの見つけた
ttp://www.hydrogenaudio.org/forums/index.php?showtopic=37717&start=0&p=670042&#entry670042
ttp://www.hydrogenaudio.org/forums/index.php?act=attach&type=post&id=5524
452デフォルトの名無しさん:2011/07/15(金) 23:35:52.83
>>451
コメントありがとうございます。

>単純なFIRフィルタも理解できないのか?
はい。全くわかりません。
今回の処理に必要という事でしょうか?そのキーワードもあたってみます。

>とりあえず答えの一つみたいの見つけた
ありがとうございます。VB開発者なものでソースコードの解読に苦労しそう
ですが,こちらも勉強してみます。

少し道がひらけた気がします。ありがとうございます。
453デフォルトの名無しさん:2011/07/16(土) 00:08:10.45
FFTした後にどんなLPFフィルタ使ってたんだろ・・・
454デフォルトの名無しさん:2011/07/16(土) 00:16:12.16
>>453
LPFに「どんな」ってどういう事でしょうか?
単純に一定周波数以上の値を「0」にしてから逆FFTしてるだけなのですが・・・
455デフォルトの名無しさん:2011/07/16(土) 12:09:18.41
>>449
1ビット 2822400Hz→マルチビット 44100Hzの場合

仮に32768サンプルの1bitデータがるとして,
2822400÷44100=64なので
64個毎に合計して,その値を64で割ることを512回繰り返せば,
512サンプルのPCMなったりするかなぁ思うのですが,どうでしょうか?
456デフォルトの名無しさん:2011/07/16(土) 22:28:25.89
これ普及して欲しいなあ

https://wiki.mozilla.org/Audio_Data_API
457デフォルトの名無しさん:2011/07/18(月) 12:35:39.55
NaClでも出来そうだ
458デフォルトの名無しさん:2011/07/18(月) 22:40:35.17
HTML5のAudio Data APIでWAVファイルの音階を変えて
再生するのって出来ないんでしょうか
mozSetupやmozSampleRateで周波数を変えてもうまくいかず
WAVファイルの音階を変えて再生する作曲ソフトを作りたいんだけど
JavaScriptが駄目ならC言語とかでもいいんだけど
そもそも音階というのは単に周波数の値を変更するだけで変えられるもんなんでしょうか
それともデータをちゃんといじってあげないといけないのか
459デフォルトの名無しさん:2011/07/19(火) 01:01:25.74
>>456
これはすごいな、普通にFireFox上で動作するソフトシンセとか見つかってびっくりした。
時代を感じる。
460デフォルトの名無しさん:2011/07/27(水) 22:59:59.82
やはり,1bit→PCMがわかりません。
1,1,1,0,1,1,1,1
という1bitの連続したデータを
同じサンプリング周波数のマルチビット整数にすると
1,2,3,2,3,4,5,6
となる。
という考え方は誤っているでしょうか?

上記の方法で作成したPCMデータは音としては聞き取れますが,
音質としてはひどいものでした。
低域がかろうじて鳴っているだけで,中域,高域はまったく感じられませんでした。

どなたかアドバイスをいただけないでしょうか?
461デフォルトの名無しさん:2011/07/29(金) 11:05:29.12
ちょっとぐぐればいくらでも出てくるのに自分で調べる気ねぇの?
ttp://oshiete.goo.ne.jp/qa/1816052.html
ttp://patent.astamuse.com/ja/published/JP/No/2008141470/
ttp://blog.goo.ne.jp/commux/e/e08c353a7d0d5be49a00c3c61e7b8372
まぁ既に読んでてそれでも解らないってんならお前には無理だから諦めろ
462デフォルトの名無しさん:2011/07/29(金) 23:03:13.95
>>461
ありがとうございます。
この2週間ほどグーグルに聞いてはいたものの,理解できるような
文献が見つからなかったので,こちらを頼った次第です。

2つ目は見つけましたが,理解不能でした。
1つ目と3つ目はまだ見たことがなかったので,これから読んでみよ
うと思います。

この度は誠にありがとうございました。
重ねてお礼申し上げます。
463デフォルトの名無しさん:2011/08/10(水) 17:26:29.68
>>461は意外といいやつだと思う
464デフォルトの名無しさん:2011/08/15(月) 08:33:50.58
サイン波を入力するときって
サイン関数の値を書き込む方法みたいなダサい方法は普通使いませんよね。
ということでみんなやってるやり方とかはどの本に乗ってますか?
465デフォルトの名無しさん:2011/08/15(月) 10:47:57.13
日本語でOK。
466デフォルトの名無しさん:2011/08/15(月) 10:49:18.14
OK?おkじゃなくて?
恥を晒したな・・・
というわけでレスポンスよろwww
467デフォルトの名無しさん:2011/08/15(月) 11:16:50.80
> サイン関数の値を書き込む方法みたいなダサい方法は普通使いませんよね。

そうなの?
468デフォルトの名無しさん:2011/08/16(火) 17:33:17.53
>>464
お前の考えるスマートな方法を先に言えよw
469デフォルトの名無しさん:2011/08/17(水) 06:03:03.15
IIRでぶんまわすだけじゃ駄目なの?
470デフォルトの名無しさん:2011/08/18(木) 14:55:06.34
コサイン関数の値を書き込む
471デフォルトの名無しさん:2011/08/18(木) 17:37:12.63
方形波にLPFをかける
472デフォルトの名無しさん:2011/08/19(金) 23:43:29.00
1本だけ立てて逆FFTする
473デフォルトの名無しさん:2011/09/06(火) 21:10:52.49
サンプリング周波数変換の方法をどなたかお教えいただけないでしょうか?
自分で調べてやってみた方法は,

1. 44.1kHzに0を挿入して8倍(352.8kHz)にアップサンプリング
2. FFT→LPF(音の周波数22.05kHz)→逆FFT
3. 352.8kHzを間引いて48kHzにする

上記の方法では,処理も遅く高域にノイズが発生しているように聞こえます。

どなたかテクニックを伝授していただけないでしょうか?
474デフォルトの名無しさん:2011/09/06(火) 21:44:25.26
>>473
ttp://www.madlabo.com/mad/book/
ここの「任意レート変換 サンプリングレートコンバータ.pdf」がわかりやすい
475デフォルトの名無しさん:2011/09/09(金) 13:33:50.63
>>473
高域にノイズ発生の問題はLPFの効きが弱く、折り返し歪が発生しているのでは?
極端に遅いなら2のやり方がおかしい気がする。
476デフォルトの名無しさん:2011/09/10(土) 21:40:40.41
>>474
ありがとうございます。
私には難解な内容ですが,一読してみようと思います。

>>475
>高域にノイズ発生の問題はLPFの効きが弱く、折り返し歪が発生しているのでは?

コメントありがとうございます。
整数倍の場合は品質的に問題ないように思います。
恐らく非整数倍のときの「3」の間引き方の方法を工夫しなくては
いけないのかと思って入るのですが・・・
477デフォルトの名無しさん:2011/09/14(水) 23:43:13.48
>>473
きれいにやるには >>474 のような方法が現実的だし、実際よく行われてます
44.1kHz:48kHz=147:160なので、
タップ長(たとえば101)×(出力パターン数)160の
係数テーブルを作って計算します
(係数を削減する方法もある)

>>473 のようにFFTを使いたいなら、
窓がけ、オーバーラップ、などをしないと不連続ノイズが出ると思います
FFTするし、それなりに重いのは仕方ないでしょう

適当にやるには、(0挿入ではなく)前の値を保持(0次ホールド)するか
直線補完(1次ホールド的な?)でもしながら48kHz信号を無理やり作り、
20kHzくらいのカットオフの高めの次数のLPF(IIRなら8次以上とか)をかければ、
まあきれいではないけど、軽くできるできるんじゃないかな

波形の見た目のきれいさを求めて、あんまり音的には意味の無い
近時曲線でサンプルを補完しちゃう人もいますけどね
それが割といい音がすることもw
478デフォルトの名無しさん:2011/09/15(木) 09:23:19.37
アップサンプリングなら元データのほうが周波数低いんだから
画像みたいに数タップのLanczosで補完しちゃだめなの?
Bスプラインを使ってたハイエンドメーカーもあったようだけどそっちは高域が落ち込むだろうし
479デフォルトの名無しさん:2011/09/15(木) 14:26:55.65
というか、ハードディスクの容量とか制限ほとんどないんだし
する意味無いだろ。
480デフォルトの名無しさん:2011/09/15(木) 21:23:55.86
>>478
> アップサンプリングなら元データのほうが周波数低いんだから
というよりサンプリング周波数比が単純じゃないのが面倒なのでしょう

> 画像みたいに数タップのLanczosで補完しちゃだめなの?
それは >>474 を数タップでやるのと同じことなのでOKだと思います
ただ、(これを言うと画像屋さんには怒られるけど)
画像と比べて音は求められるSNが非常に高いので
数タップで、また、固定の係数なんかではあまり良いスペックは出ません
481デフォルトの名無しさん:2011/09/16(金) 00:42:18.85
>>478
44.1kHzから48kHzへ変換する場合、160倍の0補完アップサンプリングと
147倍の間引きダウンサンプリングをするなら、タップ数が1000〜とかでも
演算結果が0になることがわかっている分は除けるから
畳み込みの回数は1サンプルに対して〜10程度になるよ
482デフォルトの名無しさん:2011/09/18(日) 13:53:58.23
http://www.dtmstation.com/archives/51741938.html
これって、どんなアルゴリズムで動いているのでしょうか?
483デフォルトの名無しさん:2011/09/19(月) 13:45:51.25
FFT
484デフォルトの名無しさん:2011/09/20(火) 00:36:37.93
フリーのソフトでも転がってたやつを、UIを綺麗にして売り物にしたって感じだね
触ってないけど、それほど目新しいものでもなさそう
485デフォルトの名無しさん:2011/09/20(火) 10:25:16.55
左右のパワースペクトルを差分取って定位割り出しって感じかな
可視化するのは個人的に目から鱗
486デフォルトの名無しさん:2011/09/20(火) 10:43:31.84
これだいぶ前に他の会社が同じもん出してたぞ
売れてんのかは知らんが
487デフォルトの名無しさん:2011/09/20(火) 12:18:45.34
切り出すU/Iのでき次第だから、ぶっちゃけアルファテストを積み上げた分だけ使い勝手がよくなるかと。
488デフォルトの名無しさん:2011/09/20(火) 22:50:00.32
>>485
>左右のパワースペクトルを差分取って定位割り出しって感じかな
左右の定位置を求める方法、もっと詳しくしりたいのですが、
なにか資料とかキーワードとかあります?
489デフォルトの名無しさん:2011/09/20(火) 23:34:00.51
>>488
超アカデミックな基礎としては、ブラウエルトの音像定位の本(日本語は絶版してると思う)
だけどそこまでのことはやってないでしょうw
せいぜい各周波数エレメントごとのLRの振幅比からパンを割り出してるくらいじゃないのかな?
位相差も見てたらすばらしいと思うけど
490デフォルトの名無しさん:2011/09/20(火) 23:46:39.32
>>489
http://www.amazon.co.jp/dp/4306041972
これでしょうか?情報ありがとうございます。
491デフォルトの名無しさん:2011/09/21(水) 07:28:44.42
ボーカルを処理例に出されてもな……って思った。
センターに定位してるのが普通だし、周波数帯域も限定されてて
比較的簡単な部類なんだから、他のパートでやってくれないと。
492デフォルトの名無しさん:2011/09/22(木) 08:29:13.64
コロナ社の「空間音響学」は事例も新しいし内容もコンパクトにまとまってて良い感じ。
493デフォルトの名無しさん:2011/09/22(木) 09:25:19.79
フィルタ自体のプログラミングは、いったいどうしているのですか?
494デフォルトの名無しさん:2011/09/22(木) 21:39:46.26
>>493
漠然としすぎてて難しい質問だな
係数をかけたりzバッファにためたりするプログラムをしているよ
495デフォルトの名無しさん:2011/09/23(金) 19:41:08.59
>>494
フィルタをどうすると言う書き込みは多いけど、フィルタ自体はどうしているのかなと思って。
みな自作しているけど、疑問なく作れるってことですか?
496デフォルトの名無しさん:2011/09/23(金) 20:45:36.37
>>495
デジタル信号処理の知識があればできるよ
497デフォルトの名無しさん:2011/09/23(金) 23:53:21.01
アナログのフィルタ回路をデジタルに変換できるので、
アナログのフィルタ回路の作り方を探る手もあると思うよ。
498デフォルトの名無しさん:2011/09/25(日) 14:22:59.21
アナログ世代乙
499デフォルトの名無しさん:2011/09/26(月) 18:42:41.99
>>498
ゆとり世代の耳にはデジタル入力がついてるのか

アナログというよりs領域で設計してs-z変換ということでしょ
特にIIRフィルタはs領域での設計は楽だから
z領域で設計するのは至難の業だ
アナログ回路の伝達関数をs関数にすることも楽だ
500デフォルトの名無しさん:2011/09/26(月) 23:27:19.82
>>486
掴んだのを移動できるのは見たことないぞ
501デフォルトの名無しさん:2011/09/30(金) 14:03:49.60
>>500
遅せぇよ、ただしこれはマスキングなピッチ・タイムストレッチは別機能
ttp://www.psoft.co.jp/jp/product/chronoplayer/index.html
502デフォルトの名無しさん:2011/10/02(日) 01:58:36.59
だから定位は変えられんでしょ?
503デフォルトの名無しさん:2011/10/07(金) 13:50:37.35
すいません、スレ違いかもしれませんが相談に乗ってください。

あるMIDI機器を操作した際に出るSystem Exclusiveをプログラム・チェンジに変換して、
演奏情報も一緒に別の機器に送りたいんですが、何を勉強すればいいでしょうか?

当方プログラミングの経験なしです・・・(無理っすか?
504デフォルトの名無しさん:2011/10/07(金) 20:44:26.89
Windowsサウンドプログラミング―音の知識×プログラミングの知識
って本がMIDIについて結構詳しく書いてあったような気がするので
立ち読みして良さそうなら買ってみたらどうだろう
505デフォルトの名無しさん:2011/10/08(土) 02:03:07.42
>>504
ありがとうございました! 立ち読みしてみます。
でも、友人に「無謀だ」と言われ、くじけそうな心・・・
506デフォルトの名無しさん:2011/10/08(土) 12:27:45.51
>>503
簡単に実現したいのだったらMaxとかPureDataという手もあるかもしれない。
507デフォルトの名無しさん:2011/10/08(土) 17:21:10.44
音声データを加工したくて勉強しています。とりあえず「C言語ではじめる音のプログラミング」
という本を買って読んでいるんですけど、何をしているのかわからない箇所があるので教えてください。

音声ファイルのオープン時にWAVEファイルのPCMデータ(1サンプル16bit)を読み込んでいるのですが、その際に

  short data;
  double *pcm = calloc( length, sizeof(double) );

  for( n=0 ; n<length ; n++ )
  {
   fread( &data, 2, 1, fp );
   pcm[n] = (double)data/32768.0; /* 音データを-1以上1未満の範囲に正規化する */
  }

と、省略して抜き出しましたが、コメントはそのままです。
そして、ファイルへの出力時に

  double s;
  for( n=0 ; n<length ; n++ )
  {
   s = ( pcm[n]+1 )/2.0*65536.0;  
   if( s > 65535.0 )

  data = (short)(pcm
508デフォルトの名無しさん:2011/10/08(土) 17:37:49.80
16ビットの値 (-32768 〜 +32767) を浮動小数点の値 (-1.0 〜 +1.0) に変換してるだけじゃね
-32768 〜 +32767 より -1.0 〜 +1.0 の方が加工とか処理するのにわかりやすくて扱いやすい、と本の中の人は思ったんだろう
ファイルに書くときは当然また16ビットに戻す必要がある
509507:2011/10/08(土) 17:44:14.96
途中で書き込んでしまいました!!! 出力時のforの中はこうです。

for( n=0 ; n<length ; n++ )
  {
   s = ( pcm[n]+1 )/2.0*65536.0;  @

   if( s > 65535.0 ) s=65535.0;
   if( s < 0.0 ) s=0.0;

   data = (short)(s+0.5)-32768; /* 四捨五入とオフセットの調節 */

   fwrite( &data, 2, 1, fp );
  }

そこで、わからないのは何故double型にして-1〜1の範囲に変換(正規化?)しているのかです。
本文には「精度を考慮して正規化する」とあるだけで、こうすることによってどうして精度が良くなるのかがわかりません…。
正規化でググっても違う意味のものが検索されてしまいます。
それから元に戻すときはどうしてわざわざ @ のように(これだと0〜65535の範囲になる)してから、-32768〜32767に
戻しているのかとか…。必要なんでしょうけどどういう効果があるのか具体的にわからなくてもやもやしていて先に進めません。
ググって調べられるワードなどでも何でも良いので教えてもらえるとありがたいです。よろしくお願いします。
510507:2011/10/08(土) 17:49:38.18
ああ、すでにレスしてくれてる方が!!ありがとうございます。
>>508
なるほど、扱いやすいプログラミングの好みみたいなものなんでしょうかね。
あまり深く考えないほうがいいのかな。
511デフォルトの名無しさん:2011/10/08(土) 17:53:33.06
処理内容にもよるけど、そのまま16bitの範囲で処理するとオーバーフローなども気にしないといけないし
複数のフィルタかけたりすると累積の計算誤差も減るし
まあ耳でわかるようなもんじゃないかもしれないけど、わざわざ誤差作るほどじゃないという感じでもある
512デフォルトの名無しさん:2011/10/08(土) 18:15:54.00
0〜65535 にしてから -32768〜32767 にするのは、負の値の切り捨てを嫌ったんじゃないかと
単純に整数化すると -0.999...〜+0.999... の範囲が 0 になるんじゃないかな
513507:2011/10/08(土) 20:13:36.07
>>511 >>512
加工する過程での細かな誤差を嫌ったという感じなんでしょうかね。
正規化(?)をするのとしないのとでは実際どの程度違う結果になるのかわかりませんけど、
いまはあまり気にしなくてもいいのかな。
実際は読者からの細かい突っ込みを嫌ったためのような気も(笑)
少なくとも音声データの加工そのものとは直接関係ないようなので先に進んでみます。
ありがとうございました!
514デフォルトの名無しさん:2011/10/08(土) 23:20:53.19
C++って難しいんでしょうか・・・
(こんな事をきいてるようじゃ無謀と言われてもしょうがないですねw)
515デフォルトの名無しさん:2011/10/09(日) 01:54:00.11
そうですね
516デフォルトの名無しさん:2011/10/09(日) 12:25:41.01
っていうかそこは序盤だから理由が判らないだけで
後半でデータ加工するのに都合良いようにしてんだろ
517デフォルトの名無しさん:2011/10/09(日) 20:37:19.48
整数レジスタ使って固定小数点演算でがんばる時代は終わったか
518デフォルトの名無しさん:2011/10/10(月) 07:25:15.75
ていうかひたすら物量つぎこんで速くしたFPUが、大量生産で安く手に入るから、
それ使っちゃえば安くて速い、という。
519デフォルトの名無しさん:2011/10/10(月) 08:42:11.62
>>517
20年くらい前に終わってる
520デフォルトの名無しさん:2011/10/10(月) 09:59:32.96
20年前は嘘だな。
10年くらい前でも整数演算でやる方がずっと速かった。
SSEとか出だしてからじゃないか?
521デフォルトの名無しさん:2011/10/10(月) 10:49:13.67
整数演算てどういうものをいうのかわかってない自分
加工前に1000倍して加工後に1/1000にするとかでしょうか?
522デフォルトの名無しさん:2011/10/10(月) 10:49:50.24
PentiumのUVパイプラインあたりからかな。
あるいはAlphaあたり。
523デフォルトの名無しさん:2011/10/10(月) 18:27:05.12
最近だとDSがまだ固定小数点をつかってますね
524デフォルトの名無しさん:2011/10/10(月) 19:30:11.42
固定小数ならではの便利な事もあるんだよね
525デフォルトの名無しさん:2011/10/10(月) 20:17:47.25
精度を固定とか荒くてもいいならデータをコンパクトにまとめられるとかかな?
MIDI命令みたいに可変長byteの整数つかってもおもろいかも。
526デフォルトの名無しさん:2011/10/10(月) 21:37:15.04
まさに小数点位置が固定されていることでしょ
527デフォルトの名無しさん:2011/10/11(火) 00:35:05.10
まだ固定小数点DSPの方が安いしクロックも速いのがあるからね
サンプリングレートが異常に高い分野ではまだまだ現役
最近は浮動小数点DSPも安くなったし、オーディオなら、オーバーフローとか
ヘッドルームとかほぼ考えなくて済むメリットの方がかなり大きい
が、まだ32bit floatが主流で、24bit精度が精一杯
フィルターかけまくり、ミキシングしまくりだと、そろそろ精度的に限界かな
PCのアプリなんかは64bit doubleが使われるようになってきたし
(PCのCPU(FPU)はもともとdoubleの方が計算速度速いっていうのもあるけど)
(メモリもたくさん使えるしね、DSPに比べたら無限にあるみたいなもの)
(ただし同じパフォーマンス出すのにCPUのコストは10倍以上、下手したら100倍かかるけど)
DSPも倍精度浮動小数点になっていくのかなぁ
528デフォルトの名無しさん:2011/10/11(火) 01:47:28.46
FPU付きのDSPってみたことないや。いつも固定小数点でやってます。
DSPの定義の問題なのかな?
529デフォルトの名無しさん:2011/10/11(火) 04:02:54.67
iOSやAndroidなんかだと、ハードによってはFPUしょぼいんで
固定小数じゃないとリアルタイム処理はきついね
530デフォルトの名無しさん:2011/10/11(火) 21:18:03.93
最近のオーディオプレイヤーにある,高域の周波数成分を補間する
機能を実装すると考えた場合,FFT意外に何か考えられる手段はあ
るのでしょうか?

もしくは,完全フリーで高速なFFTライブラリがあれば教えていた
だけるとありがたいです。
ソースコードの開示が必要ないものがよいのですが・・・

今は大浦さんのFFTを使わせてもらっていますが,もっと速いもの
はないかなぁと思いまして。
531デフォルトの名無しさん:2011/10/11(火) 21:24:23.87
むしろ完全フリーで高速なFFTライブラリを作ってくれるとうれしい。
532デフォルトの名無しさん:2011/10/11(火) 21:40:06.15
残念ながら,数学が大嫌いなプログラマーなのです。
533デフォルトの名無しさん:2011/10/11(火) 22:26:00.16
>>530
FFTの手段っていうのは漠然過ぎない?

フリーだとFFTWが有名だけどコードの開示は知らないです。
534デフォルトの名無しさん:2011/10/11(火) 22:26:35.10
>>528
今は主要各社ラインナップありますよ
まあ確かにDSPとしてはハイエンド系かな
もちろんアーキテクチャは積和命のDSP

>>530
よくあるタイプは、高域に非線形ひずみかけて倍音を発生させて、
さらに高い超高域を作り出している
例えば、HPFで高域取り出す→クリップさせる→奇数次倍音発生
→超高域HPFかけて取り出す→原音に足しこむ
みたいな感じ(偶数次倍音の発生とか、足しこみ方とかいろいろあるけど)
こうして作られた超高域は、一応倍音だから、元は有ったかもしれないんですw
535デフォルトの名無しさん:2011/10/11(火) 22:35:54.76
>>533
FFTした場合は周波数成分へのアクセスは簡単なので,
そこは工夫次第でどうにでもなりそうですよね?
ただ,FFTそのものの処理時間がネックに感じています。

>>534
むむむ,難しい・・・すいません。頭の悪い私には理解
不能でした。
FIRとかIIRとかそっち系でしょうか?実はFIRを理解して
おらんのです。
536デフォルトの名無しさん:2011/10/11(火) 23:02:03.26
>>535
そっち系ですw
でも分かれば非常に軽く実装できますよ
FFTは万能なようで色々面倒なこともあります、まず重いし
連続処理じゃなくてブロック処理になるんで、
連続信号の音を綺麗に処理するのは結構苦労します
分析には向いてますけどね
とりあえず時間分解能と周波数分解能で悩むでしょうw
537デフォルトの名無しさん:2011/10/11(火) 23:46:24.26
>>536
やはりそっち系でしたか!
まずはFIRの勉強しないといけませんね。
FFTはどうしても矩形窓を使いたかったので,オーバーラップの
実装に苦労しました。

ありがとうございます。
538デフォルトの名無しさん:2011/10/12(水) 23:11:48.27
初歩的な質問かもしれませんが,16bitPCMデータの場合
・1〜32767
・0
・-1〜32768
でデータを表現する事ができますよね。

しかし,+と−で解像度が1つ異なるのですが,
浮動小数点数との相互変換のとき,この1つの違
いをどう考えればよいのでしょうか?
539デフォルトの名無しさん:2011/10/12(水) 23:41:13.43
>>538
問題ないのでは?
x∈R
-32768.0 <= x < 32768.0 と考え
デジタルデータ d は x の小数点以下を切り捨て、それより小さい最初の整数に変換されると考えると、「解像度」に違いはないと思います。
540デフォルトの名無しさん:2011/10/12(水) 23:50:08.69
浮動小数点というのは,-1〜1の範囲のことです。
ですから,+の場合に整数→浮動小数点変換する場合は
32767÷32768なのか
32767÷32767なのかという事です。
541デフォルトの名無しさん:2011/10/13(木) 00:16:41.05
>>540
変換前の PCM データを x,
変換後の浮動小数点データを y としたとき、
y = x * 32768
とすれば問題ないと思いますが‥‥‥。

別の例で考えてみます。
*----*----*----*----*----
0 1 2 3 4
0 <= x < 5 の連続値をとるアナログデータをデジタルデータ化する方法として、x の小数部分を切り捨てた値に代表させるとします。
このとき 0 に代表させられるアナログデータ、1 に代表させられるアナログデータ、‥‥‥ 4 に代表させられるアナログデータ
とグループ化した場合、どのグループも「属するアナログデータの数は同じ」と考えられないでしょうか。
ここでは、アナログデータ x ≠ 5.0 としていますが、仮にアナログデータ x = 5.0 の場合もデジタルデータは 4 とする、としてもほとんど問題ないと思います。

しかし正確な説明は難しい。数学の言葉としては何が該当するでしょうかね。1 対 1 対応ではないからカントールの濃度ではないでしょうし。

542541:2011/10/13(木) 00:20:06.74
>>540
失礼
y = x / 32768.0
ですね。

あと図は、
*----*----*----*----*----
0   1   2   3   4   5
です。
543デフォルトの名無しさん:2011/10/13(木) 00:42:59.23
ふーむ,なるほど。
では,ちょっと質問を変えてみますと,オーディオ/サウンド
関連の分野では常識としてどうすべきかというものがあるので
しょうか?

それとも,ソフトや機器によって実装はマチマチなのでしょう
か?
544デフォルトの名無しさん:2011/10/13(木) 14:43:43.30
固定少数は分数と考えればいいよ。
分母ができほど制度が高くなるイメージ。
545デフォルトの名無しさん:2011/10/13(木) 21:57:28.96
>>540
まあ浮動小数点で扱うなら32768とかで割らなくてもいいんだけどね
オーディオ入出力のAPIによっては浮動小数点を選択すると-1.0〜+1.0になってることが多いね
16bitデータをそのままQ15フォーマットの固定小数点データとみなせば-1.0<=x<1.0となる

>>543
細かいところはまちまちでしょう
ただPCでは飽和処理を自動でやってくれないので自分でやること

float x;
short y;
if (x<-32768.0) y=-32768; else if (x>32767.0) y=32767; else y=(short)x;

とかね
そういえば>>512を気にする場合は

x=x+32768.0;
if (x<0.0) y=-32768; else if (x>65535.0) y=32767; else y=(short)((unsigned short)x-32768);

とかかな?
546デフォルトの名無しさん:2011/10/13(木) 23:26:24.28
>>545
なるほど。
大変参考になりました!
ありがとうございます。
547デフォルトの名無しさん:2011/12/07(水) 17:04:17.87
HTKを使ってHMMをつかっての音声認識をしてるんですけど、
ケプストラムからスペクトル包絡を求めたいとおもってるんです。

で26次元のケプストラムから求めるには32ポイントでのフーリエ変換して指数変換でいいのですかね。
548デフォルトの名無しさん:2011/12/10(土) 00:14:57.52
FFTじゃないスペアナってないかね?
低域の分解能がほしい。時間分解能もほしい
549デフォルトの名無しさん:2011/12/10(土) 01:17:45.00
スペクトルではないけど、ウェーブレットでも似たことはできる。
550デフォルトの名無しさん:2011/12/10(土) 07:35:19.94
ブラウザだけで波形を生成して音を出すことに成功したぜ〜

http://www42.atwiki.jp/syugyou?cmd=upload&act=open&pageid=250&file=oto2.html
551デフォルトの名無しさん:2011/12/10(土) 07:51:02.37
Javascriptだけででバイナリ作るとか怖いFlash要らないな
552デフォルトの名無しさん:2011/12/10(土) 09:02:43.69
exeならいいのかとかFlashに何の関係がとか
553デフォルトの名無しさん:2011/12/10(土) 14:22:41.11
exe?riffだろ常識的に考えて…
554デフォルトの名無しさん:2011/12/12(月) 23:34:02.83
研究用音声サンプルが萌える件
ttp://www.it.ice.uec.ac.jp/SRV-DB/
ギャルゲから音声抜き出したのかとw
555デフォルトの名無しさん:2011/12/13(火) 00:07:32.02
>声優によるオリジナル原稿の読み上げ
556デフォルトの名無しさん:2011/12/13(火) 00:19:05.94
声優パートを試し聴きされる方へ

データの種類が多すぎて,どこから聴いたら良いかわからないという方のために, 「おすすめ」を書いておきます.
まず,どんな発話内容であるかその全体を把握したいという方は,ステレオで聴ける方は, 自然な話速での
男女ステレオデータ:5分45秒:第1回収録版 もしくは 同:第2回収録版をお聴きになってみて下さい.
モノラルでしか聴けない方は, 自然な話速での男女モノラルデータ:5分45秒:第1回収録版)
もしくは 同:第2回収録版をお聴きになってみて下さい.

なお,研究素材として用いるために, 音声データにはコンプレッサなどで音圧を上げる処理を施しておりません.
CDなどで言えば,マスタリング工程前のデータということになります. このため,全体として音量は小さめですので,
パソコン側の音量を最大にして試聴して頂ければ幸いです. ボリューム最大でも音量が足りないパソコンをお使いの方は,
簡易コンプレッサで音量を上げた 大音量版:ステレオ:5分45秒:第1回収録版をお聴き下さい.
無処理ならではの伸び伸びとした魅力は失われますが, 全体の感じはつかめると思います.
557デフォルトの名無しさん:2011/12/13(火) 00:20:12.05
著作権等に関する注意

音声の研究の進展のため,あるいは,信号処理技術の発展に寄与するためであれば, 広く利用を許可したいと思います.
ぜひ,企業や大学での研究で,素材として使って頂ければと思います. また,学会発表,展示会発表などにおいて,
本データを信号処理したもの,あわせて,比較のために本データそのものを 参加者に聴かせることは可能です.
新製品や新技術や技術改良の効果を具体的にアピールするために, 本素材と本素材をその技術で処理した結果の音声を発表
(学会,展示会,Webページに掲載,CDとして配布) することも許可したいと思います.
どうぞ,技術の進歩のために有効にお使いになって下さい.

なお,役者志望の方が 練習または評価を受ける目的で本データベースを利用するようなことは構いません.
たとえば,対話型の音声の片方に自分の声を挿入するなどです.
データセット3のように音楽を付けたデータを製作し発表することも含め, 良識の範囲内であれば許可します.

ちなみに,データセット3の音楽は, 本データベースのために作曲し製作したオリジナルソースです.
音声の基準(2つ上の段落で説明した基準)の範囲内であれば, 発表や展示やWeb掲載に利用可能です.
BGMが加算されたソースに対する音声認識や話速推定などの研究で, 標準ソースとして利用していただければ幸いに存じます.

原稿「雪」については,本データベース用のオリジナル原稿ですので, 原稿そのものについては,
その一部または全部を許諾無しに無料で利用(読み上げ,テキストの掲載や印刷や配布など) してもらって構いません.

ただし,「雪」と読売新聞の「編集手帳」の発声データについて, 意図的に原稿とは違う意味になるように
編集することはお断りします.
(続く)
558デフォルトの名無しさん:2011/12/13(火) 00:21:33.20
公序良俗に反する利用を禁じます. 声優の方々やアナウンサー方々は, 音声研究の進展のためになることを理解して
協力して下さっていますので, 発声して下さった方々に迷惑がかかるような行為があった場合は,
必要な処置をとらさせて頂きます.

義務ではありませんが, 本データベースの音声や原稿を利用したものを発表・配布する場合は,
「話速バリエーション型音声データベース(SRV-DB)を利用した」 もしくは, 「SRV-DBを利用した」 ことを
書き添えて頂ければ幸いに存じます. 定期的に「SRV-DB」でWeb検索し,本データベースが 期待どおりに
皆さんに活用して頂いていることがわかれば, 今後,さらに充実したものにしていきたいと思っております.

謝辞

声優による読み上げに関しまして, 第1回収録に出演して下さいました,男性声優VM00様,女性声優VF00様には,
非常に遅い音声から,非常に速い音声まで,かなりの幅があったにもかかわらず, どの話速でも魅力的で心のこもった
聞き応えのある音声を発声して頂きました. お陰さまで,本データベースは研究用としての価値はもちろん,
聴くだけでも音声の素晴らしさを味わうことができる大変充実したものになりました. ここに深く感謝いたします.

また,第2回収録に出演して下さいました,男性声優VM01様,女性声優VF01様には, さらに,第1回収録での
発話ペースにあわせて発話して頂くという条件で収録させて頂きました. このような難しい条件にもかかわらず,
個性的で魅力的な役を演じて下さいました. その結果,全く同じ発話速度に制御された上で,異なる男女の
ペアの方々が それぞれ個性あるキャラクターを演じて下さっているという, 貴重なデータベースを完成させることが
できました. ここに厚く御礼申し上げます.
(続く)
559デフォルトの名無しさん:2011/12/13(火) 00:21:53.80
さらに,本研究の意義をご理解下さいまして, 声優の方々へ我々にかわって事前説明をして下さいました 芸能事務所の
チーフマネージャー様に厚く感謝いたします, 氏のご協力なくしては,データセット1〜3はここまで充実させることは
出来なかったと思います. ここに厚く御礼申し上げます.

その他,発話のプロフェッショナルによる読み上げ(データセット4と6)に関しましては,
株式会社エス・オー・プロモーションのご協力を頂きました. 本研究の意義にご理解下さいました佐藤邦宏様,
話速を厳密に管理して発声して頂くというたいへん難しい注文に 応えて下さいました,落合こず恵様(話者PF00),
小松上花様(話者PF01), 山田直広様(話者PM00)に感謝いたします. また,編集手帳につきましては,
読売新聞社より,文章掲載と 音声ファイル公開の許可を頂きました.ここにお礼申し上げます.
560デフォルトの名無しさん:2011/12/13(火) 00:36:08.12
なんで違うファイルに同じファイル名付けるんだ?馬鹿じゃねーの?
561デフォルトの名無しさん:2011/12/13(火) 09:06:06.81
長文いらない。
562デフォルトの名無しさん:2011/12/14(水) 00:21:16.18
リンク先見りゃわかるのにわざわざコピペするって馬鹿じゃね
563片山博文MZ ◆0lBZNi.Q7evd :2012/01/15(日) 11:05:55.31
音声を分解して、分解した音を選んで削除するのってできますか?
564デフォルトの名無しさん:2012/01/15(日) 11:16:21.02
>>563
DFT(FFT)+IDFT(IFFT) でなんとかなりませんか?
565片山博文MZ ◆0lBZNi.Q7evd :2012/01/15(日) 11:46:48.94
>>564
大変忙しいので、音声を分解するソフトを作ってもらえませんか?
お願いします。
566デフォルトの名無しさん:2012/01/15(日) 20:12:36.60
ここのスレってうpろだ無いん…
567デフォルトの名無しさん:2012/01/16(月) 02:25:31.21
分解ってのは楽器ごとに分解?
それとも周波数成分ごとに分解?
楽器ごとなら非常に難しい
NMFとかで調べてみるといいかも
周波数成分ごとならいらない音を
フィルタで除去すればいい
ノイズだけ除去ならスペクトル減算法とかある
568550:2012/01/17(火) 07:37:18.39
特定の周波数を削る3タップのノッチフィルタだよ(俺言語)

周期=レート/周波数;
c=2*円周率/周期;
e=cos(c);
f=sin(c)/(2*精度);
無限インパルス応答(配列,1,-2*e,1,1+f,-2*e,1-f);

function 無限インパルス応答(配列,b0,b1,b2,a0,a1,a2){
var x0,x1,x2,y0,y1,y2,i;
var len=配列の長さ;
x0=x1=x2=y0=y1=y2=0;
for(i=0;i<len;i++){
x2=x1;x1=x0;x0=配列[i];
y2=y1;y1=y0;
y0= (b0*x0 + b1*x1 + b2*x2 - a1*y1 - a2*y2)/a0;
配列[i]=y0;
}
}

引数を変えるといろんなフィルタができるよ
ググればでるよ
569デフォルトの名無しさん:2012/01/17(火) 21:04:46.81
どうでもいいけどちょっといい?
見るからに双二次フィルタだけど、3タップって言うの?
570デフォルトの名無しさん:2012/01/18(水) 08:15:55.82
俺言語っていってるんだから何でもいいんじゃね?
571デフォルトの名無しさん:2012/01/18(水) 09:04:17.47
0デシベルでもDACでクリップするからマイナス何デシベルにしなければいけないって本にかいてあったんですけど
ほんとうですか?
572片山博文MZ ◆0lBZNi.Q7evd :2012/01/18(水) 11:07:22.22
画像解析と音声解析はかなり似た技術だ。前者の知識が後者で役立つことも多い。
可変閾値、フーリエ変換しかり。ゆえに音声の学習が終わったら画像処理も
勉強しなされ。ヒューリスティックな音声解析のソフトが少ないので諸君の
研究テーマにしてはいかがだろうか?
573デフォルトの名無しさん:2012/01/18(水) 19:50:05.75
>>571
DAC内蔵のオーバーサンプリングとかのデジタルフィルタがあれば
そこでクリップする可能性はあるね
でもかなり高い周波数で相当変なことしないと大きく飛び出ることはないよ
普通は気にすること無いと思う
574デフォルトの名無しさん:2012/01/21(土) 12:19:34.10
>>565
買ってこい
http://www.roland.co.jp/products/jp/R-MIX/

ステマが済んだら能書き垂れてねえでどっか行け
575デフォルトの名無しさん:2012/01/22(日) 10:12:25.78
フーリエ変換を10倍速くする新アルゴリズムをMITの研究者たちが開発
ttp://jp.techcrunch.com/archives/20120118improvement-on-age-old-mathematical-principle-could-yield-improved-images-video/

リンク先の論文読んだけど俺にはさっぱり理解できなかった
数学詳しい人ならこれ見ながらC++でアルゴリズム書けるのかと思うと羨ましい
576デフォルトの名無しさん:2012/01/22(日) 12:57:04.47
可逆圧縮には使えなさそうな印象。
577デフォルトの名無しさん:2012/01/22(日) 14:57:41.50
10倍といっても、いままでO(10f(n))だったのがO(f(n)に)なっただけだからな
10乗とかなら意味あるけど。
578デフォルトの名無しさん:2012/02/03(金) 07:42:45.58
このスレサウンドプログラミングなのに音出るプログラムアップしないよね
579デフォルトの名無しさん:2012/02/04(土) 23:45:34.27
同意。フィルターの使い方みたいなのばっかで…
>>568みたいなのがもっと増えて欲しい
580デフォルトの名無しさん:2012/02/07(火) 20:11:07.86
>>578
>>579
自分のこと棚に上げるなよw
知らないなら質問すれば?
581デフォルトの名無しさん:2012/02/07(火) 20:47:19.72
アップローダからつくらんと…
582デフォルトの名無しさん:2012/02/07(火) 22:59:43.08
この手のは言いだしっぺがやらなきゃ誰も動かんよ
583デフォルトの名無しさん:2012/02/12(日) 04:09:56.35
オイオイ>>568こそが「フィルターの使い方みたいなの」にモロ該当するだろ
実装が欲しいだけなら某cookbookでも参照しろよ
音出したけりゃ今のところ基本波形はBandlimited Synthesisでファイナルアンサーだし

あれ、語ることもう無くね?
584デフォルトの名無しさん:2012/02/17(金) 23:31:19.53
1bit(2.8224MHz)→PCM(44.1kHz)の手順が知りたいのですが。

1または0のDouble値をFIRのLPFに渡してDouble値を貰う。
64サンプル毎にもらったDouble値を出力する
って事であってますか?
585デフォルトの名無しさん:2012/02/18(土) 00:32:40.38
>>584
スレ内くらいは検索しようや >>446-
586デフォルトの名無しさん:2012/02/18(土) 00:51:21.08
>>585
>446の流れは読んだつもりですが、わかりませんでした。
スミマセン。
587デフォルトの名無しさん:2012/02/18(土) 01:10:49.25
>>586
1bit のデータは一つ前の値に対して-1なのか、 +1なのかを記録してるのは理解してる?
pcmは今の値が幾つなのかを記録してる
588デフォルトの名無しさん:2012/02/18(土) 09:22:15.20
リンク先にソースつきのプログラムあるのに
同一人物としか思えない
589デフォルトの名無しさん:2012/02/18(土) 11:19:53.63
>>587
ありがとうございます。
では、1または-1の値をFIR-LPFフィルタに渡すということでよいのですね?
その結果の値がマルチビットになるのでしょうか?(もしそうだとすると1bitの入力なのになぜマルチビットが返ってくるのかわかりませんが)
そうであれば、1/64に間引きして出力すると44100HzのPCMが出来るという事になりますか?

>>588
ソースコードへのアクセスの仕方がわかりませんでした。
590デフォルトの名無しさん:2012/02/18(土) 11:53:00.60
あきらめたら?
591デフォルトの名無しさん:2012/02/18(土) 16:03:07.13
>>589
理解まったくできてないようだね
数値とグラフを書いてみなよ
可視化するとわかりやすいよ
592デフォルトの名無しさん:2012/02/18(土) 16:56:42.17
>>591
>数値とグラフを書いてみなよ
何の数値とグラフを書いたらよいのでしょう?

下記の処理はできるようになりました。
1.PCMデータ入力
2.FIR-LPF
3.PCMデータ出力

1ビットずつデータを取り出す事はできます。
1と-1の連続したデータを次にどうすべきなのでしょうか?







593デフォルトの名無しさん:2012/02/18(土) 17:09:20.78
x+=1
x-=1
594デフォルトの名無しさん:2012/02/18(土) 17:43:25.86
>593
値を加算して累積させていくということですね。
ここまではOKです。

思いつきで、1bitの入力データをshort型の配列に加算しながら格納しました。
44100HzのPCMにするため、単純に1/64に間引き(64サンプルごとに値を出力)してWAVファイルとして保存しました。
音として確認できるものはできたのですが低音のみで、4kHz以上の周波数成分は出力されていませんでした。


1bitの累積値の配列は何型に保存すべきでしょうか?
Long,Integer,Short/Single(float),Double

次にこの累積値の配列をどうすべきでしょうか?

ご指導いただけると助かります。
595デフォルトの名無しさん:2012/02/18(土) 20:57:14.76
1ビットデータ(1または-1)をFIR-LPFのバッファ(doubleの配列)に格納し、64サンプル毎に値を取り出して出力しました。
FIRの係数は
ttp://achapi2718.blogspot.com/2001/04/fir-javascript.html
を使用して、作成しました。
FIR-LPFのタップ数:513
サンプリング周波数:2822400
カットオフ周波数は22050

音がはっきり聞こえるようになってきました。しかし、盛大に「シャー」というノイズがのっています。
係数作成時の指定が悪いのでしょうか?

どなたかご助言をいただけるとありがたいのですが。
596デフォルトの名無しさん:2012/02/18(土) 23:21:30.31
>>595
まず1bitデータがちゃんと作れてないと思う

フィルターは確か3TapのIIRだった記憶がある
sonyの論文に載っているが、何処にあるか覚えてない
597デフォルトの名無しさん:2012/02/18(土) 23:28:36.86
ちなみにノイズが40kHz以上なら正常だよ
大抵の1bit audioはすべて40k以上のノイズ吐いてます。
再生できるスピーカー少ないし、聞こえないし、測定も難しいから気にするな
598デフォルトの名無しさん:2012/02/19(日) 01:04:10.64
>>596>>597
ありがとうございます。
FIR-LPFをひたすら追いかけていましたが、IIRなんですね。
まずはIIRの勉強をする事にします。

>まず1bitデータがちゃんと作れてないと思う
フィルタをかける前の1bitデータに問題があるという事でしょうか?
もう一度見なおして見ることにします。
599デフォルトの名無しさん:2012/02/19(日) 01:16:27.49
>>596
わー! できましたー!

>まず1bitデータがちゃんと作れてないと思う
LSBファーストの意味を間違えてたみたいです。逆に配列したらノイズのない22kHzまでノイズのないデータができました。
ありがとうございます。

これから色々と音質を調整したいと思います。
本当にありがとう。色々とアドバイスをいただいた他の皆さんにも感謝です。
600デフォルトの名無しさん:2012/04/22(日) 00:31:06.78
質問させてください。

DTMで使う簡易daw的なソフトを作ろうと思っているのですが、
vsthost,midiシーケンサーの2つの機能は最低限内包したいと思っています。

そのソフト内で
midiシーケンサー → vsthost
のような流れでmidi信号の通信が発生すると思うのですが、
このmidi信号の通信を行うために仮想midiケーブル的なプログラムを書かなければいけないのかな?
と思い当たりました。

参考になりそうなソフトはないかと色々調べてみたところ
midiyokeなど他にも色々見つかったのですが

例えば
http://www.johnrofrano.com/tutorials/virtualmidirouter.htm
ここのソフトだと、インストールする際、レジストリへの追加が発生している(ハードウェアの追加の部分で)
ようです。

しかし、欲しいのはあくまで自作プログラム内でのmidi通信用の仮想バスなので、
自分の場合はわざわざレジストリに登録するようなソフトにしなくてもよいのではと思ったのですが
自信がありません。(windows multimedia library とかの絡みでレジストリ登録は必須なのでしょうか)

このあたりのことについて教えていただけないでしょうか。
また、仮想midiケーブルを開発するにあたって参考になるページなどありましたら教えていただけると幸いです。

よろしくお願いします。
601デフォルトの名無しさん:2012/04/22(日) 18:42:20.78
いきなり出だしから間違えてる
まずDAW内でMIDI"信号"そのもののやり取りは発生しない
MIDIイベント構造体でやりとりすればいいだけ(正確にはVstEvents*)

初っ端からそんなんで大丈夫か?
602600:2012/04/23(月) 01:12:24.70
レスありがとうございます。

VstEvents*について調べてみました。

http://www39.atwiki.jp/vst_prog/m/pages/77.html?guid=on
ここのページを見ると、VstEvents*を引数に取る関数として
processEvents()
が挙げられており、その説明文に
「MIDIメッセージをホストアプリケーションから受け取る関数」
とあります。

この説明文を見て、これは
VSTホストアプリケーションからVSTiアプリケーションに
MIDIメッセージ(VstEvents)が送られた際、VSTiアプリケーション側が
MIDIメッセージを取得するための関数、と理解しました。
603600:2012/04/23(月) 01:12:44.04
そこでまた疑問なのですが、ここでいうVSTホストアプリケーションは、
「MIDIメッセージを送信するタイミングを時間軸で管理して適切に送信する」
機能も兼ね備えているもの、なのでしょうか。

自分のイメージでは

SMFファイル → Midiシーケンサー → VSTホスト → VSTi
      load midimsg送信 VstEvents送信

という感じで、VSTホストとVSTiとの通信する際VstEventが使われるが、
MidiシーケンサーとVSTホストが通信する際には実際のMIDIメッセージがやりとり
されているのではないかと思ったのです。

このような感じで、自分が作りたいのはVSTホストなので
midi通信用のプログラムが必要なのでは、と思ったのですが、
この構図は間違っているのでしょうか。
VSTホスト自体がMIDIシーケンサーの役割も果たしているのでしょうか?

ご教示いただけると幸いです。
604デフォルトの名無しさん:2012/04/23(月) 01:18:46.45

SMFファイル → Midiシーケンサー → VSTホスト → VSTi
       load       midimsg送信   VstEvents送信



わかりづらくてすみません。
上記のような感じです。

また、
http://www.hermannseib.com/english/vsthost.htm
ここで配布されているvsthostはmidiinに入力されるmidiメッセージを
解析してvstiを鳴らすようになっているようですが、
自分が作ろうとしているのは、
1つのアプリケーションの中でSMFファイルのロードからして、
vstiを鳴らすまでやることができるようなものをイメージしています。

よろしくお願いいたします。
605デフォルトの名無しさん:2012/04/23(月) 03:00:42.45
日本語が難解で何をやりたいのか頭に入ってこない。もう少し簡潔に書けない?
606600:2012/04/23(月) 10:41:56.25
VstEvents* は VSTHostとVSTiの通信に使うもので、
MIDIシーケンサーとVSTHostの通信の際には
生のMIDIメッセージのやりとりが必要なのではないか?という疑問です。

ただ、VSTSDKの中にMIDIシーケンサー用のプログラムが用意されていて、
それをVSTHostの中から呼べるようになっていたりするなら、
わざわざMIDIシーケンサーや仮想MIDIケーブルを自前で用意する必要もない気がするのですが
そのあたりのことがわからないので教えていただきたいのです。

自分が作りたいものはSMFをロードして音源としてVSTiを使用して音楽を再生する
簡易DAW的なものです。
607デフォルトの名無しさん:2012/04/23(月) 19:05:51.57
日本語は分かるし、何をやりたいのかも分かるが
途方も無い勘違いをしているのでどこから正していけばいいのか・・・というより
>>601で解決しなかったので驚愕ってとこ

VSTホストは自分で実装するんだよな?
アプリのvsthostをそのまま使うわけじゃないんだよな?
608デフォルトの名無しさん:2012/04/24(火) 00:28:40.14
いろいろと壮大な勘違いだらけ。

midiシーケンサーはmidiイベントを出力するもの。
midiシーケンサーでvstiを鳴らすにはmidiイベントをvsteventsに変換しないとvsthostが受け付けない

vstiの音はデジタル信号なのでシーケンサーとは時間(クロック)同期しないといけない。デジタルだから。

midiでvtsiを鳴らすだけならvsti対応のmidi playerであってdawではない。簡易dawはmidiは扱わない。オーディオのみ。

仮想結線するのと、ソフト内部でmidi信号をvsteventsに変換してシーケンスするのは広義では同等。しかし、これを仮想Midiケーブルなんて発想には普通はならない。

vsti とsmf以外はすべて自前で用意しないと駄目。midi playerとvsthostが内包したソフトを作るのでしょ?その二つが内包しているのに、それらを繋ぐ部分(仮想ケーブル?)を用意するってどのような発想?
609デフォルトの名無しさん:2012/04/24(火) 04:18:17.90
「自分は頭が良くて詳しいです」的な自己満足レスの典型だぞ。
相手は超初心者なんだからもう少し優しく教えてあげないと。
さもなくばスルーでOK
610デフォルトの名無しさん:2012/04/24(火) 04:38:42.26
MIDIは実際わかり辛いけどなw
シーケンスファイルも通信データもケーブルも全部MIDI付くから
まずMIDIの解説サイト熟読してMIDIメッセージとsmfファイルフォーマット理解しないと無理じゃね
611デフォルトの名無しさん:2012/04/24(火) 10:51:49.45
そういう話だったか?
612600:2012/04/24(火) 12:00:28.18
レスありがとうございます

>>607
>アプリのvsthostをそのまま使うわけじゃないんだよな?
参考になりそうなところがたくさんあるみたいなのでソース見て色々調べていますが、
全部そのまま流用という感じではないです。

>>608
>midiでvtsiを鳴らすだけならvsti対応のmidi playerであってdawではない。簡易dawはmidiは扱わない。オーディオのみ。
なるほど。

>仮想結線するのと、ソフト内部でmidi信号をvsteventsに変換してシーケンスするのは広義では同等。
これもわかりやすい説明ありがとうございます。
つまりmidiシーケンサー(≒midiプレイヤー?)側でmidiメッセージをVstEventsに変換して、
仮想midiケーブルなんてものを通さずに直接Vstホスト側に渡してしまえばいいという理解で合っていますでしょうか?

613600:2012/04/24(火) 12:01:39.86
>midi playerとvsthostが内包したソフトを作るのでしょ?その二つが内包しているのに、それらを繋ぐ部分(仮想ケーブル?)を用意するってどのような発想?
dominoとVstHostを連携させる時にMidiYokeが必要だったので、仮想midiケーブルに該当するものが必要なのかなと思ったのです。
dominoとVstHostを連携させるときはdominoにはvst関連の機能はないようなので、
domino側で生のmidiメッセージを出力してVstHost側でmidiメッセージからVstEventsに変換しているという感じでしょうか。
自分で開発する際の参考にしたいのですが、midiメッセージをVstHostに送る前にVstEventsに変換しても、
VstHostに送ってから変換してもどちらでも大丈夫なのでしょうか(単純に設計による感じな気もします)
614デフォルトの名無しさん:2012/04/24(火) 13:01:16.15
全然関係ないけど仮想ケーブルと言われるとreasonが頭をよぎる
615デフォルトの名無しさん:2012/04/24(火) 14:41:07.21
vsthostとmidi playerは別のソフトとして作るの?
一つのソフトならどこで変換しても同じじゃないの?
ソースのここからはvsthostって分けるのは勝手。何を心配しているのかわからない。素人プログラミングならソースを書いていろいろ試した方が、ここで調べるよりためになるよ。

仮想ケーブルはイレギュラーなものだから忘れた方がいいよ。きみの作りたいものは普通のソフトみたいだから
616デフォルトの名無しさん:2012/04/24(火) 18:49:46.20
えーとさ、まずVST SDKの仕様書を読めよ
そうすりゃ今までバカな質問してたってことがはっきりするから
勝手に仕様を想像して、その想像を元に質問してるから(俺らの)話が通じないんだよ
はっきり言って埒があかねえ
617デフォルトの名無しさん:2012/04/24(火) 18:50:03.15
自演乙
618デフォルトの名無しさん:2012/04/24(火) 19:02:02.09
シッタカの自作自演うぜえな
その程度の知識で自慢したいわけ?
619デフォルトの名無しさん:2012/04/24(火) 20:15:57.17
何これコント?ワロタ。
わざとすっとぼけた事言っているようにしかみえんw
自演じゃなかったら、からかわれてるんじゃねーの?
620デフォルトの名無しさん:2012/04/24(火) 23:09:12.67
とんでもないバカは実在するんだよ。
621デフォルトの名無しさん:2012/04/27(金) 03:14:41.65
>>617
いえいえ
622600:2012/05/03(木) 00:40:53.79
お礼のレスが遅れましてすみません。

>vsthostとmidi playerは別のソフトとして作るの?
いえ、同じソフトとして作ろうとしています。
ですので、仮想MIDIケーブルのようなものは全く必要なく、
VstEventsをmidiシーケンサー側で時間管理して正しいタイミングで
VstHostに送ればよいだけですね。
色々とよく分からない勘違いをしていたようで失礼しました。

>まずVST SDKの仕様書を読めよ
vstの仕様書とは
http://www.gersic.com/vstsdk/
これでしょうか。
いろいろ読んで勉強してみることにします。
アドバイスありがとうございます。

また何か質問させていただくことがあるかもしれないですが
よろしくお願いします。
623デフォルトの名無しさん:2012/05/07(月) 12:43:46.09
いえいえ
624デフォルトの名無しさん:2012/05/15(火) 21:51:42.68
マイクで拾った音をライン入力から取り込んで
音の強さをデシベル表記で騒音データベースに記録し続けるようなシステムを
開発しようと考えています。

そこで疑問なのが、ライン入力とデシベルの換算部分です。
ソフトで取り込んだPCM波形強さはマイクの感度やオーディオボードのADC、
またWindowsでしたらボリュームコントロールなど
様々な個所で音量調整されます。
正確にデシベル数を入力したい場合に何か良い方法はないでしょうか?
625デフォルトの名無しさん:2012/05/15(火) 22:04:23.33
実測校正。
測定器なんてそんなもん。
626デフォルトの名無しさん:2012/05/15(火) 22:11:59.12
なるほど。実測校正ですか。
そうすると正確に指定したデシベルの騒音だせる機械が必要になるのかな
売ってるのか不明だけど。

627デフォルトの名無しさん:2012/05/15(火) 22:27:28.06
だったらログ機能のついた測定器買った方が安いって話だわな
628デフォルトの名無しさん:2012/05/15(火) 23:48:10.74
>>626
http://www.onosokki.co.jp/HP-WK/products/keisoku/soundvib/sc3100a_2120a.html

マイクサイズが1/2インチか1/4インチじゃないとダメだけどね。
ピストンフォン買うと気圧計もついてくる。気圧変動も考慮して自分で調整。
JIS規格によると結局は比較校正になる。ピストンフォンはマイクが嵌らないと意味ないので、大抵は校正された騒音計の値に合うよう調整する。小数点以下一桁がなんとなく合っていればいいと諦めるのが大事。
629デフォルトの名無しさん:2012/08/27(月) 23:45:56.00
自動作曲ソフトを作りたいんだが本格的な作曲アルゴリズムを考えてくれ
630デフォルトの名無しさん:2012/08/28(火) 00:06:39.70
まずは自分で調べろよ。
631デフォルトの名無しさん:2012/08/28(火) 02:20:47.16
632デフォルトの名無しさん:2012/09/04(火) 00:28:56.20
>>630
調べても出てこないんだよ
633デフォルトの名無しさん:2012/09/04(火) 00:29:38.36
>>631
それ本格的じゃないだろう
634デフォルトの名無しさん:2012/09/04(火) 09:02:58.18
>>632
調べ方が足りないなー。
古典的だけど、まずはGTTMあたりから勉強してみたらどう?
635デフォルトの名無しさん:2012/09/14(金) 08:33:57.66
復帰テスト
636デフォルトの名無しさん:2012/09/22(土) 03:50:40.32
>>634
それなに?
637デフォルトの名無しさん:2012/09/22(土) 21:32:00.10
原書
Lerdahl and Jackendoff : A Generative Theory of Tonal Music. MIT Press(1983)

説明
ttp://www.asahi-net.or.jp/~NM7Y-TKUC/4-61.htm

動いてるのがあるところ
ttp://music.iit.tsukuba.ac.jp/hamanaka/index_j.html

こんな感じですか、わかりません><
638デフォルトの名無しさん:2012/09/24(月) 04:18:22.77
ハウリング除去のアルゴリズムを基礎からまとめたサイトとか文献とかがあれば教えてほしい
639デフォルトの名無しさん:2012/09/24(月) 04:42:46.19
640デフォルトの名無しさん:2012/09/24(月) 13:23:10.47
基礎からではないけど、ハウリング除去というかエコーキャンセラまで載ってる。
http://www.coronasha.co.jp/np/isbn/9784339011258/
641デフォルトの名無しさん:2012/09/27(木) 14:37:26.48
SMFプレイヤーを実装するためのユーティリティ(再生、途中停止、途中再生、シーク など)
が揃っているC++のライブラリってありますでしょうか?
Synthesis Toolkitとか調べてみてSMFをloadするクラスは見つけたのですが、
上記のような機能を有したクラスは見つかりませんでした。
ご存知の方いらっしゃったら教えていただけると嬉しいです。
642デフォルトの名無しさん:2012/09/27(木) 19:12:06.99
「MIDI C++ codeproject」辺りでググれば山ほどヒットするけど、
なかなか「これは」というものに出会わないね。
MIDI APIは、オーディオに比べ自由度が高すぎるのが原因だろうね。

結局、シーケンサーを作っている人は、自分用のMIDIライブラリを書いていると思う。
643641:2012/09/27(木) 21:09:32.94
レス有難うごさいます。

なるほどです。
では自作する場合について試行錯誤してみたのですが、
以下2パターンの方式を考えました。

1. 読み込んだSMFデータからすべてのトラック内のmidiイベントを
シーケンシャルに並べ直し、midiイベントごとに再計算されたデルタタイムと
共にデータを格納された配列のようなものを作り、
whileループ内でsendMidiMessage()とsleep(deltatime) を繰り返す

2. 読み込んだSMFファイルからトラックごとにスレッドを生成し、
そのそれぞれの中でsendMidiMessage()とsleep(deltatime)を繰り返す

644641:2012/09/27(木) 21:10:43.24
最初2の方がよいのではと思ったのですが、
この実装方式だと途中再生やシークの実装ができないような気がしてきました。
1の方だと途中再生もシークも可能だと思うのですが、
>すべてのトラック内のmidiイベントをシーケンシャルに並べ直し、
>midiイベントごとに再計算されたデルタタイムと共にデータを格納された配列のようなものを作り、
この部分の実装に結構手間がかかるのでは・・と危惧しています。

1の方式で正解なのでしょうか。
>すべてのトラック内のmidiイベントをシーケンシャルに並べ直し、
>midiイベントごとに再計算されたデルタタイムと共にデータを格納された配列のようなものを作り、共にデータを格納された配列のようなものを作り、
この部分を行なってくれるライブラリのようなものがすでにあればよいなと思うのですが・・

アドバイス頂けると嬉しいです。
645デフォルトの名無しさん:2012/09/27(木) 21:27:53.30
なんか難しく考え過ぎているような気がする。
とりあえずSMFの解析結果をダンプしたり、実時間で少しずつイベントを処理していくだけような
簡単なプログラムから始めたほうが理解が進むんじゃないかと。

ちなみに1の手法として書かれている配列って、
もしかしてtick単位で展開された全演奏データを並べた配列をイメージしてる?
短い曲ならまだしも、分解能が大きかったり演奏時間が長かったりしたら
配列の要素数が爆発しそうな予感がする。間違ってたらゴメン。
646デフォルトの名無しさん:2012/09/27(木) 21:38:41.41
レスありがとうございます。

tick単位で展開された全演奏データ、の意味するところがよくわからなかったのですが、
全てのトラックの全演奏データの配列で、
配列の要素は1つのmidiメッセージとそのデルタタイムを
格納した構造体をイメージしてました。
つまり全トラックに含まれているMIDIメッセージの数が
配列の要素数と同じになる感じです。
こうして一元管理しておかないと途中再生やシークができないと思ったんですが、
イベントごとのタイムを最初から全部計算しておけばいいような気もしてきました。

デルタタイム分スリープさせるという考え方は合ってはいるのでしょうか。
647デフォルトの名無しさん:2012/09/28(金) 01:30:15.68
前winで実装したときは再生用スレッド1本用意して、
・各トラックに処理すべきメッセージがあれば必要なだけ処理しポインタを進める
・1msecのスリープ(事前にtimeBeginPeriod(1)必須)
・全てのトラックがEOTにたどり着くまでループ

デルタタイムでスリープ再生すると、恐らく絶対時間が合わなくなる
あとはシークも盛り込むのであればノートon/offだけ無視して時間進められるようにするか、
擬似的に状態保持するとか、多少考える必要がある
あと厄介だったのは曲中のテンポチェンジかな
時間経過をデルタタイム換算で処理していくなら問題ないけど、
事前にデルタタイムを実時間に変換するなら注意
648デフォルトの名無しさん:2012/09/28(金) 09:39:14.85
メロディレイザー1999の作曲アルゴリズムはどんなアルゴリズムを使っているの?
649デフォルトの名無しさん:2012/09/28(金) 09:40:18.36
メロディレイザー1999の作曲アルゴリズムはどんなアルゴリズムを使っているの?
650デフォルトの名無しさん:2012/09/28(金) 11:01:27.45
>>646
後半変なこと書いて申し訳ない。
ともかく言いたかったのは>>647でも書かれてるように
デルタタイムのような相対時間をわざわざ絶対時間に換算しなくても
処理できるんじゃないかな、ってことです。

>>647
巻き戻しできるプレイヤーを作ったことがないので想像ですが、
通常のイベント処理時は状態変化の履歴を蓄積していって、
巻き戻し時はその履歴をさかのぼって処理しなおしていく感じで
過去の状態を再現する感じなんでしょうか?
テキストエディタのUNDOバッファや、各種アプリの操作履歴みたいな感じで。
651デフォルトの名無しさん:2012/09/28(金) 11:40:24.45
実際のMIDI機器相手だとエクスクルーシブ等送信順序で動作が色々異なるので
・各種リセットメッセージ
・先頭からシーク位置までのノートon/offメッセージ以外の全てを送信
ってやってた

バンクやプログラム、その他の全ての状態を一回通読して必要最低限だけ送るってのがスマートではあるけど、
実機相手だと上手く動作しないmidがあったので、当時上記実装でお茶を濁した
まぁそのへんはmidファイルや再生機器次第かと
652デフォルトの名無しさん:2012/09/28(金) 12:41:55.55
>>651
なるほど、ありがとうございます。
>>650を書いた時点ではプレイヤー側が全状況を把握して、
巻き戻しで状況を遡って再現していけばいいかなと思ってましたが、
現在の再生位置に無関係な任意の位置へのシーク、と考えれば
頭からの再生し直す方が実装も一つにできますし、素直な方法だと思います。
653虫頭:2012/09/28(金) 16:29:17.48
654646:2012/09/30(日) 16:10:22.63
レスたくさんいただきましてありがとうございます!
かなり参考になりました。

とりあえず再生用スレッドを用意する方式で実装し始めてみたいと思います。
また何かわからないことが出ましたら質問させていただきたいと思っていますので
お答えいただけると幸いです。
655デフォルトの名無しさん:2012/10/20(土) 13:29:20.39
ちょっと質問です。
Windows で OpenAL を使いたいのですが、
最近、OpenAL11CoreSDK を公式から落とそうとしても、500 internal server error が出て落とせません。
何か原因、もしくはミラーサーバなどご存知の方はいないでしょうか?
656デフォルトの名無しさん:2012/10/24(水) 10:31:52.20
普通にできるけどな。
ブラウザ変えてみては
657デフォルトの名無しさん:2012/10/25(木) 22:07:25.40
過去質問させていただいた者です。>>641-654
いただいたアドバイス等に従いまして、TSE3 というMIDIシーケンサーライブラリを見つけ、
Windows XP 上で SMFをロードして内蔵Midi音源にmidiメッセージを飛ばして
音を鳴らすところまでできたのですが問題も発生しており、
また質問させていただきに来ました。
658657:2012/10/25(木) 22:13:22.31
上記の通り、シンセの音を鳴らすところまでは行ったのですが、鳴らした結果が以下になります。
http://ux.getuploader.com/sience1_20/download/234/20121025+210212.m4a
それっぽいものは鳴っているのですが、ブツブツ切れてしまい全く正常に再生できていません。
659デフォルトの名無しさん:2012/10/25(木) 22:17:18.08
一番最後で音が伸びているのは強制終了させているからなのですが、
ノートオフメッセージを飛ばす前にプログラムが終了しているからなのかな?
と見当を付けています。が、であれば途中が切れているのはなんなのだろうと・・
660デフォルトの名無しさん:2012/10/25(木) 22:51:38.89
ノートONとOFFが極短い間隔で送られてるように聞こえるけど、最後まで再生したときSMFの尺と合ってる?
あとはランニングステータスの処理ミスで送信チャンネルがおかしくなってるとか
音は鳴ってるんだし、フルのSMFだとデバッグし辛いだろうからドレミの3音だけ鳴らすような単純なSMF作ってトレース実行してみては?
661657:2012/10/27(土) 20:34:00.78
レスありがとうございます。
なるほどその方法でトレースしてみます。

ちなみにソースコード的にはざっくりと以下のような感じです

timeBeginPeriod(1);
do
{
transport->play(smf, startClock); // TSE3ライブラリ使用
transport->poll(); // TSE3ライブラリ使用
Sleep(100);
} while (true);
timeEndPeriod(1);
662デフォルトの名無しさん:2012/10/27(土) 23:17:50.85
>>661
transport->play()が無限ループの内側にあるのは書き間違い?
TSE3 0.3.1のサンプルを見ると外側にあるけど。
663デフォルトの名無しさん:2012/10/28(日) 17:27:11.02
transport.play関数の役割を理解してる?
transport.status関数をなぜ使わない?
664657:2012/10/29(月) 02:04:42.78
レスありがとうございます。
サンプルコードまで見ていただいたようでして、本当にありがとうございます。
その後調査を進め少し進展があったのですが、また詰まってしまっています・・。
何度も恐縮なのですが、よろしければまたアドバイスをいただけますと幸いです。

長文になってしまうのでpastebinに文を貼り付けました。
ご覧頂けると嬉しいです。
http://pastebin.com/FdWfrqUM
665デフォルトの名無しさん:2012/10/29(月) 03:11:24.28
質問内容がドキュメント完備されてるライブラリの基本的な使い方なら、流石にこのスレの範疇外だと思うがなぁ
ttp://tse3.sourceforge.net/doc/Article.html
ここの Examples of using TSE3 に再生方法書かれてるから、まず永久ループをなんとかしろ
それと startClock の値は?
transport.play の第二引数は再生開始位置だから
src/examples/midifile/midifile.cpp(74行)見る限りじゃ整数型で 0 渡せばいいはず
ライブラリソースに手加えてるなら作業前に全部元に戻す事
666デフォルトの名無しさん:2012/10/29(月) 08:44:16.86
とりあえず>>665が挙げてるmidifile.cppのサンプルをそのまま動かしてみるとか。
midifile.cppの中身もシンプルだから悩むところは少ないんじゃないかな。
667デフォルトの名無しさん:2012/11/11(日) 05:31:58.52
ケプストラム求める時って周波数データに窓関数ってかけてからもとめますか?
ノイズは周波数成分の高いところに出てきそうなので一見いらないように思えるのですが・・・
668デフォルトの名無しさん:2012/11/11(日) 13:33:32.01
ノイズのスペクトルひとつひとつも正弦波
そして窓無しで解析するなら正弦波はその周期ぴったりで抜き出さないと正確にフーリエれない
669デフォルトの名無しさん:2012/11/13(火) 11:47:06.67
いやいや、正弦波はひとつも無いだろ。
例えばナイキスト周波数ギリギリのサイン波とよばれるものなんか矩形波だし。
670デフォルトの名無しさん:2012/11/13(火) 12:05:12.32
真の矩形波なら無限にスペクトルが伸びてることになるよ?
671デフォルトの名無しさん:2012/11/13(火) 12:09:31.56
真のフーリエ変換をすればそうなる。
672デフォルトの名無しさん:2012/11/15(木) 12:39:26.85
ナイキスト周波数ギリギリの成分も窓なしだと標本化数が奇数か偶数かで精度が変わるよ
673657:2012/11/16(金) 12:30:57.99
>>665
>>666
レスありがとうございます。
お礼が遅れましたすみません。
その後調査を続け、なんとかSMFを正常に再生させるところまで行きました!
tse3/の中に plt/Win32.cpp というファイルがありまして、
win32api用の実装が途中までしかされていないのが原因だったようです。
timeGetTime関数等を使って調整することでうまく再生されるようになりました。
また分からないことが出てきたら質問させていただきますので宜しくお願いします。
674デフォルトの名無しさん:2012/11/16(金) 13:15:08.18
>win32api用の実装が途中までしかされていないのが原因

へー
675657:2012/11/16(金) 21:00:35.60
よくよく見てみたらwin32.cppの先頭のコメントに
「このモジュールは途中までしか実装してないので適当に微調整して使ってね!」
的なことが書いてあったのでした笑
676デフォルトの名無しさん:2012/11/17(土) 10:31:05.78
>>667
スペクトル→ケプストラム変換の逆変換には窓掛け要らないよ。
677デフォルトの名無しさん:2012/11/19(月) 16:05:45.46
FFTでボーカルキャンセルのコード書いているんですが、
4096サンプルでLRそれぞれFFTしたあと、
各周波数の振幅と位相を調べて、
位相と振幅が近いもの(定位が真ん中に近いもの)
をボーカルとみなして、実数部虚数部を0にしてから
再度iFFTかけてPCMに変換するという処理をかいたんだけど
なんか、ボーカルが半分くらいの音量になってるけど消えないんだ。
なぜかわからないので、教えていただけますか?
678デフォルトの名無しさん:2012/11/20(火) 03:13:09.35
定位が真ん中をなくすのだったらfftしなくてもできるじゃん
左右の引き算とかで。モノラルになっちゃうけど
679デフォルトの名無しさん:2012/11/20(火) 07:54:31.08
カラオケ作るソフトで
BestPracticeってのがあるんだけど
ステレオ保ったまま周波数域で間引くなら
それ参考になるよ
680デフォルトの名無しさん:2012/11/20(火) 08:30:41.38
>>679
素晴らしいです。ありがとう。
681デフォルトの名無しさん:2012/11/20(火) 08:31:42.81
>>678
そう、モノラルになるのが嫌なんです
682デフォルトの名無しさん:2012/11/20(火) 15:39:47.03
>>680
BestPracticeもKaraokeProcessで、
LRに逆位相RLを足しこんで作ってますね。
LPF/HPFとPAN計算で工夫はしていますが・・・

FFTでのvocal cancelのサンプルプログラム無いですかねぇ
683デフォルトの名無しさん:2012/11/20(火) 17:34:49.19
声をFFTすると基音〜5倍音くらいまでが取れると思う
しかもFFT解析結果はパルスではなくなだらかに周波数成分が分散する
なので、音声だけ半分くらいカット出来てるなら、0fillした帯域の周辺もある程度カットしてやればいんじゃね?
684デフォルトの名無しさん:2012/11/21(水) 05:12:21.68
soundengineのボーカルカットはエフェクト挟んであるボーカル以外はほとんどカットできてる
が、あんまり重くないしFIRIIRかそこらへんか上記のやり方でやってるんだろうな
ステレオ維持できてるし。幅って設定項目あるからちょっと余計に削るといいのかもね
685デフォルトの名無しさん:2012/11/21(水) 21:32:40.99
>>682
ヒント:内積
686デフォルトの名無しさん:2012/12/09(日) 21:22:29.37
>>677
位相を比較する時に、−πと+πは近いと判定してますか?
位相の引き算は、複素数の割り算でできるので、
それで判定するのが楽だと思います
同時に振幅の比較もできますしね
見当ちがいのことを言っていたらごめんなさい
687デフォルトの名無しさん:2012/12/09(日) 22:24:36.94
いえいえ
ありがとう
688デフォルトの名無しさん:2012/12/10(月) 10:39:15.81
おっぱい揉んで
激安で抜ける
○1000円〜
「新宿 アイアイ 」
○1500円〜
「西川口 マーガレット 」
○2000円〜
「新宿・錦糸町 あんぷり亭 」
「新宿 ダブルエロチカ 」
689デフォルトの名無しさん:2012/12/15(土) 01:29:59.43
質問させていただけますでしょうか。

いま、synth1の音を鳴らすことができるVstHost的なアプリを開発したいと考えているのですが、

http://www.geocities.jp/daichi1969/vstidev/index.html
http://www.geocities.jp/daichi1969/softsynth/

ここのページを見るとどうもsynth1はVst SDK 2.0 という
かなり古いバージョンのsdkを使っているようでして、
スタインバーグの公式ページにいってもSDK ver2.3とver2.4しか見当たらないのです。

synth1を鳴らそうと思ったら sdk 2.0 が必要、という解釈は合っていますでしょうか?
またsdk 2.0 を今手に入れようとしたらどうすればよいでしょうか・・
持っている人を探すしかないのでしょうか。

教えていただけますと嬉しいです。
690デフォルトの名無しさん:2012/12/17(月) 21:28:44.53
windowsxpだとmixerGetNumDevs
であとから接続したusbオーディオインターフェース
認識できるのですがwindows7だと認識できなくて
オンボのミュージックデバイスしか認識できません。
7でどうにか認識させてミキサーいじる方法無いでしょうか?
691デフォルトの名無しさん:2012/12/17(月) 21:55:24.54
自己解決しました
692デフォルトの名無しさん:2012/12/18(火) 10:41:59.18
よかったな
693デフォルトの名無しさん:2012/12/18(火) 10:43:27.74
これにて一件落着
694657:2012/12/26(水) 18:51:57.20
こんばんは

またお聞きしたいのですが、
このページの
http://eternalwindows.jp/winmm/wave/wave03.html

for (i = 0; i < dwBufferCount; i++) {
wh[i].lpData = (LPSTR)lpWaveData;
wh[i].dwBufferLength = dwDataSize;
wh[i].dwFlags = 0;

waveOutPrepareHeader(hwo, &wh[i], sizeof(WAVEHDR));
waveOutWrite(hwo, &wh[i], sizeof(WAVEHDR));
}

の部分を実装してみたのですが、
これを実行させてみるとwaveOutWriteの実行のタイミングで(おそらく)
毎回「プツッ」というノイズが発生してしまうんですが、
これってどのように回避すればよいでしょうか。

osはwindows xpと7です。

どなたか宜しくお願いしますm(_ _)m
695デフォルトの名無しさん:2012/12/26(水) 21:21:08.15
初期化のタイミングんとこだけならウィンドウ生成関連でモタってんじゃね?
よくわかんねーけど、forの手前にSleep(500);入れてみるとか
あと、ダブルバッファに同じポインタ突っ込んでるようにみえるけど、合ってんのコレ?
696デフォルトの名無しさん:2012/12/27(木) 01:23:11.78
同じポインタ入れてるのはたぶんループ再生を意図してるからだと思う。

「プツッ」は再生したWAVEデータの最初と最後の振幅値に大きな差があるんじゃない?
lpWaveDataのデータの前半と後半をそっくりmemcpyとかで交換([A][B][C][D]→[C][D][A][B]に)
して、[D]と[A]の間でプツッがでるならこれが原因かと。
697デフォルトの名無しさん:2012/12/29(土) 09:55:30.95
クリックノイズにはアンプエンベロープ
698デフォルトの名無しさん:2013/01/17(木) 18:00:33.82
レスありがとうございます。
お礼が漏れておりました。。失礼しました。

>「プツッ」は再生したWAVEデータの最初と最後の振幅値に大きな差があるんじゃない?
まさにこの通りでした。
プログラムのバグで、波形がなめらかな曲線を描いてなかったようです。

ありがとうございましたm(_ _)m
699デフォルトの名無しさん:2013/01/18(金) 22:58:28.81
>>698
律儀に報告おっつ乙!
700デフォルトの名無しさん:2013/03/19(火) 23:13:24.21
既存のソフトがあまりにクソなのでMIDIシーケンサ作ることにした。
701デフォルトの名無しさん:2013/03/20(水) 02:16:02.34
>>700
Abletonでも素直に使っとけよ、良いもの素直に認められない偏屈が世界を変えれると思う?
702デフォルトの名無しさん:2013/03/20(水) 05:03:08.15
この曲のタイトル教えて
ttp://www.youtube.com/watch?v=WOrsP767ER0
703541:2013/03/20(水) 22:08:59.28
>>702
ドリフ8時だよ全員集合のあれだね
704デフォルトの名無しさん:2013/03/21(木) 05:30:23.68
盆回り
705片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/30(土) 18:14:11.02
age
706デフォルトの名無しさん:2013/03/31(日) 03:54:40.74
ここのことか
707デフォルトの名無しさん:2013/04/07(日) 02:10:30.00
void lopass(short *in, float *out, long sanprus, float cut);で
C言語でしローパス作ってください
inに入力
outが出力
sanprusがサンプル数
cutがローパスの周波数です。
以上
708デフォルトの名無しさん:2013/04/07(日) 02:28:16.86
サンプルの綴り間違ってるし、日本語間違ってるし、ここは宿題スレじゃねーし、ナニ人なのお前
709デフォルトの名無しさん:2013/04/07(日) 03:29:57.50
sanprus
ww
ローマ人じゃね?w
710デフォルトの名無しさん:2013/04/07(日) 03:56:51.89
まあ綴りは目をつぶるとしても
その条件だけでは作れないわな
711デフォルトの名無しさん:2013/04/07(日) 03:59:08.55
学生の宿題ならいいが、この時期なら新入社員の可能性も
712541:2013/04/07(日) 09:35:48.57
宿題スレにいけ
713デフォルトの名無しさん:2013/04/07(日) 21:25:30.15
[0.5 0.5]
でも立派にローパスだしな。
あの書き込みでは何をしていいやら。
714デフォルトの名無しさん:2013/04/08(月) 03:19:29.42
ん?反論がなければ俺の勝ちだが?
715デフォルトの名無しさん:2013/04/08(月) 03:20:04.30
>>710-714
ボケ防止ならやれよ老人ども
716デフォルトの名無しさん:2013/04/08(月) 03:33:15.19
>>715
ヒント
void lopass(short *in, float *out, long sanprus, float cut){
while (sanprus--)
out[sanprus] = (float)(in[sanprus]+in[sanprus+1])/2;
}
717デフォルトの名無しさん:2013/04/08(月) 12:03:37.47
平均値で十分
void lopass(short *in, float *out, long sanprus, float cut)
{
  float avg=0.0f;
  for(long i=0;i<sanprus;++i){
    avg+=(float)(*(in+i)/sanprus);
  }
  for(long i=0;i<sanprus;++i){
    *(out+i)=avg;
  }
}
718デフォルトの名無しさん:2013/04/08(月) 22:19:51.98
量子化ビット数が16bitなのは関数インターフェースから想像つくが、
カットしたい周波数だけ渡されてもサンプリング周波数の指定無いから無理だろ?

って思ってたけど、無視すればよかったのかw
719デフォルトの名無しさん:2013/04/08(月) 22:34:54.47
cutはナイキスト周波数単位かもしれん
720デフォルトの名無しさん:2013/04/09(火) 00:38:38.96
サンプリング周波数指定するよりも何らかの正規化周波数使う方が普通ですね
721デフォルトの名無しさん:2013/04/09(火) 02:44:09.38
>>720
まぁそんな感じ
722デフォルトの名無しさん:2013/04/10(水) 00:04:22.37
>>707
FIRフィルタだとすると
先ずFIRフィルタの係数を逆DFT+窓関数等で求める
そして、その係数を使ってFIRフィルタする
ググれば、C言語で係数を求めるプログラムやFIRフィルタするプログラム
がころがっているよ
723デフォルトの名無しさん:2013/04/12(金) 22:26:10.04
「今でしょ」

↑寒い奴登場
つーか、お前らの周りにもいるだろ
自称明るい人、自称おもしろい人って奴
結局ソイツらってさあ
流行りの芸人のギャグとか流行りのCMとかをパクってるだけに過ぎないんだよね
ワイルドだろぉ、もそろそろだしね
職場とかクラスの人気者で笑ったことがない
なにがおもしろいんだろ?
テレビの真似してるだけなのに
724デフォルトの名無しさん:2013/04/13(土) 02:08:40.41
1. 他人の発言をさえぎらない
2. 話すときは、だらだらとしゃべらない
3. 話すときに、怒ったり泣いたりしない
4. わからないことがあったら、すぐに質問する
5. 話を聞くときは、話している人の目を見る
6. 話を聞くときは、他のことをしない
7. 最後まで、きちんと話を聞く
8. 議論が台無しになるようなことを言わない
9. どのような意見であっても、間違いと決めつけない
10. 議論が終わったら、議論の内容の話はしない
725デフォルトの名無しさん:2013/04/13(土) 06:14:21.24
>>723-724
こいつ空気読めてねぇなぁ
726デフォルトの名無しさん:2013/04/13(土) 13:06:21.97
いいからキチガイは病院行けよ
727デフォルトの名無しさん:2013/04/13(土) 13:15:52.69
【IT】 「C言語やJavaを使う人は採用しない」「AGKやDarkBASICの方が生産効率が高い」就職活動
http://kohada.2ch.net/test/read.cgi/pcnews/1365242417/139-141

コンソール研究所は13日、C言語やJavaを使う学生を採用しない方針を固めた。

これは昨今のソフトウェア開発現場において社内研修期間を嫌う企業や官公庁の意向を取り入れたもので、
「 卒業=即戦力 」 が求められる新時代への突入を明確にしたものである。

たいていの面接官は ” 学生時代にどんな部活に所属していましたか? ” などと聞くが、それは時代遅れと
なったようだ。

また、C言語やJavaのスキルを問うものに対しても、「 実務経験がなければ意味がない 」 と言う現場の声も
反映した。

コンソール研究所の開発現場から一人の声を拾ってみた。
(以下ソース参照)
728デフォルトの名無しさん:2013/04/13(土) 13:25:18.61
1. 他人の発言をさえぎらない
4. わからないことがあったら、すぐに質問する
この二つは矛盾しています
仮に後で質問するとすればメモを取らなければならず
5. 話を聞くときは、話している人の目を見る
6. 話を聞くときは、他のことをしない
ここでまた矛盾が拡大します
10. 議論が終わったら、議論の内容の話はしない
これは何を言ってるのか判らない
729デフォルトの名無しさん:2013/04/13(土) 19:09:27.58
人間の耳に聞こえない192kHzとかもオカルトじみてるよなあ
ブラインドで聞こえなくてもそれ含んだ音楽聴けば高音の伸びが違うとか言ってるけど
それがガムラン音楽というどっかの民族の音楽しかないらしいし
730デフォルトの名無しさん:2013/04/13(土) 19:17:37.48
犬笛の音でも再現したいんじゃないの
731デフォルトの名無しさん:2013/04/13(土) 21:27:16.68
1kHzとか低くても三角波とか矩形波になったら48kHzごときじゃ再現しきれないんだから必要じゃないの?
732デフォルトの名無しさん:2013/04/14(日) 00:58:00.13
>>729
単体で取り出しても認知できないから「聴こえない」というわけでもないようだね奴らの言い分だとね
733デフォルトの名無しさん:2013/04/14(日) 07:55:09.13
研究目的や特殊な用途で高サンプリングレートが必要なら理解出来るが、
人が聞くこと前提の音楽再生用途では不要だよ
高音質LANケーブルとか信じてるキチガイなんて相手してらんねーよ
734デフォルトの名無しさん:2013/04/14(日) 10:38:04.57
加工するときに情報が落ちるようなケースだと元が細かい方がいいんじゃ?
735デフォルトの名無しさん:2013/04/14(日) 11:35:24.43
それを「特殊な用途」といってるんじゃなイカ?
736デフォルトの名無しさん:2013/04/14(日) 23:58:19.67
そもそもスピーカーのf特が20kHzかそこらだから。
しかし生のガムランゴングなら有り得るかもな。
耳には聴こえなくても体に高周波の空気の振動は伝わるわけで。
うんこしたくなるとか。
737デフォルトの名無しさん:2013/04/15(月) 05:44:20.31
今すごくしたいです
738デフォルトの名無しさん:2013/04/15(月) 09:54:33.10
個人的には192kHzとか不要だと思ってる。
でも、サンプリング周波数を高くするのは定位の精度に影響するんじゃないかな。
ステレオ再生の時は、サンプリング周波数が左右の時間差(位相差)の最小単位を決めるわけだからさ。
739デフォルトの名無しさん:2013/04/15(月) 12:22:56.19
>>733
そういうけど、シールドしてないLANケーブルが発するノイズは相当なもんだよ
それがアナログ回路に回り込んでオーディオ信号を濁すことは十分にあり得る
740デフォルトの名無しさん:2013/04/15(月) 12:39:42.47
なんでアナログ回路を電気的にも電磁波的にもシールドすれば充分とは考えないのだろう。
そもそも、音源であるマスターレコード自体がデジタルデータでしかないと言うのに。
741デフォルトの名無しさん:2013/04/15(月) 13:05:20.89
アナログ回路を電磁波的にシールドするとか簡単に言ってくれるねえ
EMCは出さない方法があるなら出さないのが一番
742デフォルトの名無しさん:2013/04/15(月) 13:06:53.25
誤 EMC
生 EMI
743デフォルトの名無しさん:2013/04/15(月) 18:48:29.54
誤 生
生 正
744デフォルトの名無しさん:2013/04/15(月) 19:20:52.74
emi
omi
745デフォルトの名無しさん:2013/04/15(月) 21:00:28.75
制作用途とかではミックスとか加工を適確にするために、
ハイサンプリングレートはいいと思うけどね。
だったらマスターそのままよこせよってことで
ハイサンプリングレートデーターになるんだろうね。
746デフォルトの名無しさん:2013/04/15(月) 23:07:58.14
「LANケーブルが発するノイズ」って、マジで言ってんの?
LANケーブルが拾うノイズならまだわかるが、ケーブルがノイズ発するわけねーだろ
そもそもLANからのノイズが耳で解るレベルで乗っちゃう設計じゃ、どんなケーブル使っても同じだよ
747デフォルトの名無しさん:2013/04/16(火) 01:54:48.30
シールドしてないLANケーブル
748デフォルトの名無しさん:2013/04/16(火) 14:34:35.50
>>746
>ケーブルがノイズ発するわけねーだろ
お前がそう思うんならそうなんだろう
お前の頭の中ではな
749デフォルトの名無しさん:2013/04/16(火) 17:05:30.01
幼稚だな。
750デフォルトの名無しさん:2013/04/16(火) 19:02:40.75

鏡に向かって何言ってんの?
751デフォルトの名無しさん:2013/04/16(火) 22:20:11.99
ここはケーブルの話になると盛り上がるのかい?
つーか、ノイズ出すほどのケーブルなら、LANのパケットにもノイズ乗るんじゃね?
通信不能なくらい。
752デフォルトの名無しさん:2013/04/16(火) 23:04:20.33
自分が出した電磁波が自分にとってノイズになるケースもあるとは思うけど
LANはノイズを受ける事についてはある程度は強いよ
差動だから
753デフォルトの名無しさん:2013/04/17(水) 02:35:41.27
スカラー波でも出してろ
754デフォルトの名無しさん:2013/04/17(水) 19:09:38.80
女の子の車の排気ガスフェチ!

女の子がエンジンをかけて後ろから白い煙出てたらたまらん(笑)

昔出会い系で吸わして貰った(笑)
755デフォルトの名無しさん:2013/04/17(水) 21:33:06.40
>>754
肺がんで早死にしたいの?
756デフォルトの名無しさん:2013/04/20(土) 19:04:48.58
曲と曲を比べてどれだけ似ているかを表示するモノを真剣に作りたいと思う(ターミナルに表示)。
measure :: songA -> songB -> Float な感じ?
上の人たちに会話に着いていけないぐらいの初心者だけど、頑張りたい。
皆がどのような工程をソフトを作ってるときに辿っているのか分からないけど、DFDなど-> コーディングな感じで行きたいと思う。
出来れば何か道筋みたいなものを教えてもらいたい。
757デフォルトの名無しさん:2013/04/20(土) 19:11:24.11
何か閃くまで寝とけ
758デフォルトの名無しさん:2013/04/20(土) 19:58:08.90
>>757
PCMデータの差分をとる

songA[]={-50,100,20,30,-40};
songB[]={60,100,30,20,50}:

songd = malloc(songbytes);
if(songd){
short v;
for(v=0;v<sizeof(songA);v++)
songd[v] = songA[v]-songB[v];
}

}
759デフォルトの名無しさん:2013/04/20(土) 20:13:58.38
どうかなそれはw
手始めにコード進行を解析するプログラムを考えてみれば?
できるかどうかわからんけどw
760デフォルトの名無しさん:2013/04/20(土) 20:14:26.28
似てると言っても色々だ
曲のどんな特徴の類似度を計りたいかによるね
761デフォルトの名無しさん:2013/04/20(土) 22:03:55.06
単に波形の類似性を見たいのなら相互相関なんじゃないの?
波形の頭を揃えるのも必要になるけど
762デフォルトの名無しさん:2013/04/20(土) 23:08:00.36
コード進行が似てたら似てるように聞こえるし
キーが違うと似てない曲になったりもする
763デフォルトの名無しさん:2013/04/21(日) 01:12:17.16
>> 758
プログラミングもう一度勉強します。java?

javaでスペースインベーダーぐらいしかプログラムしてない。
ピアノの楽譜を眺めていて、音符?の配置が似ていたら「曲が似ている」んじゃないかな?の思ったのが始まり。
音の高さより波長の類似性をみた方がいいのかもしれない。
PCMデータの取扱いは
javax.sound.sampledパッケージでいけるのかな?
764デフォルトの名無しさん:2013/04/21(日) 07:19:24.06
FFTかけて周波数成分の特徴の類似度比較なら意味があるかも知れない
765デフォルトの名無しさん:2013/04/21(日) 20:15:05.01
>>764
おまえはFF3の劣化コピーからやりなおせ
766デフォルトの名無しさん:2013/04/21(日) 20:27:57.37
FFTとかFF3の略って何なんだろうか?
ファイナルファンダジーしか出でこない。
767デフォルトの名無しさん:2013/04/21(日) 20:33:05.61
ふぁーすと ふーりえ たくてぃくす
768デフォルトの名無しさん:2013/04/21(日) 22:28:35.74
わかった。フーリエ変換か。
効率的にはFFTがいいらしいが、分かりやすさの為にDFTを選んでみる。
何か、源波形や周波数特性、フーリエ逆変換などあるみたいだけど、どれが良いのだろうか?
曲が似てるって思った時って、音階など、振幅や音の高さが似ているとき?
769デフォルトの名無しさん:2013/04/21(日) 22:44:47.15
リズム 旋律 和声進行 音色(編成、声色、残響など) 
パターン認識だよ。
FFTの周波数領域や波形を見たところで似てると「感じる」かどうかは判らんだろう。
リズムを比較するのがせいぜいだろうな。
770デフォルトの名無しさん:2013/04/21(日) 23:58:58.22
単純にFFTして周波数成分の比較じゃ時間軸がちょっとでも揺れたら取れなくなる
散々言われてるけど、最低でもコード進行識別出来ないと無理じゃね
771デフォルトの名無しさん:2013/04/22(月) 20:23:40.30
まあFFTも初めてみたいなんだから、
曲全体のスペクトル見て、似てる似てないでも
いいんじゃないかな、最初は。
リズム主体の曲か、ハーモニー主体の曲か、
めちゃくちゃな曲か、くらいの分類はできるよ。
772デフォルトの名無しさん:2013/05/06(月) 23:11:29.32
BSDライクなライセンスのOpenAL的なライブラリってないですか?
いつのまにかLGPLになってやがった・・・
773デフォルトの名無しさん:2013/05/22(水) 01:13:06.28
オープンソースのタイムストレッチライブラリってSoundTouch使っとけばオケ?
774デフォルトの名無しさん:2013/05/28(火) 05:48:55.32
ここでいいのかわからないのですがdirectshowのフィルターのrotの登録で
下のを入れたんですがうまくうごきません。なぜでしょうかirotvierでも登録されていません
IMoniker * pMoniker;
IRunningObjectTable *pROT;
int hr;
if (FAILED(GetRunningObjectTable(0, &pROT))) {
printf("fil;");
}

hr = CreateItemMoniker(L"!",L"FilterGraph 0 pid 0", &pMoniker);
if (SUCCEEDED(hr)) {
hr = pROT->lpVtbl->Register(pROT,0, pUnkGraph, pMoniker, pdwRegister);
pMoniker->lpVtbl->Release(pMoniker);
}else{printf("fail");}
pROT->lpVtbl->Release(pROT);
return hr;
775デフォルトの名無しさん:2013/05/29(水) 05:23:35.46
774ですが自己解決しました。
776デフォルトの名無しさん:2013/05/29(水) 10:14:15.07
俺も自己解決した
777デフォルトの名無しさん:2013/05/29(水) 23:05:09.33
じゃあ俺も
778デフォルトの名無しさん:2013/06/01(土) 19:40:32.47
偉い人が「○○しましょう」「○○はやめましょう」って沢山言ってるわけだが、
大抵の発言は正しい。
しかし、偉い人の言うことをそのまま実行することが世のため人のためとは
いえない。

てなわけでマナー講座を開講することにしよう。
第1弾として、「自己解決」について問題提起する。
なお、このコーナーの記事は管理人の独断に基づく記事なので、
世間一般の考えとは違うかもしれない。
私が間違っていたら積極的に議論して欲しい。ただし「荒らし」はやめてね。

掲示板で質問して、暫くしてから「自己解決しました」って書き込む人が多いよね。
きちんと「自己解決しました」って書くことで、掲示板の住人は答えを書く手間が省ける。
だから自己解決したことを伝えるのは間違いではない。

でも、あなたが使っている掲示板はGoogleが巡回している。
あなたが書いた質問はGoogleに見られている。
似たような質問を持った人があなたのいる掲示板にやってくる。
でも、そこの掲示板には答えがないので役に立たない。
訪れた人はあなたを憎む。

だから、自己解決したときは、解決方法も書きましょう。

以上
779デフォルトの名無しさん:2013/06/02(日) 10:05:47.13
はい先生(AAry
780デフォルトの名無しさん:2013/06/05(水) 21:43:45.82
20年近く前のネタだが
ブラームスの演奏データ復元プロジェクト
http://ccrma.stanford.edu/groups/edison/brahms/brahms.html

ここの住人ならもっとうまいことやれないか?
781デフォルトの名無しさん:2013/06/09(日) 06:40:02.83
ブラウザ上で動くMIDIシーケンサもどき『じゃがりん』β1.03
http://www42.atwiki.jp/syugyou/pages/255.html

でけたよ〜
782デフォルトの名無しさん:2013/06/09(日) 21:28:27.13
waveOut系の再生で、初っ端勝手にフェードインするようなんだが、仕様かな?

同じデータをDirectSoundで鳴らしてもそういう現象は無いのだが。

できれば勝手にフェードインをやめさせたい。
783デフォルトの名無しさん:2013/06/13(木) 04:12:30.46
それだけじゃわからん
ソースでもうp
784デフォルトの名無しさん:2013/06/18(火) 19:51:47.74
>>783
理解力無いね
785デフォルトの名無しさん:2013/06/21(金) 01:11:07.28
>>784
じゃ理解力のあるあなたに説明してもらおうか
786デフォルトの名無しさん:2013/08/03(土) NY:AN:NY.AN
ソフトシンセ作ってみました。
http://anago.2ch.net/test/read.cgi/software/1375351613/
787デフォルトの名無しさん:2013/08/07(水) NY:AN:NY.AN
788デフォルトの名無しさん:2013/09/05(木) 11:19:01.71
すっごい初歩的な質問で申し訳ないんだけどこういうのを作る時に使う言語はやっぱりC言語なの?
789デフォルトの名無しさん:2013/09/05(木) 11:53:47.31
こういうのって?
790デフォルトの名無しさん:2013/09/05(木) 12:05:09.38
まぁC/C++が多いんだろうけど
別にJavaでソフトシンセとか作ったっていいんだぜ
今時のCPUパワーなら余裕
791デフォルトの名無しさん:2013/09/05(木) 13:04:59.46
あーごめん説明足りなかった
ソフトシンセとかもっと言えばDAWそのもの

>>790
やっぱりC辺りなのか本買って勉強してみるサンクス
792デフォルトの名無しさん:2013/09/06(金) 22:30:42.83
Cで挫折したら
JavaScriptのWeb Audio API試してみてね
793デフォルトの名無しさん:2013/09/18(水) 23:48:04.52
PreFEstの実装のソースコードってどこかにないですか?
794デフォルトの名無しさん:2013/10/06(日) 19:06:44.70
すっごい初歩的な質問で申し訳ないんだけど基本周波数の推定ってどうやるの?
795デフォルトの名無しさん:2013/10/06(日) 19:32:49.28
FFTして調べたい基音のある帯域のピーク(山)を全て列挙
列挙したピークから倍音成分を必要なだけ取得(3〜5倍音程度?)
倍音の合計レベルが大きい物を基音として採用
倍音成分の乗り方がわかってる音なら合計レベル算出時に係数として加味

あと、このままだとFFTの低音域は制度が悪いので基音ピークの左右のレベルから補正かけてあげる
796デフォルトの名無しさん:2013/10/06(日) 21:04:27.57
基本周波数は、波形の繰り返し周期の逆数になる。

別の言い方をすると、
隣接する2つの倍音の差の周波数が基本周波数になる。

音によっては基本周波数のレベルが低いもの、さらに存在しないものさえある。

また鐘の音のように基本周波数を特定しずらいものもある。

初歩的どころか、とても難しい解題だよ。
797デフォルトの名無しさん:2013/10/07(月) 15:16:01.89
>>794
必要な精度、許される処理時間によってさまざま
FFTですむ精度で良いなら>>795のやり方が簡単
798デフォルトの名無しさん:2013/11/10(日) 16:56:05.94
DSD to PCMは開発経験があり、FIRまたはIIRでローパスフィルターをかけて
目的のサンプリング周波数に間引けばOKですよね。

逆にPCM to DSDの工程がよくわかりません。
とりあえず、2822400HzにアップサンプリングしてLPFをかけることになるのでしょうか?
799デフォルトの名無しさん:2013/11/10(日) 21:12:09.13
とりあえず、ΔΣ変調を調べてみたら?
1次ならすぐできるし感覚をつかみ易いでしょう
高次になるとそれなりに知識が必要になります
800デフォルトの名無しさん:2013/11/10(日) 23:31:53.42
ありがとうございます。
ΔΣ変調を調べてみると難しい言葉ばかりで理解できないのですが、
ノイズシェーピング処理の事をいうのでしょうか。
現状の理解では以下の流れになるのではないかと思っています。

(1)2822400Hzにアップサンプリング
(2)LPF
(3)高次のノイズシェーピング(1次なら理解したつもりです。)
(4)1ビットに変換

高次のノイズシェーピングがさっぱりわかりません。
また何を根拠にdouble型の値を1と0に振り分けているのかも不明です。

アドバイスなどいただけるとありがたいのですが。
801デフォルトの名無しさん:2013/11/11(月) 00:09:17.69
ΔΣでノイズシェープされることまで理解できたら、
ほぼ理解できていることになると思うのですが・・・
次数が高くなると入力信号によって発振する場合が出てくるので
その点のケアをする必要が出てきます
なぜそうなるのかが分からない場合はデジタル信号処理の
勉強をしっかりやり直しましょう
たとえ1次で変換してもS/N比は悪いですが1bitストリームは
作れるのでまずはそれで試してみては?
3次くらいまでは発振の心配はありません
802デフォルトの名無しさん:2013/11/11(月) 22:39:59.71
>>801
ありがとうございます。
とにかくやってみる事にします。
最後に1つだけ、ノイズシェーピングをかけたとしてもdouble型の配列が得られるだけですよね。
何を根拠に1と0に振り分けるのかだけ教えていただけませんか?
803デフォルトの名無しさん:2013/11/12(火) 00:04:50.31
単純に符号で分ければいいと思うけど。
0は0Vの意味ではなく-1を表すシンボルと考えればいいでしょ。
804デフォルトの名無しさん:2013/11/12(火) 00:21:19.19
昔読んだCQ出版の本ではノイズシェーピングは可聴域内で発生するノイズを可聴域外に移す技術だと説明されてました。
ノイズシェーピングを使わずに単に符号で分ける1bitサンプリングではディストーションが掛かった音になってしまうのを
誤差をフィードバックすることで複雑な変化をさせてLPFで取り除けるようにしているってことです。
805デフォルトの名無しさん:2013/11/12(火) 07:57:27.70
>>802
どうやらまだ理解できてないようですね
1bitに丸める場合はただのコンパレートです
なので中央値より大きければ1を出力し最大値からの誤差をフィードバックする
中央値より小さければ0を出力し最小値からの誤差をフィードバックする
というような感じになります
806デフォルトの名無しさん:2013/11/12(火) 21:50:54.00
>>805
ありがとうございます。
要するに、0以上は「1」、0未満は「0」という事になるのですね。
正の数のときは1から引いた値を、負の数のときは-1から引いた値を
次のサンプルに加算するという事になると理解しました。
807デフォルトの名無しさん:2013/11/12(火) 22:44:15.88
>>806
どういたしまして
808デフォルトの名無しさん:2013/11/17(日) 18:53:15.46
>>800
私も数ヶ月前からDSDを始めたばかりなのですが、
(4)のところはサンプリングレート2822400Hzで得られた
double型の演算結果データが正の値ならビットを1に、ゼロ
または負の値ならビットを0にして、1バイトが8ビット(=8個の
double型データに対応)で詰めて並べて、これをDSDデータとして
dsf形式でファイルに書き出したら、とりあえずAudioGateで
再生できました。

よろしければ、お互いゆっくりと楽しみながらやっていきませんか。
809デフォルトの名無しさん:2013/11/17(日) 20:57:43.93
家庭用プリンタでシンセサイザー
http://www1.axfc.net/u/3090551
akiko
810デフォルトの名無しさん:2013/11/17(日) 21:59:32.66
811デフォルトの名無しさん:2013/12/14(土) 16:52:45.90
HTML5でオーディオプログラミングやっている人いませんか?
812デフォルトの名無しさん:2013/12/27(金) 00:08:15.70
友人の結婚式で新郎がギター演奏して、ギター二つあるからってことで式で使ったギターをもらった。
格好良かったから自分もやってみたいところだったが、USBギターケーブルってものを見つけた。
USB GUITAR LINK GUITLINK という製品。
プログラマの端くれとしてはギターの音を拾うプログラムを書いてみたくなったんたけど、
これってどういう仕組みなんだろう?
この機器に関係なく楽器用のAPIとかってあるのかな?
813デフォルトの名無しさん:2013/12/27(金) 02:06:57.85
ADコンバータにそれっぽい名前をつけてるだけでしょ
814デフォルトの名無しさん:2013/12/27(金) 08:35:18.84
>>812
PCや普通のAV機器の入力に直でギター繋ぐなよー、受け側が壊れる場合もある
ttp://www.g200kg.com/jp/docs/dic/impedance.html
815デフォルトの名無しさん:2013/12/27(金) 15:07:40.44
ギターの直出力レベルで機器が壊れるってのは初めて聞いた
816デフォルトの名無しさん:2013/12/29(日) 11:15:14.72
引用:
> 通常のミキサーのマイク入力などにそのまま接続しても正常に音が出ない。

「正常に音が出ない」という表現を「壊れる」と解釈するのは斬新だなw
817デフォルトの名無しさん:2013/12/30(月) 04:53:09.66
音が壊れるってことだろ。
818デフォルトの名無しさん:2014/01/05(日) 16:14:20.64
>>812

まず、音声を機器に取り込むには、マイク入力と、ライン入力 とかあったりする。
どちらも、電圧をオシロスコープで見ると、よくある音声波形が見えるのだが、
2つの違いは、その大きさが違うということ。(詳しく言うと、インピーダンスの違いが大きいが、それはおいておこう)

ところで、コイルに磁石を出し入れすると電圧(電流)を生じるのは分かるかな。
エレキギターも、コイルが入っていて、弦の振動が、電圧になるのだが、微弱すぎるんだ。
そこで、ギター入力可能な端子というのは、ギターの微弱な電気を、増幅させる回路が入っている。
( 詳しくいうと、入力インピーダンスがすごく高い、かつ、増幅率の高いアンプ、というのがポイント)

つまり、USBギターケーブルっていうのは、いろんなPCにもついている音声入力端子 を、
ギターの微弱音に対応させた専用のもの、と覚えておけばよいだろう。
819デフォルトの名無しさん:2014/01/05(日) 16:33:14.29
次に、この音声入力信号を扱うプログラムを書く方法だが、
察しのとおり、PCに入ってきた音声信号は、OSやAPI、ドライバなどがまとめて取り扱う。
自作のプログラムは、用意されたAPIに対して、データのやりとりをして処理を行うこととなる。

なお、USBの信号を、OSやAPIに渡すまでの処理は、機器のメーカーが用意してある。
通常、USBを指したら、ドライバをインストールしてください、って出るだろ?それ。
で、例えばWindows の場合、音声信号を扱うAPIは、何種類かある。

マイクロソフトが標準で用意しているドライバは、
Windows マルチメディアAPI(MME) mmsystem.h
Windows Audio Session API (WASAPI)
DirectSound
など。
でも、マイクロソフトのAPIは、割とどんな機器でも対応できるような仕様で音声信号をまとめるので、
それがいやだ、って言う人のために、楽器用のオーディオドライバも第3者から提供されている。
それが、ASIOとかいうドライバ。


で、ASIOとかに対応したプログラムを書きたいなら、ASIOのSDKを入手して、
asiodrivers.h をインクルードして、、、などとプログラムをすればよいのだが、
一定時間内に処理を終わらせないと音が途切れるなど、各種のオーディオプログラミングテクニックが必要。
820デフォルトの名無しさん:2014/01/05(日) 16:46:47.67
ということで、ギターの音を拾うプログラムをしたければ、
(a) USBギターケーブルと通信するための、USB信号を自分で解析して、自分で制御する
(b) a はメーカーの用意したUSBドライバに任せて、
自分は、そのUSBドライバが対応しているオーディオAPIとやりとりするプログラムを自作する
といったプログラムをすることとなる。

どちらも結構面倒である。 というか (a)は無理。
(a)をやりたければ、ハードウェアの自作から始めた方が早い。

つまり、ギターの音を拾うのはあなたには無理であろう。あきらめなさい。
821デフォルトの名無しさん:2014/01/05(日) 16:48:14.94
だが、ギターの音を拾うところまでは、先人の開発したソフトウェアに任せてしまえば、
そのソフトウェアを使ったプログラミングならば、割と簡単にできる。

例えば、Processing のmimimライブラリを使えば、簡単に音声入力を扱える
http://r-dimension.xsrv.jp/classes_j/minim/

もし、音声エフェクトアプリとかに興味あるのなら、VSTエフェクトの自作とかも探ってみる。
VSTっぽいみたいなのを、簡単にやってみたいなら ↓ とか面白いかも。
http://jvaptools.sourceforge.net/scripteffect/screenshot.htm
Javaの文法で音声エフェクトを簡単にリアルタイムコーディングできて面白い。
822デフォルトの名無しさん:2014/01/05(日) 17:35:31.98
もっというと、ブラウザ上のJavaScriptでギター入力音を扱える時代が来るかもしれない。

ブラウザがオーディオ入力信号を扱うことができれば、
あとは自分のJavaScriptは、そのAPIに対してデータのやりとりとかメソッド実行を行うだけだ。

今のところ Chrome なら、
WebRTC とか WebAudio API を使えば、
オーディオ入力データを getUserMedia()関数で取得できる。
823デフォルトの名無しさん:2014/01/16(木) 02:58:43.07
mp3等の圧縮って先にLPFで帯域制限してるみたいなんだけど
単にフーリエ変換後ある周波数以上のデータを含めないって帯域制限の掛け方できる?
824デフォルトの名無しさん:2014/01/16(木) 03:09:57.75
デジタルフィルターってのが、一般にそれをやってるんじゃないの。
逆フーリエ変換のときに。
825デフォルトの名無しさん:2014/01/17(金) 22:51:27.40
普通にできるけど、逆変換した後にフレーム間の波形のつながりが悪くなるから、
フレームに処理前のサンプルを入れる時点で余分にサンプルをとって、
フレームを重複させながら処理するんだったような。
826デフォルトの名無しさん:2014/03/31(月) 14:53:16.34 ID:OkqtQFpz
インパルスレスポンスの入ってるwaveファイルって
元となる音の一番目のサンプルとインパルスのサンプルの一番目の音を掛け算して
次に元となる音の一番目の音とインパルスの2番目の音と掛けて、元となる2番目とインパルスの1番目を
掛けたものを足すみたいにやってけばいいんですよね?
827デフォルトの名無しさん:2014/04/02(水) 12:23:16.75 ID:FY64sASs
たずねる前に、まずやってみることです。
828デフォルトの名無しさん:2014/04/23(水) 01:22:14.76 ID:Be8/NqvO
テープレコーダーがブームらしいけど、テープレコーダーのノイズや信号ずれの音を再現できないだろうか
829デフォルトの名無しさん:2014/04/23(水) 09:35:49.37 ID:Fk2AHs0t
パンで音の広がりってどうやって再現するんですか?
たくさん右に振ったパンとたくさん左に振ったパンを混ぜると広くて
たくさんを小さくにすると狭いんですか?
あとパンの振ってあるステレオファイルをパンを振るにはどうするんですか?
830デフォルトの名無しさん:2014/04/23(水) 09:45:29.51 ID:5vldvyzp
パン振るだけじゃいわゆる広がりは出ない
ディレイをかける
831デフォルトの名無しさん:2014/04/23(水) 10:22:20.03 ID:ezfyJwXq
位相をずらす
832デフォルトの名無しさん:2014/04/23(水) 10:34:58.59 ID:Fk2AHs0t
位相って右から音がなると右のほうが先に聞こえるってことですよね?
それと広がりとどう関係するんですか?
833デフォルトの名無しさん:2014/04/23(水) 11:06:08.12 ID:GdSWjfVB
単純にそういうわけでもないけど、、
脳が空間を認識するからだろ
834デフォルトの名無しさん:2014/04/23(水) 12:51:33.30 ID:6VikSZRx
横の広がりはディレイ
縦の広がりはリバーブ
835デフォルトの名無しさん:2014/04/30(水) 17:30:57.64 ID:96+BbSAH
ミキサーで加算するとき、信号をソートして小さい方から足していかないと情報落ちが起きますよね
このときの誤差ってどの程度のものなんですか?
836デフォルトの名無しさん:2014/04/30(水) 19:01:17.86 ID:+zw06xcU
>>835
式は思い出せないけど、
計算機イプシロン 情報落ち でググって。
837デフォルトの名無しさん:2014/05/05(月) 11:16:12.48 ID:Mu2ScZdD
その情報落ちより、浮動小数点を整数に直すときのズレが大きすぎるから気にしなくていいよ。
838デフォルトの名無しさん:2014/05/11(日) 11:50:22.46 ID:0MhL7reQ
最近のソフトシンセの機能と音質の凄さに、
「これじゃあ、わざわざ、立派な外部スピーカー買わなくても良いじゃんw」
とさえ考えてしまう俺がいるのであった...。
プロはどう思うか知らんが、素人だと、そこまで考えてしまうくらいだから。
839デフォルトの名無しさん:2014/05/11(日) 11:54:30.79 ID:uVLDDIJF
そうなんだ
ソフトにしろハードにしろシンセで作った
濃厚な音を再現性良く出すには
それなりのスピーカーが必要だと思ってた
840デフォルトの名無しさん:2014/05/11(日) 16:16:19.06 ID:xo7pnJy3
スピーカーの特性を検出して、
信号にその逆特製を施してやるとかできないもんだろうか?
841デフォルトの名無しさん:2014/05/11(日) 16:23:16.03 ID:Kc1eCup4
音場補正ならこういうのあるよ
http://www.ikmultimedia.com/mobile/products/arc/?O=JP

割と安価だし自分でやる必要性は感じないかな
842デフォルトの名無しさん:2014/05/11(日) 16:46:14.09 ID:+P2aAX7z
CONEQとか既にその手の処理は飽和気味だよね
843デフォルトの名無しさん:2014/05/12(月) 13:02:09.34 ID:qGQ9K653
イコライザーっていうものはそういうもののために存在しているわけだが。
844デフォルトの名無しさん:2014/05/12(月) 13:20:51.32 ID:2vYhWLPf
リアルタイムに外からの騒音も消してくれるなら良いんだけど
測定時の部屋の反響程度だよね
845デフォルトの名無しさん:2014/05/12(月) 20:12:08.66 ID:di4+ZeX/
>>843
言われてみれば、等化器か。
正直、調味料的な見方してた。
846デフォルトの名無しさん:2014/05/12(月) 20:33:27.39 ID:eNXkL11P
補正なんてしたら頭動かせなくなるんじゃん?固定器具必要じゃん?
847デフォルトの名無しさん:2014/05/12(月) 22:42:37.82 ID:cG/EbP95
そんなんカメラで位置検出すれば大丈夫だって
848デフォルトの名無しさん:2014/05/13(火) 18:53:31.89 ID:TbMp8/0S
キネクト使えばいけそうやな
849デフォルトの名無しさん:2014/05/18(日) 12:40:16.32 ID:7YUGvOzg
サイン波で少しずつ音を上げていかないとプチっていうんですけど、
波形自体がそういう音の成分を含んでいるのか、スピーカーを通すとそういう音が鳴るのか
どちらですか?
850デフォルトの名無しさん:2014/05/18(日) 13:16:24.42 ID:vXasxGe8
both
851デフォルトの名無しさん:2014/05/18(日) 13:19:50.84 ID:OJTIBpRp
波形の立ち上がり(時間)の事か解像度の荒さの事か分からんけど、

前者ならA点からB点をサイン曲線とかで補間してやれば立ち上がりが若干緩くなる
他のやり方だとオーバーサンプリングして戻してもノイズ消えるんじゃないかな?

後者はそもそも補間してないって話だよね
852デフォルトの名無しさん:2014/06/02(月) 16:32:33.23 ID:2EOO5SfK
元々モノラルお音をステレオに二重化するとき
音を左右大きさ変えて音源移動してるイメージにしたいのに
なかなかうまくいかないわ
853デフォルトの名無しさん:2014/06/04(水) 11:14:33.83 ID:JjkiX3zX
パンを一番左にすると普通左からしか聞こえないけど
実際は右からも聞こえるからな。
反射音なしなら左からしかきこえないってことなんだろうけど。
854デフォルトの名無しさん:2014/06/04(水) 23:03:23.65 ID:ZoWoj1bU
位相をずらす
855デフォルトの名無しさん:2014/11/01(土) 01:49:48.99 ID:i3hu5hPg
音声認識はスレ違い?
856デフォルトの名無しさん:2014/11/01(土) 22:17:04.75 ID:TOmVtt0r
ギリありじゃね
857デフォルトの名無しさん:2014/12/12(金) 03:57:40.57 ID:L50nhIUx
ビブラート入れるプログラムくれー
858デフォルトの名無しさん:2014/12/16(火) 14:13:56.88 ID:mKQuEY+m
道具に頼らず歌の練習しろ
859デフォルトの名無しさん