1read 100read
2012年08月プログラム128: サウンドプログラミング5 (685)
TOP カテ一覧 スレ一覧 2ch元 削除依頼 ▼
関数型言語ML (SML, OCaml, etc.), Part 6 (593)
Visual Studio IDE環境 (566)
D言語 Part30 (723)
Ruby 初心者スレッド Part 50 (726)
C言語なら俺に聞け(入門編)Part 110 (939)
★★ Java の宿題ここで答えます Part 72 ★★ (465)
サウンドプログラミング5
- 1 :2009/01/11 〜 最終レス :2012/11/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 :
- 用語を統一するために
リアルタイム
バッチ処理の対語で、ゼロレイテンシの事ではない。
遅延はあっても途切れずに処理する事をいう
レイテンシ
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元 削除依頼 ▲
プログラミング言語 Scala 8冊目 (607)
★★ Java の宿題ここで答えます Part 72 ★★ (465)
SSE AVXのプログラミング (744)
関数型言語Part5 (890)
プログラム板 自治スレッド Part5 (850)
【SL4】Windows Phone 7 アプリ開発スレ Part4【XNA】 (232)
--log9.info------------------
【寝る寝る】高橋幸宏・総合スレpart32【詐欺】 (433)
【NAKED SUN】森重樹一【ELECTRIC MOON】 (894)
【CM王子】HARCO Vol.4【マルチプレーヤー】 (644)
ジャンクフジヤマ 1st (634)
LEO今井 -LEOIMAI- 2 (973)
唄い屋 清木場俊介 66 (272)
★☆★HARRY part12★☆★ (435)
【支えてるのは】河村隆一vol.42【年金世代】 (294)
☆★松下優也 12★☆ (717)
高橋徹也 その6 (470)
【もう少し】中西圭三【時間を下さい・・・】 (374)
【安奈2012】甲斐よしひろ2【来年も甲斐バンド 】 (861)
☆☆☆前山田健一[6]ヒャダイン☆☆☆ (276)
【未来】KIYOSHI【Angel of mine】 (278)
加藤和樹47 (854)
スネオヘアー part62 (230)
--log55.com------------------
【エロ目線】ラグビーWC 準々決勝「日本×南アフリカ」
審判にいくら払ったの?
戦犯を決めよう!
日本の恥のラグビー日本代表はもう日本に帰ってくるな!!
結局敗因はなんだったの??
【 とにかく鬼マターリスレ 】ラグビーWC2019 準決 日本×南アフリカ★3
ラグビーワールドカップ2019 準々決勝「日本×南アフリカ」★41 大大大大大反省会
サンデースポーツ2020 ★2
-