1 :
デフォルトの名無しさん :
2009/01/11(日) 13:43:21
2 :
デフォルトの名無しさん :2009/01/11(日) 13:43:52
用語を統一するために リアルタイム バッチ処理の対語で、ゼロレイテンシの事ではない。 遅延はあっても途切れずに処理する事をいう レイテンシ ADCからDACまでにかかる時間の事だったり DSPの掛け算なんかで命令から実際に答えが出るまでの命令サイクル数の事だったり DSP デジタル・シグナル・プロセッサ の場合は信号処理用のMPUの事 デジタル信号処理の事を言う場合もある
3 :
デフォルトの名無しさん :2009/01/11(日) 19:27:14
あげ
音でプログラミングなのかと思った
5 :
デフォルトの名無しさん :2009/01/11(日) 21:47:35
ディレイってどうやって作ればいいですか?
アフリカへ行き部族間対立を煽り負けた者たちを欧米へ拉致る
>>5 バッファ領域と、バッファの先頭をさすポインタを用意して、ポインタをぐるぐるまわして、読み出しと書き込みをする。
8 :
デフォルトの名無しさん :2009/01/11(日) 23:24:34
ディレイタイムとかミックス量とかそういうパラメタはどうするんですか
出力を一定時間遅延させて(ディレイタイム)一定量掛けて(ミックス量)加算すれば終わりなんじゃないの
ho
>>9 入力信号列をx[n]としたとき、y[n]をどう計算すればいいでしょうか?
512サンプル等ずつで計算するんでしょうか?
>>11 たとえば y[0...n] と、ポインタ p を用意するだろ?
バッファに詰めるのは、y[p] = x; p++; if(p>n)p=0; を動かし続けりゃいいだけ。
取り出すのは、pからディレイタイムに応じたぶんだけ前の部分。y[p-サンプル数]な。
インパルス応答との畳み込みとかいう事は考えなくていいということですか? その演算が畳み込みになってるんですかね?
畳み込み演算を使ってディレイを実現するプログラムを書いてみなよ そこから0との掛け算の部分を取りのぞいたら>9や>12と同じものが完成 ディレイは文字通りある時間後だけに応答するわけで、畳み込みする間でもない
>>8 おれはバッファをポインタでぐるぐる循環させて、
循環バッファか(考え方ではFIFOバッファ)
でバッファの長さがディレイタイム
バッファに残すレベルがディレイの音の大きさ
で、2週目以降バッファに書き込むとき前のも
一定割合でミックスしたらフィードバックディレイ
ってやってた
そういうDSPのソースコードあるとこないかな?
>>16 そういう?
ディレイだったら俺のだったらあげるけど。
理論書いてあるとこはあるけどね
ライブラリはどこでもありそうだけどね
おれは使わないからしらねけど
今度はアセンブラのソースが無いとか言い出しそうな勢いだな。
>>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 参考にしてみます
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
ディレイって、単に音が遅れて聞こえるだけじゃなかったのか。
アナログディレイみたいにハイ落ちを再現したりするとめんどうだけどね
マイクインやステレオインからリアルタイムに波形を取得する関数ってあるんですか?
>>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
うーむなんかこのスレ新しくなるたびに同じこと繰り返してるよな。 どっかに過去ログまとめたほうがいいかね。
28 :
デフォルトの名無しさん :2009/01/16(金) 06:15:59
プログラムの勉強をするなら動画圧縮か音声圧縮がいいということでサウンドプログラミングを始めたんですが 全く音の知識は無いんですが、周波数を変更する場合の存在しない中間サンプリング点を打つ場合 直線上に打つのは酷いってのはわかるんですが、補間で曲線上に打っても同じぐらい酷いと思うんですが これはどうやって打てばいいんですか?
>直線上に打つのは酷いってのはわかるんですが ひどくない たとえばフーリエ変換して周波数成分を欲しい領域に移動して 逆フーリエ変換すれば得られる等
30 :
デフォルトの名無しさん :2009/01/16(金) 10:44:04
過去スレでよくフーリエ変換って出てくるので知ってはいるんですが あれって一定の範囲内ってのがいいかげんで、 しかも途切れが含まれなかったり単音じゃないと酷いと思うんですが ほんとにこれが主流なんですか?数学と無理やり抱き合わせるんじゃなくて 音専用の予測アルゴリズムとかはないんでしょうか?
>>28 中間点をとるっていうのは
__ ̄ ̄__ ̄ ̄
が
___― ̄ ̄ ̄―___― ̄ ̄ ̄
みたいになるっていう意味でしょうか?
バイリニア補完とかバイキュービック補完とかガウス補完とかシンク補完とかの話? リアルタイム性の必要な処理なら、足して2で割るのもよく使われるよ。
33 :
デフォルトの名無しさん :2009/01/16(金) 14:50:50
>>31 そうです。
>>32 いやニュートンとかスプラインのことをいったんですが、どのみち音に特化してなければ同じですが。
足して2で割るって酷くないですか?間が飛びぬけて山谷になってるかもしれないのに
それって意外な事実ですよね。実際変換ソフトなら全部似たり寄ったりだと思って使ってました
>>33 あなたがするべき事は実際に大量のデータで統計を取る事だな
音情報である以前にスピーカーを振動させるための電圧である事も考慮しつつ
>プログラムの勉強をするなら動画圧縮か音声圧縮がいいということで これの根拠が分からない。ファイル圧縮ならまだ一般的な感じもするが。
シャノンからやり直せ。
>>33 速度を気にしないなら、周波数領域に変換してから間を埋めろ。
いっつも思うけど、周波数領域に 変換すると、時間分解能みたいのが ゆるくなるから音質悪くなる希ガス
>>40 DCT自体は可逆だぜ。
速度やらサイズやらのために細かい部分を捨てることが多いだけで。
>>41 可逆なのは無限に加算したときだけじゃないの
普通は切り捨てるからそこで音質落ちるんだよ
程度問題だけど人間の耳で分からないレベルで
気にならなければOKでしょ
音にDCTしてもなぁ…
>>42 扱うのはデジタルデータなんだから無限に加算する必要なんざねーよ。
てことは、かなり細かく分割して周波数領域に 変換するってこと?
ウェーブレットでやれ。
47 :
デフォルトの名無しさん :2009/01/17(土) 08:36:00
48 :
デフォルトの名無しさん :2009/01/19(月) 18:19:02
あ
DNAはやくリリースされないかな
DirectNoteAccess?
ディレイとエコーの違いが分からない orz ディレイは少し前の入力値を、現入力値に加算 エコーは少し前の出力値を、現入力値に加算 という理解で合ってるのかな・・・
52 :
デフォルトの名無しさん :2009/01/25(日) 15:10:53
エコー=リバーブ?
エコーはこだまだろ やほーーー、yahoo...
ディレイもエコーも同じだよ
55 :
デフォルトの名無しさん :2009/01/25(日) 23:34:17
俺も
>>54 と同じ意見。 ディレイ=エコー=やまびこ、で、リバーブが風呂場で音が響く感じ。
俺の認識では、エコー=風呂場の響き だな。
57 :
55 :2009/01/26(月) 11:14:09
58 :
55 :2009/01/26(月) 11:18:52
エコー
* (ギリシア*kh*)ギリシア神話のニンフ。ヘラの怒りを買って他人のことばを繰り返すことしかできなくなる。ナルキッソスを恋したがその愛を告げられず、苦悩の果てに声だけ残り、こだまになったという。
* (英echo)
1 こだま。やまびこ。
2 残響。
国語大辞典では、↑だそうだよ。
>>56 の風呂場でヤッホーと叫ぶと、2、3秒してからヤッホーが戻ってくるのか?w
リバーブと風呂場は残響というか壁の反響音だよな
60 :
55 :2009/01/26(月) 11:54:09
だから、教会やコンクリートの部屋や洞窟の複雑な反射音を小さな機械で再現しようとしたのがリバーブなんだよ、ばか。
ディレイは純粋に遅らせるだけ ドライとの合成は別問題 リバーブは残響 リバーブの実装方法の中にはディレイを用いるものもある
62 :
55 :2009/01/26(月) 12:09:42
だから、ディレイ=エコー=やまびこのプログラムは簡単だと思う。 パラメーターは、原音にたいし、何秒後に何回返すか、音質をどう変化させていくか、音量をどう変化させていくか、 ぐらいしかないと思う。 リバーブは、原音にたいし、0.01秒後ぐらいから反射が始まって、全体的にワオ〜ンという音を作らなければならないから難しいと思う。俺は全然わからないw
63 :
55 :2009/01/26(月) 12:24:27
仮にリバーブが出来たとしても、リバーブをかけた時に、聞く人が心地よくなければダメだからむずかしい。 リバーブの製品でも「これ風呂場リバーブじゃん」ってバカにされるからね。
スプリングエコーって言うのあるじゃん。 あれは山びこじゃなくて、風呂系の響きだよな。
風呂場で聞けばいいじゃないのもう
おまいらちょっとはググったらいんでないか
エコーはフィードバックディレイだ
リバーブはディレイタイム(レベルも?)のばらばらな
無数のディレイを加算して再現したりしなかったり
いろんな方法があるみたい
>>64 スプリングリバーブは、昔アナログのころ
バネのある空間に音を飛ばして戻ってきた
音をリバーブとして(ry
バネのある空間って何だ
>>69 でかい本屋で立ち読みできるからいってみたら?
>>71 なるほど、その手が。
ありがとうございます。早速行ってみます。
72 :
デフォルトの名無しさん :2009/02/06(金) 15:52:38
あげ
うん、もう海底まじかだったよ
77 :
デフォルトの名無しさん :2009/02/13(金) 12:54:22
再生速度の変更ってどうやればいいですか? 2 3 4 5ってデータがあったら 2 2 3 3 4 4 5 5にしたらいいんですか?これで再生速度50%?
>>77 こんなん
23456789 ←6〜9をフェードアウト
23456789←2〜5をフェードイン
波形はそのままでサンプリングレートを下げるだけ
それだと音程も下がるよね
補完すればいいんじゃね
84 :
デフォルトの名無しさん :2009/02/17(火) 03:00:39
すみません質問ですが、Mpeg-4の規格のドキュメントってどこかにないでしょうか。 mp4の音と映像を分離したいと思っているのですが。
mp4のdemuxくらいなら俺だったらmp4boxのソースを参照しちゃうな ライセンスはLGPLになるが
ImageMagickの音版みたいなツール群ってありませんか?
具体的に、何ができることを期待している?
>>89 ノーマライズしたり無音部分を取り除いたり
簡単な帯域通過フィルタができたりするコマンドラインツールです
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 アルゴリズムによる遅延を解消したいです.
よろしくお願いします.
>>93 遅延云々以前に入力と出力を同期させてないように見える
バッファ単位の入力完了イベントでたった今読み取ったバッファを
出力にまわす、という処理をしなくてはならないのに、
入力と出力を同時に走らせてタイミングは運にまかせてるから
録音よりも再生が先行してたまたまバッファまるまる1周分の遅れ
が生じているのでは
waveXXXは使ったことないので推測でしかないが
InバッファとOutバッファを共有したいのは分かるが 別々に用意してコピーする方がいいかもしらん
別に分けた所で割り込み間隔が短いと負荷時にあっさり逆転する。 まー、デバイスによるのかもしんないけど、 waveIn/waveOut系は互いに同期取ってるわけでも無いし保証も無かったと思うから 一番短い理論上可能な「1バッファ分のレイテンシ」すら難しいと思うよ。
コテハンでいきなり罵倒か。NG対象にしてくれといわんばかりだな
基地外参上ってアピールしてるんだろ
100 :
93 :2009/03/09(月) 22:03:47
>>94 私自信 wave*** を使い始めたばかりなので
(それが免罪符だとは考えていませんが)
よく分かりません.検討致します.
>>95 ありがとうございます.
それは何故でしょうか?
>>96 「1バッファ分」が理想的ですが,
用意したバッファ分のレイテンシとなる事が避けられたら満足です.
>>97 解決策が分かるのですね.
お暇な時にアドバイスをお願いします.
WinXPで音楽のテンポを変更する処理を実装したいです。 音楽が入ったWAVファイルの音程を変えずにテンポを変えたいです。 普通はどのように実装するものでしょうか? WAVEFORMATEX のサンプリングレートを変更するとテンポは変わりますが音程も変わってしまいます。
タイムストレッチとかそのへんのキーワードでぐぐってみれば
音程を変えずにテンポ変えるのって難しいよね
単純に考えればテンポを下げるときは波形データを間引きし テンポを上げるときは波形データを2倍した後間引きするとか 音質は保証の限りではないが
スレ毎に同じ質問が繰り返されてる気がするw テンプレ化か、FAQとサンプルソースのwikiとかあった方がいいのかねぇ
テンプレが増えてきたら、wikiあると便利だろうね
だな。ろくに知りもしないのに見当違いの回答しちゃう人が混ざってる点も同じ
じゃ正しいソースください
>>105 って
200Hzの音を2倍速にするとき
10msに一度30万ステップの自己相関するん?
リアルタイムだと厳しそうね
???
>>113 そうしないと元の音との互換性が低くなるだろ
>>113 ディレイっぽく聞こえるのを低減させるために
オーバーラップさせる時間を周期性としてる
周期性を求めるのに自己相関使ってるのは
FFTに比べ低音を考慮したときの精度がいいからとか
実装が楽だからとかじゃね
>>101 それって結構難しいのよ
論文読むのがいいかなぁ…
聴いた感じでは十分とは言いがたい
単音ならまだしも 音楽となるとMIDIのようなソースレベルでテンポを変えないと無理だろ
そこをなんとかするのがサウンドプログラミング
適当な区間ごとに離散フーリエ変換で周波数解析して それを合成すればなんとかなるかもしらん
>>122 それはむずかしい
un4seenってとこのライブラリ
たしかオープンソースの再生速度変更が
けっこう優秀。
WMPより優秀と思う
FFTのポイント数を増やすのはダメ? ゼロ詰めしたりフレーム長を増やしたりしてね.
>>124 ・FFT結果から山を見つけて頂点を補完
・各音階に属する周波数成分で平均化(画像縮小アルゴリズムの面積平均法みたいな感じ?)
サイトの画像見る限りでは低音の精度は粗いからFFT後になんか処理してると思われ
ローパスフィルタで分けてから低音域だけ取り出すとか
129 :
デフォルトの名無しさん :2009/03/27(金) 05:51:08
すみませんタイム(ピッチ)シフトを実装したいのですが、 質問させてください。 速度とともにピッチが変更されてもかまわないのですが、 たとえば98%遅くするなど、単純な整数比ではない場合はどう実装すればよいのでしょうか。 アップサンプリング/ダウンサンプリングの手法ではこれは実現できないのでしょうか? 80%〜120%の間で、速度を変更したいです。 よろしくお願いします。
ピッチも変わっていいならTimidityのソースを見てみたら?
ほんとは間引く前にローパスフィルタだっけ? あれかけないとノイズがでることがある
いらない
FIRフィルタをそのまま実装するのと、 同じ係数で短時間FFTしてオーバーラップするのとは 同じ事でしょうか? 異なる場合は、どのような点が異なるのでしょうか?
135 :
デフォルトの名無しさん :2009/04/08(水) 18:02:31
VSTでイコライザを作ってます。 RBJ Audio-EQ-Cookbook見ながらピーキングフィルタを使ってシングルバンドのEQらしきものは実装できました。 これをLOWとHIGHの2バンドにしようとしてるのですがうまくいきません。 この場合、どんなふうにコードを書けばいいのでしょうか?
ピーキング2つって意味ならIIRフィルタ2つ作ってに直列に通す トンコロ的な、2~3バンドで全体を調整できるようなものにしたいなら シェルビングタイプ2つにして直列に通す
>>138 ありがとうございます。
ピーキング2つを並べてLOW,HIGHの順でやってるんですが、
LOWの効きがシングルのときよりかなり弱く(効いてない?)なってしまうんです。
「直列」っていうのをちゃんとプログラミングできてないんですかね・・・
ASIO対応の録音再生ソフトって、素人では作れないですか?
そんなことないでしょ、どうしてそう思った?
商用ソフトしか存在しないから。 なんか、ASIOSDKがあるらしいので、入手できた。
どんだけ無知だよ。。。
144 :
129 :2009/04/25(土) 17:54:51
>>130 亀ですみませんが、ありがとうございます。
100*nサンプルを再生バッファに入力した後、2*nサンプルもどってバッファを入力する処理を実装してみたのですが、
再生時にノイズが乗ってしまいました。
波形の接続部分がきれいに合わないためだと思うんですが、
これにローパスフィルタをかければノイズは消えるものなのでしょうか。
それとも僕の方法がまちがっていますか?
こわれたテーププレーヤーのような効果をデジタルで実装するのに他に何か有効な方法はないでしょうか。
よろしくお願いします。
クロスフェードってやつな
147 :
129 :2009/04/25(土) 19:04:13
>>145 おおお、ありがとうございます。
なるほどお, この本買って読んでみます。
>>135 便乗ですまんけど、
FFTは暗黙に処理範囲の両端が繰り返すけど、FIRだと繰り返さないよね
ブロック処理ってそのあたり大丈夫なのかな?
質問が曖昧でなにが大丈夫なんだ? FIRだと切れ目無くできるからいいけど FFTはぶった切るから窓関数+最後 オーバーラップが必要ってことか
FIR相当の処理をFFTでやると、両端がループしてるから区間の最後の方の 計算値が区間の最初の方に影響するってことだろJK
周波数成分いじって逆FFTしてまた窓かけてオーバーラップするからいんじゃね?
152 :
148 :2009/04/28(火) 00:21:42
分かりやすくするために極端な例だけど、例えば前半全てゼロ、 後半ピンクノイズみたいな波形があって、それをFFTして周波数成分を 操作して戻すと、ゼロだった前半部に微小な波形が出るよね。 要するにプリエコー、ポストエコーなんだけど、 これはオーバーラップだと解決できないと思うんだ。
感覚でものを言っちゃいかん 数式で検証してくれ
Androidでサウンド系アプリ作った人いる?
157 :
デフォルトの名無しさん :2009/04/29(水) 04:49:22
>>149 一回の計算についてはFIRもFFTと同じくブロック処理以外の
何ものでもないのだが?
どちらも対象の有限長のブロック以外は全然計算対象に入っ
ていない。
FIRの代わりにFFTを使う時、FIRでの場合と同じように1サン
プルづつずらしてFFTを行い、その結果を正しく評価すれば
FIRでの場合と同じ結果が得られるんじゃない?
ただ、それだと普通にFIRやるよりも計算量が増えるので、
それをひっくり返す手法としてオーバーラップ法があるの
だと理解してるが?
>>157 てことは、オーバーラップは単に計算量対策で、
FIRとFFT+オーバーラップは本来は代替不可能ってことか。
>>157 一回の計算についてはプログラミング上
ブロック処理にしてもしなくても
出力はFIRならいっしょだからそれは考えないとして。
FIRとFFTの違いはサンプル数の違いがでかくないか?
FFTはサンプル数でかくしないと周波数領域で操作できる
周波数ステップ荒くなるし
FIRは少なくてもある程度できる。
サンプル数大きくするとそれだけFFTの計算に入れる時間が
大きくなるから時間分解能下がる
FIRはリアルタイム処理だから時間分解能最大。
それでサンプル数が一緒での議論だと、
FFTは実際(データが何かにもよるけど)窓関数とかかけなきゃ
だめだからそれだけデータ量そこでへっちゃうから、
最終処理後のデータの品質さがる
だから目的に合わせて選べばいんでは
>>159 いまいち良くわからんのだが、、
>FFTはサンプル数でかくしないと ... FIRは少なくてもある程度できる。
同じステップ数として、FFTの時間領域で、FIRフィルタの
設計上のカーブを各点で取ったフィルタ処理は違うもの?
違うとすればどの辺りが?
> サンプル数大きくすると ... 大きくなるから時間分解能下がる
時間分解能はサンプリング周波数で固定だと思うけど、、、
短時間FFTのオーバーラップ回数が少なくなるってこと?
> FFTは ... それだけデータ量そこでへっちゃうから、
データ量は減らないと思う。
>>160 FFT/FIRの基本的な仕組みすら理解出来てねーだろお前。
159の説明は波形処理の基礎だぞ。
まずは自分で調べて考えろ、なんでも聞いて済まそうとすんな。
>>161 ただ罵倒するだけのレスは無価値ですよ、いつもの方。
>>160 あの、
ここでの説明だとあれだから本買ってきた方がいいよ。
最初の方は強いて言えば違わないけど、
それぞれの癖とか特徴とかできることできないことあるから
目的に応じたいい方をえらべよ
二つ目は
>サンプル数大きくするとそれだけFFTの計算に入れる時間が
>大きくなるから時間分解能下がる
これはFFTの時間分解能だから。
160が言ってるのは多分サンプリング定理とかそこら辺の
波形のデジタル化の時の時間分解能の事をいってるんかな?
FFTの原理とか時間領域-周波数領域のサイトとか本とかみればわかると思うけど
みつめ
何バイトとかのデータ量はへらないけど、なんというか削ってるんだから論理的な
データ量は減るよね?
たとえばwav->mp3圧縮の時みたいな感じで
たとえばデータを波形ととらえて周波数領域に変換して周波数高い一部分を少なくして
時間領域に戻してもバイトは変わらない。でも何か(なんらかの情報)は減っている。
>>163 うーん……難しくていいので正確に書いてもらえると嬉しいです。
理解してるとかしていないのかという問題よりも、163の説明の中の
一つ一つの用語が式とか定理のうち具体的に何を指しているのかが曖昧すぎて分からない。
> FFTの時間分解能
>>160 の時間分解能は指摘の通りデジタル化の際の時間分解能です。
で、説明だとFFTという変換自体にに時間分解能ってパラメータなり特性が存在するんですよね?
> データ量
窓かけの周波数特性でサイドローブが出る話ですよね。
歪みは出ると思いますが、それが情報が減っているということ?
165 :
デフォルトの名無しさん :2009/04/30(木) 05:43:39
>>159 >FFTはサンプル数でかくしないと周波数領域で操作できる
>周波数ステップ荒くなるし
>FIRは少なくてもある程度できる。
そんなことない。
「NタップのFIR」は「サイズNのFFT+周波数領域での積和演算」
と等価でしょ?
>>165 「ある程度」だから実用性を考えての
ことだよ
小さいタップ数で同じ事ができるんだったら
小さい方がいいだろ
>>164 一般的なFFTの話だが
FFTはサンプル数を大きくすれば周波数分解能はあがるが、
それだけ時間領域でも…
たとえば音楽だと22050hz、4096FFTだと一回のFFTで
4096サンプル=0.185秒分のデータが必要になる
音楽だと0.185秒だとテンポの速い音楽だと音符が2個分
含まれていることもあるかもしれない。(極端な話)
上のFFTだと5.38hzごとの周波数領域のデータだ。
このようにFFTではサンプル数を大きくすれば得られる周波数データの
hzの間隔は少なくなり詳しく得られるが、それだけたくさんの時間を
計算に組み入れなければならないので、いらないデータも含まれるかも
しれない。sin波だったらずっと同じだからいいけど、PCMなんかだと
刻一刻と周波数成分が変わっていってるので(音楽なので刻一刻と
かわらないとおかしいが)一回の計算にいれる時間は少ない方が
その時点の周波数は正確に表れる。
この文を読めばFFTの時間分解能、周波数分解能の意味は
なんとなくわかるだろ
>>167 いやそれはとっくに分かってるんだが・・・
ピッチ検出ならゼロクロスなりケプストラムなり使うし。
で、そもそもの疑問である
>>163 > 最初の方は強いて言えば違わないけど、
これをkwsk
169 :
165 :2009/05/02(土) 05:33:05
>>166 >小さいタップ数で同じ事ができる
俺はそんなことは出来ないと理解してるのだが?
便乗レスだけど、
>>168 NタップのFIRをFFTで実装しようとすると時系列データもN用意して
Circular ConvをConvにするため最低Length=2N+1のDFTを行う必要がある。
(信号分析しないから窓掛けしないとする)
DFT自体は丸め誤差とかを除いたら単なる座標変換だから周波数領域での掛け算も
時間領域の畳み込みも等価なんだけど、フレーム単位で処理する必要があるから
出力時には最低Nサンプルの遅れがある。
反面、FIRだと過去Nサンプルのバッファを用意して置けば新しいサンプルが入ったときに
バッファからフィルタの出力をその時点で得られる。
同じ性能を発揮するのに必要なタップ数が変わることはありえないし、
時系列でFIRを処理するから周波数分解能が云々とか、それを座標変換した
領域で作業するから周波数分解能が云々ってないし、考慮する要件は数理的なものよりも
処理時間やFFT-IFFTするオーバーヘッドや誤差への許容に関すること。
更に言えば、Portaudioみたいに最初にデータをバッファにためてバッファがいっぱいになったら
コールバックを呼ぶようなやつだったら、正直FIRを時間ドメインでやろうが周波数でやろうが
変わらない。
リアルタイム性を重視するフィルタだったらFIRを時系列で畳み込む方がいい場合もある。
特にタップ長が短い場合。
質問いい? VistaでWin32APIのmidiOut〜系でMIDIを出力しているんだが、 どうにも我慢ならないほどの遅延が発生する(200ms程度)。 出力先をデフォルトのMIDIマッパーの代わりに、Timidity++→ASIOにしても同程度の遅延が発生するので、 多分APIに問題があるんだと思う。 そこで、他のAPIに乗り換えようかと思ったんだが、 DirectMusicは消滅した上に64bitアプリで使えないようなので、 他の選択肢が欲しい。 なんかないかな?
MIDIならしょうがない
しょうがないのか。 適当な音源自前で実装するか……サンクス。
Timidity++側、ASIO側にバッファがあれば同様の遅延は発生するだろ APIを疑う前になぜMIDIインタフェース+外部音源の組み合わせで試さないのか不思議だな
>>171 少なくともXPまでの環境でmidiOutで200msecも遅延するとか聞いたこと無い
Vistaのドライバとかの問題だと思うが、ソフトMIDI音源とかで試してみた?
>>174 外部音源とか持ってねーよwwww
Timidity++のGUIからmidiファイルを再生してみたけど、たぶん遅延してない。
>>175 全く違うハードウェア構成の2台のVistaで同様の遅延が発生してる。
で、さっきXPマシンで試験したけど遅延しない。
何ヶ所かの英語フォーラムで、Vistaだと遅延が発生するという報告があるのよ。
いや、MIDIファイルの再生じゃ遅延してるかどうかなんて分からんだろう・・・ なんにせよmidiOUtの問題じゃないと思うんだが VISTA環境があれば試すんだがなぁ
178 :
177 :2009/05/21(木) 13:36:32
ソースが公開されてるDAWやシーケンサがMIDIをどう発音しているか確かめたら? あとTimidity++自体に遅延があるからASIOを使ってもMSGSより遅いぞ
180 :
デフォルトの名無しさん :2009/05/31(日) 17:26:05
ogg vorbisのエンコードについて詳しく書かれたサイトありますか? 公式見ても初期化部分しか書かれてなくて何をすればいいのかすらわからん
>>180 oggのlibならexamplesディレクトリに encoder_example.c があると思うけど、それじゃだめなん?
ogg vorbisのエンコード上手くいかない・・・
自作のフィルターを組んでメモリ上に全てのデータを置いてランダムアクセスで メモリ上を飛び回って処理をしているのですが、音源の時間に比べて20倍の処理速度が掛かります。 DSPとやらを使えばもっと高速にできるらしいのですが、どうやって使えばいいのでしょうか? Google先生に効いてもネット上に資料はあまりなく、困っています。 VC++9.0SP1を使ってプログラミングをしています。誰かVC++からのDSPの使い方を教えてください。
とりあえずどんなフィルタか書かんと DSPは単純な演算を高速に(あるいは並列に)こなすものだから 処理の種類によっちゃ効果がない
>>183 どんなマシン使って20倍なのかわからないけど、
最近のPCでそのスコアならアルゴリズムから見直さないとどのみち無理な気が。
一言にDSPっていってもピンキリだし、PCから使うならどこかの評価ボードみたいなの買うしかないんじゃないかな?
本気でDSPに手出すなら開発キット&コンパイラで数十万、仕事じゃないなら個人に販売してくれるかってのも微妙な所。
たぶん想像してるよりもはるかに敷居高いと思う。
波形処理の高速化なら一番お手軽なSIMDに手出してみれば?
モノによっては5〜10倍くらい期待出来る。
G.722とG.722.1 Cの、GPL/LGPLでないソースを探していますが、どこにありますか?
誰かにそのソースを渡す アルゴリズムと定数だけそいつから聞き出して自分で実装する
そして定数の中にGPLの文字がひっそりと含まれていて自爆するわけですね
189 :
デフォルトの名無しさん :2009/06/09(火) 21:05:53
ogg vorbis以外で意匠フリーでブロードキャスト向けの音声圧縮ってありますか?
189!=186と仮定して、G.722
191 :
186 :2009/06/11(木) 12:55:56
結局Speex使うことにしました
スペアナ作りたいですが、窓掛けしてFFTして絶対値取れば完成ですか?
いや、表示せんと。
テキストで吐けば十分 リアルタイムじゃないなら
すいません。 WindowsXPでサウンドデバイスを2つ以上インストールしているマシンがあるとします。 再生デバイスと録音デバイスにそれぞれ別の物を設定しているとして、 録音デバイスから入力した音声をそのままダイレクトに再生デバイスから出力させることは できますか?
OS上の機能では無理だったと思うよ。 プログラム作っていいなら AudioIn → プログラム → AudioOut は簡単に実装できる。 まぁ、レイテンシは発生してしまうけど。 Virtual Audio Cable とか既存のツール使ったらプログラム組まなくても簡単にいけるかな。
やる気がなければ帰れ。
>>197 テストアプリ書いてデバッガなりコマンドプロンプトなりに変換結果出してみるとかやってみた?
サイン波形なりを食わしてみればすぐ理解できる
>>197 のプログラムをコンパイルするとkが初期化されてない警告が出るんですけど、
これは0 で初期化して問題ないですか?
あと、iter は何の値なんでしょうか??
んー、一通り目通せばすぐ気付くだろうに、ホントにやる気ないのな fft2(), fft2x()のjのforループでkは使われてない→たぶんコピペって k += nmax を消し忘れ iterはループ回数の演算省略用じゃね? 0渡せば勝手に計算するようになってるだろ
RolandのVariPhraseってあるじゃん あれってなにがすごいの?
>>202 当時のチップの速度でリアルタイムにピッチやらフォルマントやらを操作して、それをもとに音作りできるところ。
204 :
デフォルトの名無しさん :2009/07/09(木) 23:57:30
ケプストラムについて教えてください。 n個の時間領域のデータxn(t)をFFTし、 Xk(f)のパワースペクトルを得たとします。(k=n/2) パワースペクトルの自然対数を取り、IFFTすると思うのですが、IFFTするには 実部と虚部の情報が必要ですよね?パワースペクトルの対数をとったら、虚部が わからなくなってしまいますよね。 そのところでわからなくて困っています。わかる方教えてください。
>>204 IFFTは別に虚部がなくてもいいです.
それとスペクトルのkはnのままでいいと思います.
スペクトルは偶関数になってるので,IFFTすれば実数成分(ケプストラム)が求まると思います.
MMEやDirectSound対応のスペアナソフトやレベルメーターのソフトみたいな音を入力して解析してリアルタイムで表示する系統のソフトって、 半日以上とか1日とか数日とか、長時間起動してると、必ず反応がかなり遅れるようになるけど、それはなぜ? 複数のソフト、いろいろな環境で再現性があるのでOSの問題なんだろうかと思うんですが。 たとえばwavespetcraとかDeskTopLevelMeterとか、他にも山ほどあります。
システム時計とサンプラ側の時計(たとえば44.1kHz)がビミョーにずれてくのかもね
ソレ系のソフト以外でも、何でも遅くなってないか? 多分、ただのページングだよ。
WinVista/VC++expでサウンドプログラミングをしているのですが、 リアルタイム(1バッファ遅延)に入力→加工→出力を行うAPIを探しています。 調べたところWDM?ではカーネルミキサを通す分遅延がありすぎて話にならない ディフォルト出力ならKernel Streamingが良いと聞きました。 Win32APIのwaveXXXX関数は、関数の内容的にハードウェアに直接アクセスしてるように思えるのですが 実際のところ、Winのカーネルミキサを経由していたりするのでしょうか?
「ハードウェアに直接アクセス」なんて危険なAPIは基本的に存在しない waveIn()/waveOut()で遅延がネックになるレベルならPCでの処理は難しいと思うが、 WinAPIよりはリアルタイム処理に向いてると言われるASIO使ってみれば?
CoreAudioAPI
DirectX
>>211 DirectXはミキサ通すはず。
>>212 VistaはCoreAudioっていうんだな。Macかとオモタ
音程を変えずに速度を変える処理って、100msとかの短い間隔のかたまりで処理するタイプが定番なんですかね。 ゆっくりさせると、響いている様になってしまい良くないです。 NHKテレビで、波形の山を増やすとか言ってたが、 波形の山一個単位(一周期単位)でコピーして増やしたり減らしたりするアルゴリズムを僕は考えていたのですが、実現されていないのでしょうか。
>>214 ちょうどいい間隔でスキマがうまるならそれでいいだろうよ。
どうせギャップができて似たような音になると思うけど。
>>214 ピッチ検出の話になるが、ゼロクロス検出の精度が実際微妙ってことを
考えると、似たような理由で何かの障害があるんだと思うよ
含まれる周波数の最小公倍数な周期、いわゆるf0周期が短く明確なら良好な結果になるが が、実際の音声は周波数はおろか振幅エネルギーも 時間変動する よってf0の定義自体がまず困難 少しでもずれがあればパルスノイズが発生(矩形窓の場合) 蛇足だか、なんだかんだで窓関数は有効だよ。 目的に応じて最適な窓関数とオーバーラップ数の設計をすればいいし
>>214 nhkでそんな話してくれるの?KWSK
反応速度を優先するならグラニュラー(ディレイを使ったものも一緒) 音質を優先するなら、周波数領域に変換してからリリース部なんかを中心に引き伸ばせ。
ここの人たちって、お仕事はなにを?
無職
マ板でやれ
自宅警備員
音関係に詳しいから仕事もそれ関連かと
だからなにやってんのって話だ
226 :
214 :2009/08/24(月) 00:24:34
なるほど、なかなか難しい訳ですね。 ありがとうございました。
>>218 昔の高校情報Aでやってました。
最近の高校生は信号処理とかもするのか
うろ覚えだけど昔工房でフーリエ変換習ってた奴もここに居たしな。
高専なら普通に教えてそうだね
証明はともかく使いかただけなら工房でも分かる罠
は?何?それがどうした?
なんか変なレスきた
FM合成、もしくはFM変調などについて学べる書籍またはサイトは無いでしょうか? 簡単な波形合成を行うプログラムを作っているのですが、中々FMについて理解が進みませんorz
「FM音源」と組み合わせて検索かければ解説からサンプルコード、FM音源ドライバのソースまでなんでも見つかんね?
wikipediaで調べるといい。
サウンドプログラミングに限らず、離散信号処理で辞典的役割をしてくれるもしくはできるだけ広範囲をカバーした本があったら教えてください
そんな糞ソフトよりAutoTuneとかのほうが糞精度いい
ポジティブな形容にも「糞」って付けるものなの?
ワンピースみろよ。
着てる
ワンピース着るような清楚な女は一度も見たことないわ(清楚でなくてもだけど(ワンピース着てる奴に限ってビッチ多いらしいけど(童貞だから知らないけど)))
lisp厨がきたぞー
WaveOut系APIで、waveOutWriteで送った後のデータ書き換えたらマズいのかな (waveOutPrepareHeaderで指定したWAVEHDR構造体のlpDataの参照先のデータのことね) やってみたら一応動作はしたんだけど、これが出来るならWaveOut系APIの遅延も短く出来るよな
俺もそれやった事あるんだけど、結局資料が見つからずに有耶無耶になってサウンドプログラミングやめた。
>>245 woWriteの後はデータ管理としてはOS側だろ?
バグ作り込むようなもんだからできるできない以前にやらない
仕様として保証されていない動作に依存するようになるとデバッグが泥沼だよ
Replaygainを自作プログラムに実装すべく考えているのですが 良く分かりません。教えていただけないでしょうか。 実際、色々調べてみてある程度はわかったのですが、 「Peak Amplitude」があまりよくわからなかったのと、 音量設定の単位がdbになっているので、設定の仕方が難しい、 合わせにくいというところでつまずき、そのままになっていました。 現在わかったことは、ピーク時の振幅(Peak Amplitude)、 トラックごとに音量を設定する値(Radio Replay Gain Adjustment)、 アルバム単位で設定する値(Audiophile Replay Gain Adjustment) の3項目でタグが構成されていて、これらの値を使って音量をdb単位で調整する、 ということです。 タグの読取りはそれぞれの形式(tta,ape,mp3)で異なるが、 提供されているライブラリを使えば読取りは比較的簡単に出来る。 というところまでは行きついたのですが、 実際に読み取った値からどう処理するかが難しく、 実装するのが難しい状況です。 今考えているのが、勝手にdbの単位を独自の値に置き換えて(0dbが125とか)、 音量を調整すればいいのかも?と思っているのですが、 それにしても、ピーク時の振幅(Peak Amplitude)がよくわからないので、 どう使って良いか悩み、ここでつまずいています。 ご存じの方、教えていただけないでしょうか。
>>248 全てはdBとリニアの変換くらいは自在にできるようにしてからだ。
Peak Apmplitudeは意味そのまんま最大振幅と思うんだが。最大はmaximumだとか言うなよ?
dBーリニア変換 dB = 20log(A/B) log:常用対数 (パワーの場合は10log(A/B)) 例) Aが1、Bが10の時AはBに対して20dB落ち(-20dB) 上記のような比を表す他に、dBV, dBu, dBmなど、具体的な単位 (例えば1Vなどの電圧)に対する比を計算し、実際の値を表すこともある 例) 0dBm = 1 mW
色々な楽器の倍音構成をある程度記載したサイトもしくは書籍などないでしょうか? ピアノについては見つけられたものの、そのほかの楽器が中々見つけられません
Peak Apmplitudeについても、何となくわかりました。 曲によって振幅が違うから、その状況を表しているんですね。 それにしても、何故「1」が最大値なんでしょうか。 「1」の基準は何でしょうか? 質問ばかりで申し訳ないのですが、ご存じの方教えてください。 よろしくお願いいたします。
少しは自分で考えないと相手にされないよ もうされてないと思うけど
適当なGM音源モジュールを買ってMIDIで鳴らして録音 リアルな音じゃなくても、倍音構成を調べるくらいには使えるんでない?
258 :
デフォルトの名無しさん :2009/09/30(水) 20:15:57
本当にありがとうございます。
デシベルの計算式がまったく理解できなくて死にたい -25dBから-30dBに音量が下がったら振幅値にいくつかければいいんだ…
まず日本語からだな
振幅100の正弦波を基準として(これが0dB?)音量が-5dB下がったときの振幅値を知りたいんだ… 説明すらできねぇ…
-25dBの正弦波を、-30dBの正弦波にしたいって事だよね?
>>250 の逆の変換になるので、この場合、10^(-5/20)を掛ければよいはずです。
dB = 20log(A/B) log:常用対数
(パワーの場合は10log(A/B))
-25dBから-30dBに音量が下がったら振幅値にいくつかければいいんだ…
-25dBの正弦波を、-30dBの正弦波にしたいって事だよね?
>>250 の逆の変換になるので、この場合、10^(-5/20)を掛ければよいはずです。
まあ特に独学で始める場合は年齢関係なく中学生レベルに見える 質問しちゃったりするしね。どんな分野でも。 育て直しじゃないが、学習のプロセスをゼロから辿り直すわけで。 日本語が中高生レベルに見える点にはあえてつっこまない
質問する前に少しは考えるなり調べるなりしろよ・・・ 検索すればすぐにわかるんだろそんなこと
>>264 重ね合わせる高周波の位相がずれてるとうまくいかないよ
270 :
デフォルトの名無しさん :2009/10/06(火) 20:59:51
はいそうですか
アー確かに、そういう奴いそうだわ
>>264 まず試してみたソースを出せ、話はそれからだ
>>245 違うバッファに用意しとけばいんじゃない?
メモリーのコピー作業はそんなに重くない
とこだよね
書き方によるけど
まぁ、大抵はめんどくさいから6dBで2倍(-6dBで半分)にしちまうけどな
-6dbは半分じゃなくて1/2乗だろ。 半分は1/2倍。
1/2乗は-3dB
えっ
馬鹿がいるな
逆立ちしたら草食性哺乳類一種鯨偶蹄目になっちまうな
ものすごくリバーブが掛けられたゲーム音楽CDに発憤して リバーブ成分を取り除いてみたことはあるな そこからサラウンドに繋げられたか・・・
>>276 ばーか、エネルギーは振れ幅の二乗だろ。アホ
>>282 いつからエネルギーの話になったんだろうか
ああ脳内で世界が固定されちゃってるんですね
20*log10(2) = 6.02 dB 20*log10(1/2) = -6.02 dB
ほ
288 :
デフォルトの名無しさん :2009/12/23(水) 05:08:00
Windowsで、ネットワークから受信した音声データを スピーカーに再生するプログラムを書いてるんだけど 再生の方が速くて困ってる。 具体的には、 20ms間隔で20ms分の音声データをwaveOutWriteで書き込んでるんだけど、 waveOutProcのコールバックが0〜15ms間隔くらいで返ってくる。 waveOutAPIってこういうもんなの?
yes
バッファが十分たまれば間隔は落ちる
DirectSound使え
そこでWASAPIですよ
Visual Basic 2005以降 or C#2005以降ならそこそこ開発できるスキルは持っています。 C言語はなんとなくわかりますが,非常に苦手です。 C++はわかりません。 VBでPCMデータをアップサンプリングするプログラムを作った経験はあります。 こんな私にもわかるようなASIO SDKの使い方を解説したサイトまたは書籍などご存じありませんでしょうか?
無理
デジタルフィルタがむずかしい。
「***が苦手です」とか「###が苦手です」って言う人は何が難しくて自分にできないか考えたことはあるの? それがASIO SDKとどう結びつくかを他人に説明する気はないの?
山葵?
298 :
デフォルトの名無しさん :2010/02/10(水) 10:44:38
Windowsでbeep音だけで音階を作るサンプルコードがあれば教えてよ
>>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);
}
MMLまで作ったのかw
4分割多重MML再現したくなったw
BASICでbeep文だけで声を鳴らすサンプルコードがあれば教えてよ
>>300 久し振りに笑うプログラムに出会った
これは面白い
Windowsにこのような機能がまだ残されていたとはw
何BASIC?
FFTを勉強中です 基本的な質問で悪いんだけども 周波数ごとの音量ってのは 実部のスペクトル? それとも実部と虚部から求めるパワースペクトル?
補足です パワースペクトルが音量に相当するなら 実部=0、虚部≠0の場合 周波数は無いのに、音量はあるのか? 実部が音量に相当するなら、パワースペクトルの意味ってなに? とか、よくわかんなくなっちゃったのです
>>309 読みました。
たしかにアニメーションついててわかりやすいですね。
んで、周波数ごとの音量に相当するのは、
パワースペクトルってことですね。
ありがとうございました。
SIMDなフィルタプログラムの英語か日本語のチュートリアル、どこかにありませんか?CPUには拘りません。
アップサンプリング時にゼロ補間してもスペクトルが変化しない理由ってなんでしょうか?
補間のあとのLPFで鏡像になって出てくるスペクトルをカットしてるから。
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 個数で割る。というのがよくわかりませんが、任意に追加できるため個数はその場その場で定まらないのを想定しています。
例えばAとBを合成して、とりあえずそれを再生。
ユーザーがそれを聞き、「やっぱりCも合成しよう」となった時などを想定しています。
AとBの合成音を再生するために、合成音を出力するバッファを用意しますよね。
その後Cを合成するのが決定した時、
・再度A、Bのデータもひっぱってきて、3音合成する
というよりは
・A+Bの合成音にCを合成する
ほうがメモリー効率や処理速度などで有利そうです。
ですがそれだと丸めこみ問題がでてしまいます。
普通は64bitとか128bitで計算して最後に戻すのよ。
>>普通は64bit 一体16bit音源を何万個合成するつもりだよw
>>316 > その後Cを合成するのが決定した時、
そんだけ仕様が未確定だと汎用的にプログラム書くしかないから効率もクソもない。
数百万サンプル程度の加算が問題になるような環境ならできることの自由度を下げる以外ない。
あと「〜そう」で目についたところを最適化するのはほぼ最悪の戦略。
かなりの確率で最適化ポイントを間違う
ごめんねぼくはdouble厨なので
コンプレッサ実装すれば? r = 初期値1.0 出力サンプル = 合成サンプル * r 出力サンプルが16bit幅超えたら、r = abs(合成サンプル) / 32768.0 で更新 r < 1.0 なら時間経過と共に少しずつ1.0へ戻してやる 実用レベルで実装するなら細かいノウハウとかあるからDSP関係の文献自分で調べて
>>314 は「丸め」とか用語が適切じゃないからちょっと知識が不足してる感じがするね。
俺もコンプレッサ/リミッタ関連について調べてみることをお勧めする。
コンプレッサーはデータを改変してしまうからよくないだろ。 ノーマライズすればいい。
いまどき整数とか面倒 不動明王を使うだろ普通
恐れ入谷の鬼子母神
>>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データから波形を作成するにはどうすればいいですか?
ソフトウェア音源でファイルに出力する
waveout
中古楽器屋でMT-32というのを探して買ってくるんだ
ソフトウェア音源を作りたいって話だろ!
MT-32まだ持ってるなーw
それGM非対応や!
335 :
デフォルトの名無しさん :2010/06/22(火) 17:59:37
ソフトウェア音源を作るにはどうすればいいですか?
どんなのが作りたいんだ?
MIDIデータには、どの楽器でどの高さの音をどのくらいの強さで出すか とかそんなデータが入ってる。 この楽器の音は演奏する側が用意しなきゃならない。 実際の楽器の音などをサンプリングして内蔵しておいて要求に合わせて 編集して出すことになると思うよ。
今で言うところのマルウェア認定のwingrooveまだ使ってるわ
波形データの作成はできても、OSのサウンドAPIに鳴らさせるのがやっかい。
そこは定型処理だからほぼ悩む所じゃないけどな
ワレザー乙
343 :
デフォルトの名無しさん :2010/06/23(水) 10:26:03
波形データをサンプリングせずにプログラムのみで作成したいのです
そんな当たり前のことを質問するような椰子に何を言っても無駄だYO
>>343 そしたら普通に式書いてそれでウェーブ作ればいいじゃない。
まずはサイン波でやってみそ
ウイルス 寄生 自己増殖 ワーム 非寄生 自己増殖もしくは移動 トロイ 寄生 非自己増殖 マルウェア 上記を含む迷惑ソフト全般
ウィルス対策ソフト 寄生 定義ファイルのダウンロードによる自己増殖 有料
メガデモ的なサウンド演奏プログラムを作りたいな。 できる限り少ない容量で、いい音を出すって言う。
メガデモはやり始めたらキリがない。
>>343 シンセ作りたいってことでしょ?
ニコニコ動画にJavaでソフトシンセ作ってる人がいるよ。
ところでこのスレの住人でJava使ってる人いる?
Javaにサウンドプログラミングは耐えられるかな。
イコライザーってどうやるのでしょうか? キーワードだけでもいいので教えていただけると幸いです
>>352 ありがとうございます!読ませていただきます。
ソフトウェアMIDI音源だったらそうだろうけどさ
ここの人たちは仕事をなにを?
仕事がない鬱だ死のう
DFTで周波数分解能をあげるためにゼロ詰めしたりしますが、なぜこれが許されるのですか? 元の波形のスペクトルを変えてしまっていることになりませんか?
それで増えるのは元々のナイキスト周波数を超える部分だから削れば問題なし
ということは、結局周波数分解能はあがらないということですか? 1
361 :
デフォルトの名無しさん :2010/06/27(日) 22:33:32
>>350 おお、ありがとう。
これをC++に移植してみるよ。
ナイキスト周波数のサイン波ってパルス波になってるから 元の周波数は保存できても音質みたいなのは絶対違うと思うけど なんで誰も突っ込まないのか不思議。
厳密な矩形波なら帯域が無限大まで伸びてる。 それをナイキスト周波数でばっさり切る理想的なローパスフィルタを通せば、 元の通りのサイン波が出てくる。
0埋めの理由が、本当に周波数分解能を上げるためなのかどうか、って話?
365 :
デフォルトの名無しさん :2010/06/30(水) 21:39:22
>>363 それよりも位相がずれてたら、波形がなくなるよな
そっちが問題
単に2倍を越える周波数でサンプリング云々ではなく、実際にはもっと難しい計算があるらしく、それを行うと位相のタイミングのずれは無問題らしい。
あ、サンプリング定理の話じゃないのか。まあいいか。
>>366 どういうこと??詳しく
サンプリングポイントを最高周波数の位相に合わせてシフトするの?
>>360 0埋めしてDFTサイズ増やしたって本当の意味での分解能が上がるわけないでしょ。
ただsinc補完される(丸くのっぺりした波形になる)だけだよ。
つまりアップサンプリングでサンプリングレートを上げている=周波数分解能があがっている ということですよね?ただアップサンプル時に差し込んだ0に意味がないと
パルス波はサイン波と違って倍音を含むだろ? サンプリングレートの半分のサイン波はパルス波になってるだろ? でもサンプリングレートの半分以上の周波数は出ないはずだろ? ではパルス波の倍音はどこにいったの?
周波数帯域無限大のマイクとかスピーカーとかケーブルを持っている人はうらやましいですね(棒)
鼓膜もね
きっと頭にデジタル入力端子が付いてるんだよ
折り返しが自分と重なって、表現できないんじゃないかな
>>372 >サンプリングレートの半分のサイン波はパルス波になってるだろ?
意味不明
1サンプルで半周期ってことだろ
0.5fsの純粋なサイン波なら普通に0.5fsのサイン波としてデータ化されるでしょ。 どこから「パルス波」が出てくるのかわけわからん。 0.5fsを超える周波数成分がある信号なら超えてる部分は折り返すし、倍音(1.0fs) 成分があるならそれは折り返してDC成分になる。
381 :
380 :2010/07/08(木) 23:57:43
「普通に」というのは訂正。 初期位相によっては振幅がどっかいっちゃう(最悪0になる)。
プログラム上は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と)ようです・・・ 何がだめなのでしょうか?
だめな点がだめなのだと思いますよ
ASIOは音源チップやドライバに影響されまくった経験あるので とりあえずばっさり違うPCでデバッグするのが吉
386 :
デフォルトの名無しさん :2010/07/12(月) 23:06:12
自己解決しました
387 :
383 :2010/07/12(月) 23:23:29
>>385 ありがとうございます
見た感じシンプルで間違えようが無さそうなんですけどねー>hostsample
ライブラリとかプロジェクトの設定まわりでもう少しもがいてみます
一応ASIO対応のプレーヤーからは音が出るので正しいやり方はあるんでしょうね・・・
いえいえ
おまえアク禁な
漏れもASIOで音を出したいな。
他スレから誘導されてきました 質問させてください サーバでwavファイルをいろいろ操作しながらストリーミング配信のようなことをしたいので、 その方法を模索中です 具体的には、ドップラー効果を付加したwavファイルをクライアントに聞かせたいのですが、 ストリームで流すためにはどのようにwavファイルを生成すればよいでしょうか?
波形作り終わってる前提ならタダのRIFF-WAVEフォーマットでおくりゃーいーじゃんか
393 :
デフォルトの名無しさん :2010/07/23(金) 03:35:46
waveのファイル読み書きするプログラムを組んでます。 波形のデータはすぐに読み込むことが出来たのですが、 ここから時間ごとの音量のグラフを作るにはどうすればいいですか?
波形は取れたんだろ? なら後は好きなようにプロットしろ。このスレの領分じゃねぇ
音量を得る方法はこのスレの範疇だろがよ 二乗平均平方根でググれ
>>393 音量とは何かって事とWavファイルの情報は何を意味するのかを考えてごらん
397 :
393 :2010/07/23(金) 18:11:22
無事、望んでいた結果が出ました。 ありがとうございます。
時間毎に最大値を表示したらいけないの? 二乗平均平方根とか大学行くと勉強するのでしょうか。
おまえには関係ねえよ
そっちはPEAKだな 波形のクリッピングを検知するのに使われる 聴覚上の音量とはほど遠いぞ
耳へのダメージを測るためにエネルギー計算をします
1/3octで帯域分割してラウドネス求めろ もしくは聴覚フィルタシミュレーションしろ パターソンの論文でも嫁
>>400 アナログなメーターの動作か?
あれはピークじゃないんだ。
聴感上の音量とかピークとかと耳へのダメージもほど遠いと思うんだ
ピッチシフトですごく遅いピッチのときに ノイズを軽減する良い方法ってありますか? なるべく処理が重くない実装を探しています。
面倒なんでボリュームを落としてる
FFTの勉強してるんですが FFTで求まったフーリエ級数にどんな処理をして逆FFTすれば ピッチの変更が出来ますか?
簡単なMML音源のようなもの作ってみたんですが、音量上げるとすぐクリッピングするし 音量下げると個々の音が小さくて困ってます。 皆様どう対処されてるんでしょう
>>408 ピッチの変更を、音色とテンポを変えずにピッチだけ変更とエスパーしてみる
FFTを勉強し始めたレベルでは、この課題は難しすぐる
マジで答えると本が書ける
ローパス・ハイパスなんかのフィルターや
ハムキャンセラーやイコライザーから始めては
>>409 どんな音源波形か知らんが、サイン波にエンベロープをかけた程度なら
その現象がおこる
音の強さは音量によるのではなく、アタック部分の音質による
ノイズやインパルス成分
サンプリング音を使うのも手だが、ちゃんとした音源作りは難しいよ
リミッターの話じゃないのかな。俺の知る限り銀の弾丸はない。
NintendoDSiに入ってる録音した音をトランペット風に変化させるってどんなアルゴリズムなのかな?
サンプルを
周波数を変えずに波形だけ変えるんじゃまいか
ピッチとレベルを抽出して、サンプラーを叩く かな?
PCMはならしてないとおもうなー
だったら、元音から一波切り出してループ再生 エンベロープをトランペット風にアレンジ
BLITってのの原理がいまいちよくわからないんだけど、 日本語で解説してあるページってありませんか? musicdspとかに英語で解説してあるテキストはあるんですが、わかんない……
瞬時周波数ってどういうもの? 何に役立つのかがわからん
自動車の速度メーターと同じ
421 :
デフォルトの名無しさん :2011/05/11(水) 13:54:57.62
保守
点検
結構本格的に実装されてるのはいいが
リアルタイムだとCPUパワー余っててもブツ切れだな
>>418 今更かもしれないけど、要は矩形波や鋸波の倍音構成を
正弦波の合成で再現してやれば絶対に折り返しノイズが発生しないって理屈
>>424 その理屈自体はわかりますが、実際にリアルタイムに正弦波で矩形波とかを合成すると
どう足掻いても音が飛んでしまいプチノイズの嵐になるわけで。
それを避ける為の合理的な計算なんかも恐らくBLITってのには含まれてると思うんですが。
どっちかってーとそっちを知りたい。
単純計算で、200Hzを合成すると20kHzまでとして100個か
FFTするサンプル数増やすと、パワーの最大値が増えるのはなぜですか? 10000Hzの正弦波waveファイル(16bit)を窓関数なしでFFTしたとき サンプル数が以下のときの最大のパワーは 1024 は 15701165 2048 は 25431718 4096 は 62699682 8192 は 101021697 でした 同じ正弦波なのに最大値が違うのが なんか納得行かないんです
>>425 BLITは
>>424 で解説した理屈以上のものじゃないぞ
実装時は基音を元にした各倍音の位相テーブルを作っておいて
合成するのが一般的・・・なハズだ。俺もそんなに多くの実装を目にしたわけじゃないが
>>427 1024サンプルで正弦波が途切れるwaveファイルに
各サンプル数でFFTをかけてみたらどうなるかな?
1Hzの正弦波のテーブル作っといて、希望の周波数をインターバルにテーブルを 読んでく、っていう手法の解説を(それとは関係ないけど)昔読んだことがある。 440個ごとに読み出せば440Hzの波形が出てくる、ってことね。
DDSのハードウェア実装はそんなんだったかな。
>>429 回答ありがとうございます
ご指示の通りサンプル数453のwaveファイルで試したところ
以下のような結果になりました(FFT時に、波形の無い部分は0埋め)
1024 … 7200310
2048 … 7200310
4096 … 7284914
8192 … 7284914
4096と8192が微妙に違いますが、ほぼ同一の値が得られました
この結果はつまり、
>>427 で値が違ったのは
切り出した波形の総エネルギーが違うから
という理解でいいんでしょうか?
最大パワーは2048なら1024の2倍、4096なら4倍になるというような感じで
>>433 ありがとうございました
独学でやってるんで
ふとした疑問を聞ける人がいなくて困ってたんです
助かりました
OpenALにはハード毎の同時発音数制限が無いのでしょうか? 手持ちの2つのデバイスで再生させると、両方とも一応256ソースまではAL_NO_ERRORで同時再生できてしまいました。音は潰れますが。 ソフトウェア処理だからだとしたら、逆にハードウェアでOpenALに対応していたら発音数が256以下だったりするのでしょうか?
あった気がする もうあんまり覚えてないけれど、十何個かそこらしか生成できなかった記憶が
取り敢えず仕様としては決まってないよな 実装依存だと思う
44100のWAVE波形を半音上げ下げするにはレートをいくつにすればいいんですか
1オクターブ上が2倍 1オクターブは12半音 なので半音上は2^(1/12)倍 あとは計算して
thx あと、音ってなんで足して2で割ると混ざるの? すごい不思議なんだけど
足す操作そのものが混ぜることだから。 水面の波紋も同じ。
442 :
sage :2011/06/10(金) 12:50:15.47
VSTで簡単なVUメーターを作ってるんだけど、 VSTGUIを使って、Idle()のなかで描画するようにしたら、なんだか動きが遅くて・・ VUメータのようなものを描画するときは、 「GDI+」とか、「directX」で描画したほうがいいのかな・・? 誰か、詳しい人おしえてくらはい
リアルタイムな描画をもとめないならGDIで描画したほうが楽だよ。
444 :
sage :2011/06/10(金) 13:42:33.15
ありがとう! ひとまず、GDIでやってみます。
VSTはDTM板にもスレがあるので参考に
1bitのデータをマルチビットのPCMに変換したいのですが, 全くイメージできずに行き詰っています。 PCMであれば間に0を挟んでアップサンプリング,FFT, LPFといった処理をしたことはあるのですが,1ビットは ちんぷんかんぷんで・・・ どなたか,勉強のしかたをアドバイスいただけないでしょうか? PS3でのDSD→PCM変換は教科書どおりにやっているから音 質がよいといった表現を見かけますが,その教科書に相 当する考え方をまずは知りたいと思っています。
本物のDACもLPF通すだけみたいな状態だし 単純にLPFのあと間引きすればいいんじゃないの?
1ビットのデータにどうやってLPFをかければいいかわかりません。 PCMであれば, 倍精度浮動小数点の配列→FFT→LPF→逆FFT→倍精度浮動小数点の配列 という手法ならわかるのですが,1ビットのときは???
>>446 +1と-1の集合だから
落とし込みたいサンプリング周波数の範囲で足し算して割るだけ
>>449 ごめんなさい。よくわかりません。
>+1と-1の集合だから
これはわかりました。1と0ではないのすね。
>落とし込みたいサンプリング周波数の範囲で足し算して割るだけ
ここがわかりません。
もしよろしければ,もう少し具体的にお教えいただけるとありがたいのですが。
1bit 2822400Hz→16bit 44100Hzだとどのような計算になるでしょうか?
2822400個の配列があるとして,
0〜44099の1or-1を合計して,その値を44100で割るという事になるのでしょうか?
あれ,でもこれだと1秒間に64サンプリングしかできない・・・
>>451 コメントありがとうございます。
>単純なFIRフィルタも理解できないのか?
はい。全くわかりません。
今回の処理に必要という事でしょうか?そのキーワードもあたってみます。
>とりあえず答えの一つみたいの見つけた
ありがとうございます。VB開発者なものでソースコードの解読に苦労しそう
ですが,こちらも勉強してみます。
少し道がひらけた気がします。ありがとうございます。
FFTした後にどんなLPFフィルタ使ってたんだろ・・・
>>453 LPFに「どんな」ってどういう事でしょうか?
単純に一定周波数以上の値を「0」にしてから逆FFTしてるだけなのですが・・・
>>449 1ビット 2822400Hz→マルチビット 44100Hzの場合
仮に32768サンプルの1bitデータがるとして,
2822400÷44100=64なので
64個毎に合計して,その値を64で割ることを512回繰り返せば,
512サンプルのPCMなったりするかなぁ思うのですが,どうでしょうか?
456 :
デフォルトの名無しさん :2011/07/16(土) 22:28:25.89
NaClでも出来そうだ
458 :
デフォルトの名無しさん :2011/07/18(月) 22:40:35.17
HTML5のAudio Data APIでWAVファイルの音階を変えて 再生するのって出来ないんでしょうか mozSetupやmozSampleRateで周波数を変えてもうまくいかず WAVファイルの音階を変えて再生する作曲ソフトを作りたいんだけど JavaScriptが駄目ならC言語とかでもいいんだけど そもそも音階というのは単に周波数の値を変更するだけで変えられるもんなんでしょうか それともデータをちゃんといじってあげないといけないのか
>>456 これはすごいな、普通にFireFox上で動作するソフトシンセとか見つかってびっくりした。
時代を感じる。
やはり,1bit→PCMがわかりません。 1,1,1,0,1,1,1,1 という1bitの連続したデータを 同じサンプリング周波数のマルチビット整数にすると 1,2,3,2,3,4,5,6 となる。 という考え方は誤っているでしょうか? 上記の方法で作成したPCMデータは音としては聞き取れますが, 音質としてはひどいものでした。 低域がかろうじて鳴っているだけで,中域,高域はまったく感じられませんでした。 どなたかアドバイスをいただけないでしょうか?
>>461 ありがとうございます。
この2週間ほどグーグルに聞いてはいたものの,理解できるような
文献が見つからなかったので,こちらを頼った次第です。
2つ目は見つけましたが,理解不能でした。
1つ目と3つ目はまだ見たことがなかったので,これから読んでみよ
うと思います。
この度は誠にありがとうございました。
重ねてお礼申し上げます。
サイン波を入力するときって サイン関数の値を書き込む方法みたいなダサい方法は普通使いませんよね。 ということでみんなやってるやり方とかはどの本に乗ってますか?
日本語でOK。
OK?おkじゃなくて? 恥を晒したな・・・ というわけでレスポンスよろwww
> サイン関数の値を書き込む方法みたいなダサい方法は普通使いませんよね。 そうなの?
>>464 お前の考えるスマートな方法を先に言えよw
IIRでぶんまわすだけじゃ駄目なの?
コサイン関数の値を書き込む
方形波にLPFをかける
1本だけ立てて逆FFTする
サンプリング周波数変換の方法をどなたかお教えいただけないでしょうか? 自分で調べてやってみた方法は, 1. 44.1kHzに0を挿入して8倍(352.8kHz)にアップサンプリング 2. FFT→LPF(音の周波数22.05kHz)→逆FFT 3. 352.8kHzを間引いて48kHzにする 上記の方法では,処理も遅く高域にノイズが発生しているように聞こえます。 どなたかテクニックを伝授していただけないでしょうか?
>>473 高域にノイズ発生の問題はLPFの効きが弱く、折り返し歪が発生しているのでは?
極端に遅いなら2のやり方がおかしい気がする。
>>474 ありがとうございます。
私には難解な内容ですが,一読してみようと思います。
>>475 >高域にノイズ発生の問題はLPFの効きが弱く、折り返し歪が発生しているのでは?
コメントありがとうございます。
整数倍の場合は品質的に問題ないように思います。
恐らく非整数倍のときの「3」の間引き方の方法を工夫しなくては
いけないのかと思って入るのですが・・・
>>473 きれいにやるには
>>474 のような方法が現実的だし、実際よく行われてます
44.1kHz:48kHz=147:160なので、
タップ長(たとえば101)×(出力パターン数)160の
係数テーブルを作って計算します
(係数を削減する方法もある)
>>473 のようにFFTを使いたいなら、
窓がけ、オーバーラップ、などをしないと不連続ノイズが出ると思います
FFTするし、それなりに重いのは仕方ないでしょう
適当にやるには、(0挿入ではなく)前の値を保持(0次ホールド)するか
直線補完(1次ホールド的な?)でもしながら48kHz信号を無理やり作り、
20kHzくらいのカットオフの高めの次数のLPF(IIRなら8次以上とか)をかければ、
まあきれいではないけど、軽くできるできるんじゃないかな
波形の見た目のきれいさを求めて、あんまり音的には意味の無い
近時曲線でサンプルを補完しちゃう人もいますけどね
それが割といい音がすることもw
アップサンプリングなら元データのほうが周波数低いんだから 画像みたいに数タップのLanczosで補完しちゃだめなの? Bスプラインを使ってたハイエンドメーカーもあったようだけどそっちは高域が落ち込むだろうし
というか、ハードディスクの容量とか制限ほとんどないんだし する意味無いだろ。
>>478 > アップサンプリングなら元データのほうが周波数低いんだから
というよりサンプリング周波数比が単純じゃないのが面倒なのでしょう
> 画像みたいに数タップのLanczosで補完しちゃだめなの?
それは
>>474 を数タップでやるのと同じことなのでOKだと思います
ただ、(これを言うと画像屋さんには怒られるけど)
画像と比べて音は求められるSNが非常に高いので
数タップで、また、固定の係数なんかではあまり良いスペックは出ません
>>478 44.1kHzから48kHzへ変換する場合、160倍の0補完アップサンプリングと
147倍の間引きダウンサンプリングをするなら、タップ数が1000〜とかでも
演算結果が0になることがわかっている分は除けるから
畳み込みの回数は1サンプルに対して〜10程度になるよ
FFT
フリーのソフトでも転がってたやつを、UIを綺麗にして売り物にしたって感じだね 触ってないけど、それほど目新しいものでもなさそう
左右のパワースペクトルを差分取って定位割り出しって感じかな 可視化するのは個人的に目から鱗
これだいぶ前に他の会社が同じもん出してたぞ 売れてんのかは知らんが
切り出すU/Iのでき次第だから、ぶっちゃけアルファテストを積み上げた分だけ使い勝手がよくなるかと。
>>485 >左右のパワースペクトルを差分取って定位割り出しって感じかな
左右の定位置を求める方法、もっと詳しくしりたいのですが、
なにか資料とかキーワードとかあります?
>>488 超アカデミックな基礎としては、ブラウエルトの音像定位の本(日本語は絶版してると思う)
だけどそこまでのことはやってないでしょうw
せいぜい各周波数エレメントごとのLRの振幅比からパンを割り出してるくらいじゃないのかな?
位相差も見てたらすばらしいと思うけど
ボーカルを処理例に出されてもな……って思った。 センターに定位してるのが普通だし、周波数帯域も限定されてて 比較的簡単な部類なんだから、他のパートでやってくれないと。
コロナ社の「空間音響学」は事例も新しいし内容もコンパクトにまとまってて良い感じ。
フィルタ自体のプログラミングは、いったいどうしているのですか?
>>493 漠然としすぎてて難しい質問だな
係数をかけたりzバッファにためたりするプログラムをしているよ
>>494 フィルタをどうすると言う書き込みは多いけど、フィルタ自体はどうしているのかなと思って。
みな自作しているけど、疑問なく作れるってことですか?
>>495 デジタル信号処理の知識があればできるよ
アナログのフィルタ回路をデジタルに変換できるので、 アナログのフィルタ回路の作り方を探る手もあると思うよ。
アナログ世代乙
>>498 ゆとり世代の耳にはデジタル入力がついてるのか
アナログというよりs領域で設計してs-z変換ということでしょ
特にIIRフィルタはs領域での設計は楽だから
z領域で設計するのは至難の業だ
アナログ回路の伝達関数をs関数にすることも楽だ
500 :
デフォルトの名無しさん :2011/09/26(月) 23:27:19.82
>>486 掴んだのを移動できるのは見たことないぞ
だから定位は変えられんでしょ?
503 :
デフォルトの名無しさん :2011/10/07(金) 13:50:37.35
すいません、スレ違いかもしれませんが相談に乗ってください。 あるMIDI機器を操作した際に出るSystem Exclusiveをプログラム・チェンジに変換して、 演奏情報も一緒に別の機器に送りたいんですが、何を勉強すればいいでしょうか? 当方プログラミングの経験なしです・・・(無理っすか?
Windowsサウンドプログラミング―音の知識×プログラミングの知識 って本がMIDIについて結構詳しく書いてあったような気がするので 立ち読みして良さそうなら買ってみたらどうだろう
505 :
デフォルトの名無しさん :2011/10/08(土) 02:03:07.42
>>504 ありがとうございました! 立ち読みしてみます。
でも、友人に「無謀だ」と言われ、くじけそうな心・・・
>>503 簡単に実現したいのだったらMaxとかPureDataという手もあるかもしれない。
音声データを加工したくて勉強しています。とりあえず「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
16ビットの値 (-32768 〜 +32767) を浮動小数点の値 (-1.0 〜 +1.0) に変換してるだけじゃね -32768 〜 +32767 より -1.0 〜 +1.0 の方が加工とか処理するのにわかりやすくて扱いやすい、と本の中の人は思ったんだろう ファイルに書くときは当然また16ビットに戻す必要がある
509 :
507 :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に 戻しているのかとか…。必要なんでしょうけどどういう効果があるのか具体的にわからなくてもやもやしていて先に進めません。 ググって調べられるワードなどでも何でも良いので教えてもらえるとありがたいです。よろしくお願いします。
510 :
507 :2011/10/08(土) 17:49:38.18
ああ、すでにレスしてくれてる方が!!ありがとうございます。
>>508 なるほど、扱いやすいプログラミングの好みみたいなものなんでしょうかね。
あまり深く考えないほうがいいのかな。
処理内容にもよるけど、そのまま16bitの範囲で処理するとオーバーフローなども気にしないといけないし 複数のフィルタかけたりすると累積の計算誤差も減るし まあ耳でわかるようなもんじゃないかもしれないけど、わざわざ誤差作るほどじゃないという感じでもある
0〜65535 にしてから -32768〜32767 にするのは、負の値の切り捨てを嫌ったんじゃないかと 単純に整数化すると -0.999...〜+0.999... の範囲が 0 になるんじゃないかな
513 :
507 :2011/10/08(土) 20:13:36.07
>>511 >>512 加工する過程での細かな誤差を嫌ったという感じなんでしょうかね。
正規化(?)をするのとしないのとでは実際どの程度違う結果になるのかわかりませんけど、
いまはあまり気にしなくてもいいのかな。
実際は読者からの細かい突っ込みを嫌ったためのような気も(笑)
少なくとも音声データの加工そのものとは直接関係ないようなので先に進んでみます。
ありがとうございました!
514 :
デフォルトの名無しさん :2011/10/08(土) 23:20:53.19
C++って難しいんでしょうか・・・ (こんな事をきいてるようじゃ無謀と言われてもしょうがないですねw)
そうですね
っていうかそこは序盤だから理由が判らないだけで 後半でデータ加工するのに都合良いようにしてんだろ
整数レジスタ使って固定小数点演算でがんばる時代は終わったか
ていうかひたすら物量つぎこんで速くしたFPUが、大量生産で安く手に入るから、 それ使っちゃえば安くて速い、という。
20年前は嘘だな。 10年くらい前でも整数演算でやる方がずっと速かった。 SSEとか出だしてからじゃないか?
整数演算てどういうものをいうのかわかってない自分 加工前に1000倍して加工後に1/1000にするとかでしょうか?
PentiumのUVパイプラインあたりからかな。 あるいはAlphaあたり。
最近だとDSがまだ固定小数点をつかってますね
固定小数ならではの便利な事もあるんだよね
精度を固定とか荒くてもいいならデータをコンパクトにまとめられるとかかな? MIDI命令みたいに可変長byteの整数つかってもおもろいかも。
まさに小数点位置が固定されていることでしょ
まだ固定小数点DSPの方が安いしクロックも速いのがあるからね サンプリングレートが異常に高い分野ではまだまだ現役 最近は浮動小数点DSPも安くなったし、オーディオなら、オーバーフローとか ヘッドルームとかほぼ考えなくて済むメリットの方がかなり大きい が、まだ32bit floatが主流で、24bit精度が精一杯 フィルターかけまくり、ミキシングしまくりだと、そろそろ精度的に限界かな PCのアプリなんかは64bit doubleが使われるようになってきたし (PCのCPU(FPU)はもともとdoubleの方が計算速度速いっていうのもあるけど) (メモリもたくさん使えるしね、DSPに比べたら無限にあるみたいなもの) (ただし同じパフォーマンス出すのにCPUのコストは10倍以上、下手したら100倍かかるけど) DSPも倍精度浮動小数点になっていくのかなぁ
FPU付きのDSPってみたことないや。いつも固定小数点でやってます。 DSPの定義の問題なのかな?
iOSやAndroidなんかだと、ハードによってはFPUしょぼいんで 固定小数じゃないとリアルタイム処理はきついね
最近のオーディオプレイヤーにある,高域の周波数成分を補間する 機能を実装すると考えた場合,FFT意外に何か考えられる手段はあ るのでしょうか? もしくは,完全フリーで高速なFFTライブラリがあれば教えていた だけるとありがたいです。 ソースコードの開示が必要ないものがよいのですが・・・ 今は大浦さんのFFTを使わせてもらっていますが,もっと速いもの はないかなぁと思いまして。
むしろ完全フリーで高速なFFTライブラリを作ってくれるとうれしい。
残念ながら,数学が大嫌いなプログラマーなのです。
>>530 FFTの手段っていうのは漠然過ぎない?
フリーだとFFTWが有名だけどコードの開示は知らないです。
>>528 今は主要各社ラインナップありますよ
まあ確かにDSPとしてはハイエンド系かな
もちろんアーキテクチャは積和命のDSP
>>530 よくあるタイプは、高域に非線形ひずみかけて倍音を発生させて、
さらに高い超高域を作り出している
例えば、HPFで高域取り出す→クリップさせる→奇数次倍音発生
→超高域HPFかけて取り出す→原音に足しこむ
みたいな感じ(偶数次倍音の発生とか、足しこみ方とかいろいろあるけど)
こうして作られた超高域は、一応倍音だから、元は有ったかもしれないんですw
>>533 FFTした場合は周波数成分へのアクセスは簡単なので,
そこは工夫次第でどうにでもなりそうですよね?
ただ,FFTそのものの処理時間がネックに感じています。
>>534 むむむ,難しい・・・すいません。頭の悪い私には理解
不能でした。
FIRとかIIRとかそっち系でしょうか?実はFIRを理解して
おらんのです。
>>535 そっち系ですw
でも分かれば非常に軽く実装できますよ
FFTは万能なようで色々面倒なこともあります、まず重いし
連続処理じゃなくてブロック処理になるんで、
連続信号の音を綺麗に処理するのは結構苦労します
分析には向いてますけどね
とりあえず時間分解能と周波数分解能で悩むでしょうw
>>536 やはりそっち系でしたか!
まずはFIRの勉強しないといけませんね。
FFTはどうしても矩形窓を使いたかったので,オーバーラップの
実装に苦労しました。
ありがとうございます。
初歩的な質問かもしれませんが,16bitPCMデータの場合 ・1〜32767 ・0 ・-1〜32768 でデータを表現する事ができますよね。 しかし,+と−で解像度が1つ異なるのですが, 浮動小数点数との相互変換のとき,この1つの違 いをどう考えればよいのでしょうか?
>>538 問題ないのでは?
x∈R
-32768.0 <= x < 32768.0 と考え
デジタルデータ d は x の小数点以下を切り捨て、それより小さい最初の整数に変換されると考えると、「解像度」に違いはないと思います。
浮動小数点というのは,-1〜1の範囲のことです。 ですから,+の場合に整数→浮動小数点変換する場合は 32767÷32768なのか 32767÷32767なのかという事です。
>>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 対応ではないからカントールの濃度ではないでしょうし。
542 :
541 :2011/10/13(木) 00:20:06.74
>>540 失礼
y = x / 32768.0
ですね。
あと図は、
*----*----*----*----*----
0 1 2 3 4 5
です。
ふーむ,なるほど。 では,ちょっと質問を変えてみますと,オーディオ/サウンド 関連の分野では常識としてどうすべきかというものがあるので しょうか? それとも,ソフトや機器によって実装はマチマチなのでしょう か?
固定少数は分数と考えればいいよ。 分母ができほど制度が高くなるイメージ。
>>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);
とかかな?
>>545 なるほど。
大変参考になりました!
ありがとうございます。
HTKを使ってHMMをつかっての音声認識をしてるんですけど、 ケプストラムからスペクトル包絡を求めたいとおもってるんです。 で26次元のケプストラムから求めるには32ポイントでのフーリエ変換して指数変換でいいのですかね。
FFTじゃないスペアナってないかね? 低域の分解能がほしい。時間分解能もほしい
スペクトルではないけど、ウェーブレットでも似たことはできる。
550 :
デフォルトの名無しさん :2011/12/10(土) 07:35:19.94
Javascriptだけででバイナリ作るとか怖いFlash要らないな
exeならいいのかとかFlashに何の関係がとか
exe?riffだろ常識的に考えて…
>声優によるオリジナル原稿の読み上げ
声優パートを試し聴きされる方へ データの種類が多すぎて,どこから聴いたら良いかわからないという方のために, 「おすすめ」を書いておきます. まず,どんな発話内容であるかその全体を把握したいという方は,ステレオで聴ける方は, 自然な話速での 男女ステレオデータ:5分45秒:第1回収録版 もしくは 同:第2回収録版をお聴きになってみて下さい. モノラルでしか聴けない方は, 自然な話速での男女モノラルデータ:5分45秒:第1回収録版) もしくは 同:第2回収録版をお聴きになってみて下さい. なお,研究素材として用いるために, 音声データにはコンプレッサなどで音圧を上げる処理を施しておりません. CDなどで言えば,マスタリング工程前のデータということになります. このため,全体として音量は小さめですので, パソコン側の音量を最大にして試聴して頂ければ幸いです. ボリューム最大でも音量が足りないパソコンをお使いの方は, 簡易コンプレッサで音量を上げた 大音量版:ステレオ:5分45秒:第1回収録版をお聴き下さい. 無処理ならではの伸び伸びとした魅力は失われますが, 全体の感じはつかめると思います.
著作権等に関する注意 音声の研究の進展のため,あるいは,信号処理技術の発展に寄与するためであれば, 広く利用を許可したいと思います. ぜひ,企業や大学での研究で,素材として使って頂ければと思います. また,学会発表,展示会発表などにおいて, 本データを信号処理したもの,あわせて,比較のために本データそのものを 参加者に聴かせることは可能です. 新製品や新技術や技術改良の効果を具体的にアピールするために, 本素材と本素材をその技術で処理した結果の音声を発表 (学会,展示会,Webページに掲載,CDとして配布) することも許可したいと思います. どうぞ,技術の進歩のために有効にお使いになって下さい. なお,役者志望の方が 練習または評価を受ける目的で本データベースを利用するようなことは構いません. たとえば,対話型の音声の片方に自分の声を挿入するなどです. データセット3のように音楽を付けたデータを製作し発表することも含め, 良識の範囲内であれば許可します. ちなみに,データセット3の音楽は, 本データベースのために作曲し製作したオリジナルソースです. 音声の基準(2つ上の段落で説明した基準)の範囲内であれば, 発表や展示やWeb掲載に利用可能です. BGMが加算されたソースに対する音声認識や話速推定などの研究で, 標準ソースとして利用していただければ幸いに存じます. 原稿「雪」については,本データベース用のオリジナル原稿ですので, 原稿そのものについては, その一部または全部を許諾無しに無料で利用(読み上げ,テキストの掲載や印刷や配布など) してもらって構いません. ただし,「雪」と読売新聞の「編集手帳」の発声データについて, 意図的に原稿とは違う意味になるように 編集することはお断りします. (続く)
公序良俗に反する利用を禁じます. 声優の方々やアナウンサー方々は, 音声研究の進展のためになることを理解して 協力して下さっていますので, 発声して下さった方々に迷惑がかかるような行為があった場合は, 必要な処置をとらさせて頂きます. 義務ではありませんが, 本データベースの音声や原稿を利用したものを発表・配布する場合は, 「話速バリエーション型音声データベース(SRV-DB)を利用した」 もしくは, 「SRV-DBを利用した」 ことを 書き添えて頂ければ幸いに存じます. 定期的に「SRV-DB」でWeb検索し,本データベースが 期待どおりに 皆さんに活用して頂いていることがわかれば, 今後,さらに充実したものにしていきたいと思っております. 謝辞 声優による読み上げに関しまして, 第1回収録に出演して下さいました,男性声優VM00様,女性声優VF00様には, 非常に遅い音声から,非常に速い音声まで,かなりの幅があったにもかかわらず, どの話速でも魅力的で心のこもった 聞き応えのある音声を発声して頂きました. お陰さまで,本データベースは研究用としての価値はもちろん, 聴くだけでも音声の素晴らしさを味わうことができる大変充実したものになりました. ここに深く感謝いたします. また,第2回収録に出演して下さいました,男性声優VM01様,女性声優VF01様には, さらに,第1回収録での 発話ペースにあわせて発話して頂くという条件で収録させて頂きました. このような難しい条件にもかかわらず, 個性的で魅力的な役を演じて下さいました. その結果,全く同じ発話速度に制御された上で,異なる男女の ペアの方々が それぞれ個性あるキャラクターを演じて下さっているという, 貴重なデータベースを完成させることが できました. ここに厚く御礼申し上げます. (続く)
さらに,本研究の意義をご理解下さいまして, 声優の方々へ我々にかわって事前説明をして下さいました 芸能事務所の チーフマネージャー様に厚く感謝いたします, 氏のご協力なくしては,データセット1〜3はここまで充実させることは 出来なかったと思います. ここに厚く御礼申し上げます. その他,発話のプロフェッショナルによる読み上げ(データセット4と6)に関しましては, 株式会社エス・オー・プロモーションのご協力を頂きました. 本研究の意義にご理解下さいました佐藤邦宏様, 話速を厳密に管理して発声して頂くというたいへん難しい注文に 応えて下さいました,落合こず恵様(話者PF00), 小松上花様(話者PF01), 山田直広様(話者PM00)に感謝いたします. また,編集手帳につきましては, 読売新聞社より,文章掲載と 音声ファイル公開の許可を頂きました.ここにお礼申し上げます.
なんで違うファイルに同じファイル名付けるんだ?馬鹿じゃねーの?
長文いらない。
リンク先見りゃわかるのにわざわざコピペするって馬鹿じゃね
563 :
片山博文MZ ◆0lBZNi.Q7evd :2012/01/15(日) 11:05:55.31
音声を分解して、分解した音を選んで削除するのってできますか?
>>563 DFT(FFT)+IDFT(IFFT) でなんとかなりませんか?
>>564 大変忙しいので、音声を分解するソフトを作ってもらえませんか?
お願いします。
ここのスレってうpろだ無いん…
分解ってのは楽器ごとに分解? それとも周波数成分ごとに分解? 楽器ごとなら非常に難しい NMFとかで調べてみるといいかも 周波数成分ごとならいらない音を フィルタで除去すればいい ノイズだけ除去ならスペクトル減算法とかある
568 :
550 :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; } } 引数を変えるといろんなフィルタができるよ ググればでるよ
どうでもいいけどちょっといい? 見るからに双二次フィルタだけど、3タップって言うの?
俺言語っていってるんだから何でもいいんじゃね?
0デシベルでもDACでクリップするからマイナス何デシベルにしなければいけないって本にかいてあったんですけど ほんとうですか?
画像解析と音声解析はかなり似た技術だ。前者の知識が後者で役立つことも多い。 可変閾値、フーリエ変換しかり。ゆえに音声の学習が終わったら画像処理も 勉強しなされ。ヒューリスティックな音声解析のソフトが少ないので諸君の 研究テーマにしてはいかがだろうか?
>>571 DAC内蔵のオーバーサンプリングとかのデジタルフィルタがあれば
そこでクリップする可能性はあるね
でもかなり高い周波数で相当変なことしないと大きく飛び出ることはないよ
普通は気にすること無いと思う
可逆圧縮には使えなさそうな印象。
10倍といっても、いままでO(10f(n))だったのがO(f(n)に)なっただけだからな 10乗とかなら意味あるけど。
このスレサウンドプログラミングなのに音出るプログラムアップしないよね
同意。フィルターの使い方みたいなのばっかで…
>>568 みたいなのがもっと増えて欲しい
アップローダからつくらんと…
この手のは言いだしっぺがやらなきゃ誰も動かんよ
オイオイ
>>568 こそが「フィルターの使い方みたいなの」にモロ該当するだろ
実装が欲しいだけなら某cookbookでも参照しろよ
音出したけりゃ今のところ基本波形はBandlimited Synthesisでファイナルアンサーだし
あれ、語ることもう無くね?
1bit(2.8224MHz)→PCM(44.1kHz)の手順が知りたいのですが。 1または0のDouble値をFIRのLPFに渡してDouble値を貰う。 64サンプル毎にもらったDouble値を出力する って事であってますか?
>>584 スレ内くらいは検索しようや >>446-
>>585 >446の流れは読んだつもりですが、わかりませんでした。
スミマセン。
>>586 1bit のデータは一つ前の値に対して-1なのか、 +1なのかを記録してるのは理解してる?
pcmは今の値が幾つなのかを記録してる
リンク先にソースつきのプログラムあるのに 同一人物としか思えない
>>587 ありがとうございます。
では、1または-1の値をFIR-LPFフィルタに渡すということでよいのですね?
その結果の値がマルチビットになるのでしょうか?(もしそうだとすると1bitの入力なのになぜマルチビットが返ってくるのかわかりませんが)
そうであれば、1/64に間引きして出力すると44100HzのPCMが出来るという事になりますか?
>>588 ソースコードへのアクセスの仕方がわかりませんでした。
あきらめたら?
>>589 理解まったくできてないようだね
数値とグラフを書いてみなよ
可視化するとわかりやすいよ
>>591 >数値とグラフを書いてみなよ
何の数値とグラフを書いたらよいのでしょう?
下記の処理はできるようになりました。
1.PCMデータ入力
2.FIR-LPF
3.PCMデータ出力
1ビットずつデータを取り出す事はできます。
1と-1の連続したデータを次にどうすべきなのでしょうか?
x+=1 x-=1
>593 値を加算して累積させていくということですね。 ここまではOKです。 思いつきで、1bitの入力データをshort型の配列に加算しながら格納しました。 44100HzのPCMにするため、単純に1/64に間引き(64サンプルごとに値を出力)してWAVファイルとして保存しました。 音として確認できるものはできたのですが低音のみで、4kHz以上の周波数成分は出力されていませんでした。 1bitの累積値の配列は何型に保存すべきでしょうか? Long,Integer,Short/Single(float),Double 次にこの累積値の配列をどうすべきでしょうか? ご指導いただけると助かります。
1ビットデータ(1または-1)をFIR-LPFのバッファ(doubleの配列)に格納し、64サンプル毎に値を取り出して出力しました。
FIRの係数は
ttp://achapi2718.blogspot.com/2001/04/fir-javascript.html を使用して、作成しました。
FIR-LPFのタップ数:513
サンプリング周波数:2822400
カットオフ周波数は22050
音がはっきり聞こえるようになってきました。しかし、盛大に「シャー」というノイズがのっています。
係数作成時の指定が悪いのでしょうか?
どなたかご助言をいただけるとありがたいのですが。
>>595 まず1bitデータがちゃんと作れてないと思う
フィルターは確か3TapのIIRだった記憶がある
sonyの論文に載っているが、何処にあるか覚えてない
ちなみにノイズが40kHz以上なら正常だよ 大抵の1bit audioはすべて40k以上のノイズ吐いてます。 再生できるスピーカー少ないし、聞こえないし、測定も難しいから気にするな
>>596 、
>>597 ありがとうございます。
FIR-LPFをひたすら追いかけていましたが、IIRなんですね。
まずはIIRの勉強をする事にします。
>まず1bitデータがちゃんと作れてないと思う
フィルタをかける前の1bitデータに問題があるという事でしょうか?
もう一度見なおして見ることにします。
>>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ケーブルを開発するにあたって参考になるページなどありましたら教えていただけると幸いです。
よろしくお願いします。
いきなり出だしから間違えてる まずDAW内でMIDI"信号"そのもののやり取りは発生しない MIDIイベント構造体でやりとりすればいいだけ(正確にはVstEvents*) 初っ端からそんなんで大丈夫か?
602 :
600 :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メッセージを取得するための関数、と理解しました。
603 :
600 :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を鳴らすまでやることができるようなものをイメージしています。
よろしくお願いいたします。
日本語が難解で何をやりたいのか頭に入ってこない。もう少し簡潔に書けない?
606 :
600 :2012/04/23(月) 10:41:56.25
VstEvents* は VSTHostとVSTiの通信に使うもので、 MIDIシーケンサーとVSTHostの通信の際には 生のMIDIメッセージのやりとりが必要なのではないか?という疑問です。 ただ、VSTSDKの中にMIDIシーケンサー用のプログラムが用意されていて、 それをVSTHostの中から呼べるようになっていたりするなら、 わざわざMIDIシーケンサーや仮想MIDIケーブルを自前で用意する必要もない気がするのですが そのあたりのことがわからないので教えていただきたいのです。 自分が作りたいものはSMFをロードして音源としてVSTiを使用して音楽を再生する 簡易DAW的なものです。
日本語は分かるし、何をやりたいのかも分かるが
途方も無い勘違いをしているのでどこから正していけばいいのか・・・というより
>>601 で解決しなかったので驚愕ってとこ
VSTホストは自分で実装するんだよな?
アプリのvsthostをそのまま使うわけじゃないんだよな?
いろいろと壮大な勘違いだらけ。 midiシーケンサーはmidiイベントを出力するもの。 midiシーケンサーでvstiを鳴らすにはmidiイベントをvsteventsに変換しないとvsthostが受け付けない vstiの音はデジタル信号なのでシーケンサーとは時間(クロック)同期しないといけない。デジタルだから。 midiでvtsiを鳴らすだけならvsti対応のmidi playerであってdawではない。簡易dawはmidiは扱わない。オーディオのみ。 仮想結線するのと、ソフト内部でmidi信号をvsteventsに変換してシーケンスするのは広義では同等。しかし、これを仮想Midiケーブルなんて発想には普通はならない。 vsti とsmf以外はすべて自前で用意しないと駄目。midi playerとvsthostが内包したソフトを作るのでしょ?その二つが内包しているのに、それらを繋ぐ部分(仮想ケーブル?)を用意するってどのような発想?
「自分は頭が良くて詳しいです」的な自己満足レスの典型だぞ。 相手は超初心者なんだからもう少し優しく教えてあげないと。 さもなくばスルーでOK
MIDIは実際わかり辛いけどなw シーケンスファイルも通信データもケーブルも全部MIDI付くから まずMIDIの解説サイト熟読してMIDIメッセージとsmfファイルフォーマット理解しないと無理じゃね
そういう話だったか?
612 :
600 :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ホスト側に渡してしまえばいいという理解で合っていますでしょうか?
613 :
600 :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に送ってから変換してもどちらでも大丈夫なのでしょうか(単純に設計による感じな気もします)
全然関係ないけど仮想ケーブルと言われるとreasonが頭をよぎる
vsthostとmidi playerは別のソフトとして作るの? 一つのソフトならどこで変換しても同じじゃないの? ソースのここからはvsthostって分けるのは勝手。何を心配しているのかわからない。素人プログラミングならソースを書いていろいろ試した方が、ここで調べるよりためになるよ。 仮想ケーブルはイレギュラーなものだから忘れた方がいいよ。きみの作りたいものは普通のソフトみたいだから
えーとさ、まずVST SDKの仕様書を読めよ そうすりゃ今までバカな質問してたってことがはっきりするから 勝手に仕様を想像して、その想像を元に質問してるから(俺らの)話が通じないんだよ はっきり言って埒があかねえ
自演乙
シッタカの自作自演うぜえな その程度の知識で自慢したいわけ?
何これコント?ワロタ。 わざとすっとぼけた事言っているようにしかみえんw 自演じゃなかったら、からかわれてるんじゃねーの?
とんでもないバカは実在するんだよ。
621 :
デフォルトの名無しさん :2012/04/27(金) 03:14:41.65
622 :
600 :2012/05/03(木) 00:40:53.79
お礼のレスが遅れましてすみません。
>vsthostとmidi playerは別のソフトとして作るの?
いえ、同じソフトとして作ろうとしています。
ですので、仮想MIDIケーブルのようなものは全く必要なく、
VstEventsをmidiシーケンサー側で時間管理して正しいタイミングで
VstHostに送ればよいだけですね。
色々とよく分からない勘違いをしていたようで失礼しました。
>まずVST SDKの仕様書を読めよ
vstの仕様書とは
http://www.gersic.com/vstsdk/ これでしょうか。
いろいろ読んで勉強してみることにします。
アドバイスありがとうございます。
また何か質問させていただくことがあるかもしれないですが
よろしくお願いします。
いえいえ
マイクで拾った音をライン入力から取り込んで 音の強さをデシベル表記で騒音データベースに記録し続けるようなシステムを 開発しようと考えています。 そこで疑問なのが、ライン入力とデシベルの換算部分です。 ソフトで取り込んだPCM波形強さはマイクの感度やオーディオボードのADC、 またWindowsでしたらボリュームコントロールなど 様々な個所で音量調整されます。 正確にデシベル数を入力したい場合に何か良い方法はないでしょうか?
実測校正。 測定器なんてそんなもん。
なるほど。実測校正ですか。 そうすると正確に指定したデシベルの騒音だせる機械が必要になるのかな 売ってるのか不明だけど。
だったらログ機能のついた測定器買った方が安いって話だわな
自動作曲ソフトを作りたいんだが本格的な作曲アルゴリズムを考えてくれ
まずは自分で調べろよ。
>>632 調べ方が足りないなー。
古典的だけど、まずはGTTMあたりから勉強してみたらどう?
復帰テスト
ハウリング除去のアルゴリズムを基礎からまとめたサイトとか文献とかがあれば教えてほしい
641 :
デフォルトの名無しさん :2012/09/27(木) 14:37:26.48
SMFプレイヤーを実装するためのユーティリティ(再生、途中停止、途中再生、シーク など) が揃っているC++のライブラリってありますでしょうか? Synthesis Toolkitとか調べてみてSMFをloadするクラスは見つけたのですが、 上記のような機能を有したクラスは見つかりませんでした。 ご存知の方いらっしゃったら教えていただけると嬉しいです。
「MIDI C++ codeproject」辺りでググれば山ほどヒットするけど、 なかなか「これは」というものに出会わないね。 MIDI APIは、オーディオに比べ自由度が高すぎるのが原因だろうね。 結局、シーケンサーを作っている人は、自分用のMIDIライブラリを書いていると思う。
643 :
641 :2012/09/27(木) 21:09:32.94
レス有難うごさいます。 なるほどです。 では自作する場合について試行錯誤してみたのですが、 以下2パターンの方式を考えました。 1. 読み込んだSMFデータからすべてのトラック内のmidiイベントを シーケンシャルに並べ直し、midiイベントごとに再計算されたデルタタイムと 共にデータを格納された配列のようなものを作り、 whileループ内でsendMidiMessage()とsleep(deltatime) を繰り返す 2. 読み込んだSMFファイルからトラックごとにスレッドを生成し、 そのそれぞれの中でsendMidiMessage()とsleep(deltatime)を繰り返す
644 :
641 :2012/09/27(木) 21:10:43.24
最初2の方がよいのではと思ったのですが、 この実装方式だと途中再生やシークの実装ができないような気がしてきました。 1の方だと途中再生もシークも可能だと思うのですが、 >すべてのトラック内のmidiイベントをシーケンシャルに並べ直し、 >midiイベントごとに再計算されたデルタタイムと共にデータを格納された配列のようなものを作り、 この部分の実装に結構手間がかかるのでは・・と危惧しています。 1の方式で正解なのでしょうか。 >すべてのトラック内のmidiイベントをシーケンシャルに並べ直し、 >midiイベントごとに再計算されたデルタタイムと共にデータを格納された配列のようなものを作り、共にデータを格納された配列のようなものを作り、 この部分を行なってくれるライブラリのようなものがすでにあればよいなと思うのですが・・ アドバイス頂けると嬉しいです。
なんか難しく考え過ぎているような気がする。 とりあえずSMFの解析結果をダンプしたり、実時間で少しずつイベントを処理していくだけような 簡単なプログラムから始めたほうが理解が進むんじゃないかと。 ちなみに1の手法として書かれている配列って、 もしかしてtick単位で展開された全演奏データを並べた配列をイメージしてる? 短い曲ならまだしも、分解能が大きかったり演奏時間が長かったりしたら 配列の要素数が爆発しそうな予感がする。間違ってたらゴメン。
646 :
デフォルトの名無しさん :2012/09/27(木) 21:38:41.41
レスありがとうございます。 tick単位で展開された全演奏データ、の意味するところがよくわからなかったのですが、 全てのトラックの全演奏データの配列で、 配列の要素は1つのmidiメッセージとそのデルタタイムを 格納した構造体をイメージしてました。 つまり全トラックに含まれているMIDIメッセージの数が 配列の要素数と同じになる感じです。 こうして一元管理しておかないと途中再生やシークができないと思ったんですが、 イベントごとのタイムを最初から全部計算しておけばいいような気もしてきました。 デルタタイム分スリープさせるという考え方は合ってはいるのでしょうか。
前winで実装したときは再生用スレッド1本用意して、 ・各トラックに処理すべきメッセージがあれば必要なだけ処理しポインタを進める ・1msecのスリープ(事前にtimeBeginPeriod(1)必須) ・全てのトラックがEOTにたどり着くまでループ デルタタイムでスリープ再生すると、恐らく絶対時間が合わなくなる あとはシークも盛り込むのであればノートon/offだけ無視して時間進められるようにするか、 擬似的に状態保持するとか、多少考える必要がある あと厄介だったのは曲中のテンポチェンジかな 時間経過をデルタタイム換算で処理していくなら問題ないけど、 事前にデルタタイムを実時間に変換するなら注意
メロディレイザー1999の作曲アルゴリズムはどんなアルゴリズムを使っているの?
メロディレイザー1999の作曲アルゴリズムはどんなアルゴリズムを使っているの?
>>646 後半変なこと書いて申し訳ない。
ともかく言いたかったのは
>>647 でも書かれてるように
デルタタイムのような相対時間をわざわざ絶対時間に換算しなくても
処理できるんじゃないかな、ってことです。
>>647 巻き戻しできるプレイヤーを作ったことがないので想像ですが、
通常のイベント処理時は状態変化の履歴を蓄積していって、
巻き戻し時はその履歴をさかのぼって処理しなおしていく感じで
過去の状態を再現する感じなんでしょうか?
テキストエディタのUNDOバッファや、各種アプリの操作履歴みたいな感じで。
実際のMIDI機器相手だとエクスクルーシブ等送信順序で動作が色々異なるので ・各種リセットメッセージ ・先頭からシーク位置までのノートon/offメッセージ以外の全てを送信 ってやってた バンクやプログラム、その他の全ての状態を一回通読して必要最低限だけ送るってのがスマートではあるけど、 実機相手だと上手く動作しないmidがあったので、当時上記実装でお茶を濁した まぁそのへんはmidファイルや再生機器次第かと
>>651 なるほど、ありがとうございます。
>>650 を書いた時点ではプレイヤー側が全状況を把握して、
巻き戻しで状況を遡って再現していけばいいかなと思ってましたが、
現在の再生位置に無関係な任意の位置へのシーク、と考えれば
頭からの再生し直す方が実装も一つにできますし、素直な方法だと思います。
653 :
虫頭 :2012/09/28(金) 16:29:17.48
654 :
646 :2012/09/30(日) 16:10:22.63
レスたくさんいただきましてありがとうございます! かなり参考になりました。 とりあえず再生用スレッドを用意する方式で実装し始めてみたいと思います。 また何かわからないことが出ましたら質問させていただきたいと思っていますので お答えいただけると幸いです。
ちょっと質問です。 Windows で OpenAL を使いたいのですが、 最近、OpenAL11CoreSDK を公式から落とそうとしても、500 internal server error が出て落とせません。 何か原因、もしくはミラーサーバなどご存知の方はいないでしょうか?
普通にできるけどな。 ブラウザ変えてみては
657 :
デフォルトの名無しさん :2012/10/25(木) 22:07:25.40
過去質問させていただいた者です。
>>641-654 いただいたアドバイス等に従いまして、TSE3 というMIDIシーケンサーライブラリを見つけ、
Windows XP 上で SMFをロードして内蔵Midi音源にmidiメッセージを飛ばして
音を鳴らすところまでできたのですが問題も発生しており、
また質問させていただきに来ました。
658 :
657 :2012/10/25(木) 22:13:22.31
659 :
デフォルトの名無しさん :2012/10/25(木) 22:17:18.08
一番最後で音が伸びているのは強制終了させているからなのですが、 ノートオフメッセージを飛ばす前にプログラムが終了しているからなのかな? と見当を付けています。が、であれば途中が切れているのはなんなのだろうと・・
ノートONとOFFが極短い間隔で送られてるように聞こえるけど、最後まで再生したときSMFの尺と合ってる? あとはランニングステータスの処理ミスで送信チャンネルがおかしくなってるとか 音は鳴ってるんだし、フルのSMFだとデバッグし辛いだろうからドレミの3音だけ鳴らすような単純なSMF作ってトレース実行してみては?
661 :
657 :2012/10/27(土) 20:34:00.78
レスありがとうございます。 なるほどその方法でトレースしてみます。 ちなみにソースコード的にはざっくりと以下のような感じです timeBeginPeriod(1); do { transport->play(smf, startClock); // TSE3ライブラリ使用 transport->poll(); // TSE3ライブラリ使用 Sleep(100); } while (true); timeEndPeriod(1);
>>661 transport->play()が無限ループの内側にあるのは書き間違い?
TSE3 0.3.1のサンプルを見ると外側にあるけど。
transport.play関数の役割を理解してる? transport.status関数をなぜ使わない?
664 :
657 :2012/10/29(月) 02:04:42.78
レスありがとうございます。
サンプルコードまで見ていただいたようでして、本当にありがとうございます。
その後調査を進め少し進展があったのですが、また詰まってしまっています・・。
何度も恐縮なのですが、よろしければまたアドバイスをいただけますと幸いです。
長文になってしまうのでpastebinに文を貼り付けました。
ご覧頂けると嬉しいです。
http://pastebin.com/FdWfrqUM
質問内容がドキュメント完備されてるライブラリの基本的な使い方なら、流石にこのスレの範疇外だと思うがなぁ
ttp://tse3.sourceforge.net/doc/Article.html ここの Examples of using TSE3 に再生方法書かれてるから、まず永久ループをなんとかしろ
それと startClock の値は?
transport.play の第二引数は再生開始位置だから
src/examples/midifile/midifile.cpp(74行)見る限りじゃ整数型で 0 渡せばいいはず
ライブラリソースに手加えてるなら作業前に全部元に戻す事
とりあえず
>>665 が挙げてるmidifile.cppのサンプルをそのまま動かしてみるとか。
midifile.cppの中身もシンプルだから悩むところは少ないんじゃないかな。
667 :
デフォルトの名無しさん :2012/11/11(日) 05:31:58.52
ケプストラム求める時って周波数データに窓関数ってかけてからもとめますか? ノイズは周波数成分の高いところに出てきそうなので一見いらないように思えるのですが・・・
ノイズのスペクトルひとつひとつも正弦波 そして窓無しで解析するなら正弦波はその周期ぴったりで抜き出さないと正確にフーリエれない
いやいや、正弦波はひとつも無いだろ。 例えばナイキスト周波数ギリギリのサイン波とよばれるものなんか矩形波だし。
真の矩形波なら無限にスペクトルが伸びてることになるよ?
真のフーリエ変換をすればそうなる。
ナイキスト周波数ギリギリの成分も窓なしだと標本化数が奇数か偶数かで精度が変わるよ
673 :
657 :2012/11/16(金) 12:30:57.99
>>665 >>666 レスありがとうございます。
お礼が遅れましたすみません。
その後調査を続け、なんとかSMFを正常に再生させるところまで行きました!
tse3/の中に plt/Win32.cpp というファイルがありまして、
win32api用の実装が途中までしかされていないのが原因だったようです。
timeGetTime関数等を使って調整することでうまく再生されるようになりました。
また分からないことが出てきたら質問させていただきますので宜しくお願いします。
>win32api用の実装が途中までしかされていないのが原因 へー
675 :
657 :2012/11/16(金) 21:00:35.60
よくよく見てみたらwin32.cppの先頭のコメントに 「このモジュールは途中までしか実装してないので適当に微調整して使ってね!」 的なことが書いてあったのでした笑
>>667 スペクトル→ケプストラム変換の逆変換には窓掛け要らないよ。
FFTでボーカルキャンセルのコード書いているんですが、 4096サンプルでLRそれぞれFFTしたあと、 各周波数の振幅と位相を調べて、 位相と振幅が近いもの(定位が真ん中に近いもの) をボーカルとみなして、実数部虚数部を0にしてから 再度iFFTかけてPCMに変換するという処理をかいたんだけど なんか、ボーカルが半分くらいの音量になってるけど消えないんだ。 なぜかわからないので、教えていただけますか?
定位が真ん中をなくすのだったらfftしなくてもできるじゃん 左右の引き算とかで。モノラルになっちゃうけど
カラオケ作るソフトで BestPracticeってのがあるんだけど ステレオ保ったまま周波数域で間引くなら それ参考になるよ
>>680 BestPracticeもKaraokeProcessで、
LRに逆位相RLを足しこんで作ってますね。
LPF/HPFとPAN計算で工夫はしていますが・・・
FFTでのvocal cancelのサンプルプログラム無いですかねぇ
声をFFTすると基音〜5倍音くらいまでが取れると思う しかもFFT解析結果はパルスではなくなだらかに周波数成分が分散する なので、音声だけ半分くらいカット出来てるなら、0fillした帯域の周辺もある程度カットしてやればいんじゃね?
soundengineのボーカルカットはエフェクト挟んであるボーカル以外はほとんどカットできてる が、あんまり重くないしFIRIIRかそこらへんか上記のやり方でやってるんだろうな ステレオ維持できてるし。幅って設定項目あるからちょっと余計に削るといいのかもね
>>677 位相を比較する時に、−πと+πは近いと判定してますか?
位相の引き算は、複素数の割り算でできるので、
それで判定するのが楽だと思います
同時に振幅の比較もできますしね
見当ちがいのことを言っていたらごめんなさい
いえいえ ありがとう
688 :
デフォルトの名無しさん :2012/12/10(月) 10:39:15.81
おっぱい揉んで 激安で抜ける ○1000円〜 「新宿 アイアイ 」 ○1500円〜 「西川口 マーガレット 」 ○2000円〜 「新宿・錦糸町 あんぷり亭 」 「新宿 ダブルエロチカ 」
689 :
デフォルトの名無しさん :2012/12/15(土) 01:29:59.43
windowsxpだとmixerGetNumDevs であとから接続したusbオーディオインターフェース 認識できるのですがwindows7だと認識できなくて オンボのミュージックデバイスしか認識できません。 7でどうにか認識させてミキサーいじる方法無いでしょうか?
自己解決しました
よかったな
これにて一件落着
694 :
657 :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
初期化のタイミングんとこだけならウィンドウ生成関連でモタってんじゃね? よくわかんねーけど、forの手前にSleep(500);入れてみるとか あと、ダブルバッファに同じポインタ突っ込んでるようにみえるけど、合ってんのコレ?
同じポインタ入れてるのはたぶんループ再生を意図してるからだと思う。 「プツッ」は再生したWAVEデータの最初と最後の振幅値に大きな差があるんじゃない? lpWaveDataのデータの前半と後半をそっくりmemcpyとかで交換([A][B][C][D]→[C][D][A][B]に) して、[D]と[A]の間でプツッがでるならこれが原因かと。
クリックノイズにはアンプエンベロープ
698 :
デフォルトの名無しさん :2013/01/17(木) 18:00:33.82
レスありがとうございます。 お礼が漏れておりました。。失礼しました。 >「プツッ」は再生したWAVEデータの最初と最後の振幅値に大きな差があるんじゃない? まさにこの通りでした。 プログラムのバグで、波形がなめらかな曲線を描いてなかったようです。 ありがとうございましたm(_ _)m
既存のソフトがあまりにクソなのでMIDIシーケンサ作ることにした。
>>700 Abletonでも素直に使っとけよ、良いもの素直に認められない偏屈が世界を変えれると思う?
702 :
デフォルトの名無しさん :2013/03/20(水) 05:03:08.15
703 :
541 :2013/03/20(水) 22:08:59.28
盆回り
705 :
片山博文MZパンク ◆0lBZNi.Q7evd :2013/03/30(土) 18:14:11.02
age
ここのことか
void lopass(short *in, float *out, long sanprus, float cut);で C言語でしローパス作ってください inに入力 outが出力 sanprusがサンプル数 cutがローパスの周波数です。 以上
サンプルの綴り間違ってるし、日本語間違ってるし、ここは宿題スレじゃねーし、ナニ人なのお前
sanprus ww ローマ人じゃね?w
まあ綴りは目をつぶるとしても その条件だけでは作れないわな
学生の宿題ならいいが、この時期なら新入社員の可能性も
712 :
541 :2013/04/07(日) 09:35:48.57
宿題スレにいけ
[0.5 0.5] でも立派にローパスだしな。 あの書き込みでは何をしていいやら。
ん?反論がなければ俺の勝ちだが?
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;
}
平均値で十分 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; } }
量子化ビット数が16bitなのは関数インターフェースから想像つくが、 カットしたい周波数だけ渡されてもサンプリング周波数の指定無いから無理だろ? って思ってたけど、無視すればよかったのかw
cutはナイキスト周波数単位かもしれん
サンプリング周波数指定するよりも何らかの正規化周波数使う方が普通ですね
>>707 FIRフィルタだとすると
先ずFIRフィルタの係数を逆DFT+窓関数等で求める
そして、その係数を使ってFIRフィルタする
ググれば、C言語で係数を求めるプログラムやFIRフィルタするプログラム
がころがっているよ
723 :
デフォルトの名無しさん :2013/04/12(金) 22:26:10.04
「今でしょ」 ↑寒い奴登場 つーか、お前らの周りにもいるだろ 自称明るい人、自称おもしろい人って奴 結局ソイツらってさあ 流行りの芸人のギャグとか流行りのCMとかをパクってるだけに過ぎないんだよね ワイルドだろぉ、もそろそろだしね 職場とかクラスの人気者で笑ったことがない なにがおもしろいんだろ? テレビの真似してるだけなのに
1. 他人の発言をさえぎらない 2. 話すときは、だらだらとしゃべらない 3. 話すときに、怒ったり泣いたりしない 4. わからないことがあったら、すぐに質問する 5. 話を聞くときは、話している人の目を見る 6. 話を聞くときは、他のことをしない 7. 最後まで、きちんと話を聞く 8. 議論が台無しになるようなことを言わない 9. どのような意見であっても、間違いと決めつけない 10. 議論が終わったら、議論の内容の話はしない
いいからキチガイは病院行けよ
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のスキルを問うものに対しても、「 実務経験がなければ意味がない 」 と言う現場の声も
反映した。
コンソール研究所の開発現場から一人の声を拾ってみた。
(以下ソース参照)
1. 他人の発言をさえぎらない 4. わからないことがあったら、すぐに質問する この二つは矛盾しています 仮に後で質問するとすればメモを取らなければならず 5. 話を聞くときは、話している人の目を見る 6. 話を聞くときは、他のことをしない ここでまた矛盾が拡大します 10. 議論が終わったら、議論の内容の話はしない これは何を言ってるのか判らない
人間の耳に聞こえない192kHzとかもオカルトじみてるよなあ ブラインドで聞こえなくてもそれ含んだ音楽聴けば高音の伸びが違うとか言ってるけど それがガムラン音楽というどっかの民族の音楽しかないらしいし
犬笛の音でも再現したいんじゃないの
1kHzとか低くても三角波とか矩形波になったら48kHzごときじゃ再現しきれないんだから必要じゃないの?
>>729 単体で取り出しても認知できないから「聴こえない」というわけでもないようだね奴らの言い分だとね
研究目的や特殊な用途で高サンプリングレートが必要なら理解出来るが、 人が聞くこと前提の音楽再生用途では不要だよ 高音質LANケーブルとか信じてるキチガイなんて相手してらんねーよ
加工するときに情報が落ちるようなケースだと元が細かい方がいいんじゃ?
それを「特殊な用途」といってるんじゃなイカ?
そもそもスピーカーのf特が20kHzかそこらだから。 しかし生のガムランゴングなら有り得るかもな。 耳には聴こえなくても体に高周波の空気の振動は伝わるわけで。 うんこしたくなるとか。
今すごくしたいです
個人的には192kHzとか不要だと思ってる。 でも、サンプリング周波数を高くするのは定位の精度に影響するんじゃないかな。 ステレオ再生の時は、サンプリング周波数が左右の時間差(位相差)の最小単位を決めるわけだからさ。
>>733 そういうけど、シールドしてないLANケーブルが発するノイズは相当なもんだよ
それがアナログ回路に回り込んでオーディオ信号を濁すことは十分にあり得る
なんでアナログ回路を電気的にも電磁波的にもシールドすれば充分とは考えないのだろう。 そもそも、音源であるマスターレコード自体がデジタルデータでしかないと言うのに。
アナログ回路を電磁波的にシールドするとか簡単に言ってくれるねえ EMCは出さない方法があるなら出さないのが一番
誤 EMC 生 EMI
誤 生 生 正
emi omi
制作用途とかではミックスとか加工を適確にするために、 ハイサンプリングレートはいいと思うけどね。 だったらマスターそのままよこせよってことで ハイサンプリングレートデーターになるんだろうね。
「LANケーブルが発するノイズ」って、マジで言ってんの? LANケーブルが拾うノイズならまだわかるが、ケーブルがノイズ発するわけねーだろ そもそもLANからのノイズが耳で解るレベルで乗っちゃう設計じゃ、どんなケーブル使っても同じだよ
シールドしてないLANケーブル
>>746 >ケーブルがノイズ発するわけねーだろ
お前がそう思うんならそうなんだろう
お前の頭の中ではな
幼稚だな。
↑ 鏡に向かって何言ってんの?
751 :
デフォルトの名無しさん :2013/04/16(火) 22:20:11.99
ここはケーブルの話になると盛り上がるのかい? つーか、ノイズ出すほどのケーブルなら、LANのパケットにもノイズ乗るんじゃね? 通信不能なくらい。
自分が出した電磁波が自分にとってノイズになるケースもあるとは思うけど LANはノイズを受ける事についてはある程度は強いよ 差動だから
スカラー波でも出してろ
女の子の車の排気ガスフェチ! 女の子がエンジンをかけて後ろから白い煙出てたらたまらん(笑) 昔出会い系で吸わして貰った(笑)
756 :
デフォルトの名無しさん :2013/04/20(土) 19:04:48.58
曲と曲を比べてどれだけ似ているかを表示するモノを真剣に作りたいと思う(ターミナルに表示)。 measure :: songA -> songB -> Float な感じ? 上の人たちに会話に着いていけないぐらいの初心者だけど、頑張りたい。 皆がどのような工程をソフトを作ってるときに辿っているのか分からないけど、DFDなど-> コーディングな感じで行きたいと思う。 出来れば何か道筋みたいなものを教えてもらいたい。
何か閃くまで寝とけ
>>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];
}
}
どうかなそれはw 手始めにコード進行を解析するプログラムを考えてみれば? できるかどうかわからんけどw
似てると言っても色々だ 曲のどんな特徴の類似度を計りたいかによるね
単に波形の類似性を見たいのなら相互相関なんじゃないの? 波形の頭を揃えるのも必要になるけど
コード進行が似てたら似てるように聞こえるし キーが違うと似てない曲になったりもする
763 :
デフォルトの名無しさん :2013/04/21(日) 01:12:17.16
>> 758 プログラミングもう一度勉強します。java? javaでスペースインベーダーぐらいしかプログラムしてない。 ピアノの楽譜を眺めていて、音符?の配置が似ていたら「曲が似ている」んじゃないかな?の思ったのが始まり。 音の高さより波長の類似性をみた方がいいのかもしれない。 PCMデータの取扱いは javax.sound.sampledパッケージでいけるのかな?
FFTかけて周波数成分の特徴の類似度比較なら意味があるかも知れない
>>764 おまえはFF3の劣化コピーからやりなおせ
766 :
デフォルトの名無しさん :2013/04/21(日) 20:27:57.37
FFTとかFF3の略って何なんだろうか? ファイナルファンダジーしか出でこない。
ふぁーすと ふーりえ たくてぃくす
768 :
デフォルトの名無しさん :2013/04/21(日) 22:28:35.74
わかった。フーリエ変換か。 効率的にはFFTがいいらしいが、分かりやすさの為にDFTを選んでみる。 何か、源波形や周波数特性、フーリエ逆変換などあるみたいだけど、どれが良いのだろうか? 曲が似てるって思った時って、音階など、振幅や音の高さが似ているとき?
リズム 旋律 和声進行 音色(編成、声色、残響など) パターン認識だよ。 FFTの周波数領域や波形を見たところで似てると「感じる」かどうかは判らんだろう。 リズムを比較するのがせいぜいだろうな。
単純にFFTして周波数成分の比較じゃ時間軸がちょっとでも揺れたら取れなくなる 散々言われてるけど、最低でもコード進行識別出来ないと無理じゃね
まあFFTも初めてみたいなんだから、 曲全体のスペクトル見て、似てる似てないでも いいんじゃないかな、最初は。 リズム主体の曲か、ハーモニー主体の曲か、 めちゃくちゃな曲か、くらいの分類はできるよ。
BSDライクなライセンスのOpenAL的なライブラリってないですか? いつのまにかLGPLになってやがった・・・
オープンソースのタイムストレッチライブラリってSoundTouch使っとけばオケ?
ここでいいのかわからないのですが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;
774ですが自己解決しました。
俺も自己解決した
じゃあ俺も
偉い人が「○○しましょう」「○○はやめましょう」って沢山言ってるわけだが、 大抵の発言は正しい。 しかし、偉い人の言うことをそのまま実行することが世のため人のためとは いえない。 てなわけでマナー講座を開講することにしよう。 第1弾として、「自己解決」について問題提起する。 なお、このコーナーの記事は管理人の独断に基づく記事なので、 世間一般の考えとは違うかもしれない。 私が間違っていたら積極的に議論して欲しい。ただし「荒らし」はやめてね。 掲示板で質問して、暫くしてから「自己解決しました」って書き込む人が多いよね。 きちんと「自己解決しました」って書くことで、掲示板の住人は答えを書く手間が省ける。 だから自己解決したことを伝えるのは間違いではない。 でも、あなたが使っている掲示板はGoogleが巡回している。 あなたが書いた質問はGoogleに見られている。 似たような質問を持った人があなたのいる掲示板にやってくる。 でも、そこの掲示板には答えがないので役に立たない。 訪れた人はあなたを憎む。 だから、自己解決したときは、解決方法も書きましょう。 以上
779 :
デフォルトの名無しさん :2013/06/02(日) 10:05:47.13
はい先生(AAry
781 :
デフォルトの名無しさん :2013/06/09(日) 06:40:02.83
waveOut系の再生で、初っ端勝手にフェードインするようなんだが、仕様かな? 同じデータをDirectSoundで鳴らしてもそういう現象は無いのだが。 できれば勝手にフェードインをやめさせたい。
それだけじゃわからん ソースでもうp
>>784 じゃ理解力のあるあなたに説明してもらおうか
787 :
デフォルトの名無しさん :2013/08/07(水) NY:AN:NY.AN
すっごい初歩的な質問で申し訳ないんだけどこういうのを作る時に使う言語はやっぱりC言語なの?
こういうのって?
まぁC/C++が多いんだろうけど 別にJavaでソフトシンセとか作ったっていいんだぜ 今時のCPUパワーなら余裕
あーごめん説明足りなかった
ソフトシンセとかもっと言えばDAWそのもの
>>790 やっぱりC辺りなのか本買って勉強してみるサンクス
Cで挫折したら JavaScriptのWeb Audio API試してみてね
PreFEstの実装のソースコードってどこかにないですか?
すっごい初歩的な質問で申し訳ないんだけど基本周波数の推定ってどうやるの?
FFTして調べたい基音のある帯域のピーク(山)を全て列挙 列挙したピークから倍音成分を必要なだけ取得(3〜5倍音程度?) 倍音の合計レベルが大きい物を基音として採用 倍音成分の乗り方がわかってる音なら合計レベル算出時に係数として加味 あと、このままだとFFTの低音域は制度が悪いので基音ピークの左右のレベルから補正かけてあげる
基本周波数は、波形の繰り返し周期の逆数になる。 別の言い方をすると、 隣接する2つの倍音の差の周波数が基本周波数になる。 音によっては基本周波数のレベルが低いもの、さらに存在しないものさえある。 また鐘の音のように基本周波数を特定しずらいものもある。 初歩的どころか、とても難しい解題だよ。
>>794 必要な精度、許される処理時間によってさまざま
FFTですむ精度で良いなら
>>795 のやり方が簡単
DSD to PCMは開発経験があり、FIRまたはIIRでローパスフィルターをかけて 目的のサンプリング周波数に間引けばOKですよね。 逆にPCM to DSDの工程がよくわかりません。 とりあえず、2822400HzにアップサンプリングしてLPFをかけることになるのでしょうか?
とりあえず、ΔΣ変調を調べてみたら? 1次ならすぐできるし感覚をつかみ易いでしょう 高次になるとそれなりに知識が必要になります
ありがとうございます。 ΔΣ変調を調べてみると難しい言葉ばかりで理解できないのですが、 ノイズシェーピング処理の事をいうのでしょうか。 現状の理解では以下の流れになるのではないかと思っています。 (1)2822400Hzにアップサンプリング (2)LPF (3)高次のノイズシェーピング(1次なら理解したつもりです。) (4)1ビットに変換 高次のノイズシェーピングがさっぱりわかりません。 また何を根拠にdouble型の値を1と0に振り分けているのかも不明です。 アドバイスなどいただけるとありがたいのですが。
ΔΣでノイズシェープされることまで理解できたら、 ほぼ理解できていることになると思うのですが・・・ 次数が高くなると入力信号によって発振する場合が出てくるので その点のケアをする必要が出てきます なぜそうなるのかが分からない場合はデジタル信号処理の 勉強をしっかりやり直しましょう たとえ1次で変換してもS/N比は悪いですが1bitストリームは 作れるのでまずはそれで試してみては? 3次くらいまでは発振の心配はありません
>>801 ありがとうございます。
とにかくやってみる事にします。
最後に1つだけ、ノイズシェーピングをかけたとしてもdouble型の配列が得られるだけですよね。
何を根拠に1と0に振り分けるのかだけ教えていただけませんか?
単純に符号で分ければいいと思うけど。 0は0Vの意味ではなく-1を表すシンボルと考えればいいでしょ。
昔読んだCQ出版の本ではノイズシェーピングは可聴域内で発生するノイズを可聴域外に移す技術だと説明されてました。 ノイズシェーピングを使わずに単に符号で分ける1bitサンプリングではディストーションが掛かった音になってしまうのを 誤差をフィードバックすることで複雑な変化をさせてLPFで取り除けるようにしているってことです。
>>802 どうやらまだ理解できてないようですね
1bitに丸める場合はただのコンパレートです
なので中央値より大きければ1を出力し最大値からの誤差をフィードバックする
中央値より小さければ0を出力し最小値からの誤差をフィードバックする
というような感じになります
>>805 ありがとうございます。
要するに、0以上は「1」、0未満は「0」という事になるのですね。
正の数のときは1から引いた値を、負の数のときは-1から引いた値を
次のサンプルに加算するという事になると理解しました。
>>800 私も数ヶ月前からDSDを始めたばかりなのですが、
(4)のところはサンプリングレート2822400Hzで得られた
double型の演算結果データが正の値ならビットを1に、ゼロ
または負の値ならビットを0にして、1バイトが8ビット(=8個の
double型データに対応)で詰めて並べて、これをDSDデータとして
dsf形式でファイルに書き出したら、とりあえずAudioGateで
再生できました。
よろしければ、お互いゆっくりと楽しみながらやっていきませんか。
HTML5でオーディオプログラミングやっている人いませんか?
友人の結婚式で新郎がギター演奏して、ギター二つあるからってことで式で使ったギターをもらった。 格好良かったから自分もやってみたいところだったが、USBギターケーブルってものを見つけた。 USB GUITAR LINK GUITLINK という製品。 プログラマの端くれとしてはギターの音を拾うプログラムを書いてみたくなったんたけど、 これってどういう仕組みなんだろう? この機器に関係なく楽器用のAPIとかってあるのかな?
ADコンバータにそれっぽい名前をつけてるだけでしょ
ギターの直出力レベルで機器が壊れるってのは初めて聞いた
引用: > 通常のミキサーのマイク入力などにそのまま接続しても正常に音が出ない。 「正常に音が出ない」という表現を「壊れる」と解釈するのは斬新だなw
音が壊れるってことだろ。
>>812 まず、音声を機器に取り込むには、マイク入力と、ライン入力 とかあったりする。
どちらも、電圧をオシロスコープで見ると、よくある音声波形が見えるのだが、
2つの違いは、その大きさが違うということ。(詳しく言うと、インピーダンスの違いが大きいが、それはおいておこう)
ところで、コイルに磁石を出し入れすると電圧(電流)を生じるのは分かるかな。
エレキギターも、コイルが入っていて、弦の振動が、電圧になるのだが、微弱すぎるんだ。
そこで、ギター入力可能な端子というのは、ギターの微弱な電気を、増幅させる回路が入っている。
( 詳しくいうと、入力インピーダンスがすごく高い、かつ、増幅率の高いアンプ、というのがポイント)
つまり、USBギターケーブルっていうのは、いろんなPCにもついている音声入力端子 を、
ギターの微弱音に対応させた専用のもの、と覚えておけばよいだろう。
次に、この音声入力信号を扱うプログラムを書く方法だが、 察しのとおり、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 をインクルードして、、、などとプログラムをすればよいのだが、 一定時間内に処理を終わらせないと音が途切れるなど、各種のオーディオプログラミングテクニックが必要。
ということで、ギターの音を拾うプログラムをしたければ、 (a) USBギターケーブルと通信するための、USB信号を自分で解析して、自分で制御する (b) a はメーカーの用意したUSBドライバに任せて、 自分は、そのUSBドライバが対応しているオーディオAPIとやりとりするプログラムを自作する といったプログラムをすることとなる。 どちらも結構面倒である。 というか (a)は無理。 (a)をやりたければ、ハードウェアの自作から始めた方が早い。 つまり、ギターの音を拾うのはあなたには無理であろう。あきらめなさい。
もっというと、ブラウザ上のJavaScriptでギター入力音を扱える時代が来るかもしれない。 ブラウザがオーディオ入力信号を扱うことができれば、 あとは自分のJavaScriptは、そのAPIに対してデータのやりとりとかメソッド実行を行うだけだ。 今のところ Chrome なら、 WebRTC とか WebAudio API を使えば、 オーディオ入力データを getUserMedia()関数で取得できる。
823 :
デフォルトの名無しさん :2014/01/16(木) 02:58:43.07
mp3等の圧縮って先にLPFで帯域制限してるみたいなんだけど 単にフーリエ変換後ある周波数以上のデータを含めないって帯域制限の掛け方できる?
デジタルフィルターってのが、一般にそれをやってるんじゃないの。 逆フーリエ変換のときに。
普通にできるけど、逆変換した後にフレーム間の波形のつながりが悪くなるから、 フレームに処理前のサンプルを入れる時点で余分にサンプルをとって、 フレームを重複させながら処理するんだったような。
インパルスレスポンスの入ってる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
テープレコーダーがブームらしいけど、テープレコーダーのノイズや信号ずれの音を再現できないだろうか
パンで音の広がりってどうやって再現するんですか? たくさん右に振ったパンとたくさん左に振ったパンを混ぜると広くて たくさんを小さくにすると狭いんですか? あとパンの振ってあるステレオファイルをパンを振るにはどうするんですか?
パン振るだけじゃいわゆる広がりは出ない ディレイをかける
位相をずらす
位相って右から音がなると右のほうが先に聞こえるってことですよね? それと広がりとどう関係するんですか?
単純にそういうわけでもないけど、、 脳が空間を認識するからだろ
横の広がりはディレイ 縦の広がりはリバーブ
ミキサーで加算するとき、信号をソートして小さい方から足していかないと情報落ちが起きますよね このときの誤差ってどの程度のものなんですか?
>>835 式は思い出せないけど、
計算機イプシロン 情報落ち でググって。
その情報落ちより、浮動小数点を整数に直すときのズレが大きすぎるから気にしなくていいよ。
838 :
デフォルトの名無しさん :2014/05/11(日) 11:50:22.46 ID:0MhL7reQ
最近のソフトシンセの機能と音質の凄さに、 「これじゃあ、わざわざ、立派な外部スピーカー買わなくても良いじゃんw」 とさえ考えてしまう俺がいるのであった...。 プロはどう思うか知らんが、素人だと、そこまで考えてしまうくらいだから。
そうなんだ ソフトにしろハードにしろシンセで作った 濃厚な音を再現性良く出すには それなりのスピーカーが必要だと思ってた
スピーカーの特性を検出して、 信号にその逆特製を施してやるとかできないもんだろうか?
CONEQとか既にその手の処理は飽和気味だよね
イコライザーっていうものはそういうもののために存在しているわけだが。
リアルタイムに外からの騒音も消してくれるなら良いんだけど 測定時の部屋の反響程度だよね
>>843 言われてみれば、等化器か。
正直、調味料的な見方してた。
補正なんてしたら頭動かせなくなるんじゃん?固定器具必要じゃん?
そんなんカメラで位置検出すれば大丈夫だって
キネクト使えばいけそうやな
サイン波で少しずつ音を上げていかないとプチっていうんですけど、 波形自体がそういう音の成分を含んでいるのか、スピーカーを通すとそういう音が鳴るのか どちらですか?
both
波形の立ち上がり(時間)の事か解像度の荒さの事か分からんけど、 前者ならA点からB点をサイン曲線とかで補間してやれば立ち上がりが若干緩くなる 他のやり方だとオーバーサンプリングして戻してもノイズ消えるんじゃないかな? 後者はそもそも補間してないって話だよね
元々モノラルお音をステレオに二重化するとき 音を左右大きさ変えて音源移動してるイメージにしたいのに なかなかうまくいかないわ
パンを一番左にすると普通左からしか聞こえないけど 実際は右からも聞こえるからな。 反射音なしなら左からしかきこえないってことなんだろうけど。
位相をずらす
音声認識はスレ違い?
ギリありじゃね
857 :
デフォルトの名無しさん :2014/12/12(金) 03:57:40.57 ID:L50nhIUx
ビブラート入れるプログラムくれー
道具に頼らず歌の練習しろ