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

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

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

1 :デフォルトの名無しさん:2009/01/11(日) 13:43:21
音のプログラミング処理について語りましょう

各エフェクタの組み合わせとか、
プログラミング外の話題は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
俺の認識では、エコー=風呂場の響き だな。 

57 :55:2009/01/26(月) 11:14:09
>>56
じゃあ、リバーブはどう認識してるの?w

58 :55:2009/01/26(月) 11:18:52
エコー
* (ギリシア*kh*)ギリシア神話のニンフ。ヘラの怒りを買って他人のことばを繰り返すことしかできなくなる。ナルキッソスを恋したがその愛を告げられず、苦悩の果てに声だけ残り、こだまになったという。
* (英echo)
1 こだま。やまびこ。
2 残響。

国語大辞典では、↑だそうだよ。
>>56の風呂場でヤッホーと叫ぶと、2、3秒してからヤッホーが戻ってくるのか?w

59 :デフォルトの名無しさん:2009/01/26(月) 11:32:25
リバーブと風呂場は残響というか壁の反響音だよな

60 :55:2009/01/26(月) 11:54:09
だから、教会やコンクリートの部屋や洞窟の複雑な反射音を小さな機械で再現しようとしたのがリバーブなんだよ、ばか。

61 :デフォルトの名無しさん:2009/01/26(月) 12:08:53
ディレイは純粋に遅らせるだけ ドライとの合成は別問題
リバーブは残響
リバーブの実装方法の中にはディレイを用いるものもある

62 :55:2009/01/26(月) 12:09:42
だから、ディレイ=エコー=やまびこのプログラムは簡単だと思う。
パラメーターは、原音にたいし、何秒後に何回返すか、音質をどう変化させていくか、音量をどう変化させていくか、
ぐらいしかないと思う。
リバーブは、原音にたいし、0.01秒後ぐらいから反射が始まって、全体的にワオ〜ンという音を作らなければならないから難しいと思う。俺は全然わからないw

63 :55: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
http://gomente.blog.so-net.ne.jp/2007-10-08

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
>>77
ttp://toragi.cqpub.co.jp/Portals/0/backnumber/2009/01/p202.pdf

84 :デフォルトの名無しさん:2009/02/17(火) 03:00:39
すみません質問ですが、Mpeg-4の規格のドキュメントってどこかにないでしょうか。
mp4の音と映像を分離したいと思っているのですが。

85 :デフォルトの名無しさん:2009/02/17(火) 07:44:34
ttp://www.apple.com/jp/quicktime/technologies/mpeg4/

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
基地外参上ってアピールしてるんだろ

100 :93: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
http://floor13.sakura.ne.jp/book03/book03.html
http://nis-ei.eng.hokudai.ac.jp/~aoki/laboratory04.html

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
>>134
http://infoshako.sk.tsukuba.ac.jp/InfoRes/jdoc/MATLAB5/jhelp/toolbox/signal/fftfilt.html

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
どんだけ無知だよ。。。

144 :129: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
クロスフェードってやつな

147 :129: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してまた窓かけてオーバーラップするからいんじゃね?

152 :148: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

169 :165: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環境があれば試すんだがなぁ

178 :177: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

191 :186: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
だからなにやってんのって話だ

226 :214: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
http://www.google.co.jp/search?hl=ja&q=%E3%83%87%E3%82%A3%E3%82%B8%E3%82%BF%E3%83%AB%E4%BF%A1%E5%8F%B7%E5%87%A6%E7%90%86+%E6%9B%B8%E7%B1%8D

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
http://www.shonan.ne.jp/~hiro-s/pages/post-tut/fm.html
http://homepage3.nifty.com/sawai/neiro/neiro.html
http://flawtips.ami.amigasa.jp/blog/051230.html
http://www.terawave.net/amane/contents/soundworks/
http://d4.princess.ne.jp/msx/datas/OPLL/YM2413AP.html

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
ttp://av.watch.impress.co.jp/docs/news/20091117_329581.html
なんじゃこりゃ?

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
http://laputa.cs.shinshu-u.ac.jp/~yizawa/InfSys1/basic/chap6/index.htm
アニメで見ると分かりやすいね

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
http://embedded.com/design/207400936?pgno=3
こゆ話?

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成分になる。

381 :380: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
自己解決しました

387 :383: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ファイルの情報は何を意味するのかを考えてごらん


397 :393: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
聴感上の音量とかピークとかと耳へのダメージもほど遠いと思うんだ

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

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

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