1 :
デフォルトの名無しさん :
2006/04/21(金) 07:54:35
可哀想に。誰も2を取ろうとしない。
3 :
デフォルトの名無しさん :2006/04/21(金) 20:48:18
) _ ノ 出席番号3番 _,, ---- 、_ | | /> ⌒`'⌒ヽ パイパンの _,,-ァ''" ヽ、| レ'∠_, ) 神楽坂明日菜様が / /⌒"''ー 、 " 「 ⌒ ヽ、/)、 ⌒ヽ 3getした! ___/ ヽ ヽ、 { , 勹 `、ヽ ) ,ン''フ {~ ⌒ヽ、 ヽ、`ヽ\/ ノ 、、 \\ ⌒Y⌒Y⌒ 、/ / { ヽヽ、 ヽ、 \ ヽ、 ヽ、`ヽ i i トー 、ニニニ`、_ / \/ / i ハ ヽ、 ヽ、、ヽ、 >、>、 ヽ`ヽ、 l\ \\`ー 、二二_ー‐‐‐‐‐‐‐‐‐ / iニニ/ i | | ヽ ヽ`ヽミ >へ、,,_ヽ、ヽYヽヽ } ヽ ヽ \::.. \ ̄ ̄ ̄ ̄ ̄ ./ l イ| ト| \ヽ / >イ)⌒ト`l |ヽ))) | ヽ \ \::.. \ / / |.l ハ | |、_,,,,,,__ \ ヽ、, 〉 l レノ/ \ ヽ \::::.... ヽ、/:::::::: / |l ~ヽ .トイ、 i个、 /// レ 「ヽl _,,-‐ヽ、 `ー、 ヽ、::::::..... `"'' { !. トヾ、ヽヽヽ)i , -、 》⌒>' / ヽ、、 二二ニニニニニニニ | ト、!ト`ヽ ` < ィ ) / 〃/ / __________\_/::::::::\::::::::::::::::::: | ト\ヽ \,_ `ヽン ,イ// / i | ,,,,---ヽ :::::::;`> 、;;;;;;;; | ハヽ `ヽ\`二ニ='ツク ,/./ ハ l (二" `ヽ< |l ヽ_` (三三三ニア/ | i |  ̄"""'''''''''----`----、 /ニニニニニニ===ー''ァ彡ソ、 ノ i ___,,,,----- _,-ァ/'''/,イ ヽ<ー'''''""コ ヽ ///,, -'7 { |彡へ .} ヽ、::::::::::::....
Haskellでは配列が使えませんけれど、音声を扱うときどうすればいいんですか?
6 :
744 :2006/04/24(月) 17:09:42
早速ですがタイムストレッチ(音程を変えずに再生速度を変更)教えてください
サウンドプログラミングの推薦図書を列挙してください
Oh!FM TOWNS
>>6 ・音程を変えずに、再生速度を変更する場合と
・変更した再生速度に合わせた音程に変換する のどちらかを行う
その方法には2つある
・周波数で変換する D-FFTを使い 周波数軸で変換する事 (苦労の悪いに音質はそう良くない)
・時間軸で変換する。 過不足が起きるので、それを合わせる。
時間軸で変換する方が簡単だろう。
・音程を変えずに、再生速度を変更 ・時間軸で処理する方法 1、データを短時間のブロックに分割する 2、そのブロックに窓関数をかける(台形窓で十分) 分割単位は窓をかけてる区間だけオーバーラップする事になる 3、再生速度を上げる場合、ブロックを間引く 4、再生速度を下げる場合、ブロックを2度利用する
再生速度を上げたい場合 A B C D E _ ↓ ↓ ↓ /A\_ ↓ ↓ /B\_ ↓ /C\_ /D\ これから、B、D を間引いて _ /A\_ /C\_ /E\ A,B,C,D,Eの時間は等間隔である必要はない。 間引いた時間の比率をコントロールすればいい。 違和感を減らすには、 1、無音期間を率先して間引く 2、繰り返し期間を検出したら、その周期の整数倍に合わせて間引く と言う処理を入れる
再生速度を下げたい(ゆっくり)の時も同じ _ / A\__ / B \__ / C \ AとBがオーバラップする時間を作って切り出してやる=部分的に2度利用させる。 これも、 1、無音期間を検出したら積極的に無音を延ばす 2、繰り返しを検出したら、その周期の整数倍に合わせてオーバーラップさせる という方法で違和感を減らせる
周波数領域で処理しないピッチ変換なんて音ワルス(´・ω・`)
ワルスの不思議な旅。
続いてリアルタイムのピッチシフト(再生速度を変えずに音程を変更)教えてください
その方法には2つある
・周波数で変換する D-FFTを使い 周波数軸で変換する事 (苦労の悪いに音質はそう良くない)
>>15
周波数軸で変換する方法は ・全体を一度に収まる大きなサイズのFFTで行う方法 ・ブロック単位に短時間FFTで行う方法 に別けられる。 ピッチシフトは周波数軸での単なるシフトではなく、指数的移動なので、結構計算コストは大きい。 なお、リアルタイムという事になると短時間FFTという事になるが、 オーバーラップさせて窓関数をかけてブロックをつないでゆくと、つなぎ目で位相が合わなくなるので 違和感が発生する。 位相を合わせてつなぐと、今度はノイズが変質する。 時間軸でノイズ+サイン波を加算した場合も位相があえばサイン波は2倍になる=位相を合わせれば 按分加算出来るが、ノイズは√2倍にしかならないからノイズ音量が波打つ現象が起きるので なかなか難しい問題だ。
時間軸で処理する場合、 「再生速度を変えずに音程を変更」するのではなく 「再生速度を変更して音程を変更」し、それによって生じるデータの過不足を 上で書いたような ブロック(granul)への分割と統合で補うという事になる。 再生速度を変更するには、上げるにも下げるにも強力なLPFが必要になる。 安いキーコンではLPFを補間で代用してる為に音質が悪い
リアルタイム論争の悪寒。 質問者は「リアルタイム(レイテンシ50msec以内)」みたいな書き方キボン。
心配しなくても、ピッチシフトはリアルタイムに出来ない事は簡単に理解できるから、それに噛み付いたらバカだと判るから
リアルタイムじゃなくてゼロレイテンシの事ね
FPSとかで銃の連射音を再現するときって、単発の発射音を発砲するたびに重ね合わせていく という方法が一般的なのかな?でもそれって発射速度が速いマシンガンとかだとものすごい 勢いでサウンドカードの同時再生音(64音ないしは128音)を消費していくような気がするんだけど・・・
そんな用途でFPSを使うほうがおかしい。
>>22 同時発音数を制限しろよ。
それから、マシンガンは、トリガー部、ループ部、リリース部の3つのサンプルを使え!
そしたら発音数は1つ。
25 :
22 :2006/04/26(水) 17:08:43
>>24 バルカン砲とかだと
トリガー部、ループ部、リリース部
に分けてつなげるのが得策かもしれないけど、それよりレートが低い一般的なマシンガンだと
かえって各部の接続部分で粗が目立つような気もするんだけど・・・
> 同時発音数を制限しろよ。
これはどういうこと?
>>25 単発が長くてもたくさんの発射音のうち気になるのは聞こえ始めと最後の消えゆく部分だけってこと。
どうせ秒3発位で一発最大8秒くらいの音でも連発でならしたら消音部分でいきなり消えてもあんまり気にならない。
27 :
22 :2006/04/26(水) 18:11:34
>>26 なるほどね。
それだったら次の発砲が生じたらその一つ前の発砲音は消してしまうのも手じゃない?
それならどんなに発射速度の速いマシンガンでも常に同時発音数は1のままでしょ。
>>27 そういう風に調整することもある、要するにリソースと効果音の持っている性質とのかねあい。
PCエンジンとか古いゲーム機だと音楽用に6音+効果音用に2音で当てて垂直同期毎の発音リクエストを優先度別に取捨したあと
現在鳴っている音より優先度が高いか等しい時に新規の音を鳴らしてた。
最近の次世代ゲーム機だったらあまりそういう心配しなくてもいいんでね?
ドラム音源とかでも普通に考えたら同時発音数制限してるだろ 最近質問するまでもないレベルの低いのおおいな
>>30 22は厳しい制限数の中でどうやりくりしていけばいいのか聞いてるんだろ。
>>27 > それならどんなに発射速度の速いマシンガンでも常に同時発音数は1のままでしょ。
鳴っていた音を消音して次の音を鳴らすとして、
消音したい音をいきなり消すとノイズが発生する(可能性がある)よね。
それに対処するにはとても短い時間であってもフェードアウトさせる必要が
あるんだけど、そのフェードアウト中にはもう次の音が鳴っているので、
その瞬間だけは同時発音数は 2 になるよ。
レーシングゲームとかのエンジン音ってどうやって再現しているんだろう? どのゲームもだいたいアイドリングの時からエンジンの回転数が上がって行くにつれ なめらかに音が高くなっていくようなんだけどどうやって実現しているのか不思議。 エンジンがある回転数の時の音を録音してその音源ファイルの再生速度を調整する ことでアイドリングの時や高回転時のエンジン音も再現できるのかな?
ピッチで上下しつつ、 低回転時から高回転時の音にクロスフェードしてるんじゃないの? エンジン音なんか割とノイズ的でファジーな音だから複数混ぜてもそんなに気にならないと思う しかしここ全然プログラムの話題出ないな・・・
それじゃプログラムの話題を一つ。 Visual C#で特定のボタンを押したら複数のwaveファイルを同時に、ないしは多少の時間差をつけて ならすことって可能だと思う?可能だとしたら何個くらいのwaveファイルまで同時にならせることができるだろうか? またサウンドカード毎にプログラムをチューニングする必要ってあると思う?
聞く前に試してみるといいと思うよ。 サウンドカード非依存にしたいなら、ミキサを自分で書けばいいし。
ちょっと教えてほしいのですが、 フーリエでLPFを書くのはどうすればいいのでしょう。 たとえば、freq=44100Hz、M=1024でDFTして周波数領域に変換したとして、 cutoff_freq=11025HzのLPFを作る場合、単純に[0〜M / 4]の複素数配列だけ残して、 あとは0+0iで埋めればいいの? わかる人教えてください。
38 :
37 :2006/05/04(木) 08:34:25
一応オーバーラップの手法とかは無視して、全量のDFTとしての答えで大丈夫です。 なんだかこのやりかただとレゾナンスが効いてる笑。
>>37 のようなものでもそれらしい結果になるが、ブロック同士が繋がらない
結果、11025/1024の整数倍の倍音が発生し 特有の変調音が発生する
フーリエ変換でLPFを作るなら
1、全部のデータ+余白が入るサイズでFFTして、 得られた結果=周波数領域に窓関数をかけて 逆FFTする
窓関数は余白の大きさにより鋭敏にする
2、短時間FFTでリアルタイム的に処理する場合は、
FIR−LPFを設計士、それをFFTしておき
データにはFIR係数サイズ分の余白(ゼロで埋めておく)をつくり
周波数軸で、掛け算して逆FFT するというのを繰り返す
>>39 おお…、お詳しい方が。とりあえず試してみます。
どうもありがとうございます。
短時間FFTの場合は、 ようするに、FIR-LPFをFFTで掛け算のコストを下げてやろうという事 FIR-LPFをまともに実装すると 1サンプルあたりFIRのタップ数だけ積和が必要 FFTを使えば計算量が減らせられる。 ただし、FFTは元信号が繰り返す事を前提にしてるから FIR−タップ数だけゼロの領域を入れてやって、その影響が無い領域を作ってやる必要がある で、巧くタップ数とサイズと、ステレオ信号をどう巧く捌くか 設計しないと計算量が増えかねないから注意ね。
42 :
35 :2006/05/04(木) 15:03:25
>>36 > 聞く前に試してみるといいと思うよ。
> サウンドカード非依存にしたいなら、ミキサを自分で書けばいいし。
今まで音を再生するプログラミングって作ったことが無かったんだけど
C#で多数のwaveファイルを、かなり高精度なタイムスケジュール
(二つのwaveファイルを100msの時間差をつけて再生する等)で
管理するにはどういう手段(関数)を使ったらいいと思う?
ちょっとググッてみたら
PlaySound(もしくはsndPlaySound)関数
というのがあるらしいけどこれで複数のwaveファイルを同時再生させること
って可能かな?
最近のwaveデバイスは複数同時に開けられるしDirectXとかも内部で加算処理はしてくれるけど 自前で加算するのが楽だと思うけどなあ・・・・ まあどうしてもC#の場合は、どんなライブラリがあるかなんて探し物的な 所で悩んでしまうんだろうけど・・・・あんまり書くと荒れるから止めとくわ
44 :
35 :2006/05/04(木) 16:01:46
DirectSound使わずに、自前で加算していった方が楽ということか( ゚д゚)・・・
自前で加算すれば、タイミングもオーバフローの処理(AGCを入れたり)も好きなようにコントロール出来るからさ いちいちライブラリの都合に合わせて悩むより、そこらへん楽だよ
46 :
35 :2006/05/04(木) 17:10:24
>>45 waveデータを自分で加算して再生する方法を探してみたんだけど、
Wave音源で音を鳴らす
http://www.sm.rim.or.jp/~shishido/wavtest.html Wave音源の処理
Wave音源で音を鳴らす手順は、以下のようになります。
バッファを確保し、波形データを作成
音声形式を指定するWAVEFORMATEX構造体を作成
waveOutOpen()でWaveデバイスをオープン
データバッファの情報をWAVEHDR構造体で設定
waveOutPrepareHeader()で再生準備
waveOutWrite()でバッファの波形データを再生
再生が終了したらwaveOutClose()でデバイスを閉じる
waveOutUnprepareHeader()した後バッファを解放
あらかじめならす音をwaveデータとして作っておかないと対応できないのかな?
音の再生を開始した後に急遽新しい音を追加で再生させたり、いらなくなった音
の再生を途中で停止させる場合には向いていないかな?
低レベルオーディオを使っても ある程度のブロック転送となるので、 急遽音を止めたいというような場合にはその用意してるブロックサイズ*ブロック数 分だけ遅延する事になります それはしょうがないと我慢出来ないなら ハード依存の高い方法になるんじゃないの?
>>46 致命的なミスしている。
もっとマシなとこを参考にした方がいいよ。
49 :
35 :2006/05/05(金) 00:48:50
>>49 Javaでもサウンド扱える位だからC#なら速度がそれほど問題にならんと思うと考えてがんばってみそ。
そんなミリ秒のタイミング考えているシステムでゴミ集めが始まったら台無しというのは・・・・
>>51 それをいったらWindowsは使うなということになる(w
なになに? Windows批判? あは
そうか、DOSに回帰汁!ってとことか!
55 :
35 :2006/05/05(金) 17:45:02
それは無理だろ DirectSound使うか自前で低レベルオーディオを使うかだな
いや、無理じゃないか。 PlaySoundを実行するだけのタスクを複数作ってコッソリ起動してやればいけるな
58 :
35 :2006/05/05(金) 18:27:02
やはりDirectSoundは避けては通れぬか。 こりゃぁ大変だ、GW中に勉強しきれるかな(´・ω・`)・・・
FFT解析後に周波枢軸に置き換えられたデータをさらにFFTしたらどうなるかな 意味は分からんがなんかおもしろそう
60 :
35 :2006/05/07(日) 01:29:01
ケプトスラスムとかいう手法だっけ? 意味はようわからんけど。
再度FFTすれば逆FFT結果と同じだよ ケプストラムは対数化してるから、ゼロ点が思いっきり強調されるってだけ
DirectSound でも、液晶テレビでテレビゲームするようなもんで
>>61 FFT→FFT→FFT = IFFT ?
>>63 FFT→FFT = 逆FFT*係数調整
FFT→FFT→FFT = FFT *係数調整
65 :
デフォルトの名無しさん :2006/05/10(水) 08:54:50
シームレスに複数の曲を再生させるには、どうしたらいいでしょうか?
波形データをバッファリングするようにして、ケツとアタマをつなげればよいだけの話
クロスフェードさせる
69 :
デフォルトの名無しさん :2006/05/25(木) 07:11:07
waveからデータを取り出してスペクトルを出すような 処理をかけようと思っているのですが、そういう場合どんな 言語とライブラリの組合せがおすすめ、または使用されているでしょうか? C + spLibs でやろうとしたのですがコンパイルがうまくいかなかったため Javaに変えようと思っているのですが。。
C++でええやん
好きな道具でやればいいじゃない。 データを取るのも スペクトルを出すのも、 ライブラリが必要なほど複雑な事じゃない。 というかライブラリの使い方を読む時間で作れてしまう 自分はこういうのはDelphiでやるけどね
72 :
デフォルトの名無しさん :2006/05/25(木) 14:49:40
できればC++がいいかなと思っているのですが その場合waveを読むにはどんなライブラリを使うのがいいのでしょうか?
C++でもfopen して freadが一番いいんじゃない?
74 :
デフォルトの名無しさん :2006/05/25(木) 15:00:05
istream使えよ
コンパイルできなかった原因ちゃんと調べた?
>>71 そういえば、Delphiでよさげなライブラリてある?
C + libsndfile
>77 LGPLってことは作者に報告義務無しで商用OKってこと? サイト翻訳したんだけどチョトわかりません。 BASSとかFMODはどういうものでしょう。安定してますか?
LGPLなら報告義務は無い。 ただし、LGPLなライブラリから静的リンクするコードは全てLGPLかGPLにして公開しないといけない。 LGPLなライブラリでDLLを作ってそのDLLはLGPLにしてソースを公開した上で、 DLLとリンクする本体はソースを公開しなくてもいい。 ただしその場合でもLGPLなライブラリについてちゃんとLGPLだということの説明と、 確かLGPLなライブラリのソースの入手できる場所を説明しとかなくちゃいけない。 LGPLはいちいち理解するのがめんどいよな。
80 :
デフォルトの名無しさん :2006/06/20(火) 10:41:28
ゲームで使う効果音の.wavファイルがズラーっ載ってるサイトを探してるんだけど キーワード「ゲーム .wav ライブラリ」で検索しても売りもんのCDやらなんやらしか引っ掛からん。 どこか良いところ教えてくれんじゃろうか。英語で書かれててもいいから。頼む。
スレ違いどころかむしろ板違い
CK_GAME_FACTORY TAM_MusicFactory Vector ■WEB WAVE LIB■〜 音と声のOnLine素材集 ザ・マッチメイカァズ Area MIDI素材集
83 :
80 :2006/06/20(火) 13:47:42
>>82 おお、ありがd!
あ、それと…
>>81 こっちはサウンドプログラミングの一環としてやっとんじゃ、野垂れ氏ね、ヴォケ!
>>83 このスレの住民は結構高尚なことが好きなんだよ。
試しにウェーブレット変換とか離散コサイン変換とか言ってみ。
面白いように話に乗ってきてくれるから(´・ω・`)
>>83 そんなに顔を真っ赤にするなってwww
あ、それと…
>>83 は、やねうらお説
うらおは今度からゲ製でやれや、な?
ゲ製作技術板かDTM板向きの質問だったな
うわ。
今までちょっと尊敬してたのに、
>>83 はねえな。軽蔑した。
>83 「サウンドプログラミングの一環」でやってる奴が素材すらマトモに見つけられないてwww しかもスレ違いどころか板違いの質問、挙句逆切れ・・・ お前、センス無いからプログラマやめろ。
音ネタがパクりならソースもコピペだろ
もうそのくらいにしといてやれよw
93 :
デフォルトの名無しさん :2006/07/04(火) 00:58:30
ホルマント周波数を求めて母音の判定を行おうと思っているのですが、 まずホルマント周波数をどこから求めていいのかわかりません。 /a/の波形をFFTした結果のスペクトルに対してピークを求めれば それがホルマント周波数になるのでしょうか? それともスペクトル包絡を求めた結果の曲線のピークが ホルマント周波数になるのでしょうか? やりたいことのために情報を集めていると短時間スペクトル解析というのも 出てきたり、振幅スペクトルを使えばいいのかパワースペクトルを使えばいいのか 周波数スペクトルを使えばいいのか混乱しています。
他にケプストラムとか、PARCORや線形予測係数から求める方法とか、 色んな方法があるわけで、演算能力が足りる範囲で好きな方法を使えばいいとおもうよ
95 :
デフォルトの名無しさん :2006/07/06(木) 07:06:00
まったくの初心者です。 サウンドプログラミングするには音響学のクラスも取る必要がありますか? 物理の音に関する部分だけで十分ですか? 数学は微分積分のI,II(多変数のは取ってないです)と線形代数と統計学は取ったんですけど 他に数学で必要なクラスはありますか? 他に何か取っておいた方がいいクラスはありますか? 質問多くてすみません。
フーリエ変換を習っ(た|てる)?
>>95 まずは体力だな。その次は腕力と暴力。学力は一番最後でヨシ。
98 :
95 :2006/07/07(金) 05:02:44
>>96 >フーリエ変換を習っ(た|てる)?
微分積分のIIでやりましたよ。軽くですけど。
あれをソラで(教科書見ずに)スラスラっと解けるようでないとダメですか?
>>97 工工エエエエエエェェェェェェ(゚Д゚) ェェェェェェエエエエエエ工工
でも、体力には自信あり。
ベンチプレスで100kg挙げられます。\(^o^)/
>>98 スラスラと解く、というよりは、フーリエ変換が使えると
何がうれしいのかってことがわかる方が重要と思われ
“メイドさん”が「Firefox」グッズを配るイベントが秋葉原で今週土日に開催
ttp://www.forest.impress.co.jp/article/2006/07/06/spreadfirefox.html もじら組メーリングリストより
-----
spreadfirefox in AKIHABARA
1、7/8(土)、7/9(日)10:00-17:00 東京・秋葉原/秋葉原路上において、ステッ
カーとポストカード、特製CD-ROMの入った袋を配布します。配布するのは、イベント・
コンパニオンさんとメイドさん、もじら組。メイドさんにネコ耳としっぽをつけても
らい配布をしますので、要チェック!場所としては、1、ラジオ会館側駅前、2、ヨド
バシ向かい道路、3、中央通り(大きな通り)の3箇所です。人の多そうなところへ、
移動しながら配布していきます。コンパニオンさんもメイドさんも写真撮影可です。
-----
101 :
95 :2006/07/07(金) 06:57:23
>>99 フーリエ変換の概念は一応理解してると思います。
スラスラとは解けないですけど。
音響学や物理などは取らなくてもいいですか?
というより、このスレの住人で取った人はいますか?
何か詳しい方が多いようなのでいるような気がしてなりません。
うるせえな
自分で本買うなり調べるなりして勉強しようっつー考えは浮かばないのかね? 受身ならどのみち身につかんと思うよ。
フーリエ変換とラプラス変換の相似性と Z変換の扱いが普通に出来れば問題ないよ 授業を取るのと勉強するのとは別の問題だろう
105 :
95 :2006/07/07(金) 07:43:17
>>104 なるほど。
ではそれらに集中して勉強しますね。
教養としては音の波と光の波がどう似ていてどう違うのかとか語れるくらいには勉強してもいいと思うよ
フーリエ変換やZ変換だけだと 音は3次元の空間を伝わってくるのだという事を忘れがちだよね
スリットを通した干渉だけ習っても3次元空間の音の干渉って説明できますか?
光は干渉すると完全に消えるけど音はそうじゃないよ。 音だと運動量か圧力のどっちかが小さくなるだけ。
んなぁ〜こったない
簡単に違いを言うと 電磁波は進行方向を軸にした回転が伝わってくる(偏波は2つの回転が組み合わさったもの) 音は、進行方向の振動
>>110 光のように空間上のスリットで干渉して音がホントに消える事はない。
ただし、検出器は圧力か運動量のどちらかを検出するので、片方だけを捉えれば消えたという事になる。
だからスリットではなく管として、管から外に音が出るかどうかのようにすれば 消すことは出来る
たとえば、クインケ管で実験すればいい、
左右が同じ長さの時に運動量変化は最小になるが圧力変化が最大だから外に音が出る
左右が半波長だけズレると、圧力変化が最小になる為に管から外に音は出ない。
しかし、その繋ぎ目では運動量変化は最大の点で
管の中に運動量変化を取る検出器を入れればそこでは最大音量となっているだろう
光だってEとBの両方を考えれば干渉したって完全に消える地点は無いんだがな。
>>113 電磁波の場合、
>>111 のイメージの通り、
電場、磁場の両方を交換しながら伝わってくるわけで、
その方向は進行方向に垂直だから、位相=回転角なわけで、位相が合えば両方消えるよ
>>114 電場と磁場の両方が打ち消すためには2本のビームが平行に交わらないと
(つまり一致しないと)完全には消えないよ。2本のビームに角度差があれば
どちらかは残る。
んなぁ〜こったない
>>115 どっちかが残るという事は、電場だけで振動する波がありえることになるよ。
電場が振動するならその垂直方向に自動的に磁場が発生するわけで、単独振動は無理さ。
線形システムにおけるベクトルの合成的にそんなことはあり得ない
干渉が起きるのはそこで観測するからだけど、 観測しないなら消えるだの消えないだのの議論にそもそも意味がないわけで、 と考えると、なかなか難しい話だな
ヘッドホンで再生する音の上下方向の位置制御ってどうやるのですか?
つ頭部伝達関数
(´-`).。oO(やっぱりしっかり物理を勉強した人達なんだ、ここの住人は…)
他人の事なんてどうでもいいだろ?
空気の読めない奴は困る。
>>121 バイノーラルの測定文献って3つ位あるけどホロフォニックみたいな臨場感のある再生
のデータってないんだよね。
130 :
デフォルトの名無しさん :2006/07/21(金) 04:50:47
質問なのですが、C#でVSTプラグインを作ることは可能なのでしょうか。 もし出来る場合、実行時の速度以外に何か問題が発生する可能性はあるのでしょうか。
>>130 可能。問題点は、SDKを自力で修正する必要があること。
>131 ご返答ありがとうございます。 さらに質問で申し訳ないのですが、SDKを自分で修正するというのは、どういった箇所になるのでしょうか。 SDKのAPIクラス自体を.NETに対応させる必要があるということでしょうか? VSTホストに対するインタフェースを変更しなければ、 ネイティブで書かれたVSTホストから.NETで作ったVSTプラグインを呼び出すことは加納なのですよね?
133 :
デフォルトの名無しさん :2006/07/27(木) 01:17:43
age
Directサウンドバッファに読み込んだWAVを合成して書き込もうとしてるんですけど、 うまくいきません。ずっと前にこのスレで話題になっていたときは 「ほんとうに加算するだけ」ということだったのですが・・・ 8ビットステレオデータです。 単音では鳴るのですが二つを合成すると×。
ソースさらせ
単なる桁溢れ
>134 8bit wavは0基点ではなく、0x80基点。 char in1, in2; // 入力 char out; // 出力 out = ( ( in1 ^ 0x80 ) + ( in2 ^ 0x80 ) ) ^ 0x80; こんなんだったかな? 間違ってたらすまそ。 後は加算後にクリッピング処理入れる程度で鳴るはず。
話題になったのは本当にこのスレかい? ゲーム製作技術板でそんなことを書いたような覚えはあるが>「ほんとうに加算するだけ」
int tmp = in1 - 128 + in2 - 128; tmp = max(tmp,-128); tmp = min(tmp,127); out = tmp + 128;
int tmp = in1 + in2 - 256; out = (tmp / 2) + 128; ∴ out = (in1 + in2) / 2;
143 :
デフォルトの名無しさん :2006/08/06(日) 18:34:19
マイクから入力された音声と逆位相の 音波をスピーカから出して、音を消すシステムを 作りたいのですが(もう誰かが作ってるらしいですが)、 こういったリアルタイム性が求められるものは プログラムだけでは無理でしょうか。
144 :
デフォルトの名無しさん :2006/08/06(日) 18:57:58
モーターアシストつきのじてんしゃを もっていたら SP1 カンマ キュークイック キュークイック 200PS がここで 230PSに まわりのクルマが なってるが キュークイック キュークイック 250PS キュークイック 245PS キュークイック キュークイック 350PS キュークイック 450PS に なってる はっずうだ。 250PSとか 245PS 350PS 450PSとかぬかして SP1 とはどういうのかと いうと Specialぱわーすてーじ だが あと 4p pppp と いう そうすると クルマは てんかは ふるぱわー状態だ あと なまえをいうじぶんのなまえだ じぶんのモーターアシストじてんしゃは モ−ターアシストが はたらいていなくても つまり きってあっても かなりかるくなってるだろう。 あと SATEP 4SUTEPPU 2 という そうすると 4パー というと 4秒 ないし 40秒モードは どうしますかと なると 4ぷれいという わかりましたと なると では てんかじき せいぎょがどうか きいてきますというが きんきゅうじ うんてんしゃ ののっぞむままの パワーをひきだしてほしいとなる 4びょう というと にげている180の パワーが 4びょうだけ 4500PSになる。 どうしてかというと まいくろぷろせっさーゆにっと ふるもーど こんぴゅうたーというのはそういうものなんだといえる。 モーター かいせい型 つまり モーターをこいで じゅうでんする モーターアシストじてんしゃの になるだろう。
145 :
デフォルトの名無しさん :2006/08/06(日) 18:59:55
あと なまえをいうアニメなど ゴリラ というなまえをいう
146 :
デフォルトの名無しさん :2006/08/06(日) 19:01:48
あと プレイ 2プレイ と 4プレイ と 4びょうたつと じどうてきに もどる
147 :
デフォルトの名無しさん :2006/08/06(日) 19:03:07
ゴリラではわかりませんので ゴリラ ツー つまり ゴリラ2といっておく
148 :
デフォルトの名無しさん :2006/08/06(日) 19:04:08
4pは フォーピー というはつおん
149 :
デフォルトの名無しさん :2006/08/06(日) 19:08:28
4p pppppppppp pのあとにppをうったちょっといみはわかるとおもうがまあpといういみではなくて まいくろぷろせっさー ふるもーど のほうがいいかな
>>143 リアルタイム性も何も、対象の音を得た時点でその音はもう通り過ぎているわけだから消せるわけない。
周期性のある音に対してなら有効だろうがな。
プログラムだけじゃ無理かといわれればそのとおり。
どんなに精度高く作っても、それが使える条件は限られてくる。
151 :
デフォルトの名無しさん :2006/08/06(日) 20:22:36
なんでも さくじょしちゃうんだよな 180ってなに せいれき2000ねん ころかなあ r18 というところで 4km くらいてまえから policeカーとの ばとるが はじまたんだ ただr18を しっそうするだけだけど そのくらいのきょりで ついせきされる くるまがじこるのは おかしいんだ じつは ぶつかったのは Policeカーなんだ なんでも ちがうにんげんを たいほして あだうちとか やるんだ にほんの ぐんしんのじんじゃが くびらい はんふる をまつったとしたらどうする 1267ねん の うみをうめつくしていた ちゅうごくの ぐんせ”い じつは 首都がかんらくしていたら ちゅうごくちほうが ちゅうごくちほうと いうのがちゅうごくの やくしょがあったからんだって へいけものがたりが にほんにおける てんぷるとん てんぷるとんくびらい さま てんぷるとん てんぷるとん くびらいさま つまり せんそうに さんかした へいしは しょばつだが こっかこうむいんは せんそうへの さんかを もとめられる だが じたくで テレビなどをきいていて しょくむを ほうきする のなら それはのがれているとみなされる。 ながのけんの ひっとてみな よそからきたひとたちなんだよな
152 :
デフォルトの名無しさん :2006/08/06(日) 20:25:00
せんそうって ひとたび きまりがあると かんらくした あと おんなは ちぶさを こしのあたりから かたまで りょうてでさするように なるけど けっこんも あいての こっかの なるけど おとことか やんなっちゃうな やんなっちゃうな やあんなんちゃうな なんてね
153 :
デフォルトの名無しさん :2006/08/06(日) 20:43:50
ロード オブ リング ハカ の 楽園 くらんくいん ブリトンぞくの ちがながれてる ブリュウターニちほうに あった あいつは かわってすまったんだよ せんそうに いって かんぱあい じゆうの めがみのような かっぷを もって ぶどうしゅを おんなも きれいなのはいっぱいある せんりひんも ある せんそうに さんかした うばいたかった うめえうめえ じゆうのめがみの かっぷのようにつがれた ぶどうしゅを えんかいだ さあ せんそうの うばいとった つまり さんかしたかった わけね ながのけんの っぜんこうじたいらの じんこうは せいれき1900ねんから 500ねんまえは 13せいきだと おもうが じつは 15せいきからは は にほん のよそからきた ながのけんの っぜんこうじたいらのじんこう15にん から はじまった とつたえられている。 てんぷるとん てんぷるとん くびらいさま すくいをあたえてください クンパルベル さま すくいをすくってください はーんこくの みなまなさまに はーんさまから つたえが あるそうです。 うまって ものすごく はやいんだもん 1900ねんからの カーね かざりたてるのは
154 :
デフォルトの名無しさん :2006/08/06(日) 20:54:18
ロード オブ リング ハッカ の 楽園 くらんくいん まんがの しっずかなるっどううううは げんだいの かいしゃのことをかいてる つまり しゅじんこうが かいしゃいんね そうして あんなもん げんだいには ないよ ビジネスというのは なんだよね ほうりつの しょうyもん を たてに びじねすを する つまり かいしゃね ながのけんの きぎょうに ぴたりこの さいごだとおもう つまり いくっら やっても だもん いつのまにか なかまに なっちゃたんだよね けいさつしゅたいの げーむなんてやらに ひやあ てつどうの れーるの しなりつけたのも かきこんだ おれと はなせるにんげんが いないんだよな つまり だれも わかんないって ぼくは うんこから はんばあがあ に はさむ にくに そっくりな うんこかこうひんを つくってみせる けっきょく ねえ わりきれないのが よのなか だから なんとも してないの つまり どうでもいいの、 いくっらやっても なのが しょうばい しょうばい なのよ だから ぴったりの さいごなわけ せまいちいきの さんかがた なかまの きぎょうぐんには
155 :
デフォルトの名無しさん :2006/08/06(日) 21:49:35
じんるいの そせんは 3じゅうれんさのいでんてきこうそ”う が 5分の2 か 5分の3 をしめていた くろーんかぎじゅつを もちいて くろーにんぐ つまり てんしゃとか いうのだが もちいて うまれた 3じゅうれんさの せんしょくたいの いくつあるかは っずのうかつどうとは かんけいが ない 3じゅうれんさの いでんてきこうっぞう つまり 3じゅうれんさのせんしょくたいこうっぞう は ただ そうだ つまり だけだ 2じゅうれんさの せんしょくたいの こうっぞうは 3じゅうれんさの せんしょくたいの こうっぞうよりは ふくっざつだ。
156 :
デフォルトの名無しさん :2006/08/06(日) 21:52:29
3じゅうれんさの いでんてきこうっぞう つまり 3じゅうれんさの せんしょくたいの こうっぞうを もっていた じんるいの そせんから くーろんかぎじゅつ つまり くろーにんぐ てんしゃ ぎじゅつを もちいて じんるいの そせんが うまれた
157 :
デフォルトの名無しさん :2006/08/06(日) 21:58:00
もーたーあしすとしきの じてんしゃが なにかに つかわれるかのうせいが ある べとなむで げんちでは つまり じてんしゃさ のってたんだが グラスファイバー製の ぼうだんそうち
158 :
デフォルトの名無しさん :2006/08/06(日) 22:03:01
ケブラー グラスファイバー製 =
159 :
デフォルトの名無しさん :2006/08/06(日) 22:15:10
まるこぽーろの とうほうけんぶんろく なるぶんしょに うしなわれた ぶんしょが ある。 あるひとに よると だが ようろっぱのたいりくには はくしょくけい3じゅうれんさ うわさによると ちゅうごくから にげてきた えいこくじんは にほんじんが きらいで えいこくじんは ちゅうごくよりらしい。 こーかさすちほう 500まんにんの きゅうじんを ついそう きじゅつも ある つかわれたうまの ちくさんえきとうほう きげんせ”んには もうあった
160 :
デフォルトの名無しさん :2006/08/06(日) 22:23:05
まるこぽーろが ちゅうごくに ちゅうごくじんは あたまがいいと おもったらしい。 はくじんが ゆうごくから きた きゅうじんから しんかしたというせつも ある らしい。 にほんの とっきょに みくだすというのが ある つまり2じゅうれんさこうっぞう が えらいというのだ くるまを うんてんするには えらいんだというのを すてるのだが なかなか くるまを つくるのは くらいでないと くるまのうんてんは むっずかしい。
161 :
デフォルトの名無しさん :2006/08/06(日) 22:33:07
じんるい 人類が かつやくしたのは 地球に わずかな きかんだった りゆうは 人類が かつやくしたのは わずかなきかんだったという ふれーっずが しっくりくるからだ。 人類のれき終にしゅう止符を うつんじゃ ないだろうかなあ 2じゅうれんさのかんじをかんがえる
162 :
デフォルトの名無しさん :2006/08/06(日) 22:40:12
せーぶでーた が できないのは かそうでーたーくうかんを つくってる かのうせいも ある
月配列の亜流でも作ってんのか?よそでやれよ
>>150 とはいえ、環境音を抑えるヘッドフォンもあるぐらいだから、十分早く打ち消す音を発生させればある程度音量を抑える事はできるんじゃないだろうか?
>>164 周期性がないとかえって五月蝿くなるだけのような
>>165 逆位相波を重ねて雑音を消す技術は既に色々応用されていますが何か。
音はね、エネルギーなんだよ。 だからスピーカーで音を消すにはスピーカーがエネルギーを吸収しなければいけない。 だったら吸音剤をおいた方がいいよね。 ただね、 ダクト内部のような場合は、出口で丁度圧力変化がゼロになるようにしてやれば 外に出ないというのはあるよね。 でもダクトの中のエネルギーは増えている。当然だよね。 高速道路なんかの壁のスピーカーも同じ理屈だね。
>>167 吸収しなくても逆方向のエネルギーをぶつけりゃいいじゃん。
吸音材ができることなんてタカがしれてる。
運動量や圧力はマイナスになれますが エネルギーはその2乗項なので、物理量が虚数にならなければエネルギーは消滅しません。 つまりマイナスのエネルギーというのは無いのです。 もしかして、マイナスのエネルギーという意味を、 エネルギーを閉じ込めて、その閉じ込めた空間で吸音=熱エネルギーへの変換を行うとい う意味に使っているのかもしれませんが
おしえてぇ♪ くだぁさい♪ この世の引力と反発力に♪ 符号の違いに意味があるのならば あなたは浮きますか?
>>169 音は波なので逆相を重ねりゃ弱くなる。つりあいとって合力0にすりゃいいだけ。
あんた、頭悪いね。
有限の大きさの面で音場の逆相を作る事は出来ない。 音は圧力と運動量が交換しながら伝わってゆく でも圧力はスカラーだけど、運動量は方向成分を持った(つまりベクトル) で圧力も場の上にあるから、 逆相を重ねるには3次元上に圧力コントロールを行える装置を配置しなければならないわけだ。 ダクトの中や、ヘッドホンのようにその一点に絞ればその点だけをコントロールする事は可能だが 音に音をぶつけてエネルギーを吸収する事は出来ない。
生半可な知識で頭の悪い屁理屈捏ねている香具師がいると聞いて来ました。
まったくだ。 任意の3次元空間で音が消せるというなら、 ハイファイ対応のハウリングキャンセラーなんて簡単に作れると思ってるんだろうな
音の振動を伝える者をなくせばいいんじゃないの?
つ[真空ポンプ]
共鳴させてエネルギーを集中させてから回収するというアイデアはどう?
クインケ管のように穴が開いてるのに音が外に出ない現象を 【消す】 と呼んでるという事でいいのでは?
そこの実験発表、いちいち面白いよな
でも 反射するという事は、
>>177 のいうように 左からの音についてダクトを
ヘルムホルツ共鳴器に換えてしまっているのかもしれない。
つまり進行方向⇒ A ----++++----++++----++++----++++----++++ B ++++----++++----++++----++++----++++---- A+B なら完全に消えるけど、 スピーカーからの音は左右に反対位相(反対進行方向)で伝わる ++++----++++----++++----++++----++++---- +++----++++----++--++----++++----++++--- ++----++++----++----++----++++----++++-- +----++++----++------++----++++----++++- ----++++----++---++---++----++++----++++ この進行波を加算すると、スピーカーの所で反射されているのと同じ
反射以外の吸音原理: ダクトを2又にすれば、片方の通路の音は当然1/2になる。 つまりそこで反対位相で振幅1/2になるようにスピーカーをコントロール出来れば スピーカーがエネルギーを1/2吸収した事になる
床天井壁が均質な部屋に明かりが灯っている。 明かりを壁が αだけ吸収し (1-α) 反射するとする。 反射した光は再度反射するから (1-α)+ (1-α)^2+ (1-α)^3 .... と無限に反射する 部屋の明るさは 真っ黒な壁の部屋にくらべて Σ(1-α)^n 倍明るくなる。 αが小さくなると、この倍率はとても大きくなる。 白い壁、明るい色の床の狭い部屋は蛍光灯1灯でも十分明るい。 しかし、壁に黒い学生服をかけるだけで突然暗くなる。 学生服が光を吸収してしまうからだ。 同じ事は音についても言える。 部屋の中で音は壁で何度も反射される故に音は大きくなる。 この原理で増幅された音は、一箇所で吸音するだけで一瞬で小さくなる。 これを電気的に起こせば
光のように音を吸収できる素材なんてない。
音のように光を吸収できる素材なんてない。
観測者の位置でだけ消音状態にしたいんじゃないのか?
・耳から入る音以外(体が感じる音)をどう消すのか
・既に届いてる音に対して、プログラムで対処するなら
>>150 の言うように周期性から予測して打ち消すしかない
・上記方法の場合でも環境依存をどう対処するか(マイクとヘッドホンの配置と特性、PCの構成等)
>>143 汎用的な物は限りなく無理に近いと思うけど、
環境依存覚悟で実験してみる価値はあるんじゃね?
190 :
デフォルトの名無しさん :2006/08/08(火) 01:49:16
音消してくれるエアーカーテンほしいよね。 それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。 超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。 あの技術とか使ってできないかな。
>>190 >音消してくれるエアーカーテンほしいよね。
音波レンズというものがあるので、焦点が自分の方に来ないようにしてしまえば
エアカーテンに相当するものは可能だと思う
3次元に広がる音をピンポイントで消すには
上で何度か言われている(言ってるひとは勘違いしてるみたいだけど)
逆位相の部分での干渉を利用すれば出来なくはない
ただしピンポイントなので他の場所は静かにならないし
3次元的にはエネルギーも決して無くなる訳ではない
>それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。
>超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。
>あの技術とか使ってできないかな。
すこしずらした非可聴周波数音を二つのスピーカーから発生させて
その二つのベクトルの交わる部分のみずれからくるうなりで
可聴周波数を再現するという話が出たことがあると思う
>>188 その位置だけ消音といっても、3次元空間内でそういう点を作るのは難しい
もし可能だとしても、そこで定在波を作ってるようなものなので、
節と腹が生じる。 節で音量がゼロなら、腹では音量は2倍になるという事になる。
耳が2つあり音速は330メートル/秒程度なので、300Hz以上では
両方の耳に節が来るような定在波を作る事は出来ない
右耳と左耳の間隔が〜1m近くあるデカ頭の人キター
頭の直径が1mもあるわけねぇ〜だろ
330 [m] / ( 300 [Hz] × 2 ) = 0.505 [m]
>>192 の頭の直径は 50cmしかないんだよ。
↑ 0.55 [m] orz
>>194 >
>>192 の頭の直径は 50cmしかないんだよ。
充分でかいよ。漏れの肩幅でさえそんなにないよ。
だから実際実用化されてるらしいでないの。 ただソフトウェアでとなると遅延時間がでかくなるから(一番でかいのはA/D/Aレイテンシー)、 そうとう条件は厳しくなるだろうね。
-6dB sin(30度)=0.5 だから 330 [m] / ( 300 [Hz] × 12 ) 約9cm 子供の頭?
そういや180度の場所も節だな
>>193-194 いいか、お前ら、
0 90 180 270 360
---______---~~~~~~---______---
節 腹 節 腹 節
波長が 1メートルなら 腹はその1/4と3/4のところだ
そうか、電話なんかは300Hz以下カットしてて、耳の感度が悪いのは 頭の大きさから来てるのか!
>>197 逆相で音を弱くするので実用化されてる例は、
踏み切り、病院、救急車、消音ヘッドフォン、高速道路、新幹線の線路などなど。
でも音を単に反射してるのだとすれば、高速道路なんかは高いマンションなんかは逆にうるさくなってるのかも
定在波と進行波で検索したリンクで初めて勘違いに気が付いた。 圧力と|速度| って 90度位相差が出るのは定在波の時だけで 進行波は同相だったのか
ダクトの中に細いフィラメントを沢山配線して通電する事で加熱 熱膨張で進行波を打ち消してしまうというのはどうだ?
プログラミングの話が全然出てこないのは何故?
209 :
デフォルトの名無しさん :2006/08/08(火) 21:19:28
DPCMのいいエディタご存じないですか? それとも、無きゃ作っちまえ、なスレですか?
>>209 それがローカルルールの範囲内の質問なんですか?
エディタといっても、波形を表示してそれをカットペースト+エフェクトするくらいだからなあ 波形をマウスで作ったりしたってまともな音にならない
212 :
デフォルトの名無しさん :2006/08/12(土) 08:12:36
213 :
デフォルトの名無しさん :2006/08/14(月) 02:21:43
MP3のエンコーダのライブラリでライセンスフリーのものってありますか? ご存知でしたらどなたか教えていただけませんか。デコーダはあるんだけど。
>>213 ない
つか、もし配布元が問題ないといっても、F社やらT社は絶対それを認めないだろ
215 :
デフォルトの名無しさん :2006/08/14(月) 17:50:08
>>214 ではMP3のエンコーダ自体を自ら実装すれば問題のでしょうか?
>>215 フォーマット自体には特許の及ぶところではないというのは当たり前になっているわけで、
それゆえに、LZWの特許が有効だったときも無圧縮GIFは問題無いという考えが主流だった
そう考えると、確かmp3も圧縮アルゴリズムの特許は例の2社が持っていたはずで、
それなら無圧縮mp3は問題ないことになる。
だが、それってmp3の意味無いじゃん。
午後みたいに、インストーラーでコンパイルするという荒技もあるけどな。 しかし、あれは酷いやり方だな。 賛同はできん。 素直にソースだけ公開しとけば問題ないのに。
218 :
デフォルトの名無しさん :2006/08/16(水) 23:44:51
音ゲーで使えるようなくらいの遅延の少ないエフェクトの掛け方を探してます。 C#.NETで、DirectSoundのSecondaryBufferのエフェクトを使ってみたんだけど、 バッファに書き込んでから音が鳴るまでの時間が200msecくらいもあって、結構使えない。 そこで腹をくくってその辺りの処理を自前でやろうかと。 複数のwaveを鳴らして、その合成音にリアルタイムにリバーブエフェクトをかけるのって、 再生用バッファにwaveを加算(サンプル毎足し算) その波形に対して随時インパルス応答を適用する こんな感じで合ってますか?
あってるよ。 問題は飽和に対しての処理だけさ
220 :
デフォルトの名無しさん :2006/08/17(木) 08:37:15
午後でいくつかまとめて処理すると ファイル名が入れ替わったりするバグありますよね?
>>218 ASIOとかWDMとかに最適化しないとめちゃめちゃ遅れるよ。
224 :
218 :2006/08/17(木) 17:29:50
225 :
218 :2006/08/17(木) 17:52:43
録音して波形を見てみたら、ノイズは
>>219 の忠告通り飽和が原因っぽかった。
飛び出したサンプルだけとりあえず範囲内に凹ましてみたけどノイズは和らいだだけ。
やっぱりその周辺も同じ比率でなだめないといけない?
処理に時間かかって仕方なす
インパルス応答をそのまま掛け算したら遅いのが当然 といってFFTで掛け算回数を減らす高速化をするとブロック処理になって、希望じゃないでしょ。 だからリバーブなら思い切って一定時間の遅延にしてしまうのがいいんじゃないの? その遅延にIIR2時のLPFかければそれらしくなるさ。
デジタルリバーブの基礎から勉強したら? リアルタイム性を重視してリバーブをかけるなら、 ディレイ時間の違うIIRフィルタの結果をさらにIIRフィルタに通すのが基本。 今のCPU速度だとゲームでコンボリューション・リバーブは非常識。
EAXのリバーブとか使えないか? 幾分ハードウェア処理だから軽いだろ
229 :
218 :2006/08/17(木) 21:29:11
遅延が…遅延がぁぁっ!
係数が…係数がぁぁっ!
>>229 2次のIIRフィルターは LPFならf0とQで係数が決まるけど、それぞれいくらにしてるの?
Q=0.7程度にして f0を変化させてみたら?
それから、あくまでも遅延した方にだけIIRをかけて、元の信号と加算するんだよ。
加算した結果飽和するなら音量を下げるAGCを使うか
飽和しないように a , (1-a) の比率で加算するか
234 :
218 :2006/08/18(金) 19:48:30
フィルタ係数の算出方法があったのか( ゚д゚)…今見見返してみると過去ログが宝の山に見える。
そういえばさっきから全然残響音が出ないなぁと思って考えてみたんだけど、
1サンプル前じゃなくてもっと前のサンプルをフィードバックすれば良かったのか!?
っと気づいてから今更
>>226 の意味を理解した。ぁーぁー
それから1次なり2次のIIRを掛けて高音減衰させれば良い感じになるのか。
一応これでそれっぽいのは聞こえるようになったよう。みんなありがとうヽ(゚∀゚)ノ
後はこれとミキシングがどのくらいのレスポンスで出来るかどうかー
IIRは発振しないようにパラメータ選びは慎重にしてね( ´∀`)b
>>9-11 を参考にして、ブロックのサイズを凡そ0.1秒にして、
音程変化の内速度調整を実装したところ、
再生速度を0.5倍にするところまでは非常にスムーズな音でこれを実現できました。
しかし、0.5を下回る倍率(〜x0.4)になった途端、音声が毒電波状態です。
現時点での実装は
・ブロックの間引き(重複)
・ブロックの窓関数処理
のみで、
・空白を優先
・繰り返しを配慮
という二点は実装していません。
自分の作っているプログラムでは効率が悪すぎて、
この二点を実装しようとすると処理時間が不足するおそれがあり、
何よりこの二点の効率の良い実装方法が思いつかなかったので。
よくよく考えてみると、この機能を実装しているプレイヤの内のいくつかは、
やはり0.5倍を下限に置いている様なのですが・・・。
何か良い解決方法はありますでしょうか?
また、それはどのような方法か教えてください。
ァ・・・もしかしてサンプリング定理と関係があるのか・・・?0.5倍ってのが2の逆数であることから考えても・・
やっぱ厳密にはオーバーサンプリング+アンチエイリアスを かけてから処理すべきとこなんじゃないの
音程が変っているのなら、サンプリング速度が変化しているからどこかの段階でLPFを入れておく必要があるよ。 そうじゃないと折り返し雑音が問題になる。 綺麗な音にしたいなら、最低2倍のオーバーサンプリングしておいた方がいいかもね。 音程が変らずに再生速度だけ変化させてるならサンプリング定理の問題じゃない 0.5を下回る場合に問題が出るという事は 0.5を下回ると同じ音を3度以上繰り返し利用しなければならなくなるけど その処理がはいってないんじゃないの
>>238-239 書き方が悪くてすみません。
「音程を変化させずに速度変化をした」
処理です。
>>239 いいえ、3度以上の繰り返しについても問題なく実装しているはずです。
DirectSound+C#なので、部分抜き出しが難しいですが・・、
0.5以上1倍以下ではどれだけ細かい指定をしても平気なので、
ここにバグがあるわけでは無い・・・とは思うのですが。
decimal readCount = 0;
decimal readSpeed = 0.4;
for(writePoint=0;writePoint<(一秒分のバッファ長);writePoint+=(0.1秒分のバッファ長))
{
readCount += (double)readSpeed;
for(i=0;i<readCount;i++)
{
/* [readBufferに0.1秒分読み込み] */
}
/* [readBufferから書き込み用バッファにwritePoint位置でコピー] */
readCount -= (int)readCount;
}
/* [書き込み用バッファを再生バッファにコピー] */
という感じでの実装です。
なんだっけ、グラフィックとかで良く使う「斜めの直線を整数型のみで計算するアルゴリズム」を応用した感じなのですが。
あ、Shift+Enter間違えて押してしまった・・・。 改行と書き込みがメッセとは逆だから間違えるなぁ・・・ とりあえず、お二人のご意見から オーバーサンプリング+アンチエイリアスについても実装を検討してみます。
あともう一点追記です。 240で示したソースの中で、i以外の変数はすべて クラススコープです。iのみがメソッドスコープになっております。 readCountがメソッド呼び出し毎にリセット、というわけではありません。 おまけに分かりづらくてすみません・・・。
音程が変化していないという事は、サンプリングレートが変化してないわけでしょ? だったら オーバサンプリングとかLPFは必要ないよ。 で、やっぱり3度利用する部分に単純にバグがあるのだと思うよ もっとも3度も利用すると違和感があるという事なら当然そうだろうけどね あまり2倍以上遅くする場合は、やっぱり無音期間を検出して、そこを出来るだけ引き延ばす方がいいと思うよ たとえば0.1秒のブロックを0.05くらいに小さくして、そのブロックの音量が今までの音量より一定比率より小さいなら、 その部分の繰り返し回数を出来るだけ多くするとか
まてよ
>>240 の定数だと、引き伸ばしではなくて短縮なんだよね?
短縮で0.1秒単位に2ブロック以上連続してすてるようになると、音声だと何を言ってるのか判らないようになってしまう。
そこまで強力に短縮するなら、
まず周期性を検出して周期の整数倍の
もっと小さいブロック (1/30)〜1/60のような(ブロックというよりgranul) サイズにして
それを捨てるようにする。必要があるよ。
サウンドプログラムの本ってあんまりないよね
!バグ見つけた!
>>243 バッファを注意深く見たところ、きちんと三度利用されるところは三度利用されていました。
ですが、読み込み時に窓関数をかけるのではなく、書き込み時に窓関数をかけていたため、
一回目の利用>二回目の利用>三回目の利用
と、窓関数により一気に減衰していました。
これをなおしましたが、やはり違和感は酷いです。
どうやらご提案の通り、きちんと無音期間や繰り返し周期の懸念を行わないといけないようです。
>>244 いいえ、短縮ではなく延長です。
なぜならreadCountは
一回目のループで0.4→読み込まない(readBufferはデフォルト0配列)
→書き込みバッファには0が書き込まれる
二回目のループで0.8→読み込まない
→書き込みバッファには0が書き込まれる
三回目のループで1.2→読み込む(readBufferには0〜0.1秒分の)
→書き込みバッファには0〜0.1秒分のデータが書き込まれる
四回目のループで0.6→読み込まない
→書き込みバッファには0〜0.1秒分のデータが書き込まれる
五回目のループで1.0→読み込む
→書き込みバッファには0.1〜0.2秒分のデータが書き込まれる
という感じに機能するので・・・。
出来るだけ無音期間を検出して無音期間を引き延ばすのが第一 次善は、周期を検出してその周期の整数倍にgranulを切り出して それを並べる 音声の場合は周期の揺らぎが音声らしさを作ってるから 母音の部分の極端な引き伸ばしは巧くゆかないけどね(周期性が増すと声が変ってしまうから) やらないよりはマシ
248 :
236 :2006/08/19(土) 09:52:20
うん、どうやらその方法をとるしか無い様ですね。 ・・・分かり切ったことを聞いたようで、すみませんでした。 しかしそうすると演算量が極端にあがるなぁ・・・ 全量ノルムチェックと倍速調整か・・・うは、頭いてえ
Σx^2はそんなコストはかららないでしょ 周期検出の方が計算コストの低いのを探すのは大変でしょ
250 :
236 :2006/08/19(土) 10:22:12
>>249 やぁ、せっかくあちこちダイエットしたのになぁ、ってボヤキです。
再生に関係しない他のところが処理コスト食い過ぎで、
再生するとCPU利用率が3%くらい跳ね上がるもんですから。
実質的な問題はただ単に面倒くさいだけです、本当にすみません。
急に内容が難しすぎ。
252 :
236 :2006/08/19(土) 10:32:11
・・・確率論的に乱数で処理の是非を決定して無音部分の処理確率をあげt いや、やめておこう
>>234 毎サンプルデータ毎に
Xを入力 Yを出力 配列をM, rwp,
Y = X*(1-g) + LPF( M[ (rwp +T) % SIZE] ) *g
M[rwp] = Y
rwp=rwp % SIZE;
てな計算になるだけだから、別に遅延などそう必要ないでしょ
254 :
デフォルトの名無しさん :2006/08/27(日) 18:27:58
QuickTimeSDKつかいづらい・・・・・・・
255 :
デフォルトの名無しさん :2006/08/30(水) 15:08:42
波形を合成する機能をもったライブラリって例えば どのようなのがありますか?
DirectSound
257 :
デフォルトの名無しさん :2006/08/30(水) 23:33:24
8000Hz,8bitで取り込んだ音の中に、1KHzの音が混じってるかどうかだけをリアルタイムに調べたいんですが、低スペックマシンで処理するのにおすすめの方法はありますか?
258 :
デフォルトの名無しさん :2006/08/30(水) 23:36:44
FFTを応用すればどうとでも出来るとおも
バンドパスフィルタを使って音量レベルを計ればいいんだ
音程を変えるのに FFT を使ってるソフトがあるらしいのだが、 どういう風に使ってるんだろう。 単純に区間に区切って FFT かけて周波数を n 倍して戻すのって、 時間軸で重複させるのと等価だよなぁ。 位相をうまく合わせればちっとは良くなる気もするが、窓関数かけてたら ほとんど影響なさそうだし。
> 全体を一度に収まる大きなサイズのFFTで行う方法 これ試したことあるけど、まともな音にならない。 長い区間をフーリエ変換しても、意味のある情報は得られないと思う。 > ピッチシフトは周波数軸での単なるシフトではなく、指数的移動なので これの意味が良くわからん。定数倍すりゃいいだけじゃないの?
265 :
デフォルトの名無しさん :2006/09/01(金) 19:12:02
>>264 恐らく「音程」に対して周波数係数が「指数」になるって言いたいんじゃないかな。
音程 周波数
-12 *2^(-12/12)
-11 *2^(-11/12)
・・・ ・・・
-1 *2^(-1/12)
±0 *2^(±0)
+1 *2^(+1/12)
・・・ ・・・
+11 *2^(11/12)
+12 *2^(12/12
だから・・・
まあ何かを勘違いしている恐れがあるけど
その周波数軸の定数倍をどう実現してるの? たとえば 2^(+1/12) = 1.05946309435929526 となって綺麗な比率にはならない 特に低周波は目が荒くなるわけで これを旨く処理するには exp(2πki)という指数=三角関数が必要にならない?
>>266 指数的な補完が必要ってことか。なるほど。そこまで考えてなかった。
でも、上にも書いてあるけど、周波数軸を a 倍するのって
時間軸を 1/a 倍するのと同じだよね。(音量は a 倍違うけども)
FFT 使う意味がいまいち分からないなぁ。
DARU/PITCH-SHIFTER!だと音程+1で1.05946314って表示されるよ。 綺麗な比率では無いけど考え方はあってるんじゃないの。 周波数軸上でスペクトルを上下させるのがピッチシフトだっけ?
>>267 たしかに。
下限周波数 f_low [Hz]で周波数スペクトルを測定するには、
有限の時間1/f_low [sec.]かかるので、
結局のところグレイン・サイズ 1/f_low [sec.]で
グレイン操作して、ピッチシフトを表現することしかできないね
271 :
デフォルトの名無しさん :2006/10/11(水) 18:43:00
今、ASIO2.0のSDKのサンプルをいじってるんだが、どこで再生しているのかわからない。 誰か教えてくれません?
ASIO_Init()の中をループしている最中にbufferSwitchTimeInfo()がcallbackで呼ばれる と思った
いやbufferSwitch()か・・・まぁその辺
確かにここらへんが怪しいとは思うんだけど、どういじくったら音を出せるのかがわからない。 asioCallbacks.bufferSwitch = &bufferSwitch; asioCallbacks.sampleRateDidChange = &sampleRateChanged; asioCallbacks.asioMessage = &asioMessages; asioCallbacks.bufferSwitchTimeInfo = &bufferSwitchTimeInfo; 誰か音を出す方法を教えてくださいな。
あ、ごめんinit()は自作関数だったかもw 昔書いたのを適当に眺めて書き込んだんで・・・ 再生するサンプルソースがあると思うけど要するにその辺のcallback定義して開始すると ASIOのsystemからbufferSwitchTimeInfo()が呼ばれる。 その中で要求された形式に応じてbuffを充填して戻る 無音だかを再生するサンプルがあると思うんで〜Info()にbreakpoint貼って 要求されたcaseのmemsetを適当な波形を返すようにしてみるとか、その辺からやってみては。
276 :
デフォルトの名無しさん :2006/10/25(水) 23:43:20
bufferSwitchTimeInfo()をいじくったら音が出るようになったよ! さんくす! でもなんか音が途切れ途切れ。。。ブツブツだわ。 どうしたらスムースになるんだ? 誰かわかる人助けてください。
まだキャプチャーした音を再生するところまでしか作ってない「ヘボな段階」なので、 ファイル書き出し機能を作ってから聞けばいいのかもしれないのですが、 書き出し機能を作るときからおおまかな部分について知っておいた方がいいかなと 思いましたので、質問です。 キャプチャして録音しながら DVDレコーダなんかでよくあるタイムシフトの機能を扱いたいと思っているのですが、 どういった手順になるのでしょうか?おおまかな流れについて教えて下さい。 waveもしくはmp3をストリームして録音しているときに単純にそのファイルを 開いて再生するだけなのでしょうか? それとも、何かあらかじめ準備しなければならいことがあったり 特別な手順を踏んでタイムシフト用のファイルを作ったりしないといけないのでしょうか? mp3でタイムシフトやるときとwaveでタイムシフトやるときのファイル形式による懸念点などありましたら、 それも教えて欲しいです。mp3でやってもwaveでやっても一緒なのでしょうか?
Adudacity でタイムシフト再生なんか出来たか?
あ、Audacityスレとまちがえてかいてしまったごめんよ。
>>277 FILE_SHARE_READでCreateFile()してやればいいんじゃね?
録音用のHANDLEと再生用のHANDLEで別にCreateFile()すればseek位置で干渉しないし。
wavはLR&チャンネルのバウンダリさえ気をつければどっから再生しても問題無いけど、
mp3は[4バイトのヘッダ+データ]のブロック単位でシークする必要がある。
てかmp3使うならエンコード/デコードのライブラリが必要。
フリーで転がってるソースはエンコはgogo、デコードはmpg123辺りかなぁ。
281 :
277 :2006/10/28(土) 18:54:05
>>280 どうも、ありがとうございます。
それほど複雑な処理を必要としないさそうで、ちょっと安心しました。
waveとmp3でやり方が大きく違いそうだということもわかりました。特にmp3は敷居が高そうですね。
とりあえずwaveでタイムシフトを実現させることを目指そうと思います。
こんなプログラムは探せばに既にあるんでしょうけど、勉強を兼ねて自分でやってみようと思います。
ありがとうございました。
ADPCMの詳しい資料ってありませんか?
CCITTの規格書とかお金出せば買えるよ
>> 282 何が知りたいの?
285 :
デフォルトの名無しさん :2006/11/04(土) 15:55:44
OpenALでサウンドプログラムを組んでみたいんだけど入門的なサイトって無いだろうか?
286 :
デフォルトの名無しさん :2006/11/05(日) 00:01:03
>>286 > linuxでC言語使ってサウンドプログラミングやってます。
> 録音したデータにFFTをかけたいんですが、
> データの渡し方が分かりません。
ここで聞くような内容じゃないだろ。
プログラム初心者板にでも行った方が幸せになれる。
read したとき bufに指定のフォーマット、サイズで データが納まってるのでそれを処理すればよい。
289 :
デフォルトの名無しさん :2006/11/05(日) 01:01:41
290 :
デフォルトの名無しさん :2006/11/05(日) 02:00:31
あるmp3のファイルの波形データをサンプリングするフリーソフトってありますか? time WavAmp 1 1.235 2 -0.256 3 8.242 4 -0.319 … みたいな感じで、テキストデータに保存できるソフトです
またきちゃいました(>_<) 質問する板ってどこ?
>>293 実は自分でもジャンルがよく分かってないんです。
フーリェ変換や波形分析するのはここのスレの人なのかなって
スレ一覧見て思ったので聞いてみたのです。
完全体セルの「笑えよベジータ」って声があるんだけど、それをフーリェ変換したら
どうなるのかなと思ったもので。
フーリェ変換のプログラムは持っているので、
あとは時間きざみごとの波形データが数値として取れれば…
>>294 wavか何かに変換すればいいんじゃね?
>>295 wavに変換すれば解析可能なソフトがあるってことですかね?
何しろ、サウンドプログラミングはズブの素人なのです。
確か、数秒のファイルでもwavにすると500KBくらいになりますよね。
プログラムのソースで500KBって結構なデータ量になります。
音楽データにどのような情報が入っているのかは分からないのですが、
ただ、欲しい情報は「波のきざみ幅」と「きざみ幅ごとの振幅」の
二つのデータなのです。
単純に波の振幅と刻幅を抽出するソフトがあれば紹介してもらいたいのです。
プログラム板一覧を見て、このスレの人なら知ってる人がいるのかなと思って質問しました。
ソフトウェア板辺りで質問スレ探すかLinux板で同系列のスレ探しなさい。
了解しますた。
フリーソフトを使う事をプログラミングだと思ってるのか
>>299 バイナリから直に数値データって取れんの?
>>300 普通に取れるけど、取れても取れなくても、
フリーソフトを使う事をプログラミングとは言わない。
>>302 普通にバイナリファイルを読み込めばいい。
バイナリファイルの読み込み方はスレ違い。初心者スレにでも池。
音声ファイルのフォーマットが知りたければぐぐれ。
>>294 ソフトを自分で作ってやるなら
1、とりあえずMP3ファイルを 16bitWAV形式に変換して保存しよう(ツールは探してね)
2、WAV形式のファイルをバイナリでオープンして、(RIFF+チャンク)で検索してデータを取り出そう
3、かけたいFFTのサイズ以下になるように窓関数をかける -->判らなければ検索してね
4、FFTをかける(ステレオなら2変数を複素FFTでやる方法を使うといいよ)
5、周波数成分毎に絶対値を出しそう
FFTは周波数は比例軸で出るので、大抵は対数軸にしたいと思うので、ココがまあキモになるね
で、たぶん
>>294 のやりたいのは
短時間FFTを使って ソノグラム表示もどきをやりたいのだと思う
>>308 あ、ありがとうございます。
これで作業の方針をきめられそうです。
御迷惑お掛けしました。
ありがとうございました。
>>310 まずくはないよ。
等Qの特性で分割して表示したいとか言い出すと、短時間FFTだと逆にメンドクサイだけで
313 :
デフォルトの名無しさん :2006/11/06(月) 17:24:35
OpenALのプログラムを勉強したいのですが初心者にも参考になるサイトはありませんか? 環境はOSがWindows2000,IDEはVisualStudio2003です。 まだOpenALのSDKは入れていないのでそのあたりから解説してくれているサイトであると助かります。
ググレカス
オープンソースだからソース見ればいいよ
316 :
デフォルトの名無しさん :2006/11/10(金) 16:31:33
WindowsVISTAに移行することを考え、今までのDirectSoundベースで組んできた プログラムを全てOpenALに以降することを考えています。そこでお聞きしたいのですが、 DirectSoundベースのプログラムはクライアントPCにDirectXがインストールされていれば ハードウェアだろうかソフトウェアだろうが問題なく音を再生することが出来ました。 これがOpenALに移行するとクライアント側のPCには最低限何をインストールしておく 必要があるでしょうか?またクリエイティブのサウンドカード(EAXをサポートしたもの)、 その他のサウンドカード、オンボードサウンド、で違いというのは生じますか?
a.midとb.midを同時再生するプログラムを書きたいのですが、 変数を二つ用意しても、二つ目を再生するところで 「指定したMIDIデバイスは既に使用されています。開放されるのをまってください」 という警告が出てしまいます。 mmsystem.hを使う方法で解決策はないでしょうか。
>>319 MIDIデバイスを二つ用意とはどのようにすればよいのでしょうか?
ハード面でということですか?
環境としては、PCにMIDIインターフェースをつなぎMIDI音源で音を鳴らしてます。
>>320 まず環境を書け。
使ってる言語、OS、再生に使用してるライブラリ、最低このくらいは質問時に書いとけ。
それとデバイスの意味がわからないならそこから調べ直せ。
MIDIはWAVEと違って同一デバイスに複数ストリームを流せないから、
MIDIOUTが2ポートあるデバイスで、例えばSC88なりに別々に流すしかない。
実験音楽的に、二つのmidiをマージしたいって事では…?
まぁそれだったら流す前に自分でトラックをマージしちゃえばいいだけのことだけどね
windows系ですけど、 MM_WOM_DONEなどのメッセージ処理中はwaveOutWriteとか使えないって記述をたまに見るんですけど実際どうなんですか。
windows系といっても色々。 昔は割り込み=コールバックだったり タスクスイッチされてなかったりと
326 :
324 :2006/12/14(木) 03:35:29
とりあえず95以降。 95で大丈夫ならその後でも大丈夫な気がするんですけど。
>>326 95は2000やXPとは根本的に別モノ。
328 :
デフォルトの名無しさん :2006/12/14(木) 13:05:50
95, 98, Me は MS-DOS だと思った方がいいぞ。馬糞にホイップクリーム。
329 :
デフォルトの名無しさん :2006/12/14(木) 18:00:56
アルゴリズムの質問なんですがここでいいですかね? オーディオストリームのピークホールド処理(過去nサンプル中の最大値を出力)を作っているのですが、 一番安直と思われる方法=過去nサンプルをバッファしといて毎フレームでバッファ内を全サーチ という方法で作ったところ、ちょっと重いです。高速な方法はないでしょうか。
>>329 1.過去の最高値と今の値を比較し、今の値が高ければ最高値を更新し、カウンタを0に
2.カウンタをインクリメント
3.カウンタが一定値を超えたら、過去nサンプル中の最高値を検出し、カウンタをそこからの値に
ってやりかたはどう? nの値によっては比較回数が減るよ。
331 :
デフォルトの名無しさん :2006/12/14(木) 18:53:14
>>330 おー、なるほど、すばらしいです。
聞いてよかった。早速試してみますー
>>330 ご報告、
入力波形の傾向によっても負荷の具合が変動するってことになりますが
平均して初めの方法よりかなり速いです。まじありがとうございます。
333 :
デフォルトの名無しさん :2006/12/14(木) 23:09:33
>>330-332 それならば「最高値」を2つ持つようにすればどうだ?
それぞれA値・B値と呼ぶことにする。
1.A値と今の値を比較し、今の値が高ければA値を更新し、カウンタを0、B値を0に
2.カウンタをインクリメント
3.B値と今の値を比較し、今の値が高ければB値を更新、カウンタの値を記憶
4.カウンタが一定値を超えたら、記憶しておいた値に更新、A値にB値を代入し、B値を0に
334 :
デフォルトの名無しさん :2006/12/14(木) 23:10:48
すまん間違えた。 4. を修正 4.カウンタがnを超えたら、(n-記憶しておいた値)に更新、A値にB値を代入し、B値を0に
335 :
デフォルトの名無しさん :2006/12/14(木) 23:12:00
ん、なんか微妙に違うかもしれない。 ともかく、1位だけじゃなく2位も記憶しておけばいいんじゃないかってことだ。
336 :
デフォルトの名無しさん :2006/12/14(木) 23:54:00
>>333 試してみるまでもなくダメっぽいな・・・
337 :
329 :2006/12/15(金) 00:04:49
1位の期限が切れたとき、途中で保存しておいた2位を新しい1位とするみたいな感じですよね? 実はじぶんもそうゆうの考えたんですがね、ややこしくてあきらめちゃったんですよね。 そう簡単にはいかなかったような・・・ これって一見とても単純な処理なのに、速いアルゴリズム考えようとすると、 思いのほかアレ?て感じゃありません? だから330の即レスはけっこう目からうろこですた
2位なんているの? ビデオのメーター見てても2秒毎にリセットしてるだけだよ。
本人が満足するのが一番の解でYO
340 :
329 :2006/12/15(金) 02:17:36
メーターだったらそんな感じで十分なんでしょうけど、リミッター作ってるとこでして。
341 :
デフォルトの名無しさん :2006/12/15(金) 10:36:30
WAVデータのサンプリング変換って、どーやりますか? 例えば、11025で8ビットのものは、1バイトの音声データの羅列で、 22050で16ビットのものは、2バイトの音声データの羅列で、 22050は、11025の2倍だから、22050を11025にするには、 out[0] = in[1]; out[2] = in[5]; out[3] = in[9]; : とやってくだけでOKだと思った。 が、音がザーザーです。
>>340 メーターだとこんなやり方もある。
あなろぐ VU メーターっぽい動き。リミッターにも使えるんじゃない?
過去のpeakを減衰させて現在値と比べる方法。
peak = peak * 0.999; // peak = max(peak-k, 0) でもなんでもいい。減衰するように。
peak = max( peak, current_sample);
>>341 8bit PCM は、ふつー符号無しデータで、0x00が負の最大、0x80が無音、
0xffが正の最大。
>>341 リサンプリング LPF とかでググってみて。
手を抜く場合には単純に out[0] = (in[0] + in[2]) / 2 とか。
345 :
デフォルトの名無しさん :2006/12/15(金) 12:30:44
>>343 いまく行きました。ありがとうございました。
>>344 2バイト値を1バイト値に変換する場合、単に上位バイトを格納すれば良いだけです。
これで、256で除算したことになります。
>>345 サンプリング周波数 22050Hz のデータから 11025Hz への変換かとオモタ
347 :
デフォルトの名無しさん :2006/12/15(金) 12:38:08
>>343 16bitPCMは符合有りなんだっけ?
348 :
デフォルトの名無しさん :2006/12/15(金) 12:52:55
22050Hz から 11025Hz にする場合、たんに間引けばいいだけじゃん? 平均取ると何か良くなる?
>>347 WAVのPCMに関しては、そう。
それ以外の文脈だと、符号有り8bitや符号無し16bitのPCMももちろん使
われることがある。
>348 それだとエイリアシングノイズ乗るでそ。 344のでも1/2以上のリサンプリングで乗るけど。 詳しくはFIRとかIIRとかで調べてみて。
>>348 サンプリングレート変換の時はLPFを通して先に高域をカットしなきゃダメ。
中途半端な周波数落としをするときはウェーブレットなんかで補間したほうがノイズが減る。
352 :
デフォルトの名無しさん :2006/12/20(水) 14:26:55
FIRフィルタ(ローパス/ハイパス)のインパルスを カットオフ周波数をパラメタとしてリアルタイムで生成したいんですが、 どこかにcコードサンプルとかないでしょうかね? 数学を理解して自分で書くのは無理そうでして・・・
>>341 幾何学的な手法なら、三次曲線で補完とか、ガウシアンフィルタかける方法もあるぞ。
>>352 sinc関数 sinc(x)=sin(x)/(x) にあなたの好みの肩特性の窓関数をかけるだけ
だが、あなたの好みが判りません。
>>354 そんなにシンプルな感じなんですか?
でもすいません、sincだけでは意味がわからないです・・・
xはなんでしょう?どこでフィルターの種類やカットオフはどこで決まるのでしょう。
窓はhammingでよいかと思います。
判ったよ。手取り足取り教えてくれというわけだ。 sincは検索用のキーワード これで検索しろって意味だ w:=2*π*f0/fs として xが0でなければ sin( x * w) /x xが0の時 w xを整数で±の窓関数の範囲で、窓関数を掛け算 で,ゲインがπあるから、それは除算するし、窓関数のゲイン分も掛け算すると
フィルターの種類は、実際に係数を設定してどんな特性になるか見てみりゃいいだろ 理想LPFと理想HPFは 足せばフラット = 1 になるから 中央値以外は符号が反転するだけだ
>>355 そうなんだけど、フーリエ変換しないでいいからとっつきやすいかな、と。
360 :
352 :2006/12/21(木) 15:28:35
>>357-358 おしえていただいた内容と、徹夜でネットをしらべまくった結果、
数学はさておき、無事うまく動作するコードが書けました。
思ってたよりシンプルなコードになったので驚きです。
ハイパスはローパス用のインパルス応答の振幅が反転された形になるんですね。
プログラムが生成したインパルス応答からフィルタ特性を解析したところ、特性も良好でした。
どうもありがとうございました。
361 :
352 :2006/12/21(木) 21:24:16
すいません、ハイパスについては間違えてたみたいですね・・・
サンプリングレートが44100/1secだとすると、この場合の1sec/44100の単位はなんて呼称すれば良いんでしょうか
1sec/44100 → (1/44100)秒
sec per samplingrate?
いちサンプル
sample per rate
>>361 もう判ったと思うけど 中央の係数のみ 1-a の関係になって、他の係数は負数にすればいいだけ
ASIO SDKのhostサンプルがシンプル過ぎるのもどうかと思う今日この頃。 やっと音が出た…orz
369 :
369 :2006/12/23(土) 22:12:57
なんかディスクI/Oが少しでも集中すると再生が途切れる…。 やっぱりスレッド使って処理を分けないとダメか。
370 :
368 :2006/12/25(月) 10:56:31
なんか適当にスレッド作って 読込処理を非同期にして 少し多くバッファリングしたら 飛ばなくなった。 出来たプログラムはwavの非圧縮PCMしか 再生できないけどなんだか嬉しい。
371 :
デフォルトの名無しさん :2006/12/25(月) 22:03:51
ゲームに関して何だけどPCにマイクを接続して喋ってるんだけど EAXを使ったゲームを起動するととたんに俺のヴォイスにエコーが かかるようになる。どうもそのPCゲームがEAXを使っているとそれに つられてマイク入力の音声にもエコーみたいな効果が強制的に かけられてしまうらしい。これって現状仕方がないことなん(´・ω・`)?
>>372 ゲーム系のサウンドプログラムもこのスレの範疇かと。
サウンドプログラム? どこが? ゲームの設定かOSの設定だろ?
>>371 非サラウンド環境でEAXを使ったら、そらエコーがかかっただけみたいになるがな。
>>371 クリエイティブのサウンドカードだろ?
仕様だ。
市場を一社独占させるとどうなるかの好例だな。
378 :
【吉】 :2007/01/01(月) 03:43:35
あけおめ♪
黙れよ
…FFTで… いや、ごめん。 いいや……。(´・ω・`)
ぉぃぉぃ…
低速フーリエ変換ってないの?
DFT?
筆算
普通にDFTでええんちゃう?
387 :
デフォルトの名無しさん :2007/01/18(木) 21:42:16
WAVで16bitの場合はサンプルごとにshort型にいれてるんだけど、 24bitの場合はどうすんの? 32bitは各サンプルをfloatにぶち込めばOK?
longでええやん
パソコンで処理をする目的なら、入力が何bitだろうと64bit浮動小数点で処理するのが楽だろう ・・・・整数演算の方が早いというような事を言いたい人なら別だが
>>390 16bitはshortに入れているのに?
wavファイル(RIFFフォーマット)の話だろ? WAVE_FORMAT_PCM(=1)は整数の8bit,16bitしか定義されてないんじゃね?
しかしBitsPerSampleにはいくらでも入れられる 入れるだけなら自由だ
本気で言ってるなら池沼。
内部は64bit浮動小数点、外部とのやりとりは24bit整数、あたりが標準的?
>>395 全然。
例えばそこらのアプリの音声再生プラグインは、音質よりも軽くしたい場合が多いでしょ。
逆に、音声処理で精度が欲しいってんなら、内部80bit浮動小数点が使える環境を利用するだろうしさ。
複数のPCMを単一のPCMにミックスしたいんだけどどうすりゃいいのかわからない。
>>398 加算した後でレベル調整でもすればいいんじゃね?
レベル調整は先にやったほうが良くない?
PCMは8bitか16bitだから 32bit型に一度入れてから割り算すればいい たとえばA,B,Cを 30%:20%:20% でMIXする場合 int vrA=30; int vrB=20; int vrC=20; int total=vrA+vrB+vrC; int w= A*vrA+B*vrB+C*vrC; return w / total; }
ステレオWavデータのPAN設定のやり方教えてくださ ぐぐったけど、どうも該当するものが発見できなかったんで
左右に振るだけじゃないの?
たぶんパンを振るとき左右それぞれにどういう演算するかって話だろ その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う この場合だとセンターの時音量下がって聞こえるけどね。 DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。 この場合センターの時音が大きく聞こえる
>>405 > その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
> この場合だとセンターの時音量下がって聞こえるけどね。
つか、左寄せの場合もセンターの場合も右寄せの場合も同じ音量
> DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
> この場合センターの時音が大きく聞こえる
この場合は正解。センターの時は、左寄せ, 右寄せの時の倍 (+6dB) になる
>>405 ・音のエネルギーは振幅の2乗に比例する
・聴覚は対数特性
この辺がヒントになるかも。
ハードウェア・ミキサーだとセンターは3dB落ちがデフォ。 PAN振りっきりならスピーカーは1本しか鳴らないけど センター時は2本同音量で鳴るから音量は3dBアップ。 これを補正するための3dBダウン。 これでL-C-RとPAN移動させても横一直線で移動する。 6dBダウンは再生/演奏時にモノ・ミックスされるケースを想定してのもの。 (回路内のミックスは電圧なので6dBアップ) ハードウェア・シンセはモノ・アウトも装備する関係でそうしてあると。
>>406 ん?センターは-3dbでしょ?
20*log(sqrt(0.5^2 + 0.5^2)) = -3.010299956639811
でいいんだよね?
だからDirectXの場合だと+3dbだったと前勉強したときは思ったんだけど・・・
間違ってる?
411 :
デフォルトの名無しさん :2007/03/19(月) 12:27:37
誰かDAW作ってくれ
エフェクトのコーラスのうねりは時間で変化させるんですか? それともpitchを変化させるんですか。
コーラス: 入力音を二つに分岐させる。 片方にモジュレーション(周波数変調)をかける。 二つを加算して出力。
415 :
413 :2007/03/31(土) 10:55:39
コーラスとフランジャーは モジュレーション大きさだけの違いだけなんですか?
・モジュレーション幅 ・モジュレーション速度 ・フィードバック量 ・分岐させた二つの加算割合 などを変化させることによってコーラス/ビブラート/フランジャーなどが作れる。
>>416 それの大きさで呼び名が変わるってこと?
なんどもすんません。
そういうこと。 モジュレーション幅が広めで速度が速いとコーラスっぽくて、 モジュレーション幅が狭めで速度が遅いとフランジャーっぽい。 フランジャーの場合はフィードバック量も関係してくることが多い。
419 :
413 :2007/03/31(土) 12:34:58
サンキュです
いえいえ。
ぉぃぉぃ 一応混じれ酢すると ふらんじゃー: 数ms以下の短いディレイに変調をかけ、元音とミックスして、 中〜高音域のコムフィルター効果でメタリックな響きを出す こーらす :数十〜ms程度の比較的長いディレイに変調をかけ、元音とミックスして、 (たぶん超低域のコムフィルター効果で)アンビエントな音のウネリを出す
422 :
418 :2007/04/01(日) 22:34:53
>>421 補足サンキュ。418では変調速度と変調幅だけしか言及してなかった。
(変調幅を大きくする≒ディレイ値を大きくしないといけない
という勝手な理解をしてしまったよ。)
確かにディレイ値のほうが大きな影響があるな。
423 :
デフォルトの名無しさん :2007/04/02(月) 00:32:07
だけど、コーラスのきついやつがフランジャー、って理解でそう間違ってないでしょ?
おまぃに関してはおまぃの判断に任せる
コーラスのディレイの短いやつがフランジャー、って理解で間違ってない。
426 :
413 :2007/04/02(月) 12:28:37
勉強になります。
427 :
418 :2007/04/02(月) 16:25:13
理工系の大学とかで学術論文にアクセスできるのであれば、 Jon Dattorro. "Effect Design, Part 2: Delay-Line Modulation and Chorus". Journal of Audio Engineering Society, October 1997. とか、あとは「DAFx」という書籍もエフェクト関係の勉強になる。 両方とも英語なのがタマニキズ。
428 :
デフォルトの名無しさん :2007/04/02(月) 17:10:08
>>425 登場経緯的には、フランジャーが先だよね? 浅めに(?)かけてみたら 12 弦っぽい
効果があって、それ目的でパラメーター調整しやすいようにアレンジして製品化した、と。
429 :
413 :2007/04/04(水) 09:16:25
>>427 DAFxはいろいろ載ってておもしろそうですね。
Jon Dattorro Effect Designは見れなかった。残念
ただ、英語はダメなので気長にみてみます。
基本的にはパラメーターのレンジを変えた、同じエフェクトと思っていいと思うけど、 実際には目的の違いから異なるアイデアを盛り込んでる場合が多いと思うよ。 たとえばコーラスはぶ厚く広げるのが目的だからディレイラインがすごく多いものとか、 変調が周期波形じゃないものとか、イロイロと。 そのへんがエフェクターの個性になってくわけだが。
今までDSP買ってエフェクターやら作ってたんだけど、ふと思った。 いい加減今のPCならリアルタイム入出力のFIR処理くらい出来るんじゃないかと。 これが出来ればあらかじめフィルタ係数用意して切り替えるようにすれば ソフトウェアエフェクターってできそうだし。 で、作って見たがあえなく撃沈。音途切れ途切れ。 何が問題なんでしょう?? 100万タップくらいのFIRなら余裕で動くと思ってたのに。
あまり詳しくないのであれなんだが とりあえずSSEは使った?(PowerPCならAltivec 大きいFIRはFFT利用して劇的に計算コスト減らした実装ができるんじゃなかったけか?
ちなみにリアルタイム入出力のコンボリューションリバーブとか普通にありますよ。
たいてい432の言うようにFFTかましてるよね。だからレイテンシーが問題になることも。
>>431 ハードウェアのことあんまり詳しくないんだけどフィルタ係数や入力信号のバッファ
がL1 L2 超えて外部になると一気にメモリ転送の問題が発生する気がする
メモリのレイテンシーって結構デカイ気がするけど詳しい人教えて
>>433 ちょっと俺も興味あるんだけど そのソフトの詳細希望
>>434 リアルタイムでFFTだとレイテンシーもだけどブロック間の繋ぎがどうなるんだろ
>そのソフトの詳細 今時のPCの音楽制作環境のことまるで知らないの?? コンボリューションリバーブなんかはここ数年流行っててすでに一般的。たくさんあるぞ。 「コンボリューション VST」とかでぐぐってみなはれ
>>436 こういうのってリアルタイム入出力できるの?
>>435 ブロック間のつなぎはoverlap-and-addでやるだけなので、大丈夫。
>>437 DSPプログラミングやってて、今時そうゆうの知らないことのほうが驚きですよ。
音楽制作と無関係な業界でやってる技術者だったりすると案外そうゆうもんですかね。
「DSP」っていう言葉も昔は主に専用チップ、Digital Signal Processorのことを指していたけど、
汎用PCによるリアルタイム処理が台頭してきた今は、
意味が広がってデジタル信号処理全般、Digital Signal Processingというニュアンスですよ。
FIRネタの書き込みは、どの板も具体的な話が欠落してるなw 厨?
>440 単純に大量のかけ算するだけなら簡単だが、 FFT応用するとかいうと詳しい人なかなかいないんでしょ。 そうゆうおまいは?
443 :
デフォルトの名無しさん :2007/04/07(土) 10:12:17
>>435 ここでは板違いかもしれないけど、
たとえば、foobar2000のイコライザは8192Tapの
firフィルタで、畳み込みにfftを利用している。
foobar2000のプラグインのconvolverは、大きな
インパルスファイルを指定してやれば、
数万Tapの畳み込みも音がとぎれず再生する
こちらも畳み込みにfftを利用。
(Tap数は表示されるFFT Length の半分)
firフィルタはどうしてもレイテンシがでかくなるから
リアルタイムの演奏や画像との同期は難しいけど
パソコン上のファイルを変形させるならかなり使える。
「fft overlap save」でググるよろし。
こことかは、お勉強の過程が書いてあって
参考になるかも。
ttp://junzo.10gallon.jp/
結局のところ今のPCじゃ時間軸での畳み込みはまだ無理ってことでFA? 多分 436はその辺は考えてなかったんだろな 知識ひけらかす前に 431の質問を汲み取ってやれ
すいません、畳み込みリバーブのプラグインとかは時間軸での畳み込みとは違うんですか?
今手元に可逆圧縮済みrawがあって、これをwavにしなければならないんですけど、 ・rawデータはwavのヘッダ無し波形 ・どういう形で圧縮されているのか分からないのでデコードしようがない 一体圧縮済みrawはどういうフォーマットなんでしょうか?
>>445 畳み込みリバーブと書いてあっても
実際はインパルス応答 入力信号を両方FFTしてオーバーラップ法を使った
周波数軸での畳み込みをしているのでは無いかということ
この辺りは説明書とかみると書いてあるのかな?
実際に最近のCPUで誰か真っ当な時間軸での畳み込みやって
何タップくらいいけるのか測定してみてくれYO
ぉ サウンドプログラミグっぽくなってきたなおぃ
あ もちろんリアルタイム入出力での話ね オフラインなら何億タップだろうがメモリがあるかぎりいけるだろうからw
449 :
445 :2007/04/07(土) 19:29:09
>>447 さらにすいません、
真っ当な時間軸での畳み込みというのと、FFTを使った周波数軸での畳み込み、
というのは結果が違うのですか?
FFTを使った方法は軽いけどあくまで別物なんですか?
>>449 (精度の問題を除いて)時間軸畳み込みと全く同じ結果が得られる方法がある。
素人談義状態だな
452 :
445 :2007/04/07(土) 22:14:09
>>452 オーダーが違うからね。
FIR 長を N として、
普通に時間領域で畳み込みすると、O(N^2)
FFT 使うと、O(N lon N)。
長さ N で FFT しちゃうと、そのサイトにある通り、循環畳み込みになっちゃうから、
実際には長さ2倍にして、半分 0 埋めてとかやる。
で、FFT + 周波数領域で掛け算 + 逆FFT ってなるんだけど、
2N log 2N + N + 2N log 2N とかで演算回数かかるけど、
O(N log N) だから、何千・何万タップとかになると圧倒的にこっちが早い。
>>447 わざわざ最新のCPUを買わなくなって計算の見積もりは出来るだろ。
そりゃ、DSPと違って、PCの場合は演算能力の見積もりは難しいけど
44.1Kで 100万(1M)となると、モノラルで44.1G/Sの積和能力が必要になる
ゲーム機のGPUなんかでは、無理に思えない数字に見えるだろうが
パソコンだと、あと10年程先だろうね
確かに100万となると20bitにもなるわけでゲーム機のような単精度でいくら
高速でも意味はないわけだけどさ。
あ、FFTを補助的に使ってリアルタイムに実現する方法もあるんで
聞きかじり&妄想が延々と続きます・・・
2^20のFFTを使うとすると 1048576-1000000 = 48576 サンプルが丁度いいサイズになる 1.1秒毎に22秒ほどのデータをFFTして処理するので、計算時間を無視して1.1秒の遅延が必要になる。 計算時間はこのシステムが動く最悪値と考えれば2.2秒の遅延が必要になる 別けて計算する方法は、1サンプルあたりのFIRフィルタの計算は Σ C[i]*D[i] たとえば 現在から1万サンプルのデータDaと 99万Dbに別けると Σ C[i]*D[i] = ΣC[i]*Da[i] + ΣC[i]*Db[i] ΣC[i]*Db[i]は1万サンプル以上前のデータなので、FFTを使う方法で1万サンプル分を先に計算出来る 残った1万サンプルだけをリアルタイムに計算すればいい 計算量は44100*10000 = 441M/Secなので、今のPCなら不可能な数字ではない
ひたすらゴッグルさんのご神託を貼り付けるだけのスレw
この議論、数ヶ月前にも見たw
FFTを使う方法でもリアルタイムに出来るというのは前回無かったように思うが?
で、この議論のどこら辺でリアルタイム手法が提案されたって?
じゃあ 俺も妄想ね。 単精度32bitステレオで扱おうと思うとデータ量だけで フィルタ係数分左右で1タップ8byte 入力信号とあわせると16byteの記憶領域が必要。 10万タップの時点で既に1.6Mの記憶領域が必要になってしまう。 それがどうしたという感じだが、もしこのデータを外部メモリから読み出そうとすると 最近のメモリで読み出しレイテンシーが10nsくらいだから 信号と係数を逐次読み込んで毎回積和をとるとしたら 1/10000sec が毎回読み出しだけで消費されてしまう時間。 さらにこれに積和時間と入力信号保持用にリングバッファなりしなければならない。 MMXにシフトレジスタ命令はあったはずだが。 まぁこれ考えるとCPUキャッシュから外れるとメモリ読み出し時間 が一番のボトルネックになる気がするんだけど。 10万タップもまったく現実的じゃないよな。 サンプリング8kでギリギリ読み出しが間に合う速度くらいw とするとL1最低でもL2にデータ保持できる量=最大次数 くらいのノリにならねぇか? キャッシュも自分でフルに使える分けじゃないし かなりローレベルなプログラミング技術が要求されるよなぁ
何msまでの遅延ならリアルタイムと見なせるだろうか。 30msくらい遅れると明らかに違和感が出るよな。 10msくらいならおk?
>>465 そもそも今いっているリアルタイムはそういう意味ではない。
一定量の遅延があるだけで出力し続けれるのならそれはリアルタイム処理。
入力→演算→出力
の流れが次の入力が来るまでに終っているかどうか(1サンプル内で演算が終っているかどうか)
がリアルタイム処理の定義だと思われ
レイテンシー以前の話かよw
>>463 もちろんPCの場合はCODECとの通信がブロックでやってくるから、意味はないのだけど
1サンプル毎に答えを出す手法について提案されているじゃないか?
でも、コレ計算量の削減になるのかな?
256点で考えてみよう。
64点を時間領域で 残りの192点をFFTで行うとする
c0*d0+ ・・・ +c63*d63 とc64*d64+・・・c255*d255
前半は O((N/4)^2)=O(N^2/16) =4096
後半は、64サンプル毎に256点のデータで行えば 64サンプル毎に1回処理するので
4*(2N log 2N + N + 2N log 2N )=4*2*N*( 1+2*log2N) = 4*2*256*17= 34816
うーん
>>464 単精度でFFT方式を10万タップで使うと、結果は上位8bitまでしか信用出来なくなる
浮動小数点なので、相対誤差だから十分良いといえば良いのだけどね
あと10万タップくらいならFFTでやれば今のPCならリアルタイム処理は行えるよ
実際やってるし。
だって2秒に1回計算すりゃいいんだから余裕。
素直に書いたルーチンでも1秒に10回くらいは計算出来てるよ。
256点でなく、一般化して考えてみる M分割した1/Mを時間領域で 残りをFFTで行うとする この方式との比率は、 ((N/M)^2 + M*2*N*( 1+2*log(N)/log(2)))/(N^2) N=2^8ではダメだったが、 N=2^16 M=16を代入すると 約1/50 N=2^20 にすると 1/200 と大きいほど改善するようだ さらに、細かく分割して効率化すれば、もっと効率上がるのかも
計算間違いしてた こうか? (((N/M)+M*( 1+4*log(N)/log(2)))/(N) N=2^16 M=16を代入すると 約1/12 でしかない
10万タップにあてはめてみるとN=16 M=32で約1/20 この時の負荷はFFTだけで計算した場合の100倍近い
>>464 確かに時間軸での畳み込みをプログラムで実装するとそこが問題になりそうだ。
ハードのこと全然詳しくないんだが。
というかその後の話が全部周波数軸での話しになってるのが妙にうけた。
あきらかに
>>464 の話は時間軸での計算なのになw
FFTでの畳み込みは確かに早いんだけど精度とかアルゴリズム的なこと考慮しないといけないから面倒だな。
そういった意味では時間軸での畳み込みの限界を俺も見てみたい気がする。
> 最近のメモリで読み出しレイテンシーが10nsくらいだから > 信号と係数を逐次読み込んで毎回積和をとるとしたら > 1/10000sec が毎回読み出しだけで消費されてしまう時間。 1/10000[sec]/10[ns]=10^-4/10^-8=10^4[word] 1/10000secって一体なんの話?
10万個読み出し * 10ns と思われ リードタイム?
10^5[個]×10^-8[sec]=10^-3 10万個なら1/1000がメモリ読み込み時間 10^6[個]×10^-8[sec]=10^-2 100万個なら1/100がメモリ読み込み時間
FFTを使おうが、Σdt[i]*c[i]の演算は時間軸での計算だと思うけどな
単にFFTを使って掛け算を高速化しているのにすぎないわけで
>>464 まず、
係数については柔軟性を持たせる為に浮動小数点というのは悪くないが
データは16bit固定小数点で保持すれば十分だろう。
実用的には係数も16bit で十分。
(この場合でも積和累計レジスタには 16+16-1+17=48bit が必要)
その場合、途中係数が0が続く部分が大量に出る。
なぜなら全部が1のデータでも計算結果は2bitオーバフローしてしまうのだから。
だから0の部分をリスト形式でスキップすれば計算量は多少小さくなるかもね
キャッシュについては、
Σc[i]*d[i] は 分解出来るわけだから、たとえば256サンプル毎に
キャッシュに入るサイズで分割して計算すれば、問題ないだろう
> データは16bit固定小数点で保持すれば十分だろう。 > 実用的には係数も16bit で十分。 ゲーム用途なら実用的かも。 音楽用途だと精度が低すぎ。 例えばリバーブの消えかけ部分のS/N比が低くなるだろう。
>>478 リバーブの場合でも全体にスケーリングすれば十分さ。
逆にどこもかしこも係数が大きい100Kワードの係数があったとすれば
結果は簡単にオーバーフローしてしまう。
全部の係数が+1か-1であってもオバーフローするんだからさ
ふーん。 固定小数点+スケーリングって事は、 トータルでは浮動小数点演算なわけだ。
あ、ごめん。 データと係数は16bit固定小数でも 内部演算結果は48bitになるっつう話ね。了解。
64bitマシンならともかく、現行CPUだと16+16-1+17=48bitを固定小数点で計算するには 桁上げが必要になるわけで、浮動小数点レジスタで計算させた方がいいと思うよ
おk 一体なんのための固定小数点だったんだろうね?
PCのインターフェースは44.1K 16bitステレオなのだから 16bit固定小数点の選択で何の過不足も無いと思うのだが?
もーどーでもいいや。 結論出たら教えてくれ。
じゃ、ここまでの勝手なまとめ 1、FFTを使う場合でもレイテンシ1のフィルタは実現可能 ただし計算量はそれなりに増える それでも係数器が巨大ならFFTを使わない方法よりもずっと高速 2、FFTを使わない場合でもキャッシュサイズが溢れる心配については不要 キャッシュに入るサイズにFFTでレイテンシ1のフィルタを作る時と同じように分割すればいいだけ だったらFFT使えよと
DSPだと積和を1クロックで処理できるって売りを良く聞くけど
Intel入ってるとかだとどうなの? 例えば10クロック必要なら単純に
3GのCPUでも300M個の処理しかできないよね。
3億タップ!?って感じはするけど実際に使えるリソース考えると
>>464 の言うリード時間の問題がほとんどになる気がする。
>>477 何個分割して処理しようが結局メモリからキャッシュにフィルタ係数なり入力信号なりを
リードしてから計算しないといけなくなるから無意味。
始めからCPUキャッシュ上に係数も信号も保持していないと駄目ぽ。
>>464 の言う1/10000sec が 1/1000sec の間違いだという仮定ならますますPCでの
リアルタイム畳み込みは時間軸では厳しくなりそうですね。
あと揚げ足とるようだけど10万個の係数読むなら10万個の入力信号も
読まないといけないわけで合計20万個のデータリードになるよ^^;
ということは 1/500sec が一度の積和に必要なメモリリード時間になるが。。。
キャッシュから外れたら無理だね。と思わせる時間だよなこれw
逆に質問、キャッシュ内データのアクセスタイムってどれくらいなんだろ。
ナノのオーダーじゃ全然遅いよね。ピコとかのオーダーなのかな
って書いたら真上で 487が指摘していた うぇw
>>487 もしかして、話についていけない?
フィルタの計算は、1サンプル毎にデータがズレて
t0↓ d e f g h i j k
t1↓ c d e f g h i j
t2↓ b c d e f g h i
t3↓ a b c d e f g h
係数器は同じ係数が使われる。
c0 c1 c2 c3 c4 c6 c7
f0の時点で、 d*c0+e*c1+ ・・・・ だけでなく
d*c1+e*c2+・・・・ や
d*c2+e*c3+・・・・ を先に計算しておけば
t1の時点では c*c0だけを
t2の時点では b*c0+c*c1を計算するだけでいい というわけ
で、先に計算する時に計算順をキャッシュのサイズで分割すればいいだろ?
って話をしてるわけさ
ようするに、 遅延器の後ろの部分は、先に計算出来るから 計算順を変更してしまって、 1サンプルでは同じ遅延器部分を何度も計算してしまうようにしちゃえばいいって事だな で、細かく分割して計算順を変更する手間を考えたら、 だったらFFTで計算しちゃえよと
492 :
デフォルトの名無しさん :2007/04/08(日) 22:03:03
スルー
ん? 計算量は同じだけど、t0に計算が集中してしまうね
しかもt8以降は計算量一定 一体何を言いたかったの?
こんだけ説明されて判らんのか? どこが判らんの?
>>494 例ではそうなってるけど、
実際は、これを分割するわけ、キャッシュに入るサイズで分割すれば
キャッシュの出入り回数はそれだけ実質へらせられる
とりあえず誰かこれプログラムにしてみてよ 話それから
1/2分割の手順 N2=N/2-1 Σ(0..N){c[i]*d[i]} =c[0]*d[0]+c[1]*d[1] +・・・c[N]*d[N] R1=Σ(2..N2) {c[i]*d[i]} S1=Σ(N2..N) {c[i]*d[i]} R2=Σ(2..N2) {c[i]*d[i-1]} S2=Σ(N2..N) {c[i]*d[i-1]} 2サンプル毎に 偶数目では S1=Σ(N2..N) {c[i]*d[i]} と S2=Σ(N2..N) {c[i]*d[i-1]} を計算 Σ(0..N){c[i]*d[i]} =c[0]*d[0]+c[1]*d[1] +R1+S1で求める 奇数目では R1=Σ(2..N2) {c[i]*d[i]} と R2=Σ(2..N2) {c[i]*d[i-1]} を計算 新しいサンプリングデータがdnewとして c[0]*dnew+Σ(1..N){c[i]*d[i]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める そしてデータは2ワードシフトする
訂正 × c[0]*dnew+Σ(1..N){c[i]*d[i]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める ○ c[0]*dnew+Σ(1..N){c[i]*d[i-1]} =c[0]*dnew+c[1]*d[0] +R2+S2 で求める
こういう計算する時の遅延器ってみんなどう実現してるのかな DSPの場合はモジュラアドレッシングがあるからいいけど PCの場合、俺がやった事があるのは 1、2のべき乗のサイズのバッファ取って and 演算で計算 [(wp+i) & (BufSize-1) ] 案外、効率が悪い 2、メモリを2倍とって wpの位置に書く時 [wp]と[wp+N] の2箇所に書いて 読む時はそのまま [wp+i] でアクセス 効率はいいけど、メモリが2倍必要 仮想記憶用のテーブルにアクセス出来れば、メモリを2度割り付ければいいんだろけど 他にいい方法ある? メモリをその都度moveするコードはありえないとして
何この流れ。 最近は、リアルタイムの意味を取り違えている人がいるから困ったもんだ。 (あのドラマ、リアルタイムで見た とか。お前の視覚神経はコンピューターか)
503 :
デフォルトの名無しさん :2007/04/09(月) 01:04:27
スルー推奨
リアルだったら殴ってるよタイム
流れぶったぎって初歩的な質問を・・・ 0〜1のリニアなスロープを聴感上リニアにしたいのですが、いい方法ありますか? -96〜0などとしてデシベル換算だと、0が0にならないですよね。 あるいは良く近似するカーブを得る軽い方法などありますか? (自分は累乗をよく使うのですが、近似というところではイマイチで・・・)
指数カーブに適当に0を通る関数を掛け算したら? (a^x)*x^b とか bを 1/2 つまり平方根なんて良く使うよ
平方根掛けいいですね。 試してみましたが、かなり近似しつつ0を通るようにできますね。いいこと教わりました。 リアルタイムで毎回計算する用途だと平方根はちょっと重いですかね? 類似した方法も、いろいろ試してみたいとおもいます
a^x と √x のどっちが重いかという話なら、同じ程度だと思うが PCならテーブル作って間を直線補間するし DSPなら4〜5次くらいに級数近似するし
パッタリ止まったなぁw で、ソースまだ?
クレ房きました
オレ、勝手にやってる
流れが止まった・ ∪´∀`)モキュ
ソースって・・・・
>>499 の以上に必要か?
FFTを使えば、計算量もメモリアクセスも激減するのに、
こっちは計算量は減らない。 当然メモリアクセスも。
ただ同じ領域を2度使うからキャッシュが効き易いというだけじゃ、試す必要もない
理論的に可能かどうかは式みれば判るだろ
>>501 モジュラアドレッシングって巡回アドレッシングの事だよね?
Tiでいうところのサーキュラドレッシングモードみたいな。
最近のPCだとSSEでシフトレジスタ用意されてるからほぼ同じことできるよ。
そうじゃなかったらメモリ2倍使う2番目の方法が一番現実的な気がする
>>513 まぁまぁそう言わないで。
初心者さんにしてみたらFFTなんか使う方法よりもサクッとフィルタ係数畳み込める
時間軸での方が分かりやすいし書きやすいってのはあるんじゃない?
溢れさえ気にしなければそのままソースかけるし。
モジュラアドレッシング は モジュロ(modulo)アドレッシング の typo だろけど SSEで モジュロアドレッシングってどうやるの?
すごい止まったなぁ。。。
DSPじゃないんだから、モジュロ・アドレッシングなんてできるわけない、 ムリに再現しようとしても動作が重くなるだけで意味ない、って誰か書けよ。
直前まで、FIRフィルタ処理の話をしてるんだろ? モジュロアドレッシングつかわずにどう実装するんだ?
>>518 単純に、ループと配列を使って、掛け算したのを足していく。
逆になんでモジュロアドレッシングがなきゃできないんだ?
>>519 ソレはバッチ処理の場合だろ?
1サンプルづつデータを受信して、処理する場合、モジュロで処理しないの?
普通に書いたら、 wp := ( wp-1+length(data) ) mod length(data); data[wp]:= 新データ; sum:=0; for i:=low(c) to High(c) do sum:=sum+ c[i] * data[ (i + wp) mod length(data) )] ; だな。 もしかして、この mod がモジュロアドレッシングなのか?
それなんていう言語の擬似コード?
// :/:::::/::::::.!:::|:::: !::::::::、:::::::::::::::::、::ヽ::::::::ヽ !|:::/::::::.!:::::::|:::∧::::|、::::::::!.、:::::::::::::ヽ: !:::::::::: ! i:l: ::|:/:::.!::::::ii|_:| ヽ:::!l\:::!'、\::::::::::::!::!::::::::::::.! . |/l:::.!|, :::ヽ::::l'l:lヽ、ヽ:|l'´ヾr==ミ、:::::::|::|:::::::!::::: ! |::.!l:.!::::::lヽ|,==、 `' ヽ \:|:: !: ::: !::::::.! うるさいうるさいうるさい! l/ `ヽ::|:::l , - 、 ll'::::!.l:::::.!:::::::.! l`l::.!! l/ ̄ ヽ /.!::::.!:|::::::.!:::::::l !::::.!.!ヽ ヽ ノ /::::|:::::|::.!:::::.!:::::::.! .!::::| !::::.` ー 、._ ´ ,/ |::: !:::::|:::l::::::.!:::::::| |:::::|.!::::.!:::::.!:::::::::`Г l-,|::::.!::::|::::::.!:::::::| |::::::l':::::.!::::::|:::::_, -/} /:l:::::lー-: !:::::::.! !::::::|:::::_!, .‐' ´.:.:.:!r- 、_ /.:.:.:!::::l// /`ヽ:: ! . |::::::|/ ヽヽ.:.:.:.:.:.lィーミ./.:. :.:.:.!:::.!/ / !::.! . |:::::::! ヽ ヽヽ.:.:.:.ヽ / .:.:/ !::::| / |::::!
>>522 PascalとかSmalltalkとかじゃないか?
>>501 3、積和を2度に別ける
wp〜最後までと
先頭〜 に
久しぶりにパスカルチックな言語書く人みたわwwwwwwwww := なんてほんま涙がでそうやわ。 ここ見てる人はシフトレジスタ知らない人なんだねと心底思った。
シフトレジスタ? シフト命令の間違いか? だとしても、この話題のどこにシフト命令が?
>>526 コンパイラが勝手にやってくれるところだろ。
×スレ参加者の半数くらいは windowsではDelphi使ってる ○Delphi使ってる香具師が一人で頑張っている
":= "が登場したのはフィルター計算とサイン波音源の話くらいかな
:= 書いてるの明らかに一人だけじゃないかww
>>530 に禿げ同
Delphiは良いと思うよ
うん。低レベルAPIのラッパコンポ作っておけば、 実験するときはポトペタで簡単にコード試せるし GUI付けて、他人に試してもらうの便利。 BCBもいいけどコンパイルの早さでDelphiだな
Delphiは完成品が重いし、コンポーネントはバグ抱えてるし、 意外とほかでの応用がきかないし、どうかな…。
自分の場合、windows上だけで完成するわけじゃないからテスト用 アルゴリズムを評価してもらうためと自分のテスト用ね。 コンポーネントのバグは知らない。テスト用だから気にもしてないのかもね
>>534 お前はまずPCを買い換えろ。
テストコード程度でコンパイル速度に顕著な差が出るってどんなマシン使ってんだ・・・
Delphiは完成品がとても軽いのだが・・・・もしかしていまだにDelphi5使ってるから?
>>535 はどのバージョンが何と比べて重いの?
PC を買い換えたら Delphi の完成品の速度も、BCB のコンパイル速度も上がるな(w
パソコンが速くなっても、BCBだとF9押して3秒くらい Delphiは1秒以内。 実行ファイルそのままクリックしてる感覚と変わらない だからCで書いたコードのテストでもDelphiからコマンドラインでBCCでコンパイルして pascalでテスト部は書いてるな
Delphi派は判ったから、他の人は何で書いてるのか知りたいな。 MATLABとか多そうだけど
ノシ MatlabとJava
それ以前にこのスレはどうゆう人が多いのかな DSP使った組み込み向け信号処理屋みたいな人とか、 PC向けリアルタイム処理(音楽関連アプリやVSTとかDXプラグインとか)やってるひととかさ。 それによってだいぶ違うよね? 前々からそれによって微妙に話しが食い違うときがあった気が。 いわゆるゲーム屋とかでは、このスレみたいなやれFIRとかFFTとかいう話題にならないし
音を利用するプログラムを作ろうとしてるか、音データを処理するプログラムを作ろうとしてるかだけでもだいぶ違うな。
>>543 ところがどっこい
エンタメ系サーバ書いてる奴がPhaseVocoder使ってたりするw
私ゃ信号処理屋だから参考にしてるだけ。 まぁでも、光もナノテクの世界では音みたいなもんだしね。
非現実的な妄想発言を見てしまった
低学歴が犯しがちなトンでも発言だな
このスレ 面白いんだけど、ドレが正解かよく判らん所もあるな
551 :
546 :2007/04/21(土) 21:37:39
私ゃ>185じゃないよ。 光の回折でエッジが暈けるから位相を反転して合成しようとか、 光の密度が均一じゃないから反射を利用して均一にしようとか、 そういう話を実際の光源でテストする前にシミュレーションする仕事が よく来るのよ。実際何がどうしてそうなるのかなんてよく判らんけどね。
低学歴なんでよくわからないけど、 スペクトル分解(フーリエ解析)なんかは、 電磁波でも音波でも全く同じ数学なんじゃないの?
>>553 光と音は波としての性質は同じだが、目と耳は構造も機能も全く違うからな。
> 光もナノテクの世界では音みたいなもんだしね どんなナノテクwをやっているのかkwskw
まあいいじゃないの、そんなとこに食いつかなくても
はいやっぱり逃げたね いくらなんでも愚かすぎる光学技術者だと思ったら やっぱネタか
画像処理と音声処理の共通点の無さは異常
決まり文句も出たところでこのへんで
560 :
546 :2007/04/22(日) 05:54:18
面白いなぁ、勝手放題で。 信号としての特性に似たところがあるってのを似たようなもんだって書き間違えただけでこれだ。 それに私は自分が光学技術者だなんて一言も書いてないのだけれど。
561 :
デフォルトの名無しさん :2007/04/22(日) 08:06:15
だいじょぶ、俺は信じるよ
> 光もナノテクの世界では音みたいなもんだしね どんなナノテクをやっているのかちゃんと言ってごらん
>>545 PhaseVocoderを何に使うんだろうね
高卒かよw
V
> 光もナノテクの世界では音みたいなもんだしね どんなナノテクをやっているのかちゃんと言ってごらん
568 :
546 :2007/04/22(日) 11:49:46
私自身はナノテク技術者やってるわけじゃないんだけどな。 まぁ、同じレスがコピペされている段階で相手にするだけ無駄か。
お前は自分の発言に責任を持っていない。 まともな神経を持った人間とは言い難いな
この人は2ちゃんに何を期待しているのだろう・・・
571 :
546 :2007/04/22(日) 12:09:31
みんなごめんね☆ 何か寂しくなっちゃって全然関係ないこと書き込みしちゃいました。 反省したので明日ボウズにしてきます。 (;_;)
>>569 侮辱的な発言ありがとう
ちゃんと責任とれよ
あ〜あ、もう収集つかないね。
今どき絵に描いたような煽りにつきあうなよ。
>>564 ホントに光も磁界変化はゼロになるのかな?
2つの送信アンテナ1,2 で逆相で送信して、等距離の3の位置で受信すると考える
@ A
\ /
\/
B
電界を検出するアンテナでは、3の位置では逆相で打ち消される
では、バーアンテナを3の位置に取り付けたらどうだろ?
1−2に平行の場合は、話の通り、検出出来ない。
バーアンテナを1の同心円方向に設置すれば2に対して指向性が働いて受信出来てしまうんじゃないのか?
電磁波の場合、そのバーアンテナを設置した事で、状態が変化してしまうよ。 バーアンテナをその向きに設置したことでバーアンテナに磁界変化が起きる=然電界も変化するわけで、 バーアンテナを設置したことで、普通のアンテナでも受信出来る位置になってしまうわけ
おまえら電波かよw
波の物理的なイメージってのは、難しいよね。 だから、こういうのをしっかり掴む為にも、こういう議論は有意義だと思う
>>577 デムパというよか、電子回路系なんだろうよ
この不思議な議論の流れから察するに
電子回路系、、、ってのもずいぶんと無知な言い方だが とりあえずスレ違いの域なのは確かだな
ムリな言い訳しなさんな あんた向いてないよ
軌道修正を行います。 完了推定時間、9分です。
スタジオエンジニアとか、ホール設計とかだと、300Hzの音聞きながら、 部屋の中に波長1mの定在波をイメージしてたりするんだろか?
オレ、しないな。
音を聴きながら波形をイメージすることはあるよな? この音は丸っこい、とかカクカクしてる、とか。
>583,>585 スレ違い。 プログラミング関係ねぇし、お前が何イメージしてるかなんてどーでもいい。
プログラミングならグラフをイメージしないとやっていけないだろ この音の振幅は・・・周波数は・・・・・だめだ、差分適応PCMは圧縮できそうにない・・・・・・
>>586 スレ違いだと思うなら、何かネタをフルべきだと思う。
それじゃ潰し屋だ。
プログラミングネタは、APIの呼び出し関係は
それぞれの環境依存がすぎて本人特定されちゃうくらいなわけで、
まあ各自マニュアル嫁って事で、話題にし辛い。
アルゴリズムネタにどうしても流れてしまうのは仕方ないと思うが・・・限界があるよな。
でも、そろそろ新人さんのhelp meネタがあってもよさそうなんだが・・・・
怖がらずに質問してくれていいんだよ>>新人さん
昔、質問したら、難しい物理方程式を出されて全く理解不能だった。 プログラムの実例を教えて欲しかったんだが。 物理の勉強をしに来たわけじゃないので。
なるほど。 でも方程式を教えてくれただけでも良かったと思うのだが? さすがにコードまでは書いてくれんでしょ
人はそれを丸投げと言うからな。
理屈を知ってないと応用が利かないしねえ。 いちいち質問する訳にも逝かないだろう。 音関係の弄りやすいライブラリって何? やっぱりダイレクトエックスとか?
>>589 数式が読めない人は、プログラムの前に数学を勉強すべき。
仕組みが理解できてないと、問題があったときに対処できないだろ?
今は googleさんがあるから、キーワード一つ教えてくれれば、後はなんとかなるものな
で、検索したらこのスレがヒットするという
そして質問してみて、にちゃんの洗礼を受ける。 にちゃんねらーとしてにちゃん教に入信しました。他の宗教は信仰しては逝けません。
やろうとすること次第であって、大半のことは中〜高校数学程度で足りるしょ。 複雑な数式理解できないと話しにならないような場面は限られてる。 数式が出てきても必ずしも理解する必要はないし、道具として使い方知ってれば事は足りる。 そこそこ詳しい人ってのは、必要以上に難しく説明しがちなもんだわさ。
おめえはホント口先ばっか達者で話題が乏しいな
>>597 高等教育とはそんなものじゃないよ。
中卒の方ですか?
だからさ道具と思って知ってるだけじゃ応用効かないって話。 答えが見つかればそれを道具として中身を理解せずに使えば良いじゃんって頭悪い。
じゃあ質問します アナログアンプのシミュレータを作りたいと思ってるです。 真空管なんかは飽和歪みがひとつの特徴らしいのですが、そのほかに注目するべき点はどこでしょう。 位相特性みたいな話しをよく聞くのですが、 この場合の位相特性とは具体的にどうゆうことなんでしょう? アナログアンプ的な特徴的な位相特性とはなんでしょう?
_ , ─ - 、
, -‐'´ ヽー 、
, .'´ ソー ヽ
-≠Z´, , ヽ ヽ
/ / / / /, 、 ヽ ヽ
/ イ ,' ,' .ィハ l ! 、 、 ', ', !
/' ,'.i ! .l /l.l l !、 l ヽ i | l
l' l k l l7`|'-、.ヽ lヽ. ト、 ヽ | l l l
l ハ i .{lr≠、ヽ \‐ヘ'ヽヽl-. トl ! i l
|' .',lx!i !|::;:} _,r≠=、卜!' ,'. |.!ヾ、
i'l ー' !l、::::;:}》. //`y イ'|' `
lヽ ' `ー'/ .//,.ノ/ |
l 、 ,、 |/ ヽ、 - /ソ /ィX.、
r┴-'ニ< ヽ--、 ` ーz- ' ´/ィ'´ヽヽ、ヽ
てー _`._j弋ー' ヽ、.,r,ニ-´ー ´. l l.l }
, -‐y‐ '{ /´::::::、ヽ. ̄ヽy'-´ヽヽヽ l l !'
,〃'´ Y´:::::::::::::} /ー:、:::::::ヽ', ', l l !
{、ヽ l:.:::::::::::::::l /:::::::::::::ヽ:::::l | l ///
| ヽヽ、 i::::::::::::::::l/::::::::::::::::::::i;:::l l l ,r ニ 'l
>>597 ・・・中卒のDQN旋盤工と推測・・・性交経験なし・・・
604 :
601 :2007/04/24(火) 21:42:16
あー参考になりそうだけどむずかしいな。。。回路設計とかの知識はまったくないもんで。 きほんてきなことなんだけど位相特性というのは、 周波数成分ごとの信号の遅れ(ディレイ)と単純に考えていいの?? ここのページのグラフだと、高域成分ほど遅れてると見るんでしょか。 実際に周波数特性をフラットなまま周波数成分ごとの遅れをシミュレーションするとしたら、 どういう実装方法になるんだろう。
位相特性は位相特性 高域程ってあのグラフは1Mまで伸びてるから 10KHzで360度だから1遅延程度を入れて位相特性図を描きなおした方がいいと思う 位相だけを補正するなら APF=オールパスフィルタ が 検索キーワード
ようわからんけどFFTで帯域ごとに処理でいんでね?
FFTで帯域ごとにってのは・・・ 短時間FFTで周波数軸上で音の加工は基本的に出来ない。 短時間FFTを使うならFIRフィルタの高速計算の目的で 位相特性だけを加工したいなら、オールパスフィルタ( IIRフィルタ)を複数組み合わせるのが最適 オールパスフィルタには1次と2次があり、 どちらも実現式は非常に簡単。 googleさんで調べて、ダメならまた聞いて。
DTM板の関連スレを焼きなおしてるだけじゃん最近の話題って なんでそんな貧しい行為に必死になるかな
高域だけを遅延すりゃいいのなら、FIRフィルタでも出来る 0, 0.038394 1, -0.188396 2, 0.958548 3, 0.191451 これで大体高域が90度回る 低域で位相を回したいならIIR-オールパスフィルタでないと面倒だ
これで44.1Kサンプルで3.5K付近から90度回せられる。 遅らせたいなら係数の順番を逆にする 0, 0.0370952 1, 0.0338991 2, 0.0622815 3, 0.0796952 4, 0.1040610 5, 0.1494064 6, 0.1928090 7, 0.2834788 8, 0.7217380 9, -0.5518646 10, -0.1280079 11, -0.0307499 12, -0.0003218 13, 0.0023316 14, 0.0115652 15, 0.0163134 16, 0.0076485 17, 0.0086209
611 :
601 :2007/04/24(火) 23:07:07
オールパスフィルタって、存在はは知ってたけどこうゆうときに使えるのか。 とりあえずフィルタの実験に入ることにします。 FIRも係数このぐらいのなら低負荷でいけますね。(てか設計すんの速いですね・・・
設計はMatlabでポンだよ。
613 :
601 :2007/04/25(水) 01:18:18
位相いじるの面白いですね、オーディオ的にかなりいい経験です。 オールパスフィルタをスタックしたりして極端なことやってみてるのですが スペアナ見てるぶんには周波数特性変わらないのに、 ほんとに音の太さとか(というと曖昧だけど)ニュアンスが変わって 特にベースやキックなんかの低音楽器はわかりやすいですね。 周波数特性だけじゃ出音は語れないっての痛感・・・
本来は位相も含めて周波数特性というんだが、スペアナとかで見える値は振幅の絶対値 でしかないわけだから本来の周波数情報のうち大部分欠落した情報を見せられているから 無理もない話なのかもしれん。
真空管の振幅を実際見てないとイメージしにくいだろうなあ。 経験的にどうなるかは知ってても、知らない人に説明できる自信は無い。orz なんとなくプラグイン買う金がないから自分でなんとかしよう的な雰囲気はあるよね。 PCでシュミレーションもいいけど、実際に回路設計して半田ごてで制作するのも楽しいと思うよ。
> 本来は位相も含めて周波数特性というんだが 位相の周波数的変化を群速度という。
なんだここ荒してたのもアイツだったのか 世も末だな
何をいまさら
FIRフィルタで位相が変化しないフィルタが作れるっていうのは、それは遅延を無視してるからだよね?
よし、googleさんで、このスレがヒットするように書き込み オールパスフィルタで フェーズシフタとかワウワウ とか
前から思ってたのだが、 このスレってスレタイから想像するのと微妙に雰囲気違う気がするな。 次回から【FFT】デジタル信号処理プログラミング【IIR/FIR】とかにしてはw
それは悲しい。
>>622 おまいはスレタイからどんな想像するのか言ってみろ
いやほら、サウンドのプログラミング、サウンドをプログラムするというと もっとサウンドそのものというか、コンテンツ自体に近いイメージないか? あとゲーム系。実際サウンドプログラマーと呼ばれる職種があるしさ シンセなんかの音色を作ったりするのもサウンドプログラミングと呼ばれることがあるしな。
おすすめ2ちゃんねるに注目w
>>625 その辺はDTM板で扱う話題のような。
まあ、紛らわしいのは良くないんで次スレは「音声処理」にでもするか?
「デジタル信号処理」は音声以外にもいろいろあるし。
>>625 シンセの音色はマズイが、その上はまあスレ違いとは言われないだろ
自分は「サウンドプログラミング」の語感からだと音に関しての出力段に近い処理の事のニュアンスが強いな。 このスレの流れだと「信号処理」(デジタルに限らないが周波数は可聴領域)って感じかしらん?
そんなに話題の幅を狭めなくても、音に関する処理全般をプログラム板的に扱うスレ、でいいじゃん。
このスレでよく出てくるようなデジタルフィルターや、いろいろな変換/解析技術とか、 デジタルオーディオを扱うソフトウェア技術を総称してなんと呼ぶのか、ということだな。 DSPプログラミング、とかもありかな。
サウンドの技術屋なんてただでさえ多くないんだから別に細分化しなくてもいいでしょ。 ドライバ語ってもいいし、MIDIデータ語ってもいいじゃない。
同意 それにしても サウンドプログラミングというと、楽器機材のオペレーションや打ち込みを意味したり サウンドエンジニアというと、音楽スタジオのレコーディング・ミキシングエンジニアを意味したりするから 世の中ややこしいわな・・・ 音楽スタジオのエンジニアのほうもそう言ってたの聞いたことある
空理空論ばっかりの荒しうぜぇ
まあ、プログラム板にある時点で察しろってことだな。
シンセの音作りや、効果音の鳴らし方の質問も答えるよ。
MIDIデータの音長に1/fのゆらぎを与えるプログラムの書き方を教えてください
1/fゆらぎ というのは、周波数に反比例してノイズが大きくなる事 正規乱数を累積すればいいのだが、正直にやると、発散してしまう。 単純に乱数を2個取って は cは小さい係数として d := ( (rand()-rand())*c + d*(1-c) ); この d を単位時間毎に更新しては、オフセットとして加算しては?
>>637 ランダムに値を増減する、というのを何度も繰り返すと、
元の値に近い部分が最も多く、元の値から離れたものが最も少なくなる。
これが一番簡単な1/fゆらぎの作り方。
ゲーム業界の狭い呼称を世界標準と勘違いされてもねえ。 ここは音響全般のプログラミングでしょ。 ゲームとか楽曲とかのエンジニアはミュージックプログラミングの方が近い。 DTM板の方が適当だろうね。プログラムあんまり関係ないし。ソフトでどう表現するかの方が主体。
>>641 おお興味ある。
前からFlashでリアルタイムのサウンド処理できたらと思ってたんだけど、不可能とあきらめてた。
で、びっくりしたんでざくっと調べてみたんだけど、
最新のFlash CS3(FLASH 9) with ActionScript3で可能になってきたっぽいな
ランタイムVM(Flash player)もインタープリタ式からJITコンパイラに変わったり
すげすげ
もうねすれ違いでわりぃんだけど ECMAScriptのJIT実装ってどうやって型の解決してんだか、そっちが気になったのと AMラジオの帯域だと今時のCPUで処理可能なんだなと思うとサウンドプログラミングって名前で良いのかとちょいと疑問に思う(w
もう支離滅裂やん いい加減にしろキチガイ
AS3ってJTIとかそういうのじゃなくて 単なる実行エンジンの改良で早くなったときいたんだけど。 というかマジちんこ痒い。
いい加減にしろよ
といって、このスレでf0/Qがコントロール出来るフィルタ教えろと言っても教えてくれんだろ?
なんだよソフトウェア・ラジオの話題かよ そんなInterfaceの過去記事みたいな話題を いまさらここでやって何になるの? 何かハッタリをこいたつもりなのかこの親父は
651 :
デフォルトの名無しさん :2007/04/30(月) 08:57:31
Winampのプラグインか、VSTプラグインで、エフェクタ系のプログラムを 作ってみたいのですが、何かいい参考書、文献、Webなどありませんか? みなさんは、サウンドプログラミングを始めるとき、何をとっかかりにして スタートしたんですか?
俺はDelphiで WinAmpの winampDSPGetHeader2 を書いた SDKを落として、そのDSP.Hを見れば判ると思う。 他に特に資料は必要なかったよ。
周波数変調について詳しく書いてるウェブページとか本とかない?
普通に信号処理の本に当たればいいんじゃないの
657 :
デフォルトの名無しさん :2007/04/30(月) 17:15:50
Wikipediaをwikiって略すな! 同時にWikipedia以外のWikiも盛り上げよう!
まずはお前からな
sage
>>597 経過をすっ飛ばして結果だけを見たらそうだろうな
ソフトラジオって馬鹿っぽいな。 モデムみたいに音声帯域で振幅変調して送受信するのか?
トランシーバーか
高周波の聴きすぎでなんとなく耳が痛い
帯域400KHzくらいにスペクトラム拡散するトランシーバとか面白そうだな
サイン波オシレーターを別のサイン波オシレーターで 周波数変調(FM)した結果をアンチエイリアス化するにはどうしたらいいすか? オーバーサンプリング以外の方法で。 発生してしまったナイキスト周波数以上の高次倍音を取り除くというより、 あらかじめナイキスト周波数以上の倍音を含まないように周波数変調を行うみたいなイメージなんですが
あらかじめ指定された帯域に引き伸ばすFM変調というと TSP(時間引き延ばしパルス) の事が思い浮かぶのだが?
すっかりデムパスレと化したなw
あらかじめ指定された帯域に引き伸ばす? TSPがどう関係あるの??
>>666 俺も考えた事ある
積分とかできんのかな
FM変調の原理的に、高い周波数を含まないような変調をするのはまずムリ。 だからみんなオーバーサンプリングかフィルタをかけるかする。 オーバーサンプリングがいやなら、補間して平均とってデータをなまらせるか、 フィルタをかけるかぐらいしかない。
sinc関数との畳み込みした結果が綺麗になってくれたらいいんだけど
sin(t*freq + ( sin(t*freq*ratio)*depth ) ) の1サンプル分の区間の積分とかできんの? CPU負荷はとんでもないかも 知ったぶりぶり
1サンプル分じゃないだろ 周波数を制限するんだから ∫ sin(t*freq + ( sin(t*freq*ratio)*depth ) ) * sin(x-t)/(x-t) dt では?
>671 フィルタだけでは折りかえしちゃったのはもう取れないよな 結局upサンプリングしてフィルタしないと
まあでもFM音源の場合は、
>>673 の ratioが整数か 1/整数 だから
ナイキスト周波数以上が折り返しても、ソレはソレで
その後考えたんすが 周波数変調というより、サイン波の位相変調(世間のFM音源と同じように)と考えて 1サンプルあたりの位相の変化幅を制限するみたいなアプローチはだめすかね?? 山を飛び越えないようにみたいな
簡単な計算方法があるんなら、それでFM変調してサイン波掛算してやれば理想のFM放送波の出来上がり
周波数領域で変調してナイキスト周波数以下を逆FFT(w
初めてサウンドプログラムに挑戦していますが、このスレにとても助けられています。 ありがとう。
よかったら何でもいいから質問してね。 低レベルから高レベルまで大丈夫だと思うからさ
といって、このスレでf0/Qがコントロール出来るフィルタ教えろと言っても教えてくれんだろ?
そりゃ、教えられん。 2次IIRフィルタの係数をゆっくり変更するので我慢しておくれ。
16bit44.1kHzモノラルの連続サウンドデータに、ホールのような響きを加える方法を教えてください。
for(n=0; n<Length; n+=1) for(i=0; i<A; i+=1) data[n] += data[n-i] / (A-i);
DLY:=44100 div 100; A := 8; for(n=DLY; n<Length-DLY; n+=1) for(i=; i<A; i+=1) data[n] += data[n-DLY-i] / (A-i);
前者 nSamplesPerSec 44100 後者 nSamplesPerSec 22050 えーと。
>>688 倍違うサイズにすら気付かないフリして釣ろうって辺りが無理ありすぎ。
マジレスすると、マ板の方が良く釣れると思われ。
前者 nSamplesPerSec 44100 後者 未知のエネルギーを感じる・・・ なんだこれは・・・!?
イデの以下略
693 :
688 :2007/05/14(月) 10:09:05
>>689-692 ありがとうございます。
サンプリングレートが違うことは気づきませんでした。
ただ、これは書き忘れていたのですが後者がオリジナルで、
前者がOpenALから出力したものです。
(
>>688 の書き方でミスリードされた方がいたらすいません^^)
つまり、自分としては44100の後者の方が音質が劣化していると感じたのですが、
そういったレスが無いとするとあまり優位な差では無い、もしくは完全に自分の間違いと言うことなのでしょうか?
もしくはどちらがオリジナルか分からなければ優劣はつけられないと言うことなのでしょうか?
(音量レベルが違うことやサンプルの長さが短いなどの問題もありそうですが^^)
前者 nSamplesPerSec 44100 実質モノラル 後者 nSamplesPerSec 22050 ステレオ モノラルとステレオの差が大きいのだろ
.i\ /i < '´  ̄ ヽ __彡ノメノノlノリ〉 \ `ソリ!゚ ヮ゚ノi 耳も2つとかケチくさいこといわずに、 ><(つ!>つ 3個とか4個とかついてれば、立体感あるのかしら? / ,く//_|l〉  ̄ l.ノl.ノ
そりゃまあ3次元を伝わる波だから3つ欲しい所だろうけど 地上には重力があるから上下については鈍感でよかったんだろな
>>693 逆だと思ってたから、どうやってステレオ化してるのかとちょちビビッてたよ。
44.1Kの方が後から作られたんなら、単にモノラル化されただけ。
脳もry
実際キリギリスとかは足に幾つも耳がついてた様な気が でもこの場合単に振動を感知するだけだから話が違うかもしれない
猫は縦方向も聞き分けているみたいだよ。 #あ、あいつらは耳を動かすから指向性を持たせられるのか。
「サウンドにおけるGPU作ろうぜ!」 という話をたまに聞くんだけど、それってどうなの? 例えばこんなの。(以下、シェーダー(?)ソース) // result(i) = s(i)*0.5 + s(i-1)*0.3 + s(i-2)*0.2 + s(i-3)*0.1; // ( result は最終的な再生音 ) // ( s(i)はi番目のサンプル ) // // この手順をすべてのサンプルに対して適用する。 // r はs(i)と同義 r *= 0.5; t = sample(-1); // t に一つ前のサンプルを代入 r += t * 0.3; r += sample(-2) * 0.2; r += sample(-3) * 0.1; return r; プログラム上ではこんな感じに展開される。 switch (channels や bits_per_sample とか適当に) { case 8ビットモノラル: { dst = (uint8_t *)dst_ptr; src = (const uint8_t *)src_ptr; for (i = 0; i < size; ++i) { dst[i] = (uint8_t)(src[i]*0.5 + src[i-1]*0.3 + src[i-2]*0.2 + src[i-3]*0.1); } } break; case 16ビットモノラル: { dst = (uint16_t *)dst_ptr; src = (const uint16_t *)src_ptr; ... }
つ DSP
EAXはいわば固定機能みたいなもんか
>686-687 プログラムだけ出されても正直理解に苦しみますが、とりあえずありがとう。
218さんの間違いだった
>>703 たしかにそうなんですけどね^^
Creativeあたりが汎用的なチップを作ってくれないと、
ゲームなどで使うのは難しそうです
>>704 まさにそんな感じですね。
EAXを再現できるような
命令セットを妄想するだけでも楽しそうです^^
現代のパソコンのCPUさんにとったら、それくらいの演算はゴミみたいなもんだからな あと、そういうFIRフィルターかけても頭部伝達関数くらいしか使い道が無い。 で頭部伝達関数は一瞬面白いけど、長時間聞けないよ。 気持ち悪いんだよね。
個人的にはこれからのゲームのサウンド処理はCPUの1つのコアで計算し、 その結果をサウンドカードでD/A変換して外部のスピーカーにつなぐような時代 になると確信している。 サウンドカードの優劣はEAXに対応しているかではなく、D/A変換の精度の高さで 評価される時代が到来するんじゃないかな?
今だってマルチコアのCPUで、サウンド処理用に1つのスレッドを実行してれば、 1つのコアの一定の時間をサウンド処理に使ってることになるっしょ。 わざわざ1つのコアをサウンド専用に独立させるメリットは少ないかもね。 それとサウンドカードの優劣でEAX重用視してるのなんてゲーマーぐらいだとおもうが
>708 専用CPUて一昔前のゲーム機のハード仕様だろ、それ。 おまいさんが10年前から書き込んでるとしてもサターン辺りに抜かれてるくらい発想が遅れてる。 今時のPCならその程度の処理メインCPUで十分過ぎるし、特殊な用途なら既にいくらでも実現されてる。 >710 デジタル出力してアンプでD/Aしる、ってかそうしてるだろ?
>>712 > デジタル出力してアンプでD/Aしる、ってかそうしてるだろ?
確かゲームに関しては5.1chサラウンドサウンドのデジタル出力は著作権か何かの
問題で禁止されていたと思う。だからゲームでサラウンドを実現するにはアナログで
5.1ch出力しなければならない。
どうしてもデジタルにこだわるなら2chにダウングレードされてしまう。
特許か?ドルビーあたりの。
715 :
702 :2007/05/16(水) 19:52:14
なんか誤解している方が多くいるのですが、
>>702 は
>>703 に対してのレスです。
CPUでSPU作ったら面白そうじゃない?
→DSP使えば
→(DSPで計算するのは)Creativeあたりが汎用的なチップを作ってくれないと難しいんじゃない?
という流れなので、別にCPUで計算することを否定してるわけでは無いです。
むしろ推奨派です。
716 :
702 :2007/05/16(水) 19:56:36
717 :
702 :2007/05/16(水) 20:28:39
あと、もう一つなのですが、
自分は別にEAXを特に優遇しているわけではありません。
EAXと同等のことができる汎用的なSPU命令セットがあれば
他のことをするにもいろいろと応用が利くのでは無いかと思ったのです。
「参考にするにはいいんじゃないかな」程度の意味でお願いします^^
PS
話が前後して申し訳ないのですが、もしかして
>>702 さんは
「DSPを参考にすればいいんじゃない?」
という意味でDSPと言ったのでしょうか?
たしかに、ちまたにあるDSP用のソースを
x86やPowerPCあたりで高速に実行できれば、それはすばらしいと思います。
>>715-717 >話が前後して申し訳ないのですが、もしかして
>>702 さんは
702はお前だろ?
もう少し落ち着いて、考えをまとめてから書け。
コードもその調子で書くとバグだらけになるぞ。
DSP用途にPC使うのはWindowsを使ってる以上はかなり厳しいんじゃないのかなぁ と思うんだけど。 兎にも角にもまずDSPプログラム以外の割り込み処理が第一関門だよな。 んでFIRを時間軸で実装・・・ってとこで書いてた人がいたけど外部RAMとの 転送速度の遅さが第二関門。 SIMD命令とかをVCで使うにはインラインでもアセンブラ使わないとどうにもならないから 要求されるプログラミング能力の高さが第三関門。 1はμTronでもPCに入れて組込みOSみたいにすればまぁできない事もないかもな 2はアーキテクチャ的にまず無理だよなぁ。DSPの設計なんてほとんどそこに金かけてるようなもんだもんな。 3は誰かがすごいライブラリでも作ってくれたらまぁできないことも無いか。 っと妄想。 実際PCをDSPチックに使えるようになったらいいよな〜 DSPなんて評価ボードでも高いし。 PCならコスト10分の1くらいで何でもかんでも付いてくるし。
サウンド処理→Creative って発想が臭すぎる PowerCoreとかUADのカスタムプラグインて自分で作れんのかね
>>719 サウンド専用CPU載せるにしろDSP載せるにしろ、アセンブラレベルは理解してないと不味くね?
発展すればそのうちCgみたいなのが出てくるかもしんないけど
低レイテンシには2つの要求があると思う 1、入力と出力の間の加工 2、インタラクティブな合成・加工 1については、現状では、サンプルレートがデバイス毎に微妙に異なるので そのサンプルレート調整をする仕掛けが無く、PCで一般的に行うのは無理な状況 そもそもCODECが既に強力なLPFを要求するにで、ここで既に遅延を持っている以上 数サンプルの遅延で処理するというのは、無理 2については、低レベルオーディオを使っても100ms程のバッファを用意してやらないと 他の割り込み処理で時間を食われると、音が途切れてしまう問題がある。
>>720 栗がうまくMSに取り入っているから、PCゲーでの音の処理は、PS3やXBOX○のように
CPUのコア上で処理することはできないようなレスを以前誰かがしていたような気がする。
OpenALとのからみだったかな?
>>719 たしかに純粋なDSPのような性能が求められると厳しいかもです。
1
もちろんμTron使うという手もあるのですが、
Windows上で実行可能な形式にしてしまうのが現実的かなという気がします。
2
これはCPUをベクトルプロセッサ的に扱おうとするといつも出てくる問題ですよね。
画像処理で考えた場合、800×600×4bppな画像の転送+加工を1秒間に60FPS×2回程度は
問題なく行うことができますので、そこから考えると
800×600×4×60×2 = 219[MB/s]
このあたりがSPU on CPUの性能限界でしょうね。
sseを使って4サンプルまとめて計算&ロード・ストアしていけば
あと2倍くらいは性能がでるかもしれません。
他にも、メモリ技術の進歩がこの性能を引き上げてくれるに違いないです。
(上がってくれるといいなぁ^^)
3
そうですね。誰かがやってくれると思います^^
>>722 2については、スレッドの優先順位を上げることで
ある程度は対応できますよ。
組み込み系?の話しはよくわからないんだけど、、、 現実的にはPCには高機能のオーディオアプリケーションが沢山ありますよね。全盛といってもいいくらい。 入出力レイテンシーもかなり小さくなってるし、 高品位なソフトシンセを複数動かしつつ、HDから何十トラックものストリームオーディオを再生し、 なおかつ大量のエフェクトをかけて・・・みたいなことがリアルタイムで動く時代なのに、 CPUのリアルタイムオーディオ処理能力は、DSPと比べてやっぱ劣るもんなの??
FIRの話しが出てるけど、 音楽制作用途のアプリケーションとかだと、現実的にはFIRってあまり必要にならないし。
FIRといっても色々あるのだけど、CODEC内部に入ってる強力なLPFなどは 直線位相特性という、定めた遅延時間だけ遅れるけど、遅れた状態では完全に 位相特性がフラットなものが入っているのよ
>>725 最近の CPU は糞早いし、マルチメディア用の専用命令も持ってるから、
性能的にはそんなに劣りはしないと思う。
DSP の利点は、ハードリアルタイム性の保証とか、
コストパフォーマンス(チップサイズ、価格ともに)かな。
大き目の据え置き機器は今後、PC 上のソフトウェアに置き換えられて減ってくかも。
でも、携帯型のとか、小さめの機器では DSP の利点がある。
性能的に見劣りしないどころか、 民生用に使われてるDSPだと200MIPS も無いのが殆どさ
730 とか 731 はDSPとPCの根本的なアーキテクチャの違いを知らないんだろうな。
Intel CPUなんか実際のアプリでMIPSで比較したら一桁低いよ。
CPUの性能自体はそりゃDSPに比べたらめちゃめちゃ早いけどな。
>>726 オーディオアプリとかは知らないがDSP使って信号処理するような製品作るときは
まだまだFIRが多いよ。FFT使って〜とかやるよりは設計が楽だからだろうね。
そもそもDSP自体がFIRを構成しやすいように作ってあるし、命令も備えているから。
ま、あれだ グダグダ机上の空論やってもしょうがないから誰か
Windowsアプリで サウンドカード経由の入出力使った リアルタイムFIRフィルタプログラム作ってよ。
俺はWindowsアプリのプログラミング能力は0だw TiのDSPなら使えるが・・・
DTM板でみかけた話しによると、、、 PowerCore mk2(モトローラ56K/150MHzを4個)とPCネイティブ(C2D) で同じプラグインを使った場合(両方用が出てるプラグイン) PowerCore mk2の場合18個に対して、C2Dでは30個以上動いたそうな。 ただし、PowerCore mk2自体はPCIで接続されてるから、そのオーバーヘッドもありそうだがね。
ところで、 プラグインで良く見かけるリニアフェーズEQってどうやってるの? 2次IIRとかじゃないわけだよな。設定変更すると動的にIR生成するFIRですかね。 他にも方法あるの?
よくは知らないけど、 与えた特性との最小二乗誤差なり minmax 誤差なりを最小化する 線形位相 FIR とか、線形に近い位相の IIR を作る手法はあるよ。
>線形に近い位相の IIR IIR+位相補正ってことですか?
>>736 時系列の方で二乗誤差を最小化とかそういう制約付けて設計すると、
IIR でもあんまり位相がゆがまない。
もちろん、次数は高めになる。
>>732 実際のアプリでって、それ石の性能比較じゃねーじゃんw
パイプラインの深い最近のintel系CPUと、DSPをMIPS値で単純比較するのもどーかとは思うがな…
FLOPSなんかで比較したら、それこそ悲惨な結果になるじゃない。 そもそも浮動小数点演算出来るDSPに恵まれてる人の方が少ないだろうし
>739 そういう意味じゃなくね? パイプライン云々って事は命令の並びで効率変わるってことでしょ? Intelは内部でCISC命令に置き換えてるしSIMD命令なんかもあるから単純に1命令単位で比べても意味ないっしょ。 実装にも左右されるだろうけど、>733みたいなタスク単位の処理量での比較なら意味ありそうだけど。
>740 CISCはRISCの間違い。 すまそ。
DSP関連の話は言うと、GPUをグラフィック処理に限らない プログラマブルな汎用フィルタとして使えるような話が盛り上がってるから それを待ってみたいな。
汎用フィルターって言っても問題は何をするかだろう 頭部伝達関数みたいな気持ち悪い音出すだけじゃ、特にありがたみがない。
サンプル毎に自由にシェーディングできるとして、 いったいどれほどの使い道があるんだろう。 自分、全然詳しくないんだけど、結構あるのかな?
サウンド処理用としての使い道なんか全く無いでしょ。 サウンド用DSPは専用ハードならではの低レイテンシなわけで、 GPU通すくらいレイテンシあっていいなら現行ハードでも十分だろ。 結局この手のハードは 入力→処理→出力 が非同期で安定して動くところがメリットなんであって、 サウンド出力の存在しないグラボに音データ送ったところで手間増えるだけ。
音楽制作用途だと、なにか一つの処理が動けばいいわけではないじゃん。 GPUがサウンド処理用として適しているということではなくて、 最近の強力なGPUの処理能力を遊ばせとくのはもったいないからって感じだと思う。 重くなるリバーブなんかをGPUで処理できれば、負荷を気にせずゴージャスな実装ができるとか、 CPU側であと10個コンプやEQ使えるみたいな感じなんでは。
ここのスレ見てると、PCのDTM環境の進歩を知らないひとが多そうにみえる。 組み込みやクローズドなシステムばっかりやってるプログラマは NuendoとかLogicとかPCベースのDAWが今どんなことになってるか一度見てみるのもいいと思う。 うらしまたろうになってしまうよ。
もったいぶらずに教えろよ
>>747 今の話題は低レイテンシをどうやって実現するかであって
DAWの多機能性では無いと思うんだが
PCの場合はFFTが使えるから、数秒レベルのFIRでも苦労しないからな
DAWが今どんなことになってるかって? 結局アウトボードでDSP積む時代に逆戻りしてるよ。
>>751 業界が全然わかってないなw
開発メーカーは、TDMからだんだんRTASに移行してるだろ。
その一方でUAD-1大人気
そのへんはDSPかPCネイティブかとかあまり関係ないと思うよ 純粋にサウンドの良し悪しとコストパフォーマンス UAD-1のハードウェアがどうとかじゃなくて、そこで動くプラグイン=ソフトウェアの出来が良かったと。 ま要するにFIRのタップ数じゃなくてまずサウンドデザインってこった
まあ信号処理の現場を知らないと752みたいにそもそもDAWと本当のリアルタイム信号処理の区別 ついてなくて、高機能、何万次のFIRでもリアルタイム処理可能とかのたまう輩がでてくるんだろうなあ。 無理して話についてこなくてもいいのに。 ちなみに、音質とかサウンドデザインなんていうのも今の流れじゃなし。
えっと今の流れはなんだっけ?
端的な例をそれが全てであるかのように挙げて 否定レスの材料にするって流れだよ。
ハードウェアは今となってはただのドングル。
信号処理の現場てDSP使ってたとえばどうゆうの作るの? いや純粋にそのへんの業界のことしらないんで。 サウンドスレだしオーディオ・音響機器とかエフェクタとか?
具体例としては自分の声をリアルタイムで松田聖子に変えるとかね。 セクシーボイスアンドロボとかいうドラマの現場でもたしか使われているはず。
音声認識+音声合成かよ。 そらすげーわ
>>760 自分の声を松田聖子に変えられる技術があるなんて知らなかったw
せいぜいピッチシフト、フォルマントシフト、
スペクトラム・シェイパーぐらいしかないと思ってたよ。
こういうのだとCPUでもリアルタイムでできるから、まったくの新技術なんだろうね。
PARCOR分析・合成して試したけど、フォルマントを単純変換してもそう変わったように聞こえないんだよね フォルマントよりもう一段上でないと人変換までは無理だよ
バーローネクタイもSFじゃないのか
モデリング・ギターとかがあるからできるって勘違いしちゃったのかな? 人間の声ってめちゃめちゃ複雑だから、せいぜいAntaresのAVOX程度の加工が関の山。 誰かの声っぽく合成するだけでも難しいのに、同じ声に加工する技術があるなら、教えてほしい。
てかネタにマジレスってやつですかね
でも、そのうち出来るようになってしまうんだろうな。
変な週刊誌の受け売りだろ 誰かの声ってなら声質よりも喋り方とか表情とか演技の部分の影響の方が多いと思うぞ それこそコンピューターの一番不得意な部分だが
喋りを再現って事は、その人のリズム感だったり、単語や接続詞なんかの音程だったり、 安倍総理のカ行みたいな上手く発音出来ない子音だったり、そういう部分が似てると感じるんじゃないの? ものまねとか見るとそう感じる。 声質だけなら「自分の声を松田聖子に変える」なんてのも機械的に可能だろうし、 松田聖子のものまねで喋れば似るだろう。 ただ普通に喋っただけで同じになるとしたら>761しかありえないが、音声認識をリアルタイムでという時点で極めて困難だろう。
ちょっと話はずれるかもしれないが 某タレントがCDを出すのに'あ'から'ん'まで録音しただけで歌ってないと言っていたが本当だろうか
>>771 まず無理。
そういえば昔J-POPはコンピューターが全部自動で作ってるって言ってるヤツもいたな。
それと似た類いの戯言だ。
今の技術だとせいぜいVocaloidぐらいが限界じゃないかな
たぶんピッチ補正をオートでかけまくりの声を合成音声だと間違ってるんじゃないだろうか。
フォルマントの単純シフト、ピッチ変換位だけじゃどうやってもどことなく自分の声っぽいんだよね
>>771 出来なくは無さそうだけど、ホントだとしたらすげぇな。
ただ、大抵の人は高音域で声が裏返るけどそういうところってどう処理してるのか気になる。
>>772 全部は言い過ぎだが最近の楽曲のほとんどはコンピューター合成された音だぞ。
だからコンサートとCDの音質の差は開く一方で・・・
JPOPはコンビュータが作っているてのはMIDIの事じゃないのか ちょっと前に松下がプリセットされた曲の速度やピッチを変えることで BGMを作る機械出してたよね。
>774 シンセ音とメロディを混同してね? コンピュータが自動で作曲&編曲系はいくつか見たけど、 作曲&編曲と呼べるレベルのもは一度も目にしたことが無い。
東大の某研究室はジャズの自動伴奏で十分なレベルのシステム作ってたな。
>>762 以前、vipでエッチなセリフや喘ぎ声を自分で喋って録音したものをトーンだか
再生スピードだか調整して女性の声っぽくしてうpしてた馬鹿を思い出した。
しかも、その直後、それに逆の変換をかけて元の音声に近いとてもキモイものを
うpしてる馬鹿もいた。・・・アレは本当にキモかった。
そういやテレビとかでさ、 個人の声をわからなくするのに単純なピッチチェンジかけてたりするが、 きょうびあれ意識低杉だよな〜 完全とまではいかなくても、ほぼ元に戻せるのにさあ
>>779 だからわかっているところはちゃんと多重処理とかかけているが
こりゃしつれい、まあでもずさんな制作会社も多そうだなあ
>>777 自動伴奏って?
人間ジャズミュージシャンの演奏と呼吸を合わせてセッションできるならすごいな。
そうゆうの夢なんだよ。
>>771 とあるミュージシャン(そこそこ有名)と音声合成の話になった時、
その人は、「あ」から「ん」まで録音して並べたら楽できるのではと思ってやってみたが、
全然使い物にならなかった、って言ってたぞ。
>>777 ジャズでBIABにはかなうまい。自動作曲させてもまだ一番マシ。
>>782 人間と呼吸を合わせてセッションする類の研究はMax/MSPの方面、特にフランスで盛んだよ。
日本人でもやってる人が何人かいたはず。
歌じゃないけど、昔SEGAのサウンドの部署にいた頃、サカつくの応援団(?)用音声で 20人くらいの同時発音で同じく50音録って応援歌みたいなの作ってた人居た。 ソロボーカルで綺麗なものを作るのは難しいだろうけど、用途限れば使い道はいろいろありそう。
>>784 DSPネタばっかりだったからこうゆう話しは面白いな(スレタイ的に範疇にはいるのか微妙だけどさ
この研究は人間はピアノ担当と決まっているみたいだけど、演奏はMIDI情報として交換するのかな。
それともオーディオ信号から解析するのだろうか(だったらまたすごい
プログラミングスレなんだから、もっとプログラム寄りの話をしよう。
DTMのプログラミングって意味が違う
まぁゲームのスタッフロールとかじゃ打ち込み担当のことを指して サウンドプログラムと書いたりしてるな
それは効果音を制御する為のプログラムじゃないのか DTM板周辺では両方の意味普通に使うよ ここのプログラミングみたいなことも自動作曲とか音響とかでやる場合はあるし、 リズムプログラミングとか打ち込みの事をさす場合もある、でもあんまりつかわん リズムの打ち込みとか言っちゃうし
これからはGPUでもサウンド処理してもいいと思うけどね。 つ HDMI ただ入力の規格は無いけど。
GPGPUですか。 でも将来的にはCPUの中にGPUが統合されていく流れがあるみたいね。 今みたいなマルチコア化は実質的なメリットが少ないもんだから、 汎用コアを増やすよりGPUを統合して(もはやGPUと呼ばないのかも グラフィックのみならず強力な汎用ベクトル処理プロセッサとして利用するとかなんとか。 AMDはそのためにATI買ったという話しだしね。
まぁ無理に統合せずとも、CPUもGPUもマザボ上に設置してなおかつ脱着できるようにしてほしいね。 汎用バススロットにCPUより高い発熱体設置って狂気の沙汰とは思えん。 せめてCPU用の大型クーラーをGPUにも装着できるような配置にしてほしい。
>794 難しい言葉を使ってみて素で間違えてる馬鹿w
>>794 汚名挽回の類義語?
「狂気の沙汰」を使うならそのあとに「とは思えん」の否定は不要。
否定を入れるなら「正気の沙汰とは思えない」になる。
ま、PC弄るのも程々にして日本語の勉強もな。
「狂気の沙汰としか思えん」でもいいね。
せこいとこに食いついてると「類義語」の意味は? とか言われちゃいますよ
>狂気の沙汰とは思えん。 これじゃあCPU+GPUべた褒めだよwwwww
ワロスwwwww
キメーナキモイデス!!
803 :
デフォルトの名無しさん :2007/06/12(火) 00:42:03
停滞してるみたいですが、ちょっと質問です。 waveファイルに移動平均の計算をしてLPFをかけようと思っているのですが、 waveファイルが格納されているbufに移動平均の式をかけると、 実際の曲よりも大きな音で、ザーっというノイズが流れてしまいます。 移動平均の部分のプログラムは、 for(i=50;i<BUFSIZE;i++) { j=0; for(j=0;j<50;j++) { sum+=buf[i-J]; } buff[i]=sum/50; } write(/dev/dsp,buff,BUFSIZE); みたいな感じになってます。 ちなみにOSはFedoraCore6で、言語は普通のCだけしか使ってません。 とりあえずノイズが出てしまう原因だけでも知りたいのですが、 どなたかご教授お願いします。
・buff[]とbuf[]は別だよな? ・jとJは同一だよな? ・変数の型は? ・sumを初期化しろ ・3行目の j=0;はいらんだろ
805 :
803 :2007/06/12(火) 01:31:27
>>804 buff[]とbuf[]は別物です。
jとJは同一です。完全に表示ミスです・・
変数は全てintでやってます。
おっしゃる通りで、3行目のj=0はsum=0の誤りでした。
自分で書いといて間違えばっかで申し訳ないです。
buff[i] = sum/50; ↓ buff[i-50] = sum/50; じゃない?
あと、write(/dev/dsp, buff, BUFSIZE); も write(/dev/dsp, buff, (BUFSIZE - 50) * sizeof(int)); じゃね?
それはどうかな
元データの範囲は? というか、デバッグくらい自分でやれと
810 :
803 :2007/06/12(火) 02:48:23
>>804 >>806-807 レスありがとうございます。
>>806 自分のやり方だと、
前か後ろどちらかの50点には目を瞑るしかないと思っていたのですが、
その書き方ならなんとかなりそうです。
>>807 のほうなんですが、
移動平均をかけていない buf[] だと、
write(/dev/dsp, buf, BUFSIZE);
で問題なく再生されるのですが、
その場合でも *sizeof(int)をつけたほうが良いですか?
あと追記で、waveファイルは
16bit 2ch サンプリングf=48kHz、t=30秒程のものを使用しています。
元データが2chなのにbuf[]が1個しか無いってのが怪しい。 入力処理を書いてみろ。
812 :
803 :2007/06/12(火) 03:24:01
>>809 上にも書きましたが、16bitでやっています。
>>811 確認してみたら、
>>803 で書いたものとまた若干違うところがありました。
何度も直して、本当にすいません・・
while ( 1 )
{
length = fread( buf, 1, BUFSIZE, wave.fp );
write( dsp, buf, length );
}
となっています。
恥ずかしながら、waveファイルの再生の部分は自分が書いたものではなく、
元からあったwaveファイル再生のプログラムに移動平均の式を書き加えています。
>>805 bufの型はちゃんと16bitになってるか? 8bitや32bitでやってないか?
あるいは符号無しになってないのか?
>>812 おまいはwaveファイルのフォーマットを理解していない。それが原因。
はい終了。
こらこら、ありがたい新人様に、なんて扱いするんだ!
煽るのは、もちっと育ててからにしろ!
>>812 RIFF ヘッダというのがwavファイルには付いていて、
それをまず読んでサイズや形式を調べてる筈なんだが?
>814 同意。 最低限の調べ物をしてない教えてクンに餌を与えるな。 そいつの為にもならん。
自己努力が足りなそうな質問はたしかにあれなんだが、、、 新人クンとか教えてクンとかいっても このスレは質問者で成り立ってると思うがなあ ベテランっぽい人は話題出せないし、あとは荒らしみたいなのばっかりだし
818 :
803 :2007/06/12(火) 14:05:13
>>813-817 いろいろとご意見ありがとうございます!
たしかにみなさんのおっしゃる通り、勉強不足感はいなめない状態です。
プログラムをいじる前に、waveファイルのフォーマットについてちゃんと勉強してみます。
自信がついたらまた違う名前で質問しにくるかもしれないんで、
そのときはヨロシクおねがいします。
板汚し失礼しました〜
819 :
803 :2007/06/13(水) 18:12:09
またきました803です。 昨日騒いでたことは色々いじった結果無事解決しました。 色々忠告していただきましてありがとうございました。 まだいくつか問題はありますが、一ヶ月くらいはうじうじ考えてみようと思います。 それでもダメそうならまた質問にくるかもしれません。 ではROMにもどります。 失礼しました。
820 :
デフォルトの名無しさん :2007/06/13(水) 19:00:54
mciSendStringについての質問はここでいいでしょうか。
ダメです。
分かりました、別スレで聞きます。
ごきげんよう旅の人
mciってサウンドプログラミングと呼ぶにはアレ杉だからなぁ
箸休めな話題があってもとは思うがな
827 :
820 :2007/06/13(水) 23:24:51
環境は、vaio、win9x、BCCです。 mciSendStringでmidiを鳴らしていています。 音楽を変える時、前をstop、close、次をopen、playとやっていますが、 50回に1回ぐらい、openの時にMMSYSTEM275 指定したファイルが見つからないのエラーが出てしまいます。 ソフトを同じように進めて実行しても、出る時と出ない時があります。 自分で原因と思っているのは、以下の感じです。 ・closeの処理をopenが抜かしてしまっている? →sendだから処理が終わるまで戻ってこない気もするが ・closeすると、まれにカレントディレクトリの位置が変わる? →それか実はプログラムの別の所で変えてしまっていたが、 stop、closeでは違っていてもエラーは出ない? ・引数文字列をPCTSTRにキャストしないといけない? →しなくても一応警告はでない ・手違いで既にopenしているのをopenしてしまっている? →別のエラーメッセージが出てくれると思うが ググって見ると、以下のようなのが出てきます。 ・プログラムの位置のパス名が長い →当然ユーザーの好きな位置に置いてもらいたい ・デバイスが複数あると問題が起こることも →ひとつしかない ・ファイル名には別途""を使わないとダメ? →気をつけないといけないが、今の位置には空白はない ・機種vaioとしてのバグ? →system.iniは書き換えたくない 実験しているんですけど、如何せん起こる事の方が少ないので難しいです。 原因と思われることがありましたら、教えてください。
たしかに似たような環境でmciは挙動不信なところあった。 エラーしたら何度かリトライするとか。
829 :
820 :2007/06/14(木) 00:25:49
>>828 なるほど、エラーメッセージを表示して終了するのではなく、
中ではこっそりと何度かopenを試みるという事ですね。
それも入れたいと思います。
mci使うくらいならDirectShow使えば? 安定度は幾分か上がると思う。 ってか、MIDIなら再生部自作してもそんな手間じゃないよ。
831 :
820 :2007/06/14(木) 00:54:57
>>830 DirectXはなんとなく使いたくないです。
自作は、waveの方で少しやった事があるので、
少し感じはつかんでいるんですけど難しそうです。
mciは他にもCPU率高いし、リソースも使えないし、
ループ再生も雑なので、不便なんですけど。
>831 dshowはDirectXではなくPlatformSDKだぞ。 WMPとほぼ等価の動作になるしmciでぐだぐだやってるよりはいいと思うが、使いたくないならしゃーないな。
833 :
820 :2007/06/14(木) 11:29:44
>>832 起動するのに必要なソフト:特に無し、と書きたいというか・・
ちっちゃい事なんですけど。
起動するのに必要なソフト:特に無し だと思うけど違うのかな?
ちがうね
まずWindowsが必要だしな。
837 :
820 :2007/06/15(金) 01:27:48
>>828 氏に教えていただいた、リトライを試しているが、
数百回は音楽変更の機会があったのに、エラーが起きてくれない・・
>>834-836 DirectXバージョン*が必要とかそういうのです。
もうデフォで大体入っていると思いますが。
後、DLLも使っていません。
winmm.dllもか。
839 :
820 :2007/06/15(金) 10:40:21
>>838 最初から入っていそう?なのは除いてです。
画像なんかはいまだにbmpでやっています。
せこいあげ足取りもいくないが 延々実況デバッグみたいのも勘弁だな
ありもの使えば済むのに自分で作らないと気が済まない自己満ヤローのくせに技術のない教えてクソ。 そろそろ逆ギレをはじめるんじゃないかと思うと気が気でない。
とんだ箸休めw
844 :
820 :2007/06/15(金) 20:22:27
すいませんでした、質問を終わりにします。 教えてくれたかた、ありがとうございました。
845 :
820 :2007/06/15(金) 20:58:39
すいません、最後の最後です。原因が分かったので。
原因は、
>>827 のカレントディレクトリの位置が変わるでした。
プログラムを起動して、別のパスにあるwavなどを開いて再生したり、
または別のプログラムを起動した後、音楽の変更処理を行うと
確実に275エラーが発生してくれました。
なので、音楽変更の前に再びカレデレを
プログラムの位置にすればエラー回避できそうです。
aliasでもいいかもしれません。
なお、notifyによる連続再生の時は、
カレデレが違っていても普通に処理されます。
その後、音楽変更処理を行うと、同じように275エラーが発生します。
カレデレ
カレの前ではデレデレ
>>845 おめでとう
ちゃんと事後報告した行動は評価するよ
Javaで、ゲームで使うようなサウンドファイル(mp3やwavやmidi)を再生する方法はありますか? いくつかの音を重ねたり、ゲーム内で音量を操作したりしたいです。 できればライセンスに縛られたくないので、ライブラリはなるべくライセンスが緩いもので……
850 :
デフォルトの名無しさん :2007/06/26(火) 20:16:44
下げてしまいました…質問なので上げます。
Javaは使ったこと無いが、 >音を重ねる APIにデータを流す前に、単純に複数の波形のデータを加算してAPIに渡す。 >音量 APIにデータを流す前に、単純に波形データに数値を掛ける。 1.0未満なら音量は下がるし、1.0よりも大きければ上がる。
>849 iアプリとかならAudioPresenterとかMediaSoundとかがあったなぁ。 ってかJavaスレで聞いた方が早いと思われ・・・
853 :
849 :2007/06/26(火) 23:06:36
あれから調べて、ゲーム系のサイトを見つけました。
wavはClipクラス、midはSynthesizerクラスで扱えることが分かりました。
>>851 の重ねる方法、音量を加工する方法はそこには書いて
ありませんでした…ちょっと難しそうです。
mp3はデコード処理があるため?ライブラリが必要なようです。
また、ライブラリがあってもPureJavaだと速度的に難しい?みたいな
ことが書かれているMLがありました。
とりあえずwavとmidで進めてみます。
>>851-852 感謝です。
貴様に感謝される筋合いは無い。
851だ。
とあるデータ *[0123456789] 逆再生用データ *[9876543210] これはなんていうの? *[0927456381]
>>858 言ってる意味が解らないし、そもそもサウンド関係無いような気がするが?
>>859 昔とある人が、前後反転させたデータ全体をn等分して更にそれを反転、
そしてnを∞とするとどうなるか、というのをアナログ回路実験したんだが、
それをデジタルにすると858に書いてある様になるらしい。
これについて詳しく知りたいので、できれば関連するキーワードでも見つけられたらと思って。
いみがわからん 「それ」てなんだ
とある人に聞けw
>860 そんなアルゴリズム聞いたこと無いなぁ。 ちなみにどんな音で鳴るの? 窓の大きさと繋ぎ方が解れば再現できそうだけど、意味のある音が出るとは思え無いんだよなぁ・・・
FFTのビット逆順に似てるなあ
元データと逆再生データを半々で混ぜただけじゃないの?
時間軸で無限はないな 860自身言葉を覚えただけで全く意味は分かってないだろ
>>863 通常再生と逆再生が混じって聞こえる感じです。
「とある人」というのは、何十年も前にこの事に関する論文を書いた人で、
もしかしたら今は死んでしまっているかもしれません。
なんじゃそりゃ
もうええわw とある人の名前でぐぐって、見つからなければ諦めろ
とある人の名前が分からないんだろw?とエスパー
質問です。 FFTによるピッチシフトするプログラムを作ったのですが、 周波数をシフトさせると、音量が小さくなってしまいます。 FFT→周波数操作→逆FFTした後、出力する際の振幅に xをかけて、周波数 * 1.0 (つまり変化させない)の場合に 元通りの音量になるようにxを調整したところ、 周波数を * 2.0したときに、感覚で音量が半分以下になってしまいます。 シフトさせる量と、振幅にかけるxには 関数関係が必要なんだと思いますが、 どんな式にすればいいんでしょうか? 【補足】 ・使い物になるかは度外視して周波数 * 8.0とかやってみたところ、 音量はむしろ元より大きくなりました。 まぁ、シフト量は0.5〜2.0くらいを限度にしたほうがいいようですね。 ・もろもろの処理の仕方はCマガに載っていたものをそのまま使っています。 FFTサイズ2048、オーバーラップ4で、出力の際にコサイン窓をかけてます。
>871 虚数成分を処理して無いとかじゃね?
874 :
871 :2007/06/29(金) 16:31:33
>>873 えっ?処理してない!
Cマガのソースだと逆FFTの結果は実数部しか使ってない。
そうか、逆FFT後は虚数成分が出るから、それを無視することで
そのぶん振幅が減ってしまうってコトかな…
ちとやってみます。
…と思ったけどその前に
>>872 を読んだほうが良さそうなので見てみます。
875 :
871 :2007/06/29(金) 21:19:17
>>872 の言いたい事は分かりました。
耳で聞くと、高い音ほど小さく聞こえる、と。
>感覚で音量が半分以下に
と書いたのは少々語弊があって、
元ファイルと変換後ファイルを、波形を表示するソフトで表示すると、
全体的な波形の幅が、大体半分以下になってます、ってことです。
…で、虚数を使おうとしたけど、どう使えばいいかわかりません。
そもそも、逆FFTの結果得られた値の虚数は何を表しているのか?
適当に、ルート(実数*実数+虚数*虚数)とか試してみたけど
ヘンなガタガタした波形になります。
数学知識が足りず、FFTを理解できてないのですぐつまづく…。
>875 (x*x+y*y)^.5じゃ負数が無くなるから、実数部の符号を最後に掛けてみるとか。 ・・・ごめん、適当言った。
>>875 単純なピッチシフト処理で、IFFT 後のデータに虚部が出るっておかしいよ。
878 :
デフォルトの名無しさん :2007/06/29(金) 23:15:51
特別な理由があってそうしない限り IFFTの結果得られる虚数成分はゼロじゃなくちゃおかしいよ そもそもピッチシフト法の説明がないし,誰も応えられんのとちゃう?
879 :
871 :2007/06/30(土) 00:22:33
>>876 そう、それをやってみた結果がガタガタ。
>>877-878 虚数が出てるかどうか、確認してませんでした。
確認してみたところ、出てます。
この時点で既におかしいのか。
もともとC++のソースをCに直して実装したから、地味なバグが居るのかな…。
ピッチシフト法の説明が十分にできる理解レベルにないと思いますが、
こんな説明でいいのかな。↓
・もとの信号をFFTで1本1本の正弦波に分解。
・各正弦波の振幅・位相を求める。振幅はそのままとっておく。
・位相を、「位相差計測法」によって真の周波数を測定
・周波数軸上でシフトし、位相差計測法の逆処理
・もとの振幅と処理済の位相を実数・虚数に直してIFFT
880 :
871 :2007/06/30(土) 00:39:42
肝心なことを忘れてた。 上記質問にピンポイントに答えられる方がいるのが 一番ありがたいのですが、それよりまず簡単な質問。 そもそも普通、ピッチシフトしたら音量が下がるなんてことは無い? (つまり、明らかに俺のソースのバグ?)
>>880 ピッチシフトも何もせず、素通しのつもりのコード書いてみた場合、
音量下がらない?
一度それ試して。
ピッチシフトするって、要するに、周波数領域でデータをずらしてくのよね?
その際、音程下げるなら低周波、上げるなら高周波のデータがちょっと欠けるわけで、
その欠けた分の音量は下がって当然だけど。
音程2倍程度でそんな音量変わるとも思えない。
882 :
871 :2007/06/30(土) 01:49:34
>>881 ああ、下がります。
例によってCマガのソースが、なわけですが
出力する際に波形に…つまりIFFT後の実数に「4」をかけてます。
(※ソースを知っている人のために注意を入れておくと、
かけてる数字は8だが、コサイン窓をかけてオーバーラップして
出力してるぶん、そもそも2はかけなきゃいけない。)
この「4」が何なのか、書いてないので意味がわからないのです
(解説には「ゲインの調整をしています」としか書いてない)
ちなみに、これ4だと多すぎるみたいで…。
このままのコードで素通しすると、むしろ音量が上がってます。
>>882 何タップの FFT でやってる?
FFT の実装の仕方によるんだけど、その 4 のところは、
FFT のタップ数か、その平方根かを入れないと駄目かもしれん。
>882 ソースをどっかのロダにうpしる その方が早い
FFTなんかさ、初めから出来てるプログラムそこらじゅうにころがってるから 自分で作る必要ないだろ
勉強のためじゃね? あとはライブラリ使うのがうざいとか。
887 :
871 :2007/06/30(土) 15:07:38
俺が見やすいFFT書いてやるぜ
もっとも、関数オーバヘッドがでかいけどなw
891 :
871 :2007/06/30(土) 16:40:53
>>890 ありがとうございます、
気持ち処理が早くなったような気がします。
当然とは思いますが結果は何も変わりませんね。
どうも「真の周波数を測定」とか「一度振幅・位相に変換」
あたりが怪しい。
ちょっと実験でやってみようと思ってることが…
下記のようにしたら、音の高さが半分になる、
って認識合ってますよね?
・FFTする(説明のため、FFTサイズを2048とする)
・結果の前半の1024個を、実数・虚数どちらも
x[0] = x[0];
x[1] = x[2];
x[2] = x[4]; …と続けて、前に詰めていく
・x[512]〜x[1023]は全部0にする
ところで、逆FFTするとき、後ろ半分は
どういう状態にしておくのが正しいんですか?
今は、実数・虚数とも0にしてるんですが。
>>891 いや、だからピッチシフトしてみる前に、
素通しの FFT → IFFT の結果確かめてみろって。
高周波に関しては、普通は 0 で埋めとく。
ない情報は(簡単な方法では)作れない。
たいていの音はハーモニクスを持ってるっていう経験則から、
低周波の情報を使って(元々ない)高周波を推定する手法はあるけど、
詳細は知らない。
>891 お前がFFTを理解出来てない、でFA。 簡単に説明するとN=8の時、 x[0],y[0]はDC成分 x[1]=x[7],y[1]=y[7]はそれぞれ周期1のsin,cos成分 x[2]=x[6],y[2]=y[6]はそれぞれ周期2のsin,cos成分 x[3]=x[5],y[3]=y[5]はそれぞれ周期3のsin,cos成分 x[4],y[4]はそれぞれ周期4のsin,cos成分 というようにN/2で対称なデータになり、対称のままifftすれば虚数成分は出現しない。
2倍じゃ完全復元なんてできないよ。図に書いてみればすぐ分かる。
1Hzの差でうなりが出るんじゃね?
897 :
デフォルトの名無しさん :2007/07/04(水) 00:19:19
つうか、どんだけスゴイローパス使ってるのかと小一時間
サンプリング定理で前提とされている理想低域通過フィルタが肝だな。 本当に理論どおりならサンプリング周波数の0.49999倍でもうなりが出ずに完全に復元できる。
899 :
894 :2007/07/04(水) 00:40:50
>>895 >2倍じゃ完全復元なんてできないよ。図に書いてみればすぐ分かる。
やはり、完全復元は無理だよね。
>>896 >1Hzの差でうなりが出るんじゃね?
うん、激しくうなってます。
で、894の標本化定理の説明の引用元は wikipedia なんだけど、
これって間違ってるって考えてよいのだろうか?
気になって眠れなそうだったんだけど、
これで寝れそう。 895氏、896氏に感謝。
標本化定理は間違ってない。 離散ではない連続関数のフーリエ変換をきちんと理解すればわかる。
ローパスフィルターなんか使って無いじゃん
ローパス使わないと音(アナログ)に戻らない
AD変換にもDA変換にも強烈なローパスが必須だ
ローパス使うとうねらないの?
>>904 カットオフ周波数でスパッと切れる理想ローパスフィルタ(=カーネルがsinc関数)が実現できるならね
>>905 そしてサンプリングデータも-∞から∞の時間範囲ですべて揃ってるならなw
まああれだ 適当なところであきらめろ それか難聴になればおk
みんなが不思議に思ってるのは
>>894 のように 11025Hz サンプリングのADCは
普通は 5512Hz の入力をほとんど通さないのに、どうやって録音したのかという事だろ?
どんな急峻なLPF使ってるんだと、
LPFが入ってないなら理解出来るが、LPF無しでは 折り返しがひどくて使えない筈。
さらに、DACも、最近のDACはデルタシグマ方式だから、やっぱりLPFが入ってて 5512Hzを聞くのは難しい。
テスト信号発生ソフトのリンクを張ってるって事は、、単にサイン波をソフトで作ったのか?
だったら嘘吐き野郎がという事になるが
>11025Hz サンプリングのADCは 普通は 5512Hz の入力をほとんど通さない あぁ、強烈で理想的なローパスとは、録音する時の事ですか。なるほど。
いやだから再生するときも必要なんだってばさ
ローパスフィルタの理想度はむしろDA変換時のほうが大事
強烈で理想的なローパスがあれば5512HzでADC入力->11025->DAC出力で 正しく再生出来る。 ただ,これを実現するには、出力まで10秒以上の遅延が必要だろう。 現実的な数10msの遅延で実現出来るフィルタでは 5512Hzは入力でもカットされ 出力でもカットされるだろう
録音時のマスターサンプリングならいくらでも時間掛けられるから実現可能だろうけど、 再生時に遅延しまくると困るな。 MDみたいに4秒バッファと称して遅延も込み込みにする手法はどうだ?w
914 :
894 :2007/07/07(土) 22:17:38
>>908 テスト信号発生ソフトを使えば、理想にかなり近い状態で、
標本化が可能だと思ったからです。
私が標本化って書いたのは、録音してないからです。
で、再生はWindows のサウンドレコーダを使ったんですが、
この場合、個々のサンプルを通過する正弦波を再生するのではなくて
個々のサンプルを適当に通過するような正弦波よりとがった
波形で再生されました。
FFTの結果には、本来再生できないはずの5512Hz以上の成分が、
表示されたりしてました。
少なくとも Windows のサウンドレコーダを使用した場合には、
定理とかけ離れた動作をするようですね。
>サウンドレコーダを使用した場合には ドライバが同一ならどんな再生ソフト使っても同じだぼけぇ 再生時のローパスってのはD/A変換の際にかけるもので、それはサウンドカードの仕事だ デコーダでもサウンドドライバでもないわアホ
自分にとって都合の良い意見だけ聞こうとせずに, ちゃんと全部の話を理解しようとしてみなよ それと,100Hzだろうが1000Hzだろうが,正弦波の切り出し方によっては スペクトルにいくらでも高周波がでてくるって もういい加減この話題は疲れた
そういやサンプリング定理って位相ズレがある場合どうなるんだっけ? む、ちょっと考えてもわからん。これはフーリエ変換を勉強しなおしたほうがいいな俺
918 :
894 :2007/07/10(火) 23:22:53
>>915 11025Hzのファイルを読んでから、
サンプルを補って22050Hzや44100Hzでデバイスに出力するような、
プレイヤーがありそうなので、サウンドレコーダと明記してみました。
また、グラフィックイコライザつきのプレイヤーなどでは、
デバイス出力前にフィルタが動作しているように感じます。
ところで、再生時のローパスフィルタの役割が未だに理解できません。
どなたか、ヒントを頂ければ幸いです。
とりあえずwindowsのサウンドドライバの仕組みも勉強しる
>>918 再生時のローパスフィルタはDACの回路の話だってのはわかってる?
>>918 例えばサンプリング周波数が100Hzの時は50Hz未満の正弦波をAD→DA変換で正しく
復元できると、サンプリング定理は言っている。
D(n) = sin(th * n/100), thは角周波数 th < 50*2*π
原信号が丁度50Hzの場合はDnが一定(直流)になってしまい、正しく変換できない。
D(n) = sin(50*2*π*n/100) = sin(n*π) = 0
では、原信号が51Hzの時はどうか?
D(n) = sin(51*2*π*n/100)=sin((100-49)*2*π*n/100)=sin(-49*2*π*n/100 + 2*π*n)
= -sin(49*2*π*n/100)
つまり49Hzの信号(逆相)をD/A変換した時とまったく同じになってしまう。
ここまでお判りでしょうか?プロットツールでグラフを描いてみることをお勧めする。
即ち、49Hzの信号をA/D変換したデータは、51Hzの信号をA/D変換したデータと区別
できないことになる。この信号をD/A変換すると、49Hzの信号と51Hzの信号が混ざった
信号になってしまいます。この51Hzの信号をサンプリングノイズ(量子化雑音)といいます。
49Hzの信号と51Hzの混合した信号に2Hzのうなりが生ずることもグラフを描いて確認
してみると良いと思います。
この49Hzと51Hzの混合したアナログ信号からLPFを用いて51Hzの信号を取除けば
原信号を完全に復元できる、というのが標本化定理の言うところです。
>>918 再生はDACが行う。 ADCが瞬時値を読んでるように
音声用のDACも理屈の上ではパルスを出さなければいけない。
このパルスをカットするのにアナログレベルでLPFが必要だ。
しかし、パルスを出すのと、特性の良いアナログLPFは難しいので、
サンプル周波数を上げ、オンオフの方が楽なので1ビットの出力にしたデルタシグマの
DACが現在音声用では主流だ。
サンプリング周波数をあげるのは強力なLPFが必要になる。
たとえば128倍にサンプリング周波数をあげるには、1個データがあって残り127個がゼロの
データをfs/256 のf0で十分なカットをしなければならない。
そうすると、f0=5512.5で 5512Hzは殆どカットされてしまう
>>918 記録できるギリギリの周波数のサイン波はほぼ矩形波。
矩形波をフーリエ変換すると、たんまり高周波がでるだろ。
それをカットする。
>921 >信号になってしまいます。この51Hzの信号をサンプリングノイズ(量子化雑音)といいます。 これ、どっかの書籍でも同じような事書いてるの見たことあるけど、 サンプリングノイズじゃなくてエイリアシングノイズだろ。 量子化ってのは音量(波の高さ)をbit値に置き換える作業の事で、 その時に出る誤差で乗る雑音を量子化ノイズと呼ぶ。
925 :
921 :2007/07/11(水) 17:28:04
>>924 ずっと量子化ノイズと言ってました。何時からかは覚えてませんがその書籍を
読んだのかもしれません。時間軸方向に連続した信号をサンプリングで量子化
することで発生するノイズですから量子化ノイズと言っても間違いでは無い
気がしますが・・・ 言い訳っぽいですね、ごめんなさい。
ここはエイリアシングノイズに訂正します。
ご指摘に感謝です。
926 :
921 :2007/07/11(水) 17:37:20
>>921 にもうひとつ間違いがありましたので合わせて訂正を。
12行目
×信号(逆相)をD/A変換した時 → ○信号(逆相)をA/D変換した時
18行目
×サンプリングノイズ(量子化雑音) → ○エイリアシングノイズ
#なんか途中から文体変わってるし多重人格かしらん
>>925 > サンプリングで量子化することで発生するノイズですから
だーかーらー、標本化と量子化はまったく別の概念だっつーの
うん。 昔、アナログのBBDエコーというのがあったけど、 これは標本化はあるけど、量子化は無い(アナログだから)
時間を離散化→サンプリング 音圧を離散化→量子化 でおk?
>929 音圧は離散化っつーと多少誤解があるかも。 別に量子化は整数じゃなくてもいいし、整数じゃなくても量子化ノイズは存在する。
>>929 okだけどサンプリングと量子化を同じ意味で使う事もあるから読むときは要注意
サンプリングと量子化を同じ意味で使ってたら その書き手が間違ってるね
サンプリング定理って、もしかして、サンプリング周波数の「半分以下」ではなくて「半分未満」なんですか?
(逆に言うとサンプルしたい周波数の2倍以上ではなく2倍を越える周波数?)
>>921 うねりのない49Hzをサンプリングして出力したとき「うねり」が付いてしまったら、再現できていないと思うのですが。
サンプリング定理は、無限に来る信号に対してだから、以下とか未満とかの区別はない 実用的には用意出来るLPFの特性によるという事になる。 49Hzが無限にサンプリングされていて、DACで理想的なインパルス出力が出来て その出力に完全に50Hzで切れる理想LPFが付けられるならうねりは出ない。 うねりが出るのは、LPFの性能が十分でなかったり、 インパルスでない出力しか出せないからだ なお、モノラル値で記録した場合に1/2であって、 振動は本来は円運動なので、 円運動に対して複素数で記録した場合はサンプリング周波数まで再生出来る
>>933 >>921 はエイリアシングの話しかしてないよ。
「原信号を完全に復元できる」と書かれているけど、その復元原理は説明されていない。
完全に復元できるかどうかは
>>934 の説明が正しい。
スペクトラを見てエイリアシングが無いか自分の目で見ればわかるだろ 何で人に聞くかなぁwwwwwwwwwww
937 :
894 :2007/07/13(金) 23:59:02
>>934 >サンプリング定理は、無限に来る信号に対してだから、以下とか未満とかの区別はない
>実用的には用意出来るLPFの特性によるという事になる。
未満でない場合は直流と50Hzの区別がつかないように感じます。
もう少し解説していただけないでしょうか?
未満の解釈でいいと思うよ
サンプリング定理どおりの理想インパルス出力と理想ローパスフィルタが実現できるなら、 50Hzは無理だけど49.999999999999999999Hzなら「完全に」復元できる。
940 :
894 :2007/07/14(土) 01:16:03
10日間かけてやっと理解できた気がします。 でも自信がないので脳内をさらします。 間違いの指摘を頂ければ幸いです。 ・標本化時のLPFは、ナイキスト周波数以上の成分が エイリアスとして混入するのを防止するため。 ・標本を通過する波形をナイキスト周波数以下の正弦波を合成して 作成するとその波形は元の波形を完全に再現したものとなる。 ・標本をインパルスとして再生すると、ナイキスト周波数をはさんで、 鏡のようにエイリアス様の成分が発生する。 そのためナイキスト周波数以上の成分をLPFで除去しないと、 元の波形は再現されない。 以上は、無限精度/無限期間の標本と理想的なLPFを必要とするので、 実世界では妥協が必要である。 ・計算のみでwaveファイルを作成すると、理想に非常に近いLPFを使用して 標本化を行った場合と同様のファイルを作成できるが、 そのようなファイルは実際に再生しようとすると理想に非常に近いLPFを 使用しないと正しい再生結果が得られない。
941 :
894 :2007/07/14(土) 01:17:39
うん。良くなった。 今まできつい事言ってわるかった。 この調子で勉強に励め。がんばれ。
>>937 理想的な50HzでカットするLPFの特性ってどういう関数になるか知ってる?
そう50Hzのサイン波になるのさ
それとの無限の畳み込みだから、理屈から言えば、50Hzには無限のゲインを持ってる
だからまあ、理屈の上では50Hzは無限小の振幅になっても、無限大のゲインで再生出来る事になるのさ
0.9999999999999..... と無限に続く数字は 1/9*9 だから1になるみたいなもの
>>943 それだと、どんな信号でも理想的なLPFを通すと50Hzになってしまうのでは?
理想的なLPFは同時に理想的なHPFってことか?
>>943 理想LPFのカーネルはsinじゃなくてsinc関数だろwwwwwwwwwwwwwwwwwwwwwwwwwwwww
50Hzに対してゲインが無限のフィルタのどこが理想的なんだよwwwwwwwwwwwwっうぇwっうぇwwww
943が意味不明なことをさも事実のように言ってるのはガチ でも946みたいのは不快だな
943 が言ってるのは、どうみても狭帯域透過フィルタよね。 LPF の応答は sinc。
ハードウェアのIOでのLPFとか現実的な話だと上手くいかないのも分かるけど、 限りなく理想に近いsinc関数での畳み込みと、最終確認は画像での波形確認ってことで、 仮想的に理想の状態を作る事は出来んのか? 894はその話をしてたんだと思うのだが。 その状態で、高サンプルレート(アナログのアナロジーとして)で、低中周波のサインを生成して、 (Sinefreq-1hz)*2 位の「位相ずれによるうねりが発生しそうな」サンプルレートでサンプリングして、 それを高サンプルレートにもう一度持ってきて、理想のLPFをかけても、低周波のうねりって残ってるんじゃないか?(誤差レベルは無視しても) という話では
無限時間畳み込みできやしないのに何が「仮想的に理想」なんだよ
まあ、せいぜい、「二乗誤差を最小化」か「最大誤差を最小化」だな。 それを「仮想的に理想」といいたいんなら、それは可能。
>>950 だからあ、無限までやらなくても無視できる誤差レベルまでやれば確認位取れるでしょう
>>952 それで「低周波のうねり」が確認できたとしたら、それは畳み込みを有限で打ち切ったせいだろ。
「無視できる誤差レベル」って何を基準に言ってるんだ?
標本化定理の理論どおりにsincで畳み込めば絶対にうねらないことは数式的に明らかなんだから、
もし「低周波のうねり」が残ったとしたらその時点で「理想のLPF」じゃないだろ。
おまえがいったい何を確認したいのかわからん。
現実的/統計的に理想と同じよーな感じなんじゃないか RSA公開鍵暗号だってそういう雰囲気だし
ホント頭悪いな、理想論と実装は別物だといい加減気付けよ。
「理論通りなら本当にうねらないのか?」ということを確認してみたいなら、 LPFのシミュレーションの精度(畳み込みの長さなど)を高めるにつれて 徐々にうねりが減っていく様子が観察できればそれで十分だな。 たとえば矩形波のフーリエ展開が本当かどうか確かめたくてずっと足していっても 永久にリップルがなくならない(けど全体として矩形波には近いづいていく)のと似たようなもんやね。
永遠に足せればリップルはなくなるんだが
なくなるところまで数値計算じゃ確認できないって話だろ
有限長で打ち切ったらだめだろ
つまり、おまいは普通に精度を高めて行く方法では 実現不可能だと言う事を言いたいんだろ。 「無限に足せばいけるよ!」 っていう話はみんな理解してると思うよ。 計算上の工夫で「無限に近い状態」を作り出せるのかって事を聞きたかったんじゃない? 俺は数学科じゃなかったし、無限の数学的な扱い方なんて知らんけどよー。
>>960 >>959 のギブス現象は、n項までで打ち切ったときのオーバーシュート量をa[n]とすると、
n→∞の極限を計算してもa[n]がゼロにならないっていう意味でしょ(具体的には0.089490に収束)
標本化定理のシミュレーションでは不連続点はないからギブス現象は発生せずに収束するはずだから、
その意味では、
>>956 で例として矩形波のフーリエ級数展開を挙げたのはあまり適切でない気もする
ウェーブレット変換とか使うといいんじゃないかな
話が脱線してきました
むしろ脱線してくれ
>>966 標本化したインパルス列をsincで畳み込むということは、結局sincを平行移動させて加重和をとることに帰着される。
sincの平行移動の関数群は互いに直交するから、同じ直交展開としてフーリエ級数展開との類似性は認められる。
「まったく適切ではない」というのは言い過ぎではないだろうか。
むしろ何も言ってないに等しい
>>967 話が脱線しまくりだけど、標本化定理を直交関数系による級数展開として捉える考え方は面白いと思った。
band-limitedな任意の関数はsinc関数の平行移動の和として必ず表現できるわけね。
この900近辺以降からのスレってほとんど1人か2人で書いてるんだろうなぁ。 と普通に思えるよなwww 自分で自分に突っ込んで楽しいかおぃ?
俺の書き込みは10個くらいだからもう1人は頑張ってるな
自演乙
俺は2個くらい
5個
自分の知識をひけらかしたい為に自分でわざと間違った質問をする自演 いたいな
(^_^;
次スレの題は DSPサウンドプログラミング4 【信号】サウンドプログラミング4【処理】 どっちがいい? それとも他の提案ある?
DSPデジタルサウンドプログラミング4
980 :
デフォルトの名無しさん :2007/07/25(水) 13:22:36
今のでいいんじゃないか? もともとネタが多いわけじゃないんだから、幅広い意味で
979だとDSPがデジタルサウンドプログラミングの略だと 思っちゃう初心者がいそう
>982 乙!