サウンドプログラミング6 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
DTFなんて持ち出さなくてもIIRで作ったLPF/HPF/BPFなどを組み合わせるのではダメなのか?
一般的にその手のアプリケーションに搭載されているエフェクターってそうやって作られていたような DFTがらみは良く判らないので
ttp://vstcpp.wpblog.jp/?page_id=523
を参考にBFPを組んで実験
同じホワイトノイズに対して通過させる目標の周波数を440Hzとして処理した結果
ttp://uploader.purinka.work/src/1067.png
上から自作BPF、自作CombFilter(freedback型)、AudacityのEQ
自作BPFのスペクトル ttp://uploader.purinka.work/src/1068.png
自作CombFilterのスペクトル ttp://uploader.purinka.work/src/1069.png
AudacityのEQのスペクトル ttp://uploader.purinka.work/src/1070.png
EQに与えたパラメータ ttp://uploader.purinka.work/src/1071.png
自作BPF
通過させる窓は基準周波数から16KHz未満まで用意
通過特性がフラットでない。簡単に補正しているけど十分ではない。減衰し切れていない信号まで加算してしまっているため?
通過させる窓1つに付きBPFを1つ用意して出力値を加算しているためクソ重い(440HzだとBPFは30個以上になる)
自作BPFと自作CombFilterの課題
通過させる帯域と広くしようとすると谷を深くできない
AudacityのEQ
通過させる窓は基準周波数から16KHz未満まで用意
与えたパラメータほどの特性は得られていないけどスペクトルを見た感じでは良さそう
パラメータを動的に変更できない
BPFを沢山使う方法は特性がイマイチな割に重いので筋が良くなさそう
CombFilterで谷を深くしたまま通過帯域を広くできれば軽いし一番良さそうだけどそんなことは不可能か?
AudacityのEQ的なフィルターを作れればいいけど作り方が判らない
うーむ、手詰まりか・・・
>>130
ググっても使用例とか全然出てこないので良く判らないんだけど
FFTは取り得る全ての周波数について計算するけど、その中の一部の周波数だけ計算するって話? >>129
一部だけ計算するという理解でOK
DFTもFFTも波形の周波数特性(振幅+位相)が得られる。
DFTフーリエ変換の定義式どうり計算するだけ
あとはサンプリング分解能(サンプリング周波数÷サンプリング数)を上手く選べば所望の値が精度よく得られる >>133
少しイメージできた、ありがとう。DFTを使って一部を抜き出すとしたら目標とする周波数の付近のみ
DFT結果に相当する波形を生成しそれらを合成するという手順でいいのかな?
ただしDFTだとどうであれある程度の時間分を計算をする必要がありますよね
原理的に周波数分解能と時間分解能の両立はできないと思っているのですが何か改善策はあるのでしょうか?
昔別件でFFTの使用を検討したことがありますが上記の課題を解決できずに棚上げになっています >>134
>原理的に周波数分解能と時間分解能の両立はできない
そうだよ >>135
いやいや横割で何言ってんの?
どうせ不確定性定理のことを言ってると思うけど窓フーリエも何もやってない。周波数一点狙い縛りのときは格段に精度がよくなることを知らないな?
>>134
FFTと違ってのサンプル数2^n縛りみたいな制約が無いんだよね。だから周波数分解能の選択に自由度がある。
あとはDFTの計算さえ間違わなければ、所望の値が求まる。計算コストはNオーダー。 例えば1000Hzの音を拾いたいとき、周波数分解能が19Hzだったりすると1000Hzが正確に拾えない。周波数特性をグラフにプロットすると、1000を中心にして根元周辺に連続的な山ができる。
周波数分解能が1000の約数だと、周波数特性グラフは根元の山はなく、一点だけのピークができる 自分の中での整理もかねて・・・また長くなってすみません
話の発端
ttp://uploader.purinka.work/src/1074.png
この中から必要な音だけを抽出したい
このサンプルは音声ですが必ずしも音声とは限らないです、楽器音の消去・修正なども考えています
オレンジ色の線が基準と思われる周波数を線引きした物です
音声の場合は倍音も必要なのでこの周波数で櫛歯状のフィルターを駆動すれば欲しい音だけ得られるのではないかと考えた
簡単に櫛歯状の通過特性を得られるFeedback型のCombFilterを組んで実験してみたのが>>129の時点
ただし強く掛けるとケロってしまい満足のいく品質には届かず
その原因を推測
1.通過する帯域が狭すぎる?
2.実際の周波数とフィルターを駆動している周波数にズレがある?
3.フォルマントを無視しているせい?
1 これを解決しようと思ったらDAWなどに付いてくる通過周波数と減衰量を自在に設定出来るEQ的な物を用意するしかない?(が、作り方が判らない)
2 この手の解析には通常FFTを用いるけど原理的に周波数、時間ともに少なからぬ誤差が発生する。解決法はない?
3 通過周波数を自在に設定出来るEQ的な物がないと検証すら出来ないのでとりあえず棚上げ。規則的なフィルタを使う限りは解決不可
もう少し細かく制御できそうなBPFでやってみたのが>>132。予想に反してイマイチでボツ
で、現状手詰まり中・・・BEFで間を抑制してみる?ただし帯域と抑制量を個別に制御できないと上手くいかなそうな気がするし作り方も判らない
>>136-137
DFTについて理解が乏しいので変なことを言っていたらすみません
処理する信号が1KHzでサンプル長に1msecかその倍数を選択して1KHzを目標にDFTする?と1KHzに相当する振幅と位相が高い選択度で得られるって話ですよね?
シグナルジェネレータで1秒の1KHzの信号を作ってそれに対して1KHzを目標として処理するならばそのようなことも可能だと思いますが
人工的に処理に都合の良い信号を作らないかぎりそのような状況はまず無いと思うのですが・・・
現実には関連する要素に少なからぬ誤差が含まれていると思われますし .NET Frameworkで使用可能なALAC形式を読み書きできるライブラリを
ご存知ないでしょうか?
16-32bit/44.1-384kHzに対応しているものが希望なのですが。 >>140
ありがとう。
デコードはできそうな気がするけど、エンコードはできないように見える。 >>140
残念ながら24bitまでで32bitには対応していませんでした。 元はjavaみたいだな、javaも同じ仕様なんかな >>140
ALAC.NET自体は24bitまでしか対応していませんが、修正して32bit Integerに対応させる事ができそうです。
refalac.exeでエンコードした32/352.4をデコードしてバイナリ一致する事が確認できました。
ありがとうございました! 音の加工についてプログラムの観点から理論で解説してある書籍かサイトないですか?
例えば、何をどうすればエコーがかかるとか、何をどうすればライブ会場みたいな響きになるとか。
PCMを加工する形で遊んでみたいのですが、とっかかりがなくて困っています。
プログラミングに関してはメジャーな言語を数種類自在に使える職業エンジニアなので大丈夫です。
//スマホのアプリで、普通の音楽をライブ会場風に加工して再生してくれるやつありましたよね。
//あれには大変驚いたとともに、知識があればこんなものが作れるのかと感動し、自分も何か作れないものかと思いました。 「サウンドエフェクト プログラミング」でググると、理論解説した書籍やプログラミング方法を解説したサイトが出てくる すべてサンプルコードつき
http://floor13●sakura●ne.jp/book03/book03.html
http://floor13●sakura●ne.jp/book06/book06.html
http://floor13●sakura●ne.jp/book07/book07.html >>146-147
ありがとうございます。
調べてみます。 漏れは、YouTube みたいに、再生速度が速くなったり遅くなったりするのに、
音程が上下せず、一定にできる秘密を知りたい 秘密もクソもあるかい
CDだって早送りしてもピッチは変わらないだろ
アナログみたいに周波数を上げるのではなくて、データを適当に間引くだけだし データ間引いて再生したらピッチ上がって聴こえるんじゃないの? データを間引くというのは、要するにサンプリングレートを落とす(ダウンサンプリング)ということですよね? 1000Hzのサイン波を倍速再生する場合で考えると、
1秒間で1000個あるサイン波を(1周期で1個と数えたとして)
アナログの場合は、物理的な速度アップの操作(レコード盤なら回転を速めるとか)によって
0.5秒間で1000個分を再生する = 2000Hz
CDの早送りの場合は、1000個の内、例えば100番台(100~199),300番台,500番台,700番台,900番台を間引いて詰めるような感じ(飛び飛びで再生する)
0.5秒間で500個なので1000Hz、ピッチは変わらない
Youtubeなども同様。ピッチが変わらないようにやってるというよりは、CPU負荷軽減のために大雑把に処理してるだけ YouTubeもそうか?間引いているようには聞こえないけど なるほど、間引く間隔が大きいんだね
1〜数サンプル単位で間引くイメージで考えてた
そんなに不連続ならクリックノイズ対策要りそう データを1/2に間引いたのなら周波数はあがるだろう、早送りが高い音になるのと同じように
データを間引いても周波数が変わらないようにするには、どうすればいいかな? >>163
数100msec単位で再生して間引いてクロスフェード 16bitモノラルのPCMを8bitにするには、
配列に入っている各データを右へ8bitシフトさせればいいんですよね?
言語はJavaです。
byte[] b = new byte[raw.length]; // rawはshort型の配列でPCMのデータが入っている
for(int i=0;i<raw.length;i++){
b[i] = (byte)(raw[i] >>> 8);
}
上手く再生されなくて問題の切り分けをしたいので
まずここだけ合ってるか教えてください。 >>>論理シフト
>>算術シフト
あってそうだけど
念のため
(byte)(0x0ff & (raw[i] >>> 8)); >>167
ありがとうございます。
念のために上位の8bitを0で埋めるんですね。
頑張ります。 >上手く再生されなくて問題の切り分けをしたいので
小出しはよくない 右へ8bitシフトって/256で良いんじゃないのか? javaは知らないけど、奇麗な割算なら、コンパイラーが勝手(最適化適応時)にシフトに変換するんでは?
人間が分かりにくいように書く必要はない。 分かった、負の数をシフトしたことによって、頭が0で埋められて違う値になった。 16bitモノラルのPCMを8bitにする場合、
お前らならどんなコード書くんだ? ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ 確か8bitフォーマットはunsigned扱いだよ
だから (raw>>8)+128
音に限らずよくトラブルになるやつ 僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
6D9QH すみません教えてください
マイコンなどのPWMで、ピーとかポーとかは鳴らせるのですが、
ピンとかポンのように弾む感じの音を作ることはできるのでしょうか?
マイコン以外に何か回路が必要ですか?
波形としては時間が経つにつれて振幅が減衰すると言えばいいでしょうか・・・ 短時間のクロックを立ち上げてフィルタに入れればプッとかポッて音にできるよ >>182
VCAとかVCF付ければ?・・・ってそれPWMというより矩形波として使ってるのか? >>183
ありがとうございます。CRで適当にフィルタを作ってみたところ
出ました。
>>184
矩形波しか出ないと思い込んでいました。
上記のフィルタで三角波のようなものも出せました。
今、PWMで音声出力に挑戦しています。 どうにかこうにかWAVをPWM1チャネルで再生することができました
昔の電話みたいで音質わるいですが・・・ >>186
今時のオーディオ用DACの中身を勉強してみるといいと思うよ wikipediaに、
>32bit-floatの場合には156[dB]、64bit-floatの場合には331[dB]もの広いダイナミックレンジを確保できる。
て書いてあるのだけど、floatと違ってdoubleが理論値に1dB足されているのは何故ですか? それより32bit floatは1500dBの間違いじゃないか? 23bit(仮数部) + 1bit(ケチ表現) + 1bit(符号) + 1bit(浮動小数点の丸め)
からの26bit * 6dBで156dBですね 分解能144dB、Dレンジ1530dBじゃない?
まあどうでもいいけど libsoxの馬鹿、Cygwin上では動くのに、Linuxだとコアダンプするし
ドキュメントはAPIの説明全然してないし、サンプルコードも役に立たん
結局sox_init()の後sox_format_init()を実行すると正常に動くようになった。 >>197
libsoxは品質は良いけどドキュメントがダメすぎるよね。
自身でソース見て動作を把握したうえで引数を与えないと、意図しない動作する関数がある。 人いるかわからんけど訊いてみる
シンセ用のオシレータ作ってるんだけどルックアップテーブル作らないで(要は1つの波形につき1つのテーブルのみ)
アンチエイリアシングしたいんだけど不可能? 再生速度を変えないって事?
なら再生するサンプルレートに合わせてあらかじめ変換しておけばいいんじゃない シンセだから当然速度は変える 波形はユーザ定義が可能でリアルタイム処理を想定してる
あとsync処理とかも実装してる 一次補間してもしないのと同じぐらいエイリアスノイズが出るんです テーブルサイズは1024固定、受け取る元データは2^n (n:2-10)の長さ
2^10未満の長さのデータについてはバイリニアで1024まで拡張
というか再生周波数に応じて帯域制限したテーブル複数用意する方法ならとっくに実装しているので、
>>200>>202の条件でエイリアスノイズを除去したいんです 出力サンプリング周波数より精度の高いカウンターを用意して、
波形メモリの参照先が半端になる場所は(1つのサンプルに対して切りが悪い状態の時)、
次の波形参照先を合成して出力電圧にする。 合成具合はカウンターの値からどっちが何%って計算できる。
多分、画像のアンチエイリアスとやってる事は同じ。 つまり何らかの補間を施せっていうことですか
補間云々でどうにか出来るのでしょうか 補完は元の領域でローパス掛けてるだけだから原理的にどうしてもエイリアシング残るよ
(ほぼ)完全に除去したいなら4倍以上でオーバーサンプリングしなきゃダメ やっぱり逝きつく先はオーバーサンプリングか
なるべく低容量かつ高速なものを目指しているのですが両立は厳しいようですね
アドバイスありがとうございました もうしばらく考えてみます 200がまだいるか分からないけど
その1024サンプルをFFTしといて、
読み出しスピード決まった時に、帯域外になるエレメントを0にしてIFFTしたの(実部)から
直近2サンプルの直線補完で再生すればいいんじゃない?(適当)
繰り返し波形だから窓も要らない
それなりに知識があれば、読み出し用FIR型LPFを随時生成するとかの方が良いと思うけど
移動平均+軽いIIR型LPFとかでも良いと思うけど
どれくらい処理能力に余力があるのかとか、求める音による(シンセだし)と思うなあ オシレータにFFT使えば最強じゃね!?
っていうのは誰でも思いついていざ実装して絶望するやつだw >要は1つの波形につき1つのテーブルのみ
それすら不要ん この流れ、てっきり波形テーブルベースだと勘違いしてたわ…
テーブル用意する的なこと書いてるし FFTといえば大浦さんのFFTSG使ってたけど、最近出てきたOTFFT早い! それってintelやappleのライブラリより早いの?? intelならintelのsimdコンパイラが楽やわ
レーン数見分けて動いてくれるし速いライブラリに近いスピードが出るから
ライブラリに頼らないで好きな形で組める おや、こんなスレがあったんだな!
MIDIもここでいいのか?でもスレ検索しても2単語しか出てこなかったけどなwww
よく市販のMIDIアプリでIN/OUTを設定したら
ほかのアプリで同じデバイスを指定しようとするとロックされて開けないのがあるんだが
あれはどんなAPIで他からの接続をロックしてるんですかね? MIDI APIのmidiOutOpen()ですでに他に開いてるのがいたら
MMSYSERR_ALLOCATEDが返ってくるんじゃないかね >>228
ああそうか!そういうリザルトあったね!
でもダブってデバイス開いてもあまり問題は起きないんだけどね
むしろ一度デバイスつかんだら放してくれなくて
他のに繋ぎ変えたいとき再起動しないとどうしようもないってアプリもあるんだよね…orz
デバイス解放するのってmidiInReset()とかだっけ? あれ?確認しようと「midiInReset」でググったら
「midiOutReset」しかでてこないよ?
検索キーワードが強制的に変えられてる
なんで? >>232
なるほど、そういう解放の仕方もあるのか
で
意図的に2重に開いて
MMSYSERRを見たら
MMSYSERR_ALLOCATED = 4じゃなくて
MMSYSERR_NOTENABLED = 3 : ドライバがロードまたは初期化に失敗しました。
が返ってきたわ
そしてよくよく考えたら
先行して開いてたアプリにロックされてたんじゃなくて
自分の作ったプログラムがエラーリザルト拾って自ら開かなかっただけなのかwww 誰でも頭が良くなる、プログラムが書けるようになる方法が発見される 69703
https://you-can-program.hatenablog.jp >>233
あー自己レス前言撤回
アプリの組み合わせによっては
デバイスの多重オープンできることもあるな
リザルトを拾う拾わないの違いではないみたい
時間が無いので何故そんな違いが出るのかは未確認
知ってる方、予想のつく方、いたら教えてください >>236
MIDIのことはよく知らないけど
MMEは古すぎて互換のために用意されてるだけなので
新しいネイティブなAPIがあるのでは?と思う >>238
確かにネイティブなMIDIはWin32APIでめちゃ古いけど
これ以外に新しいネイティブなAPIってあるのかな?
あったらそっち使いたいけど
あってもSMFを再生するだけみたいなパッケージされたものじゃね? てゆーかMIDIって
デバイスの認識とオープン/クローズができて
そこから必要なデータを取り出したら
あとはバイトデータの四則計算だからな
今デバイスはほとんどUSBだし
新しいハードウエアや転送方式でも出てこない限り
新しいAPIは必要無いかもね
最近MIDI規格が新しくなったと聞くけど
新しいAPIの話にはならないんだね? ああ、ロングメッセージをもっと簡単に扱えるAPI作ってほしいかも BT MIDIとか追加されてるんじゃなかったっけ? 既存のソフトのスペクトラムアナライザーに不満がある
→自作出来ないか→FFTとかWFTとかが理解できない→orz(イマココ) というかパソコンがリアルタイムでFFT出来る能力を獲得して20年以上
その間にパソコンの計算能力は一桁以上向上しているがスペクトラムアナライザーの
周波数、時間、ダイナミックレンジ等の分解能が向上しているように見えない。なじぇ 恥を忍んで質問させて下さい。
この論文がイマイチ理解出来ないのですけど、誰か解説おながい…。
ttps://secure.aes.org/forum/pubs/conventions/?elib=15680 てゆーかさ論文1つ解説しろって
新しい論文1つ書けって言ってるに等しいじゃんwww
まずお前がその論文を要約して分からないところだけ質問しろよ
そうじゃないとリンク踏む気も起きない >>248
要約:IIRヒルベルト変換フィルタの構成法
1)IIRハーフバンド楕円LPFを用意
2)これを全域通過移相フィルタ(のカスケード接続)を2つ足した形に変換する
但し元の伝達関数をH(z)として、H(z)=A(z^2) + B(z^2)/zを満足する事
(A, Bが全域通過移相フィルタ(のカスケード接続))
3)z→-jzとする事で、ヒルベルト変換フィルタ対になる。
4)通過域と阻止域の端を考慮しつつ周波数変換
2)の操作については、参考文献が示されてるのみなので、本当に出来るのかなぁ…と。 参考文献がこれ
ttps://ci.nii.ac.jp/ncid/BA20792517
…編者の一人がKaiser窓の人だから希望が出てきたw 結局全部理解できないってことか?
正直に宿題の問題文を書け 250は古本で安く出回ってるので、購入します。
近所の図書館には置いてない…。
>>251-252
2)の過程を解説した日本語の参考文献やwebサイトが見つからないので、
漏れがじたばたしてるだけです。
(学校の宿題や輪講とかではないです) オールパスフィルタで90度位相差が出る周波数を作ってるだけじゃないの? ここってAESの論文がサイトライセンスとかで読めるような人も見てるの?
そうでない限り有料の論文なんて限られた人しか購入しないでしょ…。 C#でMIDIのロングメッセージの受信→送信したいのだけど
コールバックの書き方が分かりません
ショートメッセージはmidiInOpen()のdwinstanceにコールバックのポインタ渡して
CALLBACK FUNCTIONで出来たのですが
ロングメッセージはこれと共通で出来ないでしょうか?
単にロングメッセージをINからOUTにスルーさせたいだけなのですが
それでもバッファの準備したり構造体指定したりしないとダメなんですかね?
何処かに参考になるコード公開されてませんかね? >>249
このスレで専門的なこと説明したってわかるわけ無いだろ空気読めよ
もっとライブラリーの使い方とか聞けよ っ https://yoshida-eth0.ハテナblog.com/entry/20100126/1264444683 ありがとう
下のコードに何か使えるネタがあるかもしれない
勉強してきます 趣味のインチキMIDIプログラマで恐縮っすwww
ロングメッセージの受信に必要なAPIを自分でマーシャリングしたのですが
どなたか添削してください
いつも利用してるPINVOKEに登録されてなかったので
既に完成してるショートメッセージのプログラムに追加したいので
それと共通の型、書式にしたのですが
マーシャリングの型って結構自由なんですか?
いくつか調べたのですが少しずつ違ってたりするので良く分からない・・・
第1引数がintやIntPtrだったり
第2引数がrefやoutだったり・・・
どちらも引数は共通だと思います
[DllImport("winmm.dll")]
static extern uint midiInPrepareHeader(IntPtr hMidiIn, out MidiHdr lpMidiInHdr, uint uSize);
[DllImport("winmm.dll")]
static extern uint midiInAddBuffer(IntPtr hMidiIn, out MidiHdr lpMidiInHdr, uint uSize); うーーーーん自己レス
マーシャリングは良く分からんが仮にプログラム組んで
バッファ生成、登録してみたらリザルトは0が返ってくるから合ってるだろうなあ?
これでINデバイスにエクスクルーシブ入れたら自動で受信が始まるのかと思ったけど
始まらん・・・なんで? 質問します
2次のバターワースフィルタなんだけど、フィルタの係数求めるのに
(1)Robert Bristow-Johnson Audio EQ Cookbookとやら
http://vstcpp.wpblog.jp/?page_id=523
と
(2)http://freeverb3vst.osdn.jp/tips/iir_filter.shtml
↑ここのサイトに載ってる求め方
の二種類が見つかったんだけど
それぞれ方式が少し違ってて、実際係数を求めてみると大体似た感じになるんだけど微妙に違う・・・
音を聞いた感じも微妙に違います
この違いが一体何なのか、どっちの方が精度が良いとか、教えてください
ちなみに
http://www.iowahills.com/A7ExampleCodePage.html
のサイトにあるサンプルで係数を求めてみたら
(2)の方式で求めた係数と一致しました テキトーだけど最初に疑うのは
floatとdoubleの差とか
unsigned付け忘れとか
あとmath.hのincludeし忘れとか どうも
数式や方式が違うから結果が微妙に異なるのは当然なんです
ただ、どっちの方がいいのかなーと ぱっと見(1)は簡易版的な感じがするかなあ(tanが出てこないあたり)
簡単な確認方法は、カットオフ周波数を高く設定して(fs=44.1kHzならfc=10kHzとかに設定)
そのカットオフ周波数の信号入れてちゃんと-3dBになる方が正解 IIRの並列構成やはしご型構成が流行らないのは何でだろう?
ttp://leo.ec.t.kanazawa-u.ac.jp/staffs/nakayama/edu/file/signal_proc_ch7.pdf >>269
双一次変換のpre-warpingの読み方って
・プリワーピング
・プリウオーピング
・そのほか 流行らない理由はpdfに書いてあるしプリワーピング >>274
2次IIRの縦続構成は、
高次IIRで分子/分母の組合せで悩まないといけないけど、
そういうのは設計用ソフトが組合せを推奨してくれるものなのかなぁ? 2次くらいなら係数を見比べれば悩む程のこともないでしょ
際どいことをするならそれぞれの通る帯域と極の順番を考慮するくらい? 「多項式の比の部分分数展開は、数値的に不良設定問題です。」ってとこが、
IIRの並列構成が、実務的に嫌われてる要因なんだろうか?
ttps://jp.mathworks.com/help/signal/ref/residuez.html 答えが何通りも(無限に)あったら無理やろ。
素因数分解みたいに特定出来る訳じゃなく、
π求める公式だって無限にあるやん? >>278
多分答えは一通りしかない筈なんだけど、
例えば、高次多項式で表されてるIIRを並列接続に変換する際に、
IEEE754の倍精度での計算では十分な精度が得られない…と云うイメージです。
そこだけ任意精度計算出来ればいいのですが。 情報落ち
https://www.cc.kyoto-su.ac.jp/~yamada/programming/float.html#johouot
任意精度
http://www.edu.cc.uec.ac.jp/~ta113003/ref/FloatingPoint.html >>280
多分真面目にやろうとすると精度保証付き数値計算(≒区間演算)になるんだけど、
Mathematicaの一択になると思う。
仕事で使うには値段が高いので稟議が通り難い…。
RasPiのMathematicaやWolfram Programming Labを
内緒で仕事に使うのは駄目なんだろうなぁw >>282
BYODやBYOAで済むなら楽なんですけどねぇ オッペンハイムせんせーの本は、このスレではどう評価されてるのでしょうか?
ttp://www.coronasha.co.jp/np/isbn/9784339004717/
ttp://www.coronasha.co.jp/np/isbn/9784339004724/
つか著者より訳者の名前の方がでかいなんて… https://github.com/katahiromz/YappyCam/blob/master/YappyCam.cpp#L1247
波形データを線形に縮小したいんだが、いい方法知りませんか?
生PCM波形(dwFileSize - wfx_size)バイトを(dwBytes - wfx_size)バイトに縮小したい。
お願いします。 >>285
縮小したらピッチが高くなってしまいました。質問を取り下げます。 双一次変換のpre-warpingの逆って、
・post-warping
・un-pre-warping
・de-pre-warping
・そのほか お!?いつのまにかスレ復活してるじゃん
ageとこ
この板でMIDIやってる人いないのかね? 俺的にサウンドプログラムと言ったらFM音源とか音を作り出す方なんだけど、
このスレの内容は違う。 [プログラム技術板]に自分から来といて、なにを言うとるんだねチミは スペアナ表示用にFFT作ったんだけどいまいち結果のキレが悪い
窓関数を入れたらクッキリするんだろうけど、何窓が適しているかな? ここがキチガイばっかりじゃない、といつから勘違いしてた?? ここがキチガイばっかりじゃないとはどこにも書かれていないぞ リサンプリングで最終的に32bit floatの精度を得たい場合、doubleを使った演算で精度足りますか? MinMMのwaveInOpen関数で、2048byteのバッファ2つを繰り返し再利用しながら長時間録音しています。
重い処理を平行で動かしていると途中で、しばしば片方のバッファのメッセージが届かなくて1バッファの繰り返しになったり、
動かしているアプリごと異常終了する現象がでてしまいます。
もしこのAPIに造詣が深い方いらっしゃれば、アドバイスいただけないでしょうか。 >>300
アドバイスいただきどうもありがとうございます。
ご紹介いただきましたサイト情報も参考にさせていただいていましたが、現象が発生してしまいます。
知りたい点としましてはwaveInAddBuffer()で追加したバッファの順でデータがたまったら、
メッセージ(またはコールバック)を確実に返してくれるものなのか、です。
まれにメッセージ(またはコールバック)が帰らずスキップされ、再利用の処理ができない為に、
結果使いまわしているバッファ数が減少してしまいます。 >>301
WAVEHDR構造体のdwFlagsのWHDR_DONEビットを監視しなきゃダメなんじゃないの?
バッファ初期化のwaveInPrepareHeaderはエラー出てない? >>302
そうなんです。
届いたメッセージに対応するバッファをwaveInUnPrepareHeader(),waveInPrepareHeader()するときに
エラーになる場合があります。
dwFlagsの値は確認しないでいました。
dwFlagsの値を事前に確認することのがヒントになりそうですね。
アドバイスありがとうございます。 プログラミングの勉強も兼ねて、FMシンセを作ってみたんだけど
キャリアにモジュレーションかけたらピッチが狂って、鍵盤と関係ない音が出る
これじゃあ楽器として演奏できない
どこを間違ったんだろう >>305
ttp://elm-chan.org/junk/32bit/nxpdip.html#fm
ソースコードは公開されているし参考になるかも? SONICWARE LIVEN 8bit warpのオシレーターテーブルって32サンプルしかないんだね
前にFMシンセわからんって言った者なんだけど、試しに自分のプログラムの
オシレーターを32サンプルにしてみた。
1キャリア1モジュレータの2OP構成なんだけど、32サンプルにしたら
結構面白い音が出る
変調かけたらピッチがずれる話なんだけど、306の言う通りそういうもんみたい 441Hzと260Hzと120Hz。この3つのsin波だで作っ加算合成和音のwavファイルを大浦FFTのrdftメソッドに読み込ませて演算結果をテキストファイルに書き出して眺めてみました。そこで違和感。
120Hzは最大音量の50%になるように作ったので15869.0(short値を基準にしてます)
という出力結果は納得なのですが、前後のバッファ119Hzと121Hzにも2011.0と2694.0…と、結構高めの音量が出力されてるのです。これ何とかなりませんかね?
スペクトルグラフ作る時に凄く邪魔で… >>314
具体的に分解能でどのように変化するのでしょうか?
ちなみに分解能は
44100÷4096=10.76…Hzにしてます。 >>314
指摘頂いたので自分でも調べてみたんですが、つまりリーケージの問題ってことですか?
確かに…窓関数なんか使わずにwavファイルから得た4096のdataをそのままrdftに渡してましたから、分解能の誤差分でスペクトルが広がっていたのかも。
音響プログラム初心者のものでお恥ずかしい限りです。
情報検索の足掛かりが出来ましたので、窓関数に付いて調べてみようと思います。
回答ありがとうございました♪ つべの動画漁ってたらマクシミリアンのライブラリ激推しされてたんですけど
皆こういうのコッソリ使ってるんですか? >>316
窓関数については
https://www.a;mazon.co.jp/dp/4789830292/
p268-270 に三角窓、ハミング窓、ハニング窓についてごく簡単にまとめられています、章末に参考文献も記載されています 倍精度で計算するのが流行ってるのでちょっと試してみたんですが
ブロックで分けて処理するよりも、1サンプル単位で逐次処理した方がパフォーマンス出ますね
サンプルのサイズが大きいとSMIDで並列処理しにくいとかキャッシュに乗りにくいとかあるのかな ■ このスレッドは過去ログ倉庫に格納されています