1read 100read
2012年07月プログラム97: サウンドプログラミング5 (666) TOP カテ一覧 スレ一覧 2ch元 削除依頼
C++相談室 part98 (374)
国産オープンソースDIコンテナSeasar2 その16 (497)
いまだにVC6から離れられない奴の数→ (219)
Visual Studio 2008 Part 21 (734)
懐かしきベーマガの面白かった投稿プログラムを語る (760)
やってて楽しいプログラミング言語は? 3言語 (965)

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


1 :2009/01/11 〜 最終レス :2012/10/29
音のプログラミング処理について語りましょう
各エフェクタの組み合わせとか、
プログラミング外の話題は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 :
用語を統一するために
リアルタイム
 バッチ処理の対語で、ゼロレイテンシの事ではない。 
 遅延はあっても途切れずに処理する事をいう
レイテンシ
 ADCからDACまでにかかる時間の事だったり
 DSPの掛け算なんかで命令から実際に答えが出るまでの命令サイクル数の事だったり
DSP
 デジタル・シグナル・プロセッサ の場合は信号処理用のMPUの事
 デジタル信号処理の事を言う場合もある

3 :
あげ

4 :
音でプログラミングなのかと思った

5 :
ディレイってどうやって作ればいいですか?

6 :
アフリカへ行き部族間対立を煽り負けた者たちを欧米へ拉致る

7 :
>>5
バッファ領域と、バッファの先頭をさすポインタを用意して、ポインタをぐるぐるまわして、読み出しと書き込みをする。

8 :
ディレイタイムとかミックス量とかそういうパラメタはどうするんですか

9 :
出力を一定時間遅延させて(ディレイタイム)一定量掛けて(ミックス量)加算すれば終わりなんじゃないの

10 :
ho

11 :
>>9
入力信号列をx[n]としたとき、y[n]をどう計算すればいいでしょうか?
512サンプル等ずつで計算するんでしょうか?

12 :
>>11
たとえば y[0...n] と、ポインタ p を用意するだろ?
バッファに詰めるのは、y[p] = x; p++; if(p>n)p=0; を動かし続けりゃいいだけ。
取り出すのは、pからディレイタイムに応じたぶんだけ前の部分。y[p-サンプル数]な。

13 :
インパルス応答との畳み込みとかいう事は考えなくていいということですか?
その演算が畳み込みになってるんですかね?

14 :
畳み込み演算を使ってディレイを実現するプログラムを書いてみなよ
そこから0との掛け算の部分を取りのぞいたら>9や>12と同じものが完成
ディレイは文字通りある時間後だけに応答するわけで、畳み込みする間でもない

15 :
>>8
おれはバッファをポインタでぐるぐる循環させて、
循環バッファか(考え方ではFIFOバッファ)
でバッファの長さがディレイタイム
バッファに残すレベルがディレイの音の大きさ
で、2週目以降バッファに書き込むとき前のも
一定割合でミックスしたらフィードバックディレイ
ってやってた

16 :
そういうDSPのソースコードあるとこないかな?

17 :
>>16
そういう?
ディレイだったら俺のだったらあげるけど。
理論書いてあるとこはあるけどね
ライブラリはどこでもありそうだけどね
おれは使わないからしらねけど

18 :
詳細にアルゴリズムを教わっても組めない人は、プログラミングに向かないと思う。
ま、組めない奴は
http://www.musicdsp.org/
でも行け。

19 :
今度はアセンブラのソースが無いとか言い出しそうな勢いだな。

20 :
>>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 :
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ

22 :
ディレイって、単に音が遅れて聞こえるだけじゃなかったのか。

23 :
アナログディレイみたいにハイ落ちを再現したりするとめんどうだけどね

24 :
マイクインやステレオインからリアルタイムに波形を取得する関数ってあるんですか?

25 :
>>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 :
うーむなんかこのスレ新しくなるたびに同じこと繰り返してるよな。
どっかに過去ログまとめたほうがいいかね。

27 :
>>26
うん

28 :
プログラムの勉強をするなら動画圧縮か音声圧縮がいいということでサウンドプログラミングを始めたんですが
全く音の知識は無いんですが、周波数を変更する場合の存在しない中間サンプリング点を打つ場合
直線上に打つのは酷いってのはわかるんですが、補間で曲線上に打っても同じぐらい酷いと思うんですが
これはどうやって打てばいいんですか?

29 :
>直線上に打つのは酷いってのはわかるんですが
ひどくない
たとえばフーリエ変換して周波数成分を欲しい領域に移動して
逆フーリエ変換すれば得られる等

30 :
過去スレでよくフーリエ変換って出てくるので知ってはいるんですが
あれって一定の範囲内ってのがいいかげんで、
しかも途切れが含まれなかったり単音じゃないと酷いと思うんですが
ほんとにこれが主流なんですか?数学と無理やり抱き合わせるんじゃなくて
音専用の予測アルゴリズムとかはないんでしょうか?

31 :
>>28
中間点をとるっていうのは
__ ̄ ̄__ ̄ ̄

___― ̄ ̄ ̄―___― ̄ ̄ ̄
みたいになるっていう意味でしょうか?

32 :
バイリニア補完とかバイキュービック補完とかガウス補完とかシンク補完とかの話?
リアルタイム性の必要な処理なら、足して2で割るのもよく使われるよ。

33 :
>>31
そうです。
>>32
いやニュートンとかスプラインのことをいったんですが、どのみち音に特化してなければ同じですが。
足して2で割るって酷くないですか?間が飛びぬけて山谷になってるかもしれないのに
それって意外な事実ですよね。実際変換ソフトなら全部似たり寄ったりだと思って使ってました

34 :
>>33
あなたがするべき事は実際に大量のデータで統計を取る事だな
音情報である以前にスピーカーを振動させるための電圧である事も考慮しつつ

35 :
>>34
なんか英文を直訳したような文章だな

36 :
>プログラムの勉強をするなら動画圧縮か音声圧縮がいいということで
これの根拠が分からない。ファイル圧縮ならまだ一般的な感じもするが。

37 :
シャノンからやり直せ。

38 :
>>33
サンプリング定理

39 :
>>33
速度を気にしないなら、周波数領域に変換してから間を埋めろ。

40 :
いっつも思うけど、周波数領域に
変換すると、時間分解能みたいのが
ゆるくなるから音質悪くなる希ガス

41 :
>>40
DCT自体は可逆だぜ。
速度やらサイズやらのために細かい部分を捨てることが多いだけで。

42 :
>>41
可逆なのは無限に加算したときだけじゃないの
普通は切り捨てるからそこで音質落ちるんだよ
程度問題だけど人間の耳で分からないレベルで
気にならなければOKでしょ

43 :
音にDCTしてもなぁ…

44 :
>>42
扱うのはデジタルデータなんだから無限に加算する必要なんざねーよ。

45 :
てことは、かなり細かく分割して周波数領域に
変換するってこと?

46 :
ウェーブレットでやれ。

47 :
WDM Kernel StreamingをASIOでラッパーするドライバを作ってみた
AsioKs
http://fanzo.real-sound.net/iCubicProject/

48 :


49 :
DNAはやくリリースされないかな

50 :
DirectNoteAccess?

51 :
ディレイとエコーの違いが分からない orz
ディレイは少し前の入力値を、現入力値に加算
エコーは少し前の出力値を、現入力値に加算
という理解で合ってるのかな・・・

52 :
エコー=リバーブ?

53 :
エコーはこだまだろ
やほーーー、yahoo...

54 :
ディレイもエコーも同じだよ

55 :
俺も>>54と同じ意見。 ディレイ=エコー=やまびこ、で、リバーブが風呂場で音が響く感じ。

56 :
俺の認識では、エコー=風呂場の響き だな。 

57 :
>>56
じゃあ、リバーブはどう認識してるの?w

58 :
エコー
* (ギリシア*kh*)ギリシア神話のニンフ。ヘラの怒りを買って他人のことばを繰り返すことしかできなくなる。ナルキッソスを恋したがその愛を告げられず、苦悩の果てに声だけ残り、こだまになったという。
* (英echo)
1 こだま。やまびこ。
2 残響。
国語大辞典では、↑だそうだよ。
>>56の風呂場でヤッホーと叫ぶと、2、3秒してからヤッホーが戻ってくるのか?w

59 :
リバーブと風呂場は残響というか壁の反響音だよな

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

61 :
ディレイは純粋に遅らせるだけ ドライとの合成は別問題
リバーブは残響
リバーブの実装方法の中にはディレイを用いるものもある

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

63 :
仮にリバーブが出来たとしても、リバーブをかけた時に、聞く人が心地よくなければダメだからむずかしい。
リバーブの製品でも「これ風呂場リバーブじゃん」ってバカにされるからね。

64 :
スプリングエコーって言うのあるじゃん。
あれは山びこじゃなくて、風呂系の響きだよな。

65 :
風呂場で聞けばいいじゃないのもう

66 :
おまいらちょっとはググったらいんでないか
エコーはフィードバックディレイだ
リバーブはディレイタイム(レベルも?)のばらばらな
無数のディレイを加算して再現したりしなかったり
いろんな方法があるみたい
>>64
スプリングリバーブは、昔アナログのころ
バネのある空間に音を飛ばして戻ってきた
音をリバーブとして(ry

67 :
バネのある空間って何だ

68 :
http://gomente.blog.so-net.ne.jp/2007-10-08

69 :
等ラウドネス曲線を扱ったプログラミングがしたいのですが、
調べた限りグラフばかりで、グラフから読み取るのは精度的にも問題ありそうなので、
周波数毎のゲインの数値データが欲しかったりします。
1) Web等で数値データとして配布されていますか?
2) もしなければ下記の仕様書の購入を検討するのですが、
そもそも仕様書自体には数値データは含まれているのでしょうか?
ISO226:2003 http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=34222

70 :
>>69
でかい本屋で立ち読みできるからいってみたら?

71 :
>>71
なるほど、その手が。
ありがとうございます。早速行ってみます。

72 :
あげ

73 :
>>72
そんなさがってた?

74 :
うん、もう海底まじかだったよ

75 :
>>6
それはドゥレイだろ!

76 :
>>75
超遅レス乙

77 :
再生速度の変更ってどうやればいいですか?

2 3 4 5ってデータがあったら
2 2 3 3 4 4 5 5にしたらいいんですか?これで再生速度50%?

78 :
>>77
やってみるといいよ

79 :
>>77
こんなん
23456789   ←6〜9をフェードアウト
   23456789←2〜5をフェードイン

80 :
波形はそのままでサンプリングレートを下げるだけ

81 :
それだと音程も下がるよね

82 :
補完すればいいんじゃね

83 :
>>77
ttp://toragi.cqpub.co.jp/Portals/0/backnumber/2009/01/p202.pdf

84 :
すみません質問ですが、Mpeg-4の規格のドキュメントってどこかにないでしょうか。
mp4の音と映像を分離したいと思っているのですが。

85 :
ttp://www.apple.com/jp/quicktime/technologies/mpeg4/

86 :
mp4のdemuxくらいなら俺だったらmp4boxのソースを参照しちゃうな
ライセンスはLGPLになるが

87 :
>>83
おー、それ買ってみた
今度よもと

88 :
ImageMagickの音版みたいなツール群ってありませんか?

89 :
具体的に、何ができることを期待している?

90 :
>>89
ノーマライズしたり無音部分を取り除いたり
簡単な帯域通過フィルタができたりするコマンドラインツールです

91 :
>>90
つ sox

92 :
>>91
まさにこんなやつです!
さんくす

93 :
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 :
>>93
遅延云々以前に入力と出力を同期させてないように見える
バッファ単位の入力完了イベントでたった今読み取ったバッファを
出力にまわす、という処理をしなくてはならないのに、
入力と出力を同時に走らせてタイミングは運にまかせてるから
録音よりも再生が先行してたまたまバッファまるまる1周分の遅れ
が生じているのでは
waveXXXは使ったことないので推測でしかないが

95 :
InバッファとOutバッファを共有したいのは分かるが
別々に用意してコピーする方がいいかもしらん

96 :
別に分けた所で割り込み間隔が短いと負荷時にあっさり逆転する。
まー、デバイスによるのかもしんないけど、
waveIn/waveOut系は互いに同期取ってるわけでも無いし保証も無かったと思うから
一番短い理論上可能な「1バッファ分のレイテンシ」すら難しいと思うよ。

97 :
>>93
頭が悪すぎてハナシにならない。

98 :
コテハンでいきなり罵倒か。NG対象にしてくれといわんばかりだな

99 :
基地外参上ってアピールしてるんだろ

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
【えっ】Perlに未来はあるのか?【終わり?】 (825)
【汚物】痛い変数名・関数名【破廉恥】 (739)
Google NaCl プログラミング 2mol (281)
いまだにVC6から離れられない奴の数→ (219)
だめです! HSP厨は絶対に犯罪です。 (946)
【えっ】Perlに未来はあるのか?【終わり?】 (825)
--log9.info------------------
◆ KBS WORLD 19 (252)
◆ TBSニュースバード 41 (738)
◆ 時代劇専門チャンネル 12 (714)
無料・開放・ノースクランブル放送 16 (706)
【gravure】 グラドル番組総合スレ 9 【idol】 (866)
◆ 日テレプラス 6 (448)
◆ FOX 21 (899)
◆ MTV JAPAN 23 (738)
◆ AXNミステリー 6 (880)
トーカドーの口調で雑談するスレですので (287)
【AT-X HD!】 アニメシアターX HD! 15 【検証】 (990)
ゲームセンターCX STAGE160 (404)
【南田裕介】拝啓!!鉄道人【森田涼花】 (555)
SKYLAB★6台目 (948)
◆ スーパー!ドラマTV/SDTV 12 (247)
【1・2・3・4】J SPORTS part10 (466)
--log55.com------------------
【SRV】ヤマハ4DN part35【ルネッサ】
バイク板 深夜専用スレ 46号店
【ペリカン君の】原付一種と二種の差9【大冒険】
【SUZUKI】DL1000/650 Part41【V-Strom】
昭和37生まれのライダーの愚痴!8
萩原流行、ポリ公の護送車の不注意で殺されたと判明3
【ヒャッハー!!】北海道のバイク海苔96【プギャー!!】
こんなホテル・旅館・民宿嫌だ!!