- 1 名前:デフォルトの名無しさん [2006/04/21(金) 07:54:35 ]
- 音のプログラミング処理について語りましょう
各エフェクタの組み合わせとか、 プログラミング外の話題はDTM板の方がいいよ サウンドプログラミング2 pc8.2ch.net/test/read.cgi/tech/1091054082/ サウンドプログラミング pc5.2ch.net/test/read.cgi/tech/996171508/
- 232 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 06:37:49 ]
- >>229
2次のIIRフィルターは LPFならf0とQで係数が決まるけど、それぞれいくらにしてるの? Q=0.7程度にして f0を変化させてみたら? それから、あくまでも遅延した方にだけIIRをかけて、元の信号と加算するんだよ。 加算した結果飽和するなら音量を下げるAGCを使うか 飽和しないように a , (1-a) の比率で加算するか
- 233 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 12:05:06 ]
- ああ、まさか>>229のソースで係数そのまま使ったって事?
そのレベルならとりあえず1次のLPFでやってみたら? 過去ログ のレス14より www.2chdat.net/data/html/01111704/996171508.html 1次のLPFは w =2*π*f0/22050.0; r =tan(w/2); b =(1-r)/(1+r) ・・・・・略・・・・ y:=b*(x-y)+y と計算します xが入力で yが出力だよ そしてyはグローバルに取るんだよ。 でbを可変してみて感じのいい所を探してみるといいよ 高域をもう少し減衰させたいなら2段するといいよ
- 234 名前:218 mailto:sage [2006/08/18(金) 19:48:30 ]
- フィルタ係数の算出方法があったのか( ゚д゚)…今見見返してみると過去ログが宝の山に見える。
そういえばさっきから全然残響音が出ないなぁと思って考えてみたんだけど、 1サンプル前じゃなくてもっと前のサンプルをフィードバックすれば良かったのか!? っと気づいてから今更>>226の意味を理解した。ぁーぁー それから1次なり2次のIIRを掛けて高音減衰させれば良い感じになるのか。 一応これでそれっぽいのは聞こえるようになったよう。みんなありがとうヽ(゚∀゚)ノ 後はこれとミキシングがどのくらいのレスポンスで出来るかどうかー
- 235 名前:デフォルトの名無しさん mailto:sage [2006/08/18(金) 19:52:51 ]
- IIRは発振しないようにパラメータ選びは慎重にしてね( ´∀`)b
- 236 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 01:44:34 ]
- >>9-11を参考にして、ブロックのサイズを凡そ0.1秒にして、
音程変化の内速度調整を実装したところ、 再生速度を0.5倍にするところまでは非常にスムーズな音でこれを実現できました。 しかし、0.5を下回る倍率(〜x0.4)になった途端、音声が毒電波状態です。 現時点での実装は ・ブロックの間引き(重複) ・ブロックの窓関数処理 のみで、 ・空白を優先 ・繰り返しを配慮 という二点は実装していません。 自分の作っているプログラムでは効率が悪すぎて、 この二点を実装しようとすると処理時間が不足するおそれがあり、 何よりこの二点の効率の良い実装方法が思いつかなかったので。 よくよく考えてみると、この機能を実装しているプレイヤの内のいくつかは、 やはり0.5倍を下限に置いている様なのですが・・・。 何か良い解決方法はありますでしょうか? また、それはどのような方法か教えてください。
- 237 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 03:24:13 ]
- ァ・・・もしかしてサンプリング定理と関係があるのか・・・?0.5倍ってのが2の逆数であることから考えても・・
- 238 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 05:11:04 ]
- やっぱ厳密にはオーバーサンプリング+アンチエイリアスを
かけてから処理すべきとこなんじゃないの
- 239 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 07:28:47 ]
- 音程が変っているのなら、サンプリング速度が変化しているからどこかの段階でLPFを入れておく必要があるよ。
そうじゃないと折り返し雑音が問題になる。 綺麗な音にしたいなら、最低2倍のオーバーサンプリングしておいた方がいいかもね。 音程が変らずに再生速度だけ変化させてるならサンプリング定理の問題じゃない 0.5を下回る場合に問題が出るという事は 0.5を下回ると同じ音を3度以上繰り返し利用しなければならなくなるけど その処理がはいってないんじゃないの
- 240 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:10:42 ]
- >>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; } /* [書き込み用バッファを再生バッファにコピー] */ という感じでの実装です。 なんだっけ、グラフィックとかで良く使う「斜めの直線を整数型のみで計算するアルゴリズム」を応用した感じなのですが。
- 241 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:12:30 ]
- あ、Shift+Enter間違えて押してしまった・・・。
改行と書き込みがメッセとは逆だから間違えるなぁ・・・ とりあえず、お二人のご意見から オーバーサンプリング+アンチエイリアスについても実装を検討してみます。
- 242 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:16:02 ]
- あともう一点追記です。
240で示したソースの中で、i以外の変数はすべて クラススコープです。iのみがメソッドスコープになっております。 readCountがメソッド呼び出し毎にリセット、というわけではありません。 おまけに分かりづらくてすみません・・・。
- 243 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:24:22 ]
- 音程が変化していないという事は、サンプリングレートが変化してないわけでしょ?
だったら オーバサンプリングとかLPFは必要ないよ。 で、やっぱり3度利用する部分に単純にバグがあるのだと思うよ もっとも3度も利用すると違和感があるという事なら当然そうだろうけどね あまり2倍以上遅くする場合は、やっぱり無音期間を検出して、そこを出来るだけ引き延ばす方がいいと思うよ たとえば0.1秒のブロックを0.05くらいに小さくして、そのブロックの音量が今までの音量より一定比率より小さいなら、 その部分の繰り返し回数を出来るだけ多くするとか
- 244 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:31:35 ]
- まてよ >>240の定数だと、引き伸ばしではなくて短縮なんだよね?
短縮で0.1秒単位に2ブロック以上連続してすてるようになると、音声だと何を言ってるのか判らないようになってしまう。 そこまで強力に短縮するなら、 まず周期性を検出して周期の整数倍の もっと小さいブロック (1/30)〜1/60のような(ブロックというよりgranul) サイズにして それを捨てるようにする。必要があるよ。
- 245 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:35:11 ]
- サウンドプログラムの本ってあんまりないよね
- 246 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:40:53 ]
- !バグ見つけた!
>>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秒分のデータが書き込まれる という感じに機能するので・・・。
- 247 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 09:48:58 ]
- 出来るだけ無音期間を検出して無音期間を引き延ばすのが第一
次善は、周期を検出してその周期の整数倍にgranulを切り出して それを並べる 音声の場合は周期の揺らぎが音声らしさを作ってるから 母音の部分の極端な引き伸ばしは巧くゆかないけどね(周期性が増すと声が変ってしまうから) やらないよりはマシ
- 248 名前:236 mailto:sage [2006/08/19(土) 09:52:20 ]
- うん、どうやらその方法をとるしか無い様ですね。
・・・分かり切ったことを聞いたようで、すみませんでした。 しかしそうすると演算量が極端にあがるなぁ・・・ 全量ノルムチェックと倍速調整か・・・うは、頭いてえ
- 249 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:07:55 ]
- Σx^2はそんなコストはかららないでしょ
周期検出の方が計算コストの低いのを探すのは大変でしょ
- 250 名前:236 mailto:sage [2006/08/19(土) 10:22:12 ]
- >>249
やぁ、せっかくあちこちダイエットしたのになぁ、ってボヤキです。 再生に関係しない他のところが処理コスト食い過ぎで、 再生するとCPU利用率が3%くらい跳ね上がるもんですから。 実質的な問題はただ単に面倒くさいだけです、本当にすみません。
- 251 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:23:57 ]
- 急に内容が難しすぎ。
- 252 名前:236 mailto:sage [2006/08/19(土) 10:32:11 ]
- ・・・確率論的に乱数で処理の是非を決定して無音部分の処理確率をあげt
いや、やめておこう
- 253 名前:デフォルトの名無しさん mailto:sage [2006/08/19(土) 10:40:30 ]
- >>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 ]
- 波形を合成する機能をもったライブラリって例えば
どのようなのがありますか?
- 256 名前:デフォルトの名無しさん mailto:sage [2006/08/30(水) 16:11:14 ]
- DirectSound
- 257 名前:デフォルトの名無しさん [2006/08/30(水) 23:33:24 ]
- 8000Hz,8bitで取り込んだ音の中に、1KHzの音が混じってるかどうかだけをリアルタイムに調べたいんですが、低スペックマシンで処理するのにおすすめの方法はありますか?
- 258 名前:デフォルトの名無しさん [2006/08/30(水) 23:36:44 ]
- FFTを応用すればどうとでも出来るとおも
- 259 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 10:30:18 ]
- >>257
フィルタ使うのが軽い。
- 260 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 10:31:42 ]
- バンドパスフィルタを使って音量レベルを計ればいいんだ
- 261 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 13:25:22 ]
- 音程を変えるのに FFT を使ってるソフトがあるらしいのだが、
どういう風に使ってるんだろう。 単純に区間に区切って FFT かけて周波数を n 倍して戻すのって、 時間軸で重複させるのと等価だよなぁ。 位相をうまく合わせればちっとは良くなる気もするが、窓関数かけてたら ほとんど影響なさそうだし。
- 262 名前:デフォルトの名無しさん mailto:sage [2006/08/31(木) 14:44:40 ]
- >>261
ヒント:フォルマント
- 263 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 07:53:32 ]
- >>17 を参照。
- 264 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 15:20:35 ]
- > 全体を一度に収まる大きなサイズの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 だから・・・ まあ何かを勘違いしている恐れがあるけど
- 266 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 20:15:03 ]
- その周波数軸の定数倍をどう実現してるの?
たとえば 2^(+1/12) = 1.05946309435929526 となって綺麗な比率にはならない 特に低周波は目が荒くなるわけで これを旨く処理するには exp(2πki)という指数=三角関数が必要にならない?
- 267 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 22:00:18 ]
- >>266
指数的な補完が必要ってことか。なるほど。そこまで考えてなかった。 でも、上にも書いてあるけど、周波数軸を a 倍するのって 時間軸を 1/a 倍するのと同じだよね。(音量は a 倍違うけども) FFT 使う意味がいまいち分からないなぁ。
- 268 名前:デフォルトの名無しさん mailto:sage [2006/09/01(金) 23:23:01 ]
- DARU/PITCH-SHIFTER!だと音程+1で1.05946314って表示されるよ。
綺麗な比率では無いけど考え方はあってるんじゃないの。 周波数軸上でスペクトルを上下させるのがピッチシフトだっけ?
- 269 名前:デフォルトの名無しさん mailto:sage [2006/09/02(土) 11:50:35 ]
- >>267
たしかに。 下限周波数 f_low [Hz]で周波数スペクトルを測定するには、 有限の時間1/f_low [sec.]かかるので、 結局のところグレイン・サイズ 1/f_low [sec.]で グレイン操作して、ピッチシフトを表現することしかできないね
- 270 名前:デフォルトの名無しさん mailto:sage [2006/10/05(木) 00:10:57 ]
-
ttp://pc.watch.impress.co.jp/docs/2004/0204/nishikawa.htm ttp://www.drk7.jp/MT/archives/000120.html
- 271 名前:デフォルトの名無しさん [2006/10/11(水) 18:43:00 ]
- 今、ASIO2.0のSDKのサンプルをいじってるんだが、どこで再生しているのかわからない。
誰か教えてくれません?
- 272 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:35:32 ]
- ASIO_Init()の中をループしている最中にbufferSwitchTimeInfo()がcallbackで呼ばれる
と思った
- 273 名前:デフォルトの名無しさん mailto:sage [2006/10/11(水) 22:37:45 ]
- いやbufferSwitch()か・・・まぁその辺
- 274 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 00:30:37 ]
- 確かにここらへんが怪しいとは思うんだけど、どういじくったら音を出せるのかがわからない。
asioCallbacks.bufferSwitch = &bufferSwitch; asioCallbacks.sampleRateDidChange = &sampleRateChanged; asioCallbacks.asioMessage = &asioMessages; asioCallbacks.bufferSwitchTimeInfo = &bufferSwitchTimeInfo; 誰か音を出す方法を教えてくださいな。
- 275 名前:デフォルトの名無しさん mailto:sage [2006/10/12(木) 00:57:17 ]
- あ、ごめんinit()は自作関数だったかもw 昔書いたのを適当に眺めて書き込んだんで・・・
再生するサンプルソースがあると思うけど要するにその辺のcallback定義して開始すると ASIOのsystemからbufferSwitchTimeInfo()が呼ばれる。 その中で要求された形式に応じてbuffを充填して戻る 無音だかを再生するサンプルがあると思うんで〜Info()にbreakpoint貼って 要求されたcaseのmemsetを適当な波形を返すようにしてみるとか、その辺からやってみては。
- 276 名前:デフォルトの名無しさん [2006/10/25(水) 23:43:20 ]
- bufferSwitchTimeInfo()をいじくったら音が出るようになったよ!
さんくす! でもなんか音が途切れ途切れ。。。ブツブツだわ。 どうしたらスムースになるんだ? 誰かわかる人助けてください。
- 277 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 04:28:22 ]
- まだキャプチャーした音を再生するところまでしか作ってない「ヘボな段階」なので、
ファイル書き出し機能を作ってから聞けばいいのかもしれないのですが、 書き出し機能を作るときからおおまかな部分について知っておいた方がいいかなと 思いましたので、質問です。 キャプチャして録音しながら DVDレコーダなんかでよくあるタイムシフトの機能を扱いたいと思っているのですが、 どういった手順になるのでしょうか?おおまかな流れについて教えて下さい。 waveもしくはmp3をストリームして録音しているときに単純にそのファイルを 開いて再生するだけなのでしょうか? それとも、何かあらかじめ準備しなければならいことがあったり 特別な手順を踏んでタイムシフト用のファイルを作ったりしないといけないのでしょうか? mp3でタイムシフトやるときとwaveでタイムシフトやるときのファイル形式による懸念点などありましたら、 それも教えて欲しいです。mp3でやってもwaveでやっても一緒なのでしょうか?
- 278 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 09:19:09 ]
- Adudacity でタイムシフト再生なんか出来たか?
- 279 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 09:20:00 ]
- あ、Audacityスレとまちがえてかいてしまったごめんよ。
- 280 名前:デフォルトの名無しさん mailto:sage [2006/10/28(土) 12:41:11 ]
- >>277
FILE_SHARE_READでCreateFile()してやればいいんじゃね? 録音用のHANDLEと再生用のHANDLEで別にCreateFile()すればseek位置で干渉しないし。 wavはLR&チャンネルのバウンダリさえ気をつければどっから再生しても問題無いけど、 mp3は[4バイトのヘッダ+データ]のブロック単位でシークする必要がある。 てかmp3使うならエンコード/デコードのライブラリが必要。 フリーで転がってるソースはエンコはgogo、デコードはmpg123辺りかなぁ。
- 281 名前:277 mailto:sage [2006/10/28(土) 18:54:05 ]
- >>280
どうも、ありがとうございます。 それほど複雑な処理を必要としないさそうで、ちょっと安心しました。 waveとmp3でやり方が大きく違いそうだということもわかりました。特にmp3は敷居が高そうですね。 とりあえずwaveでタイムシフトを実現させることを目指そうと思います。 こんなプログラムは探せばに既にあるんでしょうけど、勉強を兼ねて自分でやってみようと思います。 ありがとうございました。
- 282 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 18:55:56 ]
- ADPCMの詳しい資料ってありませんか?
- 283 名前:デフォルトの名無しさん mailto:sage [2006/11/02(木) 20:40:10 ]
- CCITTの規格書とかお金出せば買えるよ
- 284 名前:デフォルトの名無しさん mailto:sage [2006/11/03(金) 01:30:14 ]
- >> 282
何が知りたいの?
- 285 名前:デフォルトの名無しさん [2006/11/04(土) 15:55:44 ]
- OpenALでサウンドプログラムを組んでみたいんだけど入門的なサイトって無いだろうか?
- 286 名前:デフォルトの名無しさん [2006/11/05(日) 00:01:03 ]
- linuxでC言語使ってサウンドプログラミングやってます。
録音したデータにFFTをかけたいんですが、 データの渡し方が分かりません。 adlib.rsch.tuis.ac.jp/~akira/unix/ossprog/src/short/parrot.c 録音は↑のプログラムをベースにしています。 どなたかアドバイスをお願いします。 説明不足だったらすみません。
- 287 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:14:45 ]
- >>286
> linuxでC言語使ってサウンドプログラミングやってます。 > 録音したデータにFFTをかけたいんですが、 > データの渡し方が分かりません。 ここで聞くような内容じゃないだろ。 プログラム初心者板にでも行った方が幸せになれる。
- 288 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 00:25:33 ]
- read したとき bufに指定のフォーマット、サイズで
データが納まってるのでそれを処理すればよい。
- 289 名前:デフォルトの名無しさん [2006/11/05(日) 01:01:41 ]
- >>287
すいません。 >>288 ありがとうございます。 解決しました。
- 290 名前:デフォルトの名無しさん [2006/11/05(日) 02:00:31 ]
- あるmp3のファイルの波形データをサンプリングするフリーソフトってありますか?
time WavAmp 1 1.235 2 -0.256 3 8.242 4 -0.319 … みたいな感じで、テキストデータに保存できるソフトです
- 291 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 02:12:00 ]
- >>290
質問する板が違います 二度と来るな
- 292 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 02:13:06 ]
- またきちゃいました(>_<)
質問する板ってどこ?
- 293 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 02:41:50 ]
- >>292
自分で作ればこの板でおk
- 294 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 03:12:10 ]
- >>293
実は自分でもジャンルがよく分かってないんです。 フーリェ変換や波形分析するのはここのスレの人なのかなって スレ一覧見て思ったので聞いてみたのです。 完全体セルの「笑えよベジータ」って声があるんだけど、それをフーリェ変換したら どうなるのかなと思ったもので。 フーリェ変換のプログラムは持っているので、 あとは時間きざみごとの波形データが数値として取れれば…
- 295 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 03:18:53 ]
- >>294
wavか何かに変換すればいいんじゃね?
- 296 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 03:51:06 ]
- >>295
wavに変換すれば解析可能なソフトがあるってことですかね? 何しろ、サウンドプログラミングはズブの素人なのです。 確か、数秒のファイルでもwavにすると500KBくらいになりますよね。 プログラムのソースで500KBって結構なデータ量になります。 音楽データにどのような情報が入っているのかは分からないのですが、 ただ、欲しい情報は「波のきざみ幅」と「きざみ幅ごとの振幅」の 二つのデータなのです。 単純に波の振幅と刻幅を抽出するソフトがあれば紹介してもらいたいのです。 プログラム板一覧を見て、このスレの人なら知ってる人がいるのかなと思って質問しました。
- 297 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 03:59:53 ]
- ソフトウェア板辺りで質問スレ探すかLinux板で同系列のスレ探しなさい。
- 298 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 04:02:59 ]
- 了解しますた。
- 299 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 19:18:27 ]
- フリーソフトを使う事をプログラミングだと思ってるのか
- 300 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:32:01 ]
- >>299
バイナリから直に数値データって取れんの?
- 301 名前:デフォルトの名無しさん mailto:sage [2006/11/05(日) 22:59:31 ]
- >>300
普通に取れるけど、取れても取れなくても、 フリーソフトを使う事をプログラミングとは言わない。
- 302 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 12:40:47 ]
- >>301
普通ってどうやるの?
- 303 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 13:06:21 ]
- >>302
普通にバイナリファイルを読み込めばいい。 バイナリファイルの読み込み方はスレ違い。初心者スレにでも池。 音声ファイルのフォーマットが知りたければぐぐれ。
- 304 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 13:20:44 ]
- >>303
どの言語がお勧め?
- 305 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 13:45:23 ]
- >>304
日本語でおk
- 306 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:00:48 ]
- >>304-305
吹いたw
- 307 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:28:46 ]
- >>303
ほんとに知ってて言ってるのこの人?
- 308 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:39:36 ]
- >>294
ソフトを自分で作ってやるなら 1、とりあえずMP3ファイルを 16bitWAV形式に変換して保存しよう(ツールは探してね) 2、WAV形式のファイルをバイナリでオープンして、(RIFF+チャンク)で検索してデータを取り出そう 3、かけたいFFTのサイズ以下になるように窓関数をかける -->判らなければ検索してね 4、FFTをかける(ステレオなら2変数を複素FFTでやる方法を使うといいよ) 5、周波数成分毎に絶対値を出しそう FFTは周波数は比例軸で出るので、大抵は対数軸にしたいと思うので、ココがまあキモになるね
- 309 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 14:51:08 ]
- で、たぶん >>294のやりたいのは
短時間FFTを使って ソノグラム表示もどきをやりたいのだと思う
- 310 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 15:12:33 ]
- >>309
短時間FFTはなにかまずい?
- 311 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 15:26:54 ]
- >>308
あ、ありがとうございます。 これで作業の方針をきめられそうです。 御迷惑お掛けしました。 ありがとうございました。
- 312 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 16:03:51 ]
- >>310
まずくはないよ。 等Qの特性で分割して表示したいとか言い出すと、短時間FFTだと逆にメンドクサイだけで
- 313 名前:デフォルトの名無しさん [2006/11/06(月) 17:24:35 ]
- OpenALのプログラムを勉強したいのですが初心者にも参考になるサイトはありませんか?
環境はOSがWindows2000,IDEはVisualStudio2003です。 まだOpenALのSDKは入れていないのでそのあたりから解説してくれているサイトであると助かります。
- 314 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:26:21 ]
- ググレカス
- 315 名前:デフォルトの名無しさん mailto:sage [2006/11/06(月) 17:31:40 ]
- オープンソースだからソース見ればいいよ
- 316 名前:デフォルトの名無しさん [2006/11/10(金) 16:31:33 ]
- WindowsVISTAに移行することを考え、今までのDirectSoundベースで組んできた
プログラムを全てOpenALに以降することを考えています。そこでお聞きしたいのですが、 DirectSoundベースのプログラムはクライアントPCにDirectXがインストールされていれば ハードウェアだろうかソフトウェアだろうが問題なく音を再生することが出来ました。 これがOpenALに移行するとクライアント側のPCには最低限何をインストールしておく 必要があるでしょうか?またクリエイティブのサウンドカード(EAXをサポートしたもの)、 その他のサウンドカード、オンボードサウンド、で違いというのは生じますか?
- 317 名前:デフォルトの名無しさん mailto:sage [2006/11/10(金) 22:49:27 ]
- www.openal.org/lists.html
公式のメーリングリストで聞けば?
- 318 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 01:48:49 ]
- a.midとb.midを同時再生するプログラムを書きたいのですが、
変数を二つ用意しても、二つ目を再生するところで 「指定したMIDIデバイスは既に使用されています。開放されるのをまってください」 という警告が出てしまいます。 mmsystem.hを使う方法で解決策はないでしょうか。
- 319 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 02:11:07 ]
- >>318
MIDIデバイスを二つ用意したら?
- 320 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 02:16:24 ]
- >>319
MIDIデバイスを二つ用意とはどのようにすればよいのでしょうか? ハード面でということですか? 環境としては、PCにMIDIインターフェースをつなぎMIDI音源で音を鳴らしてます。
- 321 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 03:51:29 ]
- >>320
まず環境を書け。 使ってる言語、OS、再生に使用してるライブラリ、最低このくらいは質問時に書いとけ。 それとデバイスの意味がわからないならそこから調べ直せ。 MIDIはWAVEと違って同一デバイスに複数ストリームを流せないから、 MIDIOUTが2ポートあるデバイスで、例えばSC88なりに別々に流すしかない。
- 322 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 23:47:20 ]
- 実験音楽的に、二つのmidiをマージしたいって事では…?
- 323 名前:デフォルトの名無しさん mailto:sage [2006/12/01(金) 00:35:28 ]
- まぁそれだったら流す前に自分でトラックをマージしちゃえばいいだけのことだけどね
- 324 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 02:15:53 ]
- windows系ですけど、
MM_WOM_DONEなどのメッセージ処理中はwaveOutWriteとか使えないって記述をたまに見るんですけど実際どうなんですか。
- 325 名前:デフォルトの名無しさん mailto:sage [2006/12/13(水) 07:45:02 ]
- windows系といっても色々。
昔は割り込み=コールバックだったり タスクスイッチされてなかったりと
- 326 名前:324 mailto:sage [2006/12/14(木) 03:35:29 ]
- とりあえず95以降。
95で大丈夫ならその後でも大丈夫な気がするんですけど。
- 327 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 10:05:40 ]
- >>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サンプルをバッファしといて毎フレームでバッファ内を全サーチ という方法で作ったところ、ちょっと重いです。高速な方法はないでしょうか。
- 330 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 18:26:50 ]
- >>329
1.過去の最高値と今の値を比較し、今の値が高ければ最高値を更新し、カウンタを0に 2.カウンタをインクリメント 3.カウンタが一定値を超えたら、過去nサンプル中の最高値を検出し、カウンタをそこからの値に ってやりかたはどう? nの値によっては比較回数が減るよ。
- 331 名前:デフォルトの名無しさん [2006/12/14(木) 18:53:14 ]
- >>330
おー、なるほど、すばらしいです。 聞いてよかった。早速試してみますー
- 332 名前:デフォルトの名無しさん mailto:sage [2006/12/14(木) 22:04:56 ]
- >>330
ご報告、 入力波形の傾向によっても負荷の具合が変動するってことになりますが 平均して初めの方法よりかなり速いです。まじありがとうございます。
|

|