サウンドプログラミング3

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
音のプログラミング処理について語りましょう

各エフェクタの組み合わせとか、
プログラミング外の話題はDTM板の方がいいよ


サウンドプログラミング2
http://pc8.2ch.net/test/read.cgi/tech/1091054082/

サウンドプログラミング
http://pc5.2ch.net/test/read.cgi/tech/996171508/
2デフォルトの名無しさん:2006/04/21(金) 20:45:56
可哀想に。誰も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 {    |彡へ .}  ヽ、::::::::::::....
4デフォルトの名無しさん:2006/04/21(金) 20:49:57
Haskellでは配列が使えませんけれど、音声を扱うときどうすればいいんですか?
5デフォルトの名無しさん:2006/04/22(土) 20:44:54
>>4
配列は使えるよ。
6744:2006/04/24(月) 17:09:42
早速ですがタイムストレッチ(音程を変えずに再生速度を変更)教えてください
7デフォルトの名無しさん:2006/04/24(月) 17:36:48
サウンドプログラミングの推薦図書を列挙してください
8デフォルトの名無しさん:2006/04/24(月) 17:52:49
Oh!FM TOWNS
9デフォルトの名無しさん:2006/04/24(月) 19:08:07
>>6
・音程を変えずに、再生速度を変更する場合と
・変更した再生速度に合わせた音程に変換する のどちらかを行う

その方法には2つある
・周波数で変換する D-FFTを使い 周波数軸で変換する事 (苦労の悪いに音質はそう良くない)
・時間軸で変換する。 過不足が起きるので、それを合わせる。

時間軸で変換する方が簡単だろう。
10デフォルトの名無しさん:2006/04/24(月) 19:14:35
・音程を変えずに、再生速度を変更
・時間軸で処理する方法

1、データを短時間のブロックに分割する
2、そのブロックに窓関数をかける(台形窓で十分)
   分割単位は窓をかけてる区間だけオーバーラップする事になる
3、再生速度を上げる場合、ブロックを間引く
4、再生速度を下げる場合、ブロックを2度利用する
11デフォルトの名無しさん:2006/04/24(月) 19:29:59
再生速度を上げたい場合
 A B C D E
  _ ↓ ↓ ↓
/A\_ ↓ ↓
   /B\_ ↓
       /C\_
          /D\

これから、B、D を間引いて
 _
/A\_
    /C\_
        /E\

A,B,C,D,Eの時間は等間隔である必要はない。
間引いた時間の比率をコントロールすればいい。

違和感を減らすには、
 1、無音期間を率先して間引く
 2、繰り返し期間を検出したら、その周期の整数倍に合わせて間引く

と言う処理を入れる 
12デフォルトの名無しさん:2006/04/24(月) 19:36:29
再生速度を下げたい(ゆっくり)の時も同じ
  _ 
/ A\__
   / B \__ 
       / C \
AとBがオーバラップする時間を作って切り出してやる=部分的に2度利用させる。

これも、
1、無音期間を検出したら積極的に無音を延ばす
2、繰り返しを検出したら、その周期の整数倍に合わせてオーバーラップさせる

という方法で違和感を減らせる
13デフォルトの名無しさん:2006/04/24(月) 19:37:50
周波数領域で処理しないピッチ変換なんて音ワルス(´・ω・`)
14デフォルトの名無しさん:2006/04/24(月) 20:01:13
ワルスの不思議な旅。
15デフォルトの名無しさん:2006/04/25(火) 19:56:51
続いてリアルタイムのピッチシフト(再生速度を変えずに音程を変更)教えてください
16デフォルトの名無しさん:2006/04/26(水) 01:05:31
その方法には2つある
・周波数で変換する D-FFTを使い 周波数軸で変換する事 (苦労の悪いに音質はそう良くない)>>15
17デフォルトの名無しさん:2006/04/26(水) 07:12:04
周波数軸で変換する方法は
・全体を一度に収まる大きなサイズのFFTで行う方法
・ブロック単位に短時間FFTで行う方法
に別けられる。 
 ピッチシフトは周波数軸での単なるシフトではなく、指数的移動なので、結構計算コストは大きい。

なお、リアルタイムという事になると短時間FFTという事になるが、
オーバーラップさせて窓関数をかけてブロックをつないでゆくと、つなぎ目で位相が合わなくなるので
違和感が発生する。 位相を合わせてつなぐと、今度はノイズが変質する。



時間軸でノイズ+サイン波を加算した場合も位相があえばサイン波は2倍になる=位相を合わせれば
按分加算出来るが、ノイズは√2倍にしかならないからノイズ音量が波打つ現象が起きるので
なかなか難しい問題だ。
18デフォルトの名無しさん:2006/04/26(水) 07:24:00
時間軸で処理する場合、
 「再生速度を変えずに音程を変更」するのではなく
 「再生速度を変更して音程を変更」し、それによって生じるデータの過不足を 上で書いたような
 ブロック(granul)への分割と統合で補うという事になる。

再生速度を変更するには、上げるにも下げるにも強力なLPFが必要になる。
安いキーコンではLPFを補間で代用してる為に音質が悪い
19デフォルトの名無しさん:2006/04/26(水) 13:20:39
リアルタイム論争の悪寒。

質問者は「リアルタイム(レイテンシ50msec以内)」みたいな書き方キボン。
20デフォルトの名無しさん:2006/04/26(水) 13:29:57
心配しなくても、ピッチシフトはリアルタイムに出来ない事は簡単に理解できるから、それに噛み付いたらバカだと判るから
21デフォルトの名無しさん:2006/04/26(水) 13:31:09
リアルタイムじゃなくてゼロレイテンシの事ね
22デフォルトの名無しさん:2006/04/26(水) 16:55:29
FPSとかで銃の連射音を再現するときって、単発の発射音を発砲するたびに重ね合わせていく
という方法が一般的なのかな?でもそれって発射速度が速いマシンガンとかだとものすごい
勢いでサウンドカードの同時再生音(64音ないしは128音)を消費していくような気がするんだけど・・・
23デフォルトの名無しさん:2006/04/26(水) 17:00:00 BE:15528342-
そんな用途でFPSを使うほうがおかしい。
24デフォルトの名無しさん:2006/04/26(水) 17:01:38
>>22
同時発音数を制限しろよ。

それから、マシンガンは、トリガー部、ループ部、リリース部の3つのサンプルを使え!
そしたら発音数は1つ。
2522:2006/04/26(水) 17:08:43
>>24
バルカン砲とかだと
トリガー部、ループ部、リリース部
に分けてつなげるのが得策かもしれないけど、それよりレートが低い一般的なマシンガンだと
かえって各部の接続部分で粗が目立つような気もするんだけど・・・

> 同時発音数を制限しろよ。

これはどういうこと?
26デフォルトの名無しさん:2006/04/26(水) 18:01:40
>>25
単発が長くてもたくさんの発射音のうち気になるのは聞こえ始めと最後の消えゆく部分だけってこと。
どうせ秒3発位で一発最大8秒くらいの音でも連発でならしたら消音部分でいきなり消えてもあんまり気にならない。
2722:2006/04/26(水) 18:11:34
>>26
なるほどね。
それだったら次の発砲が生じたらその一つ前の発砲音は消してしまうのも手じゃない?
それならどんなに発射速度の速いマシンガンでも常に同時発音数は1のままでしょ。
28デフォルトの名無しさん:2006/04/26(水) 18:20:53
>>27
そういう風に調整することもある、要するにリソースと効果音の持っている性質とのかねあい。
PCエンジンとか古いゲーム機だと音楽用に6音+効果音用に2音で当てて垂直同期毎の発音リクエストを優先度別に取捨したあと
現在鳴っている音より優先度が高いか等しい時に新規の音を鳴らしてた。

29デフォルトの名無しさん:2006/04/26(水) 18:26:58
最近の次世代ゲーム機だったらあまりそういう心配しなくてもいいんでね?
30デフォルトの名無しさん:2006/04/26(水) 20:57:10
ドラム音源とかでも普通に考えたら同時発音数制限してるだろ
最近質問するまでもないレベルの低いのおおいな
31デフォルトの名無しさん:2006/04/26(水) 21:38:44
>>30
22は厳しい制限数の中でどうやりくりしていけばいいのか聞いてるんだろ。
32デフォルトの名無しさん:2006/04/28(金) 02:08:03
>>27
> それならどんなに発射速度の速いマシンガンでも常に同時発音数は1のままでしょ。

鳴っていた音を消音して次の音を鳴らすとして、
消音したい音をいきなり消すとノイズが発生する(可能性がある)よね。
それに対処するにはとても短い時間であってもフェードアウトさせる必要が
あるんだけど、そのフェードアウト中にはもう次の音が鳴っているので、
その瞬間だけは同時発音数は 2 になるよ。
33デフォルトの名無しさん:2006/05/03(水) 02:20:32
レーシングゲームとかのエンジン音ってどうやって再現しているんだろう?
どのゲームもだいたいアイドリングの時からエンジンの回転数が上がって行くにつれ
なめらかに音が高くなっていくようなんだけどどうやって実現しているのか不思議。

エンジンがある回転数の時の音を録音してその音源ファイルの再生速度を調整する
ことでアイドリングの時や高回転時のエンジン音も再現できるのかな?
34デフォルトの名無しさん:2006/05/03(水) 19:17:29
ピッチで上下しつつ、
低回転時から高回転時の音にクロスフェードしてるんじゃないの?
エンジン音なんか割とノイズ的でファジーな音だから複数混ぜてもそんなに気にならないと思う

しかしここ全然プログラムの話題出ないな・・・
35デフォルトの名無しさん:2006/05/03(水) 20:07:19
それじゃプログラムの話題を一つ。
Visual C#で特定のボタンを押したら複数のwaveファイルを同時に、ないしは多少の時間差をつけて
ならすことって可能だと思う?可能だとしたら何個くらいのwaveファイルまで同時にならせることができるだろうか?

またサウンドカード毎にプログラムをチューニングする必要ってあると思う?
36デフォルトの名無しさん:2006/05/04(木) 06:28:28
聞く前に試してみるといいと思うよ。
サウンドカード非依存にしたいなら、ミキサを自分で書けばいいし。
37デフォルトの名無しさん:2006/05/04(木) 08:30:37
ちょっと教えてほしいのですが、
フーリエでLPFを書くのはどうすればいいのでしょう。
たとえば、freq=44100Hz、M=1024でDFTして周波数領域に変換したとして、
cutoff_freq=11025HzのLPFを作る場合、単純に[0〜M / 4]の複素数配列だけ残して、
あとは0+0iで埋めればいいの?
わかる人教えてください。
3837:2006/05/04(木) 08:34:25
一応オーバーラップの手法とかは無視して、全量のDFTとしての答えで大丈夫です。
なんだかこのやりかただとレゾナンスが効いてる笑。
39デフォルトの名無しさん:2006/05/04(木) 11:55:43
>>37 のようなものでもそれらしい結果になるが、ブロック同士が繋がらない
 結果、11025/1024の整数倍の倍音が発生し 特有の変調音が発生する

フーリエ変換でLPFを作るなら

1、全部のデータ+余白が入るサイズでFFTして、 得られた結果=周波数領域に窓関数をかけて 逆FFTする
  窓関数は余白の大きさにより鋭敏にする

2、短時間FFTでリアルタイム的に処理する場合は、
  FIR−LPFを設計士、それをFFTしておき
  データにはFIR係数サイズ分の余白(ゼロで埋めておく)をつくり
  周波数軸で、掛け算して逆FFT するというのを繰り返す
40デフォルトの名無しさん:2006/05/04(木) 12:21:06
>>39
おお…、お詳しい方が。とりあえず試してみます。
どうもありがとうございます。
41デフォルトの名無しさん:2006/05/04(木) 13:02:24
短時間FFTの場合は、
 ようするに、FIR-LPFをFFTで掛け算のコストを下げてやろうという事

FIR-LPFをまともに実装すると 1サンプルあたりFIRのタップ数だけ積和が必要

FFTを使えば計算量が減らせられる。
ただし、FFTは元信号が繰り返す事を前提にしてるから
FIR−タップ数だけゼロの領域を入れてやって、その影響が無い領域を作ってやる必要がある


で、巧くタップ数とサイズと、ステレオ信号をどう巧く捌くか
設計しないと計算量が増えかねないから注意ね。
4235:2006/05/04(木) 15:03:25
>>36
> 聞く前に試してみるといいと思うよ。
> サウンドカード非依存にしたいなら、ミキサを自分で書けばいいし。

今まで音を再生するプログラミングって作ったことが無かったんだけど
C#で多数のwaveファイルを、かなり高精度なタイムスケジュール
(二つのwaveファイルを100msの時間差をつけて再生する等)で
管理するにはどういう手段(関数)を使ったらいいと思う?

ちょっとググッてみたら
PlaySound(もしくはsndPlaySound)関数
というのがあるらしいけどこれで複数のwaveファイルを同時再生させること
って可能かな?
43デフォルトの名無しさん:2006/05/04(木) 15:58:07
最近のwaveデバイスは複数同時に開けられるしDirectXとかも内部で加算処理はしてくれるけど
自前で加算するのが楽だと思うけどなあ・・・・

まあどうしてもC#の場合は、どんなライブラリがあるかなんて探し物的な
所で悩んでしまうんだろうけど・・・・あんまり書くと荒れるから止めとくわ
4435:2006/05/04(木) 16:01:46
DirectSound使わずに、自前で加算していった方が楽ということか( ゚д゚)・・・
45デフォルトの名無しさん:2006/05/04(木) 16:16:20
自前で加算すれば、タイミングもオーバフローの処理(AGCを入れたり)も好きなようにコントロール出来るからさ
いちいちライブラリの都合に合わせて悩むより、そこらへん楽だよ
4635: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データとして作っておかないと対応できないのかな?
音の再生を開始した後に急遽新しい音を追加で再生させたり、いらなくなった音
の再生を途中で停止させる場合には向いていないかな?
47デフォルトの名無しさん:2006/05/04(木) 18:38:46
低レベルオーディオを使っても
ある程度のブロック転送となるので、
急遽音を止めたいというような場合にはその用意してるブロックサイズ*ブロック数 分だけ遅延する事になります

それはしょうがないと我慢出来ないなら
ハード依存の高い方法になるんじゃないの?
48デフォルトの名無しさん:2006/05/04(木) 22:21:15
>>46
致命的なミスしている。
もっとマシなとこを参考にした方がいいよ。
4935:2006/05/05(金) 00:48:50
>>47
う〜ん、ダイナミックに音の再生を制御したいのであれば
DirectSoundを使うしかないかな(´・ω・`)

>>48
ここはどう?C++だけど参考になるかな?
http://dencha.ojaru.jp/programs/pg_wave_01.html
50デフォルトの名無しさん:2006/05/05(金) 06:05:45
>>49
Javaでもサウンド扱える位だからC#なら速度がそれほど問題にならんと思うと考えてがんばってみそ。
51デフォルトの名無しさん:2006/05/05(金) 10:41:33
そんなミリ秒のタイミング考えているシステムでゴミ集めが始まったら台無しというのは・・・・
52デフォルトの名無しさん:2006/05/05(金) 13:04:34
>>51
それをいったらWindowsは使うなということになる(w
53デフォルトの名無しさん:2006/05/05(金) 13:09:34
なになに? Windows批判? あは
54デフォルトの名無しさん:2006/05/05(金) 13:21:20
そうか、DOSに回帰汁!ってとことか!
5535:2006/05/05(金) 17:45:02
C#でのwaveファイルの再生方法、ようやく見つけてきた(;^ω^)・・・

http://msdn2.microsoft.com/ja-jp/library/ms173187.aspx

ただ問題はこの方法で再生中のwaveファイルを任意の時間に停止させたり
複数(あるいは同一)のwaveファイルを時間差をつけて多重再生できるかなんだよな・・・

先は長い(´・ω・`)・・・
56デフォルトの名無しさん:2006/05/05(金) 18:20:29
それは無理だろ
DirectSound使うか自前で低レベルオーディオを使うかだな
57デフォルトの名無しさん:2006/05/05(金) 18:21:22
いや、無理じゃないか。 PlaySoundを実行するだけのタスクを複数作ってコッソリ起動してやればいけるな
5835:2006/05/05(金) 18:27:02
やはりDirectSoundは避けては通れぬか。
こりゃぁ大変だ、GW中に勉強しきれるかな(´・ω・`)・・・
59デフォルトの名無しさん:2006/05/07(日) 01:23:40
FFT解析後に周波枢軸に置き換えられたデータをさらにFFTしたらどうなるかな
意味は分からんがなんかおもしろそう
6035:2006/05/07(日) 01:29:01
ケプトスラスムとかいう手法だっけ?
意味はようわからんけど。
61デフォルトの名無しさん:2006/05/07(日) 08:19:54
再度FFTすれば逆FFT結果と同じだよ
ケプストラムは対数化してるから、ゼロ点が思いっきり強調されるってだけ
62デフォルトの名無しさん:2006/05/07(日) 08:25:19
DirectSound でも、液晶テレビでテレビゲームするようなもんで
63デフォルトの名無しさん:2006/05/07(日) 12:04:25
>>61
FFT→FFT→FFT = IFFT ?
64デフォルトの名無しさん:2006/05/07(日) 12:11:47
>>63
FFT→FFT = 逆FFT*係数調整
FFT→FFT→FFT = FFT *係数調整
65デフォルトの名無しさん:2006/05/10(水) 08:54:50
シームレスに複数の曲を再生させるには、どうしたらいいでしょうか?
66デフォルトの名無しさん:2006/05/10(水) 10:10:15
>>65
うまいDJの演奏を参考にする
67デフォルトの名無しさん:2006/05/10(水) 19:22:02
波形データをバッファリングするようにして、ケツとアタマをつなげればよいだけの話
68デフォルトの名無しさん:2006/05/19(金) 12:12:00
クロスフェードさせる
69デフォルトの名無しさん:2006/05/25(木) 07:11:07
waveからデータを取り出してスペクトルを出すような
処理をかけようと思っているのですが、そういう場合どんな
言語とライブラリの組合せがおすすめ、または使用されているでしょうか?
 C + spLibs  でやろうとしたのですがコンパイルがうまくいかなかったため
Javaに変えようと思っているのですが。。
70デフォルトの名無しさん:2006/05/25(木) 07:25:35
C++でええやん
71デフォルトの名無しさん:2006/05/25(木) 07:37:24
好きな道具でやればいいじゃない。
データを取るのも
スペクトルを出すのも、
ライブラリが必要なほど複雑な事じゃない。
というかライブラリの使い方を読む時間で作れてしまう

自分はこういうのはDelphiでやるけどね
72デフォルトの名無しさん:2006/05/25(木) 14:49:40
できればC++がいいかなと思っているのですが
その場合waveを読むにはどんなライブラリを使うのがいいのでしょうか?
73デフォルトの名無しさん:2006/05/25(木) 14:52:08
C++でもfopen して freadが一番いいんじゃない? 
74デフォルトの名無しさん:2006/05/25(木) 15:00:05
istream使えよ
75デフォルトの名無しさん:2006/05/25(木) 16:00:18
コンパイルできなかった原因ちゃんと調べた?
76デフォルトの名無しさん:2006/05/25(木) 16:17:20
>>71
そういえば、Delphiでよさげなライブラリてある?
77デフォルトの名無しさん:2006/05/25(木) 16:23:06
C + libsndfile
78デフォルトの名無しさん:2006/06/07(水) 05:21:50
>77
LGPLってことは作者に報告義務無しで商用OKってこと?
サイト翻訳したんだけどチョトわかりません。

BASSとかFMODはどういうものでしょう。安定してますか?
79デフォルトの名無しさん:2006/06/07(水) 05:50:13
LGPLなら報告義務は無い。

ただし、LGPLなライブラリから静的リンクするコードは全てLGPLかGPLにして公開しないといけない。
LGPLなライブラリでDLLを作ってそのDLLはLGPLにしてソースを公開した上で、
DLLとリンクする本体はソースを公開しなくてもいい。
ただしその場合でもLGPLなライブラリについてちゃんとLGPLだということの説明と、
確かLGPLなライブラリのソースの入手できる場所を説明しとかなくちゃいけない。

LGPLはいちいち理解するのがめんどいよな。
80デフォルトの名無しさん:2006/06/20(火) 10:41:28
ゲームで使う効果音の.wavファイルがズラーっ載ってるサイトを探してるんだけど
キーワード「ゲーム .wav ライブラリ」で検索しても売りもんのCDやらなんやらしか引っ掛からん。
どこか良いところ教えてくれんじゃろうか。英語で書かれててもいいから。頼む。
81デフォルトの名無しさん:2006/06/20(火) 10:55:10
スレ違いどころかむしろ板違い
82デフォルトの名無しさん:2006/06/20(火) 12:10:07
CK_GAME_FACTORY
TAM_MusicFactory
Vector
■WEB WAVE LIB■〜 音と声のOnLine素材集
ザ・マッチメイカァズ
Area MIDI素材集
8380:2006/06/20(火) 13:47:42
>>82
おお、ありがd!

あ、それと…







>>81
こっちはサウンドプログラミングの一環としてやっとんじゃ、野垂れ氏ね、ヴォケ!
84デフォルトの名無しさん:2006/06/20(火) 13:51:16
>>83
このスレの住民は結構高尚なことが好きなんだよ。
試しにウェーブレット変換とか離散コサイン変換とか言ってみ。
面白いように話に乗ってきてくれるから(´・ω・`)
85デフォルトの名無しさん:2006/06/20(火) 14:09:05
>>83
そんなに顔を真っ赤にするなってwww

あ、それと…




>>83 は、やねうらお説
86デフォルトの名無しさん:2006/06/20(火) 14:39:03
うらおは今度からゲ製でやれや、な?
87デフォルトの名無しさん:2006/06/20(火) 15:38:55
ゲ製作技術板かDTM板向きの質問だったな
88デフォルトの名無しさん:2006/06/20(火) 15:53:36
>83
お前にふさわしいスレは↓だから、サウンドプログラミングの意味が解るまで二度と来るな。
【ゲ製作技術】ゲームを作るための素材を集めよう! Part2
http://pc8.2ch.net/test/read.cgi/gamedev/1113207836/
89デフォルトの名無しさん:2006/06/20(火) 19:58:04
うわ。
今までちょっと尊敬してたのに、
>>83はねえな。軽蔑した。
90デフォルトの名無しさん:2006/06/20(火) 22:48:21
>83
「サウンドプログラミングの一環」でやってる奴が素材すらマトモに見つけられないてwww
しかもスレ違いどころか板違いの質問、挙句逆切れ・・・

お前、センス無いからプログラマやめろ。
91デフォルトの名無しさん:2006/06/21(水) 01:14:57
音ネタがパクりならソースもコピペだろ
92デフォルトの名無しさん:2006/06/21(水) 19:24:31
もうそのくらいにしといてやれよw
93デフォルトの名無しさん:2006/07/04(火) 00:58:30
ホルマント周波数を求めて母音の判定を行おうと思っているのですが、
まずホルマント周波数をどこから求めていいのかわかりません。

/a/の波形をFFTした結果のスペクトルに対してピークを求めれば
それがホルマント周波数になるのでしょうか?
それともスペクトル包絡を求めた結果の曲線のピークが
ホルマント周波数になるのでしょうか?

やりたいことのために情報を集めていると短時間スペクトル解析というのも
出てきたり、振幅スペクトルを使えばいいのかパワースペクトルを使えばいいのか
周波数スペクトルを使えばいいのか混乱しています。
94デフォルトの名無しさん:2006/07/04(火) 07:25:10
他にケプストラムとか、PARCORや線形予測係数から求める方法とか、
色んな方法があるわけで、演算能力が足りる範囲で好きな方法を使えばいいとおもうよ
95デフォルトの名無しさん:2006/07/06(木) 07:06:00
まったくの初心者です。
サウンドプログラミングするには音響学のクラスも取る必要がありますか?
物理の音に関する部分だけで十分ですか?
数学は微分積分のI,II(多変数のは取ってないです)と線形代数と統計学は取ったんですけど
他に数学で必要なクラスはありますか?
他に何か取っておいた方がいいクラスはありますか?

質問多くてすみません。
96デフォルトの名無しさん:2006/07/06(木) 10:59:10

フーリエ変換を習っ(た|てる)?
97デフォルトの名無しさん:2006/07/06(木) 23:16:45
>>95
まずは体力だな。その次は腕力と暴力。学力は一番最後でヨシ。
9895:2006/07/07(金) 05:02:44
>>96
>フーリエ変換を習っ(た|てる)?

微分積分のIIでやりましたよ。軽くですけど。
あれをソラで(教科書見ずに)スラスラっと解けるようでないとダメですか?

>>97
工工エエエエエエェェェェェェ(゚Д゚) ェェェェェェエエエエエエ工工

でも、体力には自信あり。
ベンチプレスで100kg挙げられます。\(^o^)/
99デフォルトの名無しさん:2006/07/07(金) 05:47:05
>>98
スラスラと解く、というよりは、フーリエ変換が使えると
何がうれしいのかってことがわかる方が重要と思われ
100デフォルトの名無しさん:2006/07/07(金) 06:17:48
“メイドさん”が「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箇所です。人の多そうなところへ、
移動しながら配布していきます。コンパニオンさんもメイドさんも写真撮影可です。
-----
10195:2006/07/07(金) 06:57:23
>>99
フーリエ変換の概念は一応理解してると思います。
スラスラとは解けないですけど。

音響学や物理などは取らなくてもいいですか?
というより、このスレの住人で取った人はいますか?
何か詳しい方が多いようなのでいるような気がしてなりません。
102デフォルトの名無しさん:2006/07/07(金) 07:20:57
うるせえな
103デフォルトの名無しさん:2006/07/07(金) 07:25:35
自分で本買うなり調べるなりして勉強しようっつー考えは浮かばないのかね?
受身ならどのみち身につかんと思うよ。
104デフォルトの名無しさん:2006/07/07(金) 07:39:09
フーリエ変換とラプラス変換の相似性と Z変換の扱いが普通に出来れば問題ないよ
授業を取るのと勉強するのとは別の問題だろう
10595:2006/07/07(金) 07:43:17
>>104
なるほど。
ではそれらに集中して勉強しますね。
106デフォルトの名無しさん:2006/07/07(金) 07:49:18
教養としては音の波と光の波がどう似ていてどう違うのかとか語れるくらいには勉強してもいいと思うよ
107デフォルトの名無しさん:2006/07/07(金) 07:54:17
フーリエ変換やZ変換だけだと
音は3次元の空間を伝わってくるのだという事を忘れがちだよね
108デフォルトの名無しさん:2006/07/07(金) 15:00:05

スリットを通した干渉だけ習っても3次元空間の音の干渉って説明できますか?
109デフォルトの名無しさん:2006/07/07(金) 15:23:49
光は干渉すると完全に消えるけど音はそうじゃないよ。
音だと運動量か圧力のどっちかが小さくなるだけ。
110デフォルトの名無しさん:2006/07/07(金) 15:46:57
んなぁ〜こったない
111デフォルトの名無しさん:2006/07/07(金) 16:47:06
簡単に違いを言うと

電磁波は進行方向を軸にした回転が伝わってくる(偏波は2つの回転が組み合わさったもの)
音は、進行方向の振動
112デフォルトの名無しさん:2006/07/07(金) 17:06:12
>>110
光のように空間上のスリットで干渉して音がホントに消える事はない。
ただし、検出器は圧力か運動量のどちらかを検出するので、片方だけを捉えれば消えたという事になる。

だからスリットではなく管として、管から外に音が出るかどうかのようにすれば 消すことは出来る


たとえば、クインケ管で実験すればいい、
左右が同じ長さの時に運動量変化は最小になるが圧力変化が最大だから外に音が出る
左右が半波長だけズレると、圧力変化が最小になる為に管から外に音は出ない。
しかし、その繋ぎ目では運動量変化は最大の点で
管の中に運動量変化を取る検出器を入れればそこでは最大音量となっているだろう
113デフォルトの名無しさん:2006/07/07(金) 19:31:32
光だってEとBの両方を考えれば干渉したって完全に消える地点は無いんだがな。
114デフォルトの名無しさん:2006/07/07(金) 20:30:36
>>113 電磁波の場合、>>111のイメージの通り、
 電場、磁場の両方を交換しながら伝わってくるわけで、
 その方向は進行方向に垂直だから、位相=回転角なわけで、位相が合えば両方消えるよ
115デフォルトの名無しさん:2006/07/07(金) 20:46:32
>>114
電場と磁場の両方が打ち消すためには2本のビームが平行に交わらないと
(つまり一致しないと)完全には消えないよ。2本のビームに角度差があれば
どちらかは残る。
116デフォルトの名無しさん:2006/07/07(金) 22:20:28
んなぁ〜こったない
117デフォルトの名無しさん:2006/07/07(金) 22:35:22
>>115
どっちかが残るという事は、電場だけで振動する波がありえることになるよ。
電場が振動するならその垂直方向に自動的に磁場が発生するわけで、単独振動は無理さ。
118デフォルトの名無しさん:2006/07/07(金) 22:49:41
線形システムにおけるベクトルの合成的にそんなことはあり得ない
119デフォルトの名無しさん:2006/07/07(金) 23:34:59
干渉が起きるのはそこで観測するからだけど、
観測しないなら消えるだの消えないだのの議論にそもそも意味がないわけで、
と考えると、なかなか難しい話だな
120デフォルトの名無しさん:2006/07/08(土) 00:36:50
ヘッドホンで再生する音の上下方向の位置制御ってどうやるのですか?
121デフォルトの名無しさん:2006/07/08(土) 00:51:45
つ頭部伝達関数
122デフォルトの名無しさん:2006/07/08(土) 02:55:15
(´-`).。oO(やっぱりしっかり物理を勉強した人達なんだ、ここの住人は…)
123デフォルトの名無しさん:2006/07/08(土) 03:17:31
他人の事なんてどうでもいいだろ?
124デフォルトの名無しさん:2006/07/08(土) 04:10:53
>>123
つ「人の振り見て我が身を直せ」
125デフォルトの名無しさん:2006/07/08(土) 04:30:26
>>124
流れからすると、それは的外れだ。
126デフォルトの名無しさん:2006/07/08(土) 04:34:50
>>125
んなぁ〜こったない
127デフォルトの名無しさん:2006/07/08(土) 04:39:14
空気の読めない奴は困る。
128デフォルトの名無しさん:2006/07/08(土) 04:40:45
>>127
んなぁ〜こった(ry
129デフォルトの名無しさん:2006/07/08(土) 10:16:55
>>121
バイノーラルの測定文献って3つ位あるけどホロフォニックみたいな臨場感のある再生
のデータってないんだよね。
130デフォルトの名無しさん:2006/07/21(金) 04:50:47
質問なのですが、C#でVSTプラグインを作ることは可能なのでしょうか。
もし出来る場合、実行時の速度以外に何か問題が発生する可能性はあるのでしょうか。
131デフォルトの名無しさん:2006/07/21(金) 10:02:43
>>130
可能。問題点は、SDKを自力で修正する必要があること。
132デフォルトの名無しさん:2006/07/21(金) 13:11:01
>131 ご返答ありがとうございます。
さらに質問で申し訳ないのですが、SDKを自分で修正するというのは、どういった箇所になるのでしょうか。
SDKのAPIクラス自体を.NETに対応させる必要があるということでしょうか?
VSTホストに対するインタフェースを変更しなければ、
ネイティブで書かれたVSTホストから.NETで作ったVSTプラグインを呼び出すことは加納なのですよね?
133デフォルトの名無しさん:2006/07/27(木) 01:17:43
age
134デフォルトの名無しさん:2006/08/05(土) 17:27:47
Directサウンドバッファに読み込んだWAVを合成して書き込もうとしてるんですけど、
うまくいきません。ずっと前にこのスレで話題になっていたときは
「ほんとうに加算するだけ」ということだったのですが・・・
8ビットステレオデータです。
単音では鳴るのですが二つを合成すると×。
135デフォルトの名無しさん:2006/08/05(土) 17:31:26
ソースさらせ
136デフォルトの名無しさん:2006/08/05(土) 17:47:11
単なる桁溢れ
137デフォルトの名無しさん:2006/08/05(土) 17:51:11
>>134
変な音がするなら>>136に一票
音がしないなら>>135に一票
138デフォルトの名無しさん:2006/08/05(土) 17:51:25
>134
8bit wavは0基点ではなく、0x80基点。
char in1, in2; // 入力
char out; // 出力
out = ( ( in1 ^ 0x80 ) + ( in2 ^ 0x80 ) ) ^ 0x80;
こんなんだったかな? 間違ってたらすまそ。
後は加算後にクリッピング処理入れる程度で鳴るはず。
139デフォルトの名無しさん:2006/08/05(土) 18:08:04
話題になったのは本当にこのスレかい?
ゲーム製作技術板でそんなことを書いたような覚えはあるが>「ほんとうに加算するだけ」
140デフォルトの名無しさん:2006/08/05(土) 18:55:09
int tmp = in1 - 128 + in2 - 128;
tmp = max(tmp,-128);
tmp = min(tmp,127);
out = tmp + 128;
141デフォルトの名無しさん:2006/08/06(日) 01:17:37
int tmp = in1 + in2 - 256;
out = (tmp / 2) + 128;


out = (in1 + in2) / 2;
142デフォルトの名無しさん:2006/08/06(日) 04:15:53
>>141
一行目からバグってんじゃん。
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といういみではなくて
まいくろぷろせっさー ふるもーど のほうがいいかな
150デフォルトの名無しさん:2006/08/06(日) 19:09:04
>>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
せーぶでーた が できないのは かそうでーたーくうかんを つくってる かのうせいも ある
163デフォルトの名無しさん:2006/08/06(日) 23:37:46
月配列の亜流でも作ってんのか?よそでやれよ
164デフォルトの名無しさん:2006/08/07(月) 00:14:05
>>150
とはいえ、環境音を抑えるヘッドフォンもあるぐらいだから、十分早く打ち消す音を発生させればある程度音量を抑える事はできるんじゃないだろうか?
165デフォルトの名無しさん:2006/08/07(月) 08:11:44
>>164

周期性がないとかえって五月蝿くなるだけのような
166デフォルトの名無しさん:2006/08/07(月) 08:47:14
>>165
逆位相波を重ねて雑音を消す技術は既に色々応用されていますが何か。
167デフォルトの名無しさん:2006/08/07(月) 10:49:05
音はね、エネルギーなんだよ。
だからスピーカーで音を消すにはスピーカーがエネルギーを吸収しなければいけない。
だったら吸音剤をおいた方がいいよね。

ただね、
ダクト内部のような場合は、出口で丁度圧力変化がゼロになるようにしてやれば
外に出ないというのはあるよね。 でもダクトの中のエネルギーは増えている。当然だよね。
高速道路なんかの壁のスピーカーも同じ理屈だね。
168デフォルトの名無しさん:2006/08/07(月) 11:38:05
>>167
吸収しなくても逆方向のエネルギーをぶつけりゃいいじゃん。
吸音材ができることなんてタカがしれてる。
169デフォルトの名無しさん:2006/08/07(月) 12:05:03
運動量や圧力はマイナスになれますが
エネルギーはその2乗項なので、物理量が虚数にならなければエネルギーは消滅しません。
つまりマイナスのエネルギーというのは無いのです。

もしかして、マイナスのエネルギーという意味を、
エネルギーを閉じ込めて、その閉じ込めた空間で吸音=熱エネルギーへの変換を行うとい
う意味に使っているのかもしれませんが
170デフォルトの名無しさん:2006/08/07(月) 12:13:35
おしえてぇ♪ くだぁさい♪
この世の引力と反発力に♪
符号の違いに意味があるのならば
あなたは浮きますか?
171デフォルトの名無しさん:2006/08/07(月) 12:14:48
>>169
音は波なので逆相を重ねりゃ弱くなる。つりあいとって合力0にすりゃいいだけ。
あんた、頭悪いね。
172デフォルトの名無しさん:2006/08/07(月) 12:25:39
有限の大きさの面で音場の逆相を作る事は出来ない。

音は圧力と運動量が交換しながら伝わってゆく
でも圧力はスカラーだけど、運動量は方向成分を持った(つまりベクトル)
で圧力も場の上にあるから、
逆相を重ねるには3次元上に圧力コントロールを行える装置を配置しなければならないわけだ。

ダクトの中や、ヘッドホンのようにその一点に絞ればその点だけをコントロールする事は可能だが
音に音をぶつけてエネルギーを吸収する事は出来ない。
173デフォルトの名無しさん:2006/08/07(月) 12:36:33
生半可な知識で頭の悪い屁理屈捏ねている香具師がいると聞いて来ました。
174デフォルトの名無しさん:2006/08/07(月) 12:39:37
まったくだ。
任意の3次元空間で音が消せるというなら、
ハイファイ対応のハウリングキャンセラーなんて簡単に作れると思ってるんだろうな
175デフォルトの名無しさん:2006/08/07(月) 12:46:04
音の振動を伝える者をなくせばいいんじゃないの?
176デフォルトの名無しさん:2006/08/07(月) 12:47:05
つ[真空ポンプ]
177デフォルトの名無しさん:2006/08/07(月) 13:05:17
共鳴させてエネルギーを集中させてから回収するというアイデアはどう?
178デフォルトの名無しさん:2006/08/07(月) 13:34:10
クインケ管のように穴が開いてるのに音が外に出ない現象を 【消す】 と呼んでるという事でいいのでは?
179デフォルトの名無しさん:2006/08/07(月) 13:40:07
180デフォルトの名無しさん:2006/08/07(月) 16:21:53
そこの実験発表、いちいち面白いよな
181デフォルトの名無しさん:2006/08/07(月) 17:39:23
消音の原理
http://www.cepstrum.co.jp/products/anckit/ancbasic.html

まさしくクインケ管の原理で
上流下流と書いてるように、左からの音を消すというより
左からの音を反射している。 つまり仮想の壁を作る技術にすぎない。
182デフォルトの名無しさん:2006/08/07(月) 17:47:19
でも 反射するという事は、>>177のいうように 左からの音についてダクトを
ヘルムホルツ共鳴器に換えてしまっているのかもしれない。
183デフォルトの名無しさん:2006/08/07(月) 17:55:33
つまり進行方向⇒
A ----++++----++++----++++----++++----++++
B ++++----++++----++++----++++----++++----

A+B なら完全に消えるけど、
スピーカーからの音は左右に反対位相(反対進行方向)で伝わる
++++----++++----++++----++++----++++----
+++----++++----++--++----++++----++++---
++----++++----++----++----++++----++++--
+----++++----++------++----++++----++++-
----++++----++---++---++----++++----++++
この進行波を加算すると、スピーカーの所で反射されているのと同じ
184デフォルトの名無しさん:2006/08/07(月) 18:08:53
反射以外の吸音原理:

 ダクトを2又にすれば、片方の通路の音は当然1/2になる。
 つまりそこで反対位相で振幅1/2になるようにスピーカーをコントロール出来れば
 スピーカーがエネルギーを1/2吸収した事になる
185デフォルトの名無しさん:2006/08/07(月) 18:34:22
床天井壁が均質な部屋に明かりが灯っている。
明かりを壁が αだけ吸収し (1-α) 反射するとする。

反射した光は再度反射するから  (1-α)+ (1-α)^2+ (1-α)^3 .... と無限に反射する
部屋の明るさは 真っ黒な壁の部屋にくらべて Σ(1-α)^n 倍明るくなる。
αが小さくなると、この倍率はとても大きくなる。
白い壁、明るい色の床の狭い部屋は蛍光灯1灯でも十分明るい。
しかし、壁に黒い学生服をかけるだけで突然暗くなる。
学生服が光を吸収してしまうからだ。

同じ事は音についても言える。 部屋の中で音は壁で何度も反射される故に音は大きくなる。
この原理で増幅された音は、一箇所で吸音するだけで一瞬で小さくなる。
これを電気的に起こせば
186デフォルトの名無しさん:2006/08/07(月) 18:38:13
光のように音を吸収できる素材なんてない。
187デフォルトの名無しさん:2006/08/07(月) 21:08:44
音のように光を吸収できる素材なんてない。
188デフォルトの名無しさん:2006/08/07(月) 22:52:23
観測者の位置でだけ消音状態にしたいんじゃないのか?
189デフォルトの名無しさん:2006/08/07(月) 23:27:28
・耳から入る音以外(体が感じる音)をどう消すのか
・既に届いてる音に対して、プログラムで対処するなら>>150の言うように周期性から予測して打ち消すしかない
・上記方法の場合でも環境依存をどう対処するか(マイクとヘッドホンの配置と特性、PCの構成等)

>>143
汎用的な物は限りなく無理に近いと思うけど、
環境依存覚悟で実験してみる価値はあるんじゃね?
190デフォルトの名無しさん:2006/08/08(火) 01:49:16
音消してくれるエアーカーテンほしいよね。

それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。
超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。
あの技術とか使ってできないかな。
191デフォルトの名無しさん:2006/08/08(火) 03:00:21
>>190

>音消してくれるエアーカーテンほしいよね。

音波レンズというものがあるので、焦点が自分の方に来ないようにしてしまえば
エアカーテンに相当するものは可能だと思う

3次元に広がる音をピンポイントで消すには
上で何度か言われている(言ってるひとは勘違いしてるみたいだけど)
逆位相の部分での干渉を利用すれば出来なくはない
ただしピンポイントなので他の場所は静かにならないし
3次元的にはエネルギーも決して無くなる訳ではない


>それとどんなに大声でしゃべっても通話相手にしか聞こえないマイクもほしい。
>超音波ですんごいピンポイントの指向性もったスピーカー作ったのあったじゃない。
>あの技術とか使ってできないかな。

すこしずらした非可聴周波数音を二つのスピーカーから発生させて
その二つのベクトルの交わる部分のみずれからくるうなりで
可聴周波数を再現するという話が出たことがあると思う


192デフォルトの名無しさん:2006/08/08(火) 07:50:58
>>188
その位置だけ消音といっても、3次元空間内でそういう点を作るのは難しい
もし可能だとしても、そこで定在波を作ってるようなものなので、
節と腹が生じる。 節で音量がゼロなら、腹では音量は2倍になるという事になる。

耳が2つあり音速は330メートル/秒程度なので、300Hz以上では
両方の耳に節が来るような定在波を作る事は出来ない
193デフォルトの名無しさん:2006/08/08(火) 08:03:12
右耳と左耳の間隔が〜1m近くあるデカ頭の人キター
194デフォルトの名無しさん:2006/08/08(火) 08:06:10
頭の直径が1mもあるわけねぇ〜だろ

  330 [m] / ( 300 [Hz] × 2 ) = 0.505 [m]

>>192の頭の直径は 50cmしかないんだよ。
195デフォルトの名無しさん:2006/08/08(火) 08:06:44
↑ 0.55 [m] orz
196デフォルトの名無しさん:2006/08/08(火) 08:49:17
>>194
>>192の頭の直径は 50cmしかないんだよ。
充分でかいよ。漏れの肩幅でさえそんなにないよ。
197デフォルトの名無しさん:2006/08/08(火) 09:04:39
だから実際実用化されてるらしいでないの。
ただソフトウェアでとなると遅延時間がでかくなるから(一番でかいのはA/D/Aレイテンシー)、
そうとう条件は厳しくなるだろうね。
198デフォルトの名無しさん:2006/08/08(火) 09:48:32
-6dB sin(30度)=0.5 だから  330 [m] / ( 300 [Hz] × 12 )  約9cm 
子供の頭?
199デフォルトの名無しさん:2006/08/08(火) 09:50:18
そういや180度の場所も節だな
200デフォルトの名無しさん:2006/08/08(火) 09:58:03
>>193-194 いいか、お前ら、

0  90 180 270 360

---______---~~~~~~---______---

節  腹 節 腹 節


波長が 1メートルなら 腹はその1/4と3/4のところだ
201デフォルトの名無しさん:2006/08/08(火) 10:07:07
そうか、電話なんかは300Hz以下カットしてて、耳の感度が悪いのは 頭の大きさから来てるのか!
202デフォルトの名無しさん:2006/08/08(火) 10:07:26
>>197
逆相で音を弱くするので実用化されてる例は、
踏み切り、病院、救急車、消音ヘッドフォン、高速道路、新幹線の線路などなど。
203デフォルトの名無しさん:2006/08/08(火) 10:24:50
でも音を単に反射してるのだとすれば、高速道路なんかは高いマンションなんかは逆にうるさくなってるのかも
204デフォルトの名無しさん:2006/08/08(火) 11:07:10
>>198
丁度頭の中央を狙えばそんなものじゃないの

頭の幅のデータ
ttp://homepage3.nifty.com/orangejuice/head2.html
平均 
男 16.2cm
女 15.6cm
205デフォルトの名無しさん:2006/08/08(火) 14:09:44
定在波と進行波で検索したリンクで初めて勘違いに気が付いた。
圧力と|速度| って 90度位相差が出るのは定在波の時だけで 進行波は同相だったのか
206デフォルトの名無しさん:2006/08/08(火) 14:23:47
ダクトの中に細いフィラメントを沢山配線して通電する事で加熱
熱膨張で進行波を打ち消してしまうというのはどうだ?
207デフォルトの名無しさん:2006/08/08(火) 14:55:09
プログラミングの話が全然出てこないのは何故?
208デフォルトの名無しさん:2006/08/08(火) 15:47:21
>>207 何か質問があるならどうぞ
209デフォルトの名無しさん:2006/08/08(火) 21:19:28
DPCMのいいエディタご存じないですか?
それとも、無きゃ作っちまえ、なスレですか?
210デフォルトの名無しさん:2006/08/08(火) 22:43:58
>>209
それがローカルルールの範囲内の質問なんですか?
211デフォルトの名無しさん:2006/08/09(水) 08:00:56
エディタといっても、波形を表示してそれをカットペースト+エフェクトするくらいだからなあ
波形をマウスで作ったりしたってまともな音にならない
212デフォルトの名無しさん:2006/08/12(土) 08:12:36
213デフォルトの名無しさん:2006/08/14(月) 02:21:43
MP3のエンコーダのライブラリでライセンスフリーのものってありますか?
ご存知でしたらどなたか教えていただけませんか。デコーダはあるんだけど。
214デフォルトの名無しさん:2006/08/14(月) 03:06:13
>>213
ない

つか、もし配布元が問題ないといっても、F社やらT社は絶対それを認めないだろ
215デフォルトの名無しさん:2006/08/14(月) 17:50:08
>>214
ではMP3のエンコーダ自体を自ら実装すれば問題のでしょうか?
216デフォルトの名無しさん:2006/08/14(月) 18:15:24
>>215
フォーマット自体には特許の及ぶところではないというのは当たり前になっているわけで、
それゆえに、LZWの特許が有効だったときも無圧縮GIFは問題無いという考えが主流だった

そう考えると、確かmp3も圧縮アルゴリズムの特許は例の2社が持っていたはずで、
それなら無圧縮mp3は問題ないことになる。

だが、それってmp3の意味無いじゃん。
217デフォルトの名無しさん:2006/08/16(水) 13:41:26
午後みたいに、インストーラーでコンパイルするという荒技もあるけどな。

しかし、あれは酷いやり方だな。
賛同はできん。
素直にソースだけ公開しとけば問題ないのに。
218デフォルトの名無しさん:2006/08/16(水) 23:44:51
音ゲーで使えるようなくらいの遅延の少ないエフェクトの掛け方を探してます。

C#.NETで、DirectSoundのSecondaryBufferのエフェクトを使ってみたんだけど、
バッファに書き込んでから音が鳴るまでの時間が200msecくらいもあって、結構使えない。
そこで腹をくくってその辺りの処理を自前でやろうかと。

複数のwaveを鳴らして、その合成音にリアルタイムにリバーブエフェクトをかけるのって、

再生用バッファにwaveを加算(サンプル毎足し算)
その波形に対して随時インパルス応答を適用する

こんな感じで合ってますか?
219デフォルトの名無しさん:2006/08/17(木) 07:05:55
あってるよ。 問題は飽和に対しての処理だけさ
220デフォルトの名無しさん:2006/08/17(木) 08:37:15
午後でいくつかまとめて処理すると
ファイル名が入れ替わったりするバグありますよね?
221デフォルトの名無しさん:2006/08/17(木) 08:54:04
>>220知らん。 つーか板違い
222デフォルトの名無しさん:2006/08/17(木) 10:07:16
>>218
ASIOとかWDMとかに最適化しないとめちゃめちゃ遅れるよ。
223デフォルトの名無しさん:2006/08/17(木) 16:09:30
>>220
翌日の朝やればいいじゃん
224218:2006/08/17(木) 17:29:50
試しに2秒のwaveに100kbくらいのインパルス応答をFIRフィルタで適用してみたら
処理に糞時間かかった。。ノイズもいっぱい。

このやり方じゃダメですか?

ちなみに使ったインパルス応答
ttp://noisevault.com/nv/index.php?option=com_remository&Itemid=29&func=fileinfo&filecatid=55&parent=category
これのm1_44.wav

>>222
うちのオンボードじゃASIO4ALL入れても無理でした。
225218:2006/08/17(木) 17:52:43
録音して波形を見てみたら、ノイズは>>219の忠告通り飽和が原因っぽかった。
飛び出したサンプルだけとりあえず範囲内に凹ましてみたけどノイズは和らいだだけ。
やっぱりその周辺も同じ比率でなだめないといけない?
処理に時間かかって仕方なす
226デフォルトの名無しさん:2006/08/17(木) 18:04:28
インパルス応答をそのまま掛け算したら遅いのが当然
といってFFTで掛け算回数を減らす高速化をするとブロック処理になって、希望じゃないでしょ。

だからリバーブなら思い切って一定時間の遅延にしてしまうのがいいんじゃないの?
その遅延にIIR2時のLPFかければそれらしくなるさ。
227デフォルトの名無しさん:2006/08/17(木) 18:59:33
デジタルリバーブの基礎から勉強したら?

リアルタイム性を重視してリバーブをかけるなら、
ディレイ時間の違うIIRフィルタの結果をさらにIIRフィルタに通すのが基本。

今のCPU速度だとゲームでコンボリューション・リバーブは非常識。
228デフォルトの名無しさん:2006/08/17(木) 19:13:01
EAXのリバーブとか使えないか?
幾分ハードウェア処理だから軽いだろ
229218:2006/08/17(木) 21:29:11
IIRで何とかなるならそれに決めたいんだけど、探してきた↓のサンプルだと音が曇ってしまった。
ttp://www.morikita.co.jp/soft/7832/iir2.c
フィルタが悪いだけ?良いフィルタのサンプルは無いだろうか。

>>227
フィルタ1の出力をフィルタ2の入力にして、その出力を適用という作業をサンプル毎に行う
と解釈してみた。

>>228
SDKが見つからないよう
230デフォルトの名無しさん:2006/08/17(木) 22:34:37
遅延が…遅延がぁぁっ!
231デフォルトの名無しさん:2006/08/17(木) 22:43:59
係数が…係数がぁぁっ!
232デフォルトの名無しさん:2006/08/18(金) 06:37:49
>>229
2次のIIRフィルターは LPFならf0とQで係数が決まるけど、それぞれいくらにしてるの?
Q=0.7程度にして f0を変化させてみたら?

それから、あくまでも遅延した方にだけIIRをかけて、元の信号と加算するんだよ。
加算した結果飽和するなら音量を下げるAGCを使うか
飽和しないように a , (1-a) の比率で加算するか
233デフォルトの名無しさん:2006/08/18(金) 12:05:06
ああ、まさか>>229のソースで係数そのまま使ったって事?
そのレベルならとりあえず1次のLPFでやってみたら?

過去ログ のレス14より
http://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段するといいよ
234218:2006/08/18(金) 19:48:30
フィルタ係数の算出方法があったのか( ゚д゚)…今見見返してみると過去ログが宝の山に見える。

そういえばさっきから全然残響音が出ないなぁと思って考えてみたんだけど、
1サンプル前じゃなくてもっと前のサンプルをフィードバックすれば良かったのか!?
っと気づいてから今更>>226の意味を理解した。ぁーぁー

それから1次なり2次のIIRを掛けて高音減衰させれば良い感じになるのか。
一応これでそれっぽいのは聞こえるようになったよう。みんなありがとうヽ(゚∀゚)ノ

後はこれとミキシングがどのくらいのレスポンスで出来るかどうかー
235デフォルトの名無しさん:2006/08/18(金) 19:52:51
IIRは発振しないようにパラメータ選びは慎重にしてね( ´∀`)b
236デフォルトの名無しさん:2006/08/19(土) 01:44:34
>>9-11を参考にして、ブロックのサイズを凡そ0.1秒にして、
音程変化の内速度調整を実装したところ、
再生速度を0.5倍にするところまでは非常にスムーズな音でこれを実現できました。

しかし、0.5を下回る倍率(〜x0.4)になった途端、音声が毒電波状態です。

現時点での実装は
・ブロックの間引き(重複)
・ブロックの窓関数処理
のみで、
・空白を優先
・繰り返しを配慮
という二点は実装していません。
自分の作っているプログラムでは効率が悪すぎて、
この二点を実装しようとすると処理時間が不足するおそれがあり、
何よりこの二点の効率の良い実装方法が思いつかなかったので。

よくよく考えてみると、この機能を実装しているプレイヤの内のいくつかは、
やはり0.5倍を下限に置いている様なのですが・・・。


何か良い解決方法はありますでしょうか?
また、それはどのような方法か教えてください。
237デフォルトの名無しさん:2006/08/19(土) 03:24:13
ァ・・・もしかしてサンプリング定理と関係があるのか・・・?0.5倍ってのが2の逆数であることから考えても・・
238デフォルトの名無しさん:2006/08/19(土) 05:11:04
やっぱ厳密にはオーバーサンプリング+アンチエイリアスを
かけてから処理すべきとこなんじゃないの
239デフォルトの名無しさん:2006/08/19(土) 07:28:47
音程が変っているのなら、サンプリング速度が変化しているからどこかの段階でLPFを入れておく必要があるよ。
そうじゃないと折り返し雑音が問題になる。
綺麗な音にしたいなら、最低2倍のオーバーサンプリングしておいた方がいいかもね。

音程が変らずに再生速度だけ変化させてるならサンプリング定理の問題じゃない
0.5を下回る場合に問題が出るという事は
0.5を下回ると同じ音を3度以上繰り返し利用しなければならなくなるけど
その処理がはいってないんじゃないの
240デフォルトの名無しさん: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デフォルトの名無しさん:2006/08/19(土) 09:12:30
あ、Shift+Enter間違えて押してしまった・・・。
改行と書き込みがメッセとは逆だから間違えるなぁ・・・

とりあえず、お二人のご意見から
オーバーサンプリング+アンチエイリアスについても実装を検討してみます。
242デフォルトの名無しさん:2006/08/19(土) 09:16:02
あともう一点追記です。
240で示したソースの中で、i以外の変数はすべて
クラススコープです。iのみがメソッドスコープになっております。
readCountがメソッド呼び出し毎にリセット、というわけではありません。

おまけに分かりづらくてすみません・・・。
243デフォルトの名無しさん:2006/08/19(土) 09:24:22
音程が変化していないという事は、サンプリングレートが変化してないわけでしょ?
だったら オーバサンプリングとかLPFは必要ないよ。

で、やっぱり3度利用する部分に単純にバグがあるのだと思うよ
もっとも3度も利用すると違和感があるという事なら当然そうだろうけどね

あまり2倍以上遅くする場合は、やっぱり無音期間を検出して、そこを出来るだけ引き延ばす方がいいと思うよ


たとえば0.1秒のブロックを0.05くらいに小さくして、そのブロックの音量が今までの音量より一定比率より小さいなら、
その部分の繰り返し回数を出来るだけ多くするとか
244デフォルトの名無しさん:2006/08/19(土) 09:31:35
まてよ >>240の定数だと、引き伸ばしではなくて短縮なんだよね?

短縮で0.1秒単位に2ブロック以上連続してすてるようになると、音声だと何を言ってるのか判らないようになってしまう。

そこまで強力に短縮するなら、
まず周期性を検出して周期の整数倍の
もっと小さいブロック (1/30)〜1/60のような(ブロックというよりgranul) サイズにして
それを捨てるようにする。必要があるよ。
245デフォルトの名無しさん:2006/08/19(土) 09:35:11
サウンドプログラムの本ってあんまりないよね
246デフォルトの名無しさん: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デフォルトの名無しさん:2006/08/19(土) 09:48:58
出来るだけ無音期間を検出して無音期間を引き延ばすのが第一
次善は、周期を検出してその周期の整数倍にgranulを切り出して
それを並べる

音声の場合は周期の揺らぎが音声らしさを作ってるから
母音の部分の極端な引き伸ばしは巧くゆかないけどね(周期性が増すと声が変ってしまうから)
やらないよりはマシ
248236:2006/08/19(土) 09:52:20
うん、どうやらその方法をとるしか無い様ですね。
・・・分かり切ったことを聞いたようで、すみませんでした。

しかしそうすると演算量が極端にあがるなぁ・・・
全量ノルムチェックと倍速調整か・・・うは、頭いてえ
249デフォルトの名無しさん:2006/08/19(土) 10:07:55
Σx^2はそんなコストはかららないでしょ
周期検出の方が計算コストの低いのを探すのは大変でしょ
250236:2006/08/19(土) 10:22:12
>>249
やぁ、せっかくあちこちダイエットしたのになぁ、ってボヤキです。
再生に関係しない他のところが処理コスト食い過ぎで、
再生するとCPU利用率が3%くらい跳ね上がるもんですから。

実質的な問題はただ単に面倒くさいだけです、本当にすみません。
251デフォルトの名無しさん:2006/08/19(土) 10:23:57
急に内容が難しすぎ。
252236:2006/08/19(土) 10:32:11
・・・確率論的に乱数で処理の是非を決定して無音部分の処理確率をあげt

いや、やめておこう
253デフォルトの名無しさん: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デフォルトの名無しさん: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デフォルトの名無しさん:2006/08/31(木) 10:30:18
>>257
フィルタ使うのが軽い。
260デフォルトの名無しさん:2006/08/31(木) 10:31:42
バンドパスフィルタを使って音量レベルを計ればいいんだ
261デフォルトの名無しさん:2006/08/31(木) 13:25:22
音程を変えるのに FFT を使ってるソフトがあるらしいのだが、
どういう風に使ってるんだろう。
単純に区間に区切って FFT かけて周波数を n 倍して戻すのって、
時間軸で重複させるのと等価だよなぁ。
位相をうまく合わせればちっとは良くなる気もするが、窓関数かけてたら
ほとんど影響なさそうだし。
262デフォルトの名無しさん:2006/08/31(木) 14:44:40
>>261
ヒント:フォルマント
263デフォルトの名無しさん:2006/09/01(金) 07:53:32
>>17 を参照。
264デフォルトの名無しさん: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デフォルトの名無しさん:2006/09/01(金) 20:15:03
その周波数軸の定数倍をどう実現してるの?
たとえば 2^(+1/12) = 1.05946309435929526 となって綺麗な比率にはならない
特に低周波は目が荒くなるわけで

これを旨く処理するには exp(2πki)という指数=三角関数が必要にならない?
267デフォルトの名無しさん:2006/09/01(金) 22:00:18
>>266
指数的な補完が必要ってことか。なるほど。そこまで考えてなかった。

でも、上にも書いてあるけど、周波数軸を a 倍するのって
時間軸を 1/a 倍するのと同じだよね。(音量は a 倍違うけども)
FFT 使う意味がいまいち分からないなぁ。
268デフォルトの名無しさん:2006/09/01(金) 23:23:01
DARU/PITCH-SHIFTER!だと音程+1で1.05946314って表示されるよ。
綺麗な比率では無いけど考え方はあってるんじゃないの。

周波数軸上でスペクトルを上下させるのがピッチシフトだっけ?
269デフォルトの名無しさん:2006/09/02(土) 11:50:35
>>267
たしかに。
下限周波数 f_low [Hz]で周波数スペクトルを測定するには、
有限の時間1/f_low [sec.]かかるので、
結局のところグレイン・サイズ 1/f_low [sec.]で
グレイン操作して、ピッチシフトを表現することしかできないね
270デフォルトの名無しさん:2006/10/05(木) 00:10:57
271デフォルトの名無しさん:2006/10/11(水) 18:43:00
今、ASIO2.0のSDKのサンプルをいじってるんだが、どこで再生しているのかわからない。
誰か教えてくれません?
272デフォルトの名無しさん:2006/10/11(水) 22:35:32
ASIO_Init()の中をループしている最中にbufferSwitchTimeInfo()がcallbackで呼ばれる
と思った
273デフォルトの名無しさん:2006/10/11(水) 22:37:45
いやbufferSwitch()か・・・まぁその辺
274デフォルトの名無しさん:2006/10/12(木) 00:30:37
確かにここらへんが怪しいとは思うんだけど、どういじくったら音を出せるのかがわからない。

asioCallbacks.bufferSwitch = &bufferSwitch;
asioCallbacks.sampleRateDidChange = &sampleRateChanged;
asioCallbacks.asioMessage = &asioMessages;
asioCallbacks.bufferSwitchTimeInfo = &bufferSwitchTimeInfo;

誰か音を出す方法を教えてくださいな。
275デフォルトの名無しさん: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デフォルトの名無しさん:2006/10/28(土) 04:28:22
まだキャプチャーした音を再生するところまでしか作ってない「ヘボな段階」なので、
ファイル書き出し機能を作ってから聞けばいいのかもしれないのですが、
書き出し機能を作るときからおおまかな部分について知っておいた方がいいかなと
思いましたので、質問です。

キャプチャして録音しながら
DVDレコーダなんかでよくあるタイムシフトの機能を扱いたいと思っているのですが、

どういった手順になるのでしょうか?おおまかな流れについて教えて下さい。
waveもしくはmp3をストリームして録音しているときに単純にそのファイルを
開いて再生するだけなのでしょうか?
それとも、何かあらかじめ準備しなければならいことがあったり
特別な手順を踏んでタイムシフト用のファイルを作ったりしないといけないのでしょうか?

mp3でタイムシフトやるときとwaveでタイムシフトやるときのファイル形式による懸念点などありましたら、
それも教えて欲しいです。mp3でやってもwaveでやっても一緒なのでしょうか?
278デフォルトの名無しさん:2006/10/28(土) 09:19:09
Adudacity でタイムシフト再生なんか出来たか?
279デフォルトの名無しさん:2006/10/28(土) 09:20:00
あ、Audacityスレとまちがえてかいてしまったごめんよ。
280デフォルトの名無しさん:2006/10/28(土) 12:41:11
>>277
FILE_SHARE_READでCreateFile()してやればいいんじゃね?
録音用のHANDLEと再生用のHANDLEで別にCreateFile()すればseek位置で干渉しないし。

wavはLR&チャンネルのバウンダリさえ気をつければどっから再生しても問題無いけど、
mp3は[4バイトのヘッダ+データ]のブロック単位でシークする必要がある。

てかmp3使うならエンコード/デコードのライブラリが必要。
フリーで転がってるソースはエンコはgogo、デコードはmpg123辺りかなぁ。
281277:2006/10/28(土) 18:54:05
>>280
どうも、ありがとうございます。
それほど複雑な処理を必要としないさそうで、ちょっと安心しました。
waveとmp3でやり方が大きく違いそうだということもわかりました。特にmp3は敷居が高そうですね。
とりあえずwaveでタイムシフトを実現させることを目指そうと思います。

こんなプログラムは探せばに既にあるんでしょうけど、勉強を兼ねて自分でやってみようと思います。
ありがとうございました。
282デフォルトの名無しさん:2006/11/02(木) 18:55:56
ADPCMの詳しい資料ってありませんか?
283デフォルトの名無しさん:2006/11/02(木) 20:40:10
CCITTの規格書とかお金出せば買えるよ
284デフォルトの名無しさん: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をかけたいんですが、
データの渡し方が分かりません。

http://adlib.rsch.tuis.ac.jp/~akira/unix/ossprog/src/short/parrot.c
録音は↑のプログラムをベースにしています。
どなたかアドバイスをお願いします。
説明不足だったらすみません。
287デフォルトの名無しさん:2006/11/05(日) 00:14:45
>>286
> linuxでC言語使ってサウンドプログラミングやってます。
> 録音したデータにFFTをかけたいんですが、
> データの渡し方が分かりません。

ここで聞くような内容じゃないだろ。
プログラム初心者板にでも行った方が幸せになれる。
288デフォルトの名無しさん: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デフォルトの名無しさん:2006/11/05(日) 02:12:00
>>290
質問する板が違います
二度と来るな
292デフォルトの名無しさん:2006/11/05(日) 02:13:06
またきちゃいました(>_<)
質問する板ってどこ?
293デフォルトの名無しさん:2006/11/05(日) 02:41:50
>>292
自分で作ればこの板でおk
294デフォルトの名無しさん:2006/11/05(日) 03:12:10
>>293
実は自分でもジャンルがよく分かってないんです。
フーリェ変換や波形分析するのはここのスレの人なのかなって
スレ一覧見て思ったので聞いてみたのです。
完全体セルの「笑えよベジータ」って声があるんだけど、それをフーリェ変換したら
どうなるのかなと思ったもので。

フーリェ変換のプログラムは持っているので、
あとは時間きざみごとの波形データが数値として取れれば…
295デフォルトの名無しさん:2006/11/05(日) 03:18:53
>>294
wavか何かに変換すればいいんじゃね?
296デフォルトの名無しさん:2006/11/05(日) 03:51:06
>>295
wavに変換すれば解析可能なソフトがあるってことですかね?
何しろ、サウンドプログラミングはズブの素人なのです。

確か、数秒のファイルでもwavにすると500KBくらいになりますよね。
プログラムのソースで500KBって結構なデータ量になります。

音楽データにどのような情報が入っているのかは分からないのですが、
ただ、欲しい情報は「波のきざみ幅」と「きざみ幅ごとの振幅」の
二つのデータなのです。

単純に波の振幅と刻幅を抽出するソフトがあれば紹介してもらいたいのです。
プログラム板一覧を見て、このスレの人なら知ってる人がいるのかなと思って質問しました。
297デフォルトの名無しさん:2006/11/05(日) 03:59:53
ソフトウェア板辺りで質問スレ探すかLinux板で同系列のスレ探しなさい。
298デフォルトの名無しさん:2006/11/05(日) 04:02:59
了解しますた。
299デフォルトの名無しさん:2006/11/05(日) 19:18:27
フリーソフトを使う事をプログラミングだと思ってるのか
300デフォルトの名無しさん:2006/11/05(日) 22:32:01
>>299
バイナリから直に数値データって取れんの?
301デフォルトの名無しさん:2006/11/05(日) 22:59:31
>>300
普通に取れるけど、取れても取れなくても、
フリーソフトを使う事をプログラミングとは言わない。
302デフォルトの名無しさん:2006/11/06(月) 12:40:47
>>301
普通ってどうやるの?
303デフォルトの名無しさん:2006/11/06(月) 13:06:21
>>302
普通にバイナリファイルを読み込めばいい。
バイナリファイルの読み込み方はスレ違い。初心者スレにでも池。
音声ファイルのフォーマットが知りたければぐぐれ。
304デフォルトの名無しさん:2006/11/06(月) 13:20:44
>>303
どの言語がお勧め?
305デフォルトの名無しさん:2006/11/06(月) 13:45:23
>>304
日本語でおk
306デフォルトの名無しさん:2006/11/06(月) 14:00:48
>>304-305
吹いたw
307デフォルトの名無しさん:2006/11/06(月) 14:28:46
>>303
ほんとに知ってて言ってるのこの人?
308デフォルトの名無しさん:2006/11/06(月) 14:39:36
>>294
ソフトを自分で作ってやるなら
1、とりあえずMP3ファイルを 16bitWAV形式に変換して保存しよう(ツールは探してね)
2、WAV形式のファイルをバイナリでオープンして、(RIFF+チャンク)で検索してデータを取り出そう
3、かけたいFFTのサイズ以下になるように窓関数をかける -->判らなければ検索してね
4、FFTをかける(ステレオなら2変数を複素FFTでやる方法を使うといいよ)
5、周波数成分毎に絶対値を出しそう
  FFTは周波数は比例軸で出るので、大抵は対数軸にしたいと思うので、ココがまあキモになるね
309デフォルトの名無しさん:2006/11/06(月) 14:51:08
で、たぶん >>294のやりたいのは
短時間FFTを使って ソノグラム表示もどきをやりたいのだと思う
310デフォルトの名無しさん:2006/11/06(月) 15:12:33
>>309
短時間FFTはなにかまずい?
311デフォルトの名無しさん:2006/11/06(月) 15:26:54
>>308
あ、ありがとうございます。
これで作業の方針をきめられそうです。

御迷惑お掛けしました。
ありがとうございました。
312デフォルトの名無しさん:2006/11/06(月) 16:03:51
>>310
まずくはないよ。
等Qの特性で分割して表示したいとか言い出すと、短時間FFTだと逆にメンドクサイだけで
313デフォルトの名無しさん:2006/11/06(月) 17:24:35
OpenALのプログラムを勉強したいのですが初心者にも参考になるサイトはありませんか?
環境はOSがWindows2000,IDEはVisualStudio2003です。
まだOpenALのSDKは入れていないのでそのあたりから解説してくれているサイトであると助かります。
314デフォルトの名無しさん:2006/11/06(月) 17:26:21
ググレカス
315デフォルトの名無しさん:2006/11/06(月) 17:31:40
オープンソースだからソース見ればいいよ
316デフォルトの名無しさん:2006/11/10(金) 16:31:33
WindowsVISTAに移行することを考え、今までのDirectSoundベースで組んできた
プログラムを全てOpenALに以降することを考えています。そこでお聞きしたいのですが、
DirectSoundベースのプログラムはクライアントPCにDirectXがインストールされていれば
ハードウェアだろうかソフトウェアだろうが問題なく音を再生することが出来ました。
これがOpenALに移行するとクライアント側のPCには最低限何をインストールしておく
必要があるでしょうか?またクリエイティブのサウンドカード(EAXをサポートしたもの)、
その他のサウンドカード、オンボードサウンド、で違いというのは生じますか?
317デフォルトの名無しさん:2006/11/10(金) 22:49:27
http://www.openal.org/lists.html
公式のメーリングリストで聞けば?
318デフォルトの名無しさん:2006/11/28(火) 01:48:49
a.midとb.midを同時再生するプログラムを書きたいのですが、
変数を二つ用意しても、二つ目を再生するところで
「指定したMIDIデバイスは既に使用されています。開放されるのをまってください」
という警告が出てしまいます。

mmsystem.hを使う方法で解決策はないでしょうか。
319デフォルトの名無しさん:2006/11/28(火) 02:11:07
>>318
MIDIデバイスを二つ用意したら?
320デフォルトの名無しさん:2006/11/28(火) 02:16:24
>>319
MIDIデバイスを二つ用意とはどのようにすればよいのでしょうか?
ハード面でということですか?
環境としては、PCにMIDIインターフェースをつなぎMIDI音源で音を鳴らしてます。
321デフォルトの名無しさん:2006/11/28(火) 03:51:29
>>320
まず環境を書け。
使ってる言語、OS、再生に使用してるライブラリ、最低このくらいは質問時に書いとけ。
それとデバイスの意味がわからないならそこから調べ直せ。

MIDIはWAVEと違って同一デバイスに複数ストリームを流せないから、
MIDIOUTが2ポートあるデバイスで、例えばSC88なりに別々に流すしかない。
322デフォルトの名無しさん:2006/11/30(木) 23:47:20
実験音楽的に、二つのmidiをマージしたいって事では…?
323デフォルトの名無しさん:2006/12/01(金) 00:35:28
まぁそれだったら流す前に自分でトラックをマージしちゃえばいいだけのことだけどね
324デフォルトの名無しさん:2006/12/13(水) 02:15:53
windows系ですけど、
MM_WOM_DONEなどのメッセージ処理中はwaveOutWriteとか使えないって記述をたまに見るんですけど実際どうなんですか。
325デフォルトの名無しさん:2006/12/13(水) 07:45:02
windows系といっても色々。
昔は割り込み=コールバックだったり
タスクスイッチされてなかったりと
326324:2006/12/14(木) 03:35:29
とりあえず95以降。
95で大丈夫ならその後でも大丈夫な気がするんですけど。
327デフォルトの名無しさん: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デフォルトの名無しさん:2006/12/14(木) 18:26:50
>>329
1.過去の最高値と今の値を比較し、今の値が高ければ最高値を更新し、カウンタを0に
2.カウンタをインクリメント
3.カウンタが一定値を超えたら、過去nサンプル中の最高値を検出し、カウンタをそこからの値に

ってやりかたはどう? nの値によっては比較回数が減るよ。
331デフォルトの名無しさん:2006/12/14(木) 18:53:14
>>330
おー、なるほど、すばらしいです。
聞いてよかった。早速試してみますー
332デフォルトの名無しさん:2006/12/14(木) 22:04:56
>>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
試してみるまでもなくダメっぽいな・・・
337329:2006/12/15(金) 00:04:49
1位の期限が切れたとき、途中で保存しておいた2位を新しい1位とするみたいな感じですよね?
実はじぶんもそうゆうの考えたんですがね、ややこしくてあきらめちゃったんですよね。
そう簡単にはいかなかったような・・・

これって一見とても単純な処理なのに、速いアルゴリズム考えようとすると、
思いのほかアレ?て感じゃありません?
だから330の即レスはけっこう目からうろこですた
338デフォルトの名無しさん:2006/12/15(金) 01:17:37
2位なんているの?
ビデオのメーター見てても2秒毎にリセットしてるだけだよ。
339デフォルトの名無しさん:2006/12/15(金) 02:15:13
本人が満足するのが一番の解でYO
340329: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だと思った。
が、音がザーザーです。
342デフォルトの名無しさん:2006/12/15(金) 10:49:48
>>340
メーターだとこんなやり方もある。
あなろぐ VU メーターっぽい動き。リミッターにも使えるんじゃない?
過去のpeakを減衰させて現在値と比べる方法。
peak = peak * 0.999; // peak = max(peak-k, 0) でもなんでもいい。減衰するように。
peak = max( peak, current_sample);

343デフォルトの名無しさん:2006/12/15(金) 10:52:44
>>341
8bit PCM は、ふつー符号無しデータで、0x00が負の最大、0x80が無音、
0xffが正の最大。
344デフォルトの名無しさん:2006/12/15(金) 10:52:52
>>341
リサンプリング LPF とかでググってみて。
手を抜く場合には単純に out[0] = (in[0] + in[2]) / 2 とか。
345デフォルトの名無しさん:2006/12/15(金) 12:30:44
>>343
いまく行きました。ありがとうございました。
>>344
2バイト値を1バイト値に変換する場合、単に上位バイトを格納すれば良いだけです。
これで、256で除算したことになります。
346デフォルトの名無しさん:2006/12/15(金) 12:32:37
>>345
サンプリング周波数 22050Hz のデータから 11025Hz への変換かとオモタ
347デフォルトの名無しさん:2006/12/15(金) 12:38:08
>>343
16bitPCMは符合有りなんだっけ?
348デフォルトの名無しさん:2006/12/15(金) 12:52:55
22050Hz から 11025Hz にする場合、たんに間引けばいいだけじゃん?
平均取ると何か良くなる?
349デフォルトの名無しさん:2006/12/15(金) 13:10:50
>>347
WAVのPCMに関しては、そう。
それ以外の文脈だと、符号有り8bitや符号無し16bitのPCMももちろん使
われることがある。
350デフォルトの名無しさん:2006/12/15(金) 16:48:16
>348
それだとエイリアシングノイズ乗るでそ。
344のでも1/2以上のリサンプリングで乗るけど。
詳しくはFIRとかIIRとかで調べてみて。
351デフォルトの名無しさん:2006/12/15(金) 17:18:03
>>348
サンプリングレート変換の時はLPFを通して先に高域をカットしなきゃダメ。
中途半端な周波数落としをするときはウェーブレットなんかで補間したほうがノイズが減る。
352デフォルトの名無しさん:2006/12/20(水) 14:26:55
FIRフィルタ(ローパス/ハイパス)のインパルスを
カットオフ周波数をパラメタとしてリアルタイムで生成したいんですが、
どこかにcコードサンプルとかないでしょうかね?
数学を理解して自分で書くのは無理そうでして・・・
353デフォルトの名無しさん:2006/12/20(水) 21:48:52
>>341
幾何学的な手法なら、三次曲線で補完とか、ガウシアンフィルタかける方法もあるぞ。
354デフォルトの名無しさん:2006/12/21(木) 00:15:30
>>352
sinc関数  sinc(x)=sin(x)/(x) にあなたの好みの肩特性の窓関数をかけるだけ
だが、あなたの好みが判りません。
355デフォルトの名無しさん:2006/12/21(木) 00:16:19
>>353
結局全て LPFなのさ
356デフォルトの名無しさん:2006/12/21(木) 01:54:43
>>354
そんなにシンプルな感じなんですか?
でもすいません、sincだけでは意味がわからないです・・・
xはなんでしょう?どこでフィルターの種類やカットオフはどこで決まるのでしょう。
窓はhammingでよいかと思います。
357デフォルトの名無しさん:2006/12/21(木) 07:05:28
判ったよ。手取り足取り教えてくれというわけだ。
sincは検索用のキーワード これで検索しろって意味だ

w:=2*π*f0/fs として
xが0でなければ sin( x * w) /x xが0の時 w
xを整数で±の窓関数の範囲で、窓関数を掛け算

で,ゲインがπあるから、それは除算するし、窓関数のゲイン分も掛け算すると
358デフォルトの名無しさん:2006/12/21(木) 07:14:27
フィルターの種類は、実際に係数を設定してどんな特性になるか見てみりゃいいだろ
理想LPFと理想HPFは 足せばフラット = 1 になるから 中央値以外は符号が反転するだけだ
359デフォルトの名無しさん:2006/12/21(木) 10:34:01
>>355
そうなんだけど、フーリエ変換しないでいいからとっつきやすいかな、と。
360352:2006/12/21(木) 15:28:35
>>357-358
おしえていただいた内容と、徹夜でネットをしらべまくった結果、
数学はさておき、無事うまく動作するコードが書けました。
思ってたよりシンプルなコードになったので驚きです。
ハイパスはローパス用のインパルス応答の振幅が反転された形になるんですね。
プログラムが生成したインパルス応答からフィルタ特性を解析したところ、特性も良好でした。
どうもありがとうございました。
361352:2006/12/21(木) 21:24:16
すいません、ハイパスについては間違えてたみたいですね・・・
362デフォルトの名無しさん:2006/12/21(木) 23:33:28
サンプリングレートが44100/1secだとすると、この場合の1sec/44100の単位はなんて呼称すれば良いんでしょうか
363デフォルトの名無しさん:2006/12/21(木) 23:55:15
1sec/44100 → (1/44100)秒
364デフォルトの名無しさん:2006/12/22(金) 01:01:27
sec per samplingrate?
365デフォルトの名無しさん:2006/12/22(金) 01:48:01
いちサンプル
366デフォルトの名無しさん:2006/12/22(金) 03:34:30
sample per rate
367デフォルトの名無しさん:2006/12/22(金) 07:19:21
>>361
もう判ったと思うけど 中央の係数のみ 1-a の関係になって、他の係数は負数にすればいいだけ
368デフォルトの名無しさん:2006/12/22(金) 13:42:29
ASIO SDKのhostサンプルがシンプル過ぎるのもどうかと思う今日この頃。
やっと音が出た…orz
369369:2006/12/23(土) 22:12:57
なんかディスクI/Oが少しでも集中すると再生が途切れる…。
やっぱりスレッド使って処理を分けないとダメか。
370368:2006/12/25(月) 10:56:31
なんか適当にスレッド作って
読込処理を非同期にして
少し多くバッファリングしたら
飛ばなくなった。

出来たプログラムはwavの非圧縮PCMしか
再生できないけどなんだか嬉しい。
371デフォルトの名無しさん:2006/12/25(月) 22:03:51
ゲームに関して何だけどPCにマイクを接続して喋ってるんだけど
EAXを使ったゲームを起動するととたんに俺のヴォイスにエコーが
かかるようになる。どうもそのPCゲームがEAXを使っているとそれに
つられてマイク入力の音声にもエコーみたいな効果が強制的に
かけられてしまうらしい。これって現状仕方がないことなん(´・ω・`)?
372デフォルトの名無しさん:2006/12/26(火) 00:08:53
>>371
板違い。
373デフォルトの名無しさん:2006/12/26(火) 02:36:50
>>372
ゲーム系のサウンドプログラムもこのスレの範疇かと。
374デフォルトの名無しさん:2006/12/26(火) 05:49:50
サウンドプログラム? どこが?
ゲームの設定かOSの設定だろ?
375デフォルトの名無しさん:2006/12/26(火) 07:49:50
>>371
ゲーム作ってるの?
376デフォルトの名無しさん:2006/12/26(火) 10:06:05
>>371
非サラウンド環境でEAXを使ったら、そらエコーがかかっただけみたいになるがな。
377デフォルトの名無しさん:2006/12/26(火) 15:12:35
>>371
クリエイティブのサウンドカードだろ?
仕様だ。

市場を一社独占させるとどうなるかの好例だな。
378 【吉】 :2007/01/01(月) 03:43:35
あけおめ♪
379デフォルトの名無しさん:2007/01/01(月) 13:25:07
黙れよ
380デフォルトの名無しさん:2007/01/11(木) 20:06:07
…FFTで… いや、ごめん。 いいや……。(´・ω・`)
381デフォルトの名無しさん:2007/01/15(月) 21:13:43
ぉぃぉぃ…
382デフォルトの名無しさん:2007/01/16(火) 20:41:58
低速フーリエ変換ってないの?
383デフォルトの名無しさん:2007/01/16(火) 23:35:48
DFT?
384デフォルトの名無しさん:2007/01/17(水) 00:14:21
筆算
385デフォルトの名無しさん:2007/01/17(水) 10:20:29
>>382
バタフライ演算をしなけりゃ低速だよ。
386デフォルトの名無しさん:2007/01/17(水) 16:11:17
普通にDFTでええんちゃう?
387デフォルトの名無しさん:2007/01/18(木) 21:42:16
>>6 >>13 >>17
/*
    Risa [りさ]   alias 吉里吉里3 [kirikiri-3]
     stands for "Risa Is a Stagecraft Architecture"
    Copyright (C) 2000-2007 W.Dee <[email protected]> and contributors

    See details of license at "license.txt"
*/
/*
     Phase Vocoder (フェーズ ボコーダ ; 位相ボコーダ)の実装
 
     参考資料:
 
         http://www.panix.com/~jens/pvoc-dolson.par
             Phase Vocoder のチュートリアル。「ミュージシャンにもわかるように」
             書かれており、数学音痴フレンドリー。
 
         http://www.dspdimension.com/
             無料(オープンソースではない)の Time Stretcher/Pitch Shifterの
             DIRACや、各種アルゴリズムの説明、
             Pitch Shifter の説明的なソースコードなど。
 
         http://soundlab.cs.princeton.edu/software/rt_pvc/
             real-time phase vocoder analysis/synthesis library + visualization
             ソースあり。
*/
388デフォルトの名無しさん:2007/02/13(火) 23:56:25
WAVで16bitの場合はサンプルごとにshort型にいれてるんだけど、
24bitの場合はどうすんの?
32bitは各サンプルをfloatにぶち込めばOK?
389デフォルトの名無しさん:2007/02/14(水) 00:31:38
longでええやん
390デフォルトの名無しさん:2007/02/15(木) 07:11:45
パソコンで処理をする目的なら、入力が何bitだろうと64bit浮動小数点で処理するのが楽だろう

・・・・整数演算の方が早いというような事を言いたい人なら別だが
391デフォルトの名無しさん:2007/02/15(木) 11:31:37
>>390
16bitはshortに入れているのに?
392デフォルトの名無しさん:2007/02/15(木) 12:19:02
wavファイル(RIFFフォーマット)の話だろ?
WAVE_FORMAT_PCM(=1)は整数の8bit,16bitしか定義されてないんじゃね?
393デフォルトの名無しさん:2007/02/15(木) 13:29:51
しかしBitsPerSampleにはいくらでも入れられる
入れるだけなら自由だ
394デフォルトの名無しさん:2007/02/15(木) 17:36:11
本気で言ってるなら池沼。
395デフォルトの名無しさん:2007/02/16(金) 00:41:30
内部は64bit浮動小数点、外部とのやりとりは24bit整数、あたりが標準的?
396デフォルトの名無しさん:2007/02/16(金) 04:09:13
>>395
全然。
例えばそこらのアプリの音声再生プラグインは、音質よりも軽くしたい場合が多いでしょ。
397デフォルトの名無しさん:2007/02/16(金) 04:11:09
逆に、音声処理で精度が欲しいってんなら、内部80bit浮動小数点が使える環境を利用するだろうしさ。
398デフォルトの名無しさん:2007/02/22(木) 20:54:32
複数のPCMを単一のPCMにミックスしたいんだけどどうすりゃいいのかわからない。
399デフォルトの名無しさん:2007/02/22(木) 22:06:11
>>398
加算した後でレベル調整でもすればいいんじゃね?
400デフォルトの名無しさん:2007/02/22(木) 23:50:53
レベル調整は先にやったほうが良くない?
401デフォルトの名無しさん:2007/02/23(金) 07:55:27
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;
}


402デフォルトの名無しさん:2007/02/25(日) 13:09:25
>>399-401
みんなありがとう。
やっぱ足して割ればいいのか。
403デフォルトの名無しさん:2007/03/15(木) 11:42:48
ステレオWavデータのPAN設定のやり方教えてくださ
ぐぐったけど、どうも該当するものが発見できなかったんで
404デフォルトの名無しさん:2007/03/15(木) 20:48:50
左右に振るだけじゃないの?
405デフォルトの名無しさん:2007/03/15(木) 21:06:13
たぶんパンを振るとき左右それぞれにどういう演算するかって話だろ
その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
この場合だとセンターの時音量下がって聞こえるけどね。
DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
この場合センターの時音が大きく聞こえる
406デフォルトの名無しさん:2007/03/15(木) 21:22:13
>>405
> その辺のシンセとかだと、右チャンネルの場合 L 0% - C 50% - R 100% って変化してたと思う
> この場合だとセンターの時音量下がって聞こえるけどね。

つか、左寄せの場合もセンターの場合も右寄せの場合も同じ音量

> DirectXだとセンターが両方とも100%で、右に寄せるときは左を下げてくんじゃなかったかな。
> この場合センターの時音が大きく聞こえる

この場合は正解。センターの時は、左寄せ, 右寄せの時の倍 (+6dB) になる
407デフォルトの名無しさん:2007/03/15(木) 21:29:00
>>405
・音のエネルギーは振幅の2乗に比例する
・聴覚は対数特性
この辺がヒントになるかも。
408デフォルトの名無しさん:2007/03/15(木) 22:24:48
ハードウェア・ミキサーだとセンターは3dB落ちがデフォ。
PAN振りっきりならスピーカーは1本しか鳴らないけど
センター時は2本同音量で鳴るから音量は3dBアップ。
これを補正するための3dBダウン。
これでL-C-RとPAN移動させても横一直線で移動する。

6dBダウンは再生/演奏時にモノ・ミックスされるケースを想定してのもの。
(回路内のミックスは電圧なので6dBアップ)
ハードウェア・シンセはモノ・アウトも装備する関係でそうしてあると。
409デフォルトの名無しさん:2007/03/15(木) 22:36:58
>>406
ん?センターは-3dbでしょ?
20*log(sqrt(0.5^2 + 0.5^2)) = -3.010299956639811
でいいんだよね?
だからDirectXの場合だと+3dbだったと前勉強したときは思ったんだけど・・・
間違ってる?
410デフォルトの名無しさん:2007/03/16(金) 02:09:49
正解は >>407-408
411デフォルトの名無しさん:2007/03/19(月) 12:27:37
誰かDAW作ってくれ
412デフォルトの名無しさん:2007/03/20(火) 10:48:51
>>411
frieve
413デフォルトの名無しさん:2007/03/31(土) 10:17:20
エフェクトのコーラスのうねりは時間で変化させるんですか?
それともpitchを変化させるんですか。
414デフォルトの名無しさん:2007/03/31(土) 10:39:30
コーラス:
入力音を二つに分岐させる。
片方にモジュレーション(周波数変調)をかける。
二つを加算して出力。
415413:2007/03/31(土) 10:55:39
コーラスとフランジャーは モジュレーション大きさだけの違いだけなんですか?
416デフォルトの名無しさん:2007/03/31(土) 11:45:55
・モジュレーション幅
・モジュレーション速度
・フィードバック量
・分岐させた二つの加算割合
などを変化させることによってコーラス/ビブラート/フランジャーなどが作れる。
417デフォルトの名無しさん:2007/03/31(土) 11:50:26
>>416
それの大きさで呼び名が変わるってこと?
なんどもすんません。
418デフォルトの名無しさん:2007/03/31(土) 12:30:34
そういうこと。
モジュレーション幅が広めで速度が速いとコーラスっぽくて、
モジュレーション幅が狭めで速度が遅いとフランジャーっぽい。
フランジャーの場合はフィードバック量も関係してくることが多い。
419413:2007/03/31(土) 12:34:58
サンキュです
420デフォルトの名無しさん:2007/03/31(土) 12:36:08
いえいえ。
421デフォルトの名無しさん:2007/04/01(日) 18:59:37
ぉぃぉぃ

一応混じれ酢すると
ふらんじゃー: 数ms以下の短いディレイに変調をかけ、元音とミックスして、
         中〜高音域のコムフィルター効果でメタリックな響きを出す
こーらす   :数十〜ms程度の比較的長いディレイに変調をかけ、元音とミックスして、
         (たぶん超低域のコムフィルター効果で)アンビエントな音のウネリを出す
422418:2007/04/01(日) 22:34:53
>>421
補足サンキュ。418では変調速度と変調幅だけしか言及してなかった。
(変調幅を大きくする≒ディレイ値を大きくしないといけない
 という勝手な理解をしてしまったよ。)
確かにディレイ値のほうが大きな影響があるな。
423デフォルトの名無しさん:2007/04/02(月) 00:32:07
だけど、コーラスのきついやつがフランジャー、って理解でそう間違ってないでしょ?
424デフォルトの名無しさん:2007/04/02(月) 00:33:53
おまぃに関してはおまぃの判断に任せる
425デフォルトの名無しさん:2007/04/02(月) 01:31:19
コーラスのディレイの短いやつがフランジャー、って理解で間違ってない。
426413:2007/04/02(月) 12:28:37
勉強になります。
427418: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 弦っぽい
効果があって、それ目的でパラメーター調整しやすいようにアレンジして製品化した、と。
429413:2007/04/04(水) 09:16:25
>>427
DAFxはいろいろ載ってておもしろそうですね。
Jon Dattorro  Effect Designは見れなかった。残念
ただ、英語はダメなので気長にみてみます。
430デフォルトの名無しさん:2007/04/04(水) 09:21:13
基本的にはパラメーターのレンジを変えた、同じエフェクトと思っていいと思うけど、
実際には目的の違いから異なるアイデアを盛り込んでる場合が多いと思うよ。
たとえばコーラスはぶ厚く広げるのが目的だからディレイラインがすごく多いものとか、
変調が周期波形じゃないものとか、イロイロと。
そのへんがエフェクターの個性になってくわけだが。
431デフォルトの名無しさん:2007/04/06(金) 04:03:47
今までDSP買ってエフェクターやら作ってたんだけど、ふと思った。
いい加減今のPCならリアルタイム入出力のFIR処理くらい出来るんじゃないかと。
これが出来ればあらかじめフィルタ係数用意して切り替えるようにすれば
ソフトウェアエフェクターってできそうだし。
で、作って見たがあえなく撃沈。音途切れ途切れ。

何が問題なんでしょう??
100万タップくらいのFIRなら余裕で動くと思ってたのに。
432デフォルトの名無しさん:2007/04/06(金) 07:58:42
あまり詳しくないのであれなんだが
とりあえずSSEは使った?(PowerPCならAltivec
大きいFIRはFFT利用して劇的に計算コスト減らした実装ができるんじゃなかったけか?
433デフォルトの名無しさん:2007/04/06(金) 08:02:06
ちなみにリアルタイム入出力のコンボリューションリバーブとか普通にありますよ。
434デフォルトの名無しさん:2007/04/06(金) 09:20:49
たいてい432の言うようにFFTかましてるよね。だからレイテンシーが問題になることも。
435デフォルトの名無しさん:2007/04/06(金) 12:33:04
>>431
ハードウェアのことあんまり詳しくないんだけどフィルタ係数や入力信号のバッファ
がL1 L2 超えて外部になると一気にメモリ転送の問題が発生する気がする
メモリのレイテンシーって結構デカイ気がするけど詳しい人教えて

>>433
ちょっと俺も興味あるんだけど そのソフトの詳細希望

>>434
リアルタイムでFFTだとレイテンシーもだけどブロック間の繋ぎがどうなるんだろ
436デフォルトの名無しさん:2007/04/06(金) 13:31:52
>そのソフトの詳細
今時のPCの音楽制作環境のことまるで知らないの??
コンボリューションリバーブなんかはここ数年流行っててすでに一般的。たくさんあるぞ。
「コンボリューション VST」とかでぐぐってみなはれ
437デフォルトの名無しさん:2007/04/06(金) 14:05:58
>>436
こういうのってリアルタイム入出力できるの?
438デフォルトの名無しさん:2007/04/07(土) 00:06:50
>>435
ブロック間のつなぎはoverlap-and-addでやるだけなので、大丈夫。
439デフォルトの名無しさん:2007/04/07(土) 07:49:56
>>437
DSPプログラミングやってて、今時そうゆうの知らないことのほうが驚きですよ。
音楽制作と無関係な業界でやってる技術者だったりすると案外そうゆうもんですかね。

「DSP」っていう言葉も昔は主に専用チップ、Digital Signal Processorのことを指していたけど、
汎用PCによるリアルタイム処理が台頭してきた今は、
意味が広がってデジタル信号処理全般、Digital Signal Processingというニュアンスですよ。
440デフォルトの名無しさん:2007/04/07(土) 08:12:27
FIRネタの書き込みは、どの板も具体的な話が欠落してるなw

厨?
441デフォルトの名無しさん:2007/04/07(土) 08:18:37
>440
単純に大量のかけ算するだけなら簡単だが、
FFT応用するとかいうと詳しい人なかなかいないんでしょ。
そうゆうおまいは?
442デフォルトの名無しさん:2007/04/07(土) 08:23:46
>>441
それも既出。
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/



444デフォルトの名無しさん:2007/04/07(土) 15:15:53
結局のところ今のPCじゃ時間軸での畳み込みはまだ無理ってことでFA?

多分 436はその辺は考えてなかったんだろな
知識ひけらかす前に 431の質問を汲み取ってやれ
445デフォルトの名無しさん:2007/04/07(土) 15:43:51
すいません、畳み込みリバーブのプラグインとかは時間軸での畳み込みとは違うんですか?
446デフォルトの名無しさん:2007/04/07(土) 16:45:19
今手元に可逆圧縮済みrawがあって、これをwavにしなければならないんですけど、
・rawデータはwavのヘッダ無し波形
・どういう形で圧縮されているのか分からないのでデコードしようがない

一体圧縮済みrawはどういうフォーマットなんでしょうか?
447デフォルトの名無しさん:2007/04/07(土) 17:22:42
>>445
畳み込みリバーブと書いてあっても
実際はインパルス応答 入力信号を両方FFTしてオーバーラップ法を使った
周波数軸での畳み込みをしているのでは無いかということ

この辺りは説明書とかみると書いてあるのかな?

実際に最近のCPUで誰か真っ当な時間軸での畳み込みやって
何タップくらいいけるのか測定してみてくれYO

ぉ サウンドプログラミグっぽくなってきたなおぃ
448デフォルトの名無しさん:2007/04/07(土) 17:25:30
あ もちろんリアルタイム入出力での話ね
オフラインなら何億タップだろうがメモリがあるかぎりいけるだろうからw
449445:2007/04/07(土) 19:29:09
>>447
さらにすいません、
真っ当な時間軸での畳み込みというのと、FFTを使った周波数軸での畳み込み、
というのは結果が違うのですか?
FFTを使った方法は軽いけどあくまで別物なんですか?
450デフォルトの名無しさん:2007/04/07(土) 21:14:20
>>449
(精度の問題を除いて)時間軸畳み込みと全く同じ結果が得られる方法がある。
451デフォルトの名無しさん:2007/04/07(土) 21:32:48
素人談義状態だな
452445:2007/04/07(土) 22:14:09
>>450
なるほどです。
ちょっと調べてたらなぜ畳み込みにFFTが使われるのか、とてもわかりやすい説明みつけました。
ttp://www.nextftp.com/swlabo/m0_pctech/hp_ultraprecision/up_815_1.htm

周波数軸での畳み込み?、、、というのにあたるのかどうかよく理解できないのですが、
とにかく概算で約200倍速く計算できるようなこと書いてありました。
自分はFFT自体あまり理解できてないのですが、これ読むと魔法のようすね。
453デフォルトの名無しさん:2007/04/08(日) 02:24:08
>>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) だから、何千・何万タップとかになると圧倒的にこっちが早い。
454デフォルトの名無しさん:2007/04/08(日) 05:27:24
>>451
煽りはいいから >>447 の試してソース公開してみろって
455デフォルトの名無しさん:2007/04/08(日) 10:04:31
>>447
わざわざ最新のCPUを買わなくなって計算の見積もりは出来るだろ。
そりゃ、DSPと違って、PCの場合は演算能力の見積もりは難しいけど
44.1Kで 100万(1M)となると、モノラルで44.1G/Sの積和能力が必要になる
ゲーム機のGPUなんかでは、無理に思えない数字に見えるだろうが
パソコンだと、あと10年程先だろうね

確かに100万となると20bitにもなるわけでゲーム機のような単精度でいくら
高速でも意味はないわけだけどさ。

あ、FFTを補助的に使ってリアルタイムに実現する方法もあるんで
456デフォルトの名無しさん:2007/04/08(日) 11:01:08
聞きかじり&妄想が延々と続きます・・・
457デフォルトの名無しさん:2007/04/08(日) 11:30:08
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なら不可能な数字ではない
458デフォルトの名無しさん:2007/04/08(日) 12:01:09
459デフォルトの名無しさん:2007/04/08(日) 15:18:43
>>449

直線畳み込みと循環畳み込みをfftを利用して行うこととは
数学的に完全に等価です。

ですから、数千Tappを超えるfirフィルタの処理を行うとき
時間軸での畳み込み(直線畳み込み)をやるのは
無意味だと思いますね。

これが最強、最有名です。

ttp://www.ludd.luth.se/~torger/brutefir.html
460デフォルトの名無しさん:2007/04/08(日) 15:53:22
ひたすらゴッグルさんのご神託を貼り付けるだけのスレw
461デフォルトの名無しさん:2007/04/08(日) 15:57:07
この議論、数ヶ月前にも見たw
462デフォルトの名無しさん:2007/04/08(日) 16:32:43
FFTを使う方法でもリアルタイムに出来るというのは前回無かったように思うが?
463デフォルトの名無しさん:2007/04/08(日) 16:49:50
で、この議論のどこら辺でリアルタイム手法が提案されたって?
464デフォルトの名無しさん:2007/04/08(日) 16:54:40
じゃあ 俺も妄想ね。

単精度32bitステレオで扱おうと思うとデータ量だけで
フィルタ係数分左右で1タップ8byte 入力信号とあわせると16byteの記憶領域が必要。
10万タップの時点で既に1.6Mの記憶領域が必要になってしまう。

それがどうしたという感じだが、もしこのデータを外部メモリから読み出そうとすると
最近のメモリで読み出しレイテンシーが10nsくらいだから
信号と係数を逐次読み込んで毎回積和をとるとしたら
1/10000sec が毎回読み出しだけで消費されてしまう時間。
さらにこれに積和時間と入力信号保持用にリングバッファなりしなければならない。
MMXにシフトレジスタ命令はあったはずだが。
まぁこれ考えるとCPUキャッシュから外れるとメモリ読み出し時間
が一番のボトルネックになる気がするんだけど。
10万タップもまったく現実的じゃないよな。
サンプリング8kでギリギリ読み出しが間に合う速度くらいw

とするとL1最低でもL2にデータ保持できる量=最大次数 くらいのノリにならねぇか?

キャッシュも自分でフルに使える分けじゃないし
かなりローレベルなプログラミング技術が要求されるよなぁ
465デフォルトの名無しさん:2007/04/08(日) 17:01:39
何msまでの遅延ならリアルタイムと見なせるだろうか。
30msくらい遅れると明らかに違和感が出るよな。
10msくらいならおk?
466デフォルトの名無しさん:2007/04/08(日) 17:05:21
>>465
そもそも今いっているリアルタイムはそういう意味ではない。

一定量の遅延があるだけで出力し続けれるのならそれはリアルタイム処理。
 入力→演算→出力 
の流れが次の入力が来るまでに終っているかどうか(1サンプル内で演算が終っているかどうか)
がリアルタイム処理の定義だと思われ
467デフォルトの名無しさん:2007/04/08(日) 17:26:36
レイテンシー以前の話かよw
468デフォルトの名無しさん:2007/04/08(日) 17:35:23
>>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

うーん
469デフォルトの名無しさん:2007/04/08(日) 17:42:11
>>464
単精度でFFT方式を10万タップで使うと、結果は上位8bitまでしか信用出来なくなる
浮動小数点なので、相対誤差だから十分良いといえば良いのだけどね

あと10万タップくらいならFFTでやれば今のPCならリアルタイム処理は行えるよ
実際やってるし。

だって2秒に1回計算すりゃいいんだから余裕。
素直に書いたルーチンでも1秒に10回くらいは計算出来てるよ。

470デフォルトの名無しさん:2007/04/08(日) 17:56:28
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 と大きいほど改善するようだ

さらに、細かく分割して効率化すれば、もっと効率上がるのかも
471デフォルトの名無しさん:2007/04/08(日) 18:15:45
計算間違いしてた
こうか?
 (((N/M)+M*( 1+4*log(N)/log(2)))/(N)

N=2^16 M=16を代入すると 約1/12 でしかない
472デフォルトの名無しさん:2007/04/08(日) 18:24:13
10万タップにあてはめてみるとN=16 M=32で約1/20
この時の負荷はFFTだけで計算した場合の100倍近い
473デフォルトの名無しさん:2007/04/08(日) 19:50:03
>>464
確かに時間軸での畳み込みをプログラムで実装するとそこが問題になりそうだ。
ハードのこと全然詳しくないんだが。
というかその後の話が全部周波数軸での話しになってるのが妙にうけた。
あきらかに>>464の話は時間軸での計算なのになw

FFTでの畳み込みは確かに早いんだけど精度とかアルゴリズム的なこと考慮しないといけないから面倒だな。
そういった意味では時間軸での畳み込みの限界を俺も見てみたい気がする。
474デフォルトの名無しさん:2007/04/08(日) 19:55:58
> 最近のメモリで読み出しレイテンシーが10nsくらいだから
> 信号と係数を逐次読み込んで毎回積和をとるとしたら
> 1/10000sec が毎回読み出しだけで消費されてしまう時間。

1/10000[sec]/10[ns]=10^-4/10^-8=10^4[word]

1/10000secって一体なんの話?
475デフォルトの名無しさん:2007/04/08(日) 19:59:18
10万個読み出し * 10ns と思われ リードタイム?
476デフォルトの名無しさん:2007/04/08(日) 20:03:51
10^5[個]×10^-8[sec]=10^-3
10万個なら1/1000がメモリ読み込み時間
10^6[個]×10^-8[sec]=10^-2
100万個なら1/100がメモリ読み込み時間
477デフォルトの名無しさん:2007/04/08(日) 20:28:02
FFTを使おうが、Σdt[i]*c[i]の演算は時間軸での計算だと思うけどな
単にFFTを使って掛け算を高速化しているのにすぎないわけで

>>464
まず、
係数については柔軟性を持たせる為に浮動小数点というのは悪くないが
データは16bit固定小数点で保持すれば十分だろう。
実用的には係数も16bit で十分。
(この場合でも積和累計レジスタには 16+16-1+17=48bit が必要)
その場合、途中係数が0が続く部分が大量に出る。
なぜなら全部が1のデータでも計算結果は2bitオーバフローしてしまうのだから。
だから0の部分をリスト形式でスキップすれば計算量は多少小さくなるかもね

キャッシュについては、
Σc[i]*d[i] は 分解出来るわけだから、たとえば256サンプル毎に
キャッシュに入るサイズで分割して計算すれば、問題ないだろう
478デフォルトの名無しさん:2007/04/08(日) 20:31:31
> データは16bit固定小数点で保持すれば十分だろう。
> 実用的には係数も16bit で十分。

ゲーム用途なら実用的かも。
音楽用途だと精度が低すぎ。
例えばリバーブの消えかけ部分のS/N比が低くなるだろう。
479デフォルトの名無しさん:2007/04/08(日) 20:38:18
>>478
リバーブの場合でも全体にスケーリングすれば十分さ。
逆にどこもかしこも係数が大きい100Kワードの係数があったとすれば
結果は簡単にオーバーフローしてしまう。

全部の係数が+1か-1であってもオバーフローするんだからさ
480デフォルトの名無しさん:2007/04/08(日) 20:41:18
ふーん。
固定小数点+スケーリングって事は、
トータルでは浮動小数点演算なわけだ。
481デフォルトの名無しさん:2007/04/08(日) 20:42:56
あ、ごめん。
データと係数は16bit固定小数でも
内部演算結果は48bitになるっつう話ね。了解。
482デフォルトの名無しさん:2007/04/08(日) 20:46:55
64bitマシンならともかく、現行CPUだと16+16-1+17=48bitを固定小数点で計算するには
桁上げが必要になるわけで、浮動小数点レジスタで計算させた方がいいと思うよ
483デフォルトの名無しさん:2007/04/08(日) 20:48:45
おk

一体なんのための固定小数点だったんだろうね?
484デフォルトの名無しさん:2007/04/08(日) 20:52:21
PCのインターフェースは44.1K 16bitステレオなのだから
16bit固定小数点の選択で何の過不足も無いと思うのだが?
485デフォルトの名無しさん:2007/04/08(日) 20:55:01
もーどーでもいいや。
結論出たら教えてくれ。
486デフォルトの名無しさん:2007/04/08(日) 21:05:08
じゃ、ここまでの勝手なまとめ
1、FFTを使う場合でもレイテンシ1のフィルタは実現可能
   ただし計算量はそれなりに増える
   それでも係数器が巨大ならFFTを使わない方法よりもずっと高速

2、FFTを使わない場合でもキャッシュサイズが溢れる心配については不要
  キャッシュに入るサイズにFFTでレイテンシ1のフィルタを作る時と同じように分割すればいいだけ
  だったらFFT使えよと
487デフォルトの名無しさん:2007/04/08(日) 21:06:57
DSPだと積和を1クロックで処理できるって売りを良く聞くけど
Intel入ってるとかだとどうなの? 例えば10クロック必要なら単純に
3GのCPUでも300M個の処理しかできないよね。
3億タップ!?って感じはするけど実際に使えるリソース考えると
>>464の言うリード時間の問題がほとんどになる気がする。

>>477
何個分割して処理しようが結局メモリからキャッシュにフィルタ係数なり入力信号なりを
リードしてから計算しないといけなくなるから無意味。
始めからCPUキャッシュ上に係数も信号も保持していないと駄目ぽ。

>>464
の言う1/10000sec が 1/1000sec の間違いだという仮定ならますますPCでの
リアルタイム畳み込みは時間軸では厳しくなりそうですね。
あと揚げ足とるようだけど10万個の係数読むなら10万個の入力信号も
読まないといけないわけで合計20万個のデータリードになるよ^^;
ということは 1/500sec が一度の積和に必要なメモリリード時間になるが。。。

キャッシュから外れたら無理だね。と思わせる時間だよなこれw

逆に質問、キャッシュ内データのアクセスタイムってどれくらいなんだろ。
ナノのオーダーじゃ全然遅いよね。ピコとかのオーダーなのかな
488デフォルトの名無しさん:2007/04/08(日) 21:09:20
>>486 の結論2は明らかに間違っている。
489デフォルトの名無しさん:2007/04/08(日) 21:10:01
って書いたら真上で 487が指摘していた うぇw
490デフォルトの名無しさん:2007/04/08(日) 21:20:08
>>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を計算するだけでいい というわけ

で、先に計算する時に計算順をキャッシュのサイズで分割すればいいだろ?
って話をしてるわけさ
491デフォルトの名無しさん:2007/04/08(日) 22:00:44
ようするに、
遅延器の後ろの部分は、先に計算出来るから
計算順を変更してしまって、
1サンプルでは同じ遅延器部分を何度も計算してしまうようにしちゃえばいいって事だな

で、細かく分割して計算順を変更する手間を考えたら、
だったらFFTで計算しちゃえよと
492デフォルトの名無しさん:2007/04/08(日) 22:03:03
スルー
493デフォルトの名無しさん:2007/04/08(日) 22:05:51
>>490全然計算量減ってないあたりが笑えた
494デフォルトの名無しさん:2007/04/08(日) 22:11:37
ん?  計算量は同じだけど、t0に計算が集中してしまうね

495デフォルトの名無しさん:2007/04/08(日) 22:18:05
しかもt8以降は計算量一定

一体何を言いたかったの?
496デフォルトの名無しさん:2007/04/08(日) 22:28:23
こんだけ説明されて判らんのか? どこが判らんの?
497デフォルトの名無しさん:2007/04/08(日) 22:32:40
>>494
例ではそうなってるけど、
実際は、これを分割するわけ、キャッシュに入るサイズで分割すれば
キャッシュの出入り回数はそれだけ実質へらせられる
498デフォルトの名無しさん:2007/04/08(日) 22:46:22
とりあえず誰かこれプログラムにしてみてよ
話それから
499デフォルトの名無しさん:2007/04/08(日) 23:18:17
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ワードシフトする
500デフォルトの名無しさん:2007/04/08(日) 23:19:36
訂正
× 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 で求める
501デフォルトの名無しさん:2007/04/08(日) 23:51:28
こういう計算する時の遅延器ってみんなどう実現してるのかな
DSPの場合はモジュラアドレッシングがあるからいいけど
PCの場合、俺がやった事があるのは

1、2のべき乗のサイズのバッファ取って and 演算で計算
   [(wp+i) & (BufSize-1) ]
  案外、効率が悪い

2、メモリを2倍とって wpの位置に書く時 [wp]と[wp+N] の2箇所に書いて
 読む時はそのまま [wp+i] でアクセス
  効率はいいけど、メモリが2倍必要
  仮想記憶用のテーブルにアクセス出来れば、メモリを2度割り付ければいいんだろけど

他にいい方法ある?
 メモリをその都度moveするコードはありえないとして
502デフォルトの名無しさん:2007/04/09(月) 01:03:17
何この流れ。
最近は、リアルタイムの意味を取り違えている人がいるから困ったもんだ。 (あのドラマ、リアルタイムで見た とか。お前の視覚神経はコンピューターか)
503デフォルトの名無しさん:2007/04/09(月) 01:04:27
スルー推奨
504デフォルトの名無しさん:2007/04/09(月) 10:47:29
リアルだったら殴ってるよタイム
505デフォルトの名無しさん:2007/04/09(月) 13:29:27
流れぶったぎって初歩的な質問を・・・
0〜1のリニアなスロープを聴感上リニアにしたいのですが、いい方法ありますか?
-96〜0などとしてデシベル換算だと、0が0にならないですよね。
あるいは良く近似するカーブを得る軽い方法などありますか?
(自分は累乗をよく使うのですが、近似というところではイマイチで・・・)
506デフォルトの名無しさん:2007/04/09(月) 13:38:18
指数カーブに適当に0を通る関数を掛け算したら?
(a^x)*x^b
とか bを 1/2 つまり平方根なんて良く使うよ
507デフォルトの名無しさん:2007/04/09(月) 14:44:14
平方根掛けいいですね。
試してみましたが、かなり近似しつつ0を通るようにできますね。いいこと教わりました。
リアルタイムで毎回計算する用途だと平方根はちょっと重いですかね?
類似した方法も、いろいろ試してみたいとおもいます
508デフォルトの名無しさん:2007/04/09(月) 18:34:32
a^x と √x のどっちが重いかという話なら、同じ程度だと思うが
PCならテーブル作って間を直線補間するし
DSPなら4〜5次くらいに級数近似するし
509デフォルトの名無しさん:2007/04/10(火) 01:18:11
パッタリ止まったなぁw

で、ソースまだ?
510デフォルトの名無しさん:2007/04/10(火) 02:05:59
クレ房きました
511デフォルトの名無しさん:2007/04/10(火) 02:08:10
オレ、勝手にやってる
512デフォルトの名無しさん:2007/04/10(火) 05:37:57
流れが止まった・ ∪´∀`)モキュ
513デフォルトの名無しさん:2007/04/10(火) 06:44:22
ソースって・・・・ >>499の以上に必要か?

FFTを使えば、計算量もメモリアクセスも激減するのに、
こっちは計算量は減らない。 当然メモリアクセスも。
ただ同じ領域を2度使うからキャッシュが効き易いというだけじゃ、試す必要もない
理論的に可能かどうかは式みれば判るだろ
514デフォルトの名無しさん:2007/04/11(水) 06:08:28
>>501
モジュラアドレッシングって巡回アドレッシングの事だよね?
Tiでいうところのサーキュラドレッシングモードみたいな。

最近のPCだとSSEでシフトレジスタ用意されてるからほぼ同じことできるよ。
そうじゃなかったらメモリ2倍使う2番目の方法が一番現実的な気がする

>>513
まぁまぁそう言わないで。
初心者さんにしてみたらFFTなんか使う方法よりもサクッとフィルタ係数畳み込める
時間軸での方が分かりやすいし書きやすいってのはあるんじゃない?
溢れさえ気にしなければそのままソースかけるし。
515デフォルトの名無しさん:2007/04/11(水) 08:32:25
モジュラアドレッシング は モジュロ(modulo)アドレッシング の typo だろけど
SSEで モジュロアドレッシングってどうやるの?
516デフォルトの名無しさん:2007/04/18(水) 03:20:32
すごい止まったなぁ。。。
517デフォルトの名無しさん:2007/04/18(水) 10:15:41
DSPじゃないんだから、モジュロ・アドレッシングなんてできるわけない、
ムリに再現しようとしても動作が重くなるだけで意味ない、って誰か書けよ。
518デフォルトの名無しさん:2007/04/18(水) 10:46:28
直前まで、FIRフィルタ処理の話をしてるんだろ?
モジュロアドレッシングつかわずにどう実装するんだ?
519デフォルトの名無しさん:2007/04/18(水) 11:43:45
>>518
単純に、ループと配列を使って、掛け算したのを足していく。
逆になんでモジュロアドレッシングがなきゃできないんだ?
520デフォルトの名無しさん:2007/04/18(水) 11:58:13
>>519
ソレはバッチ処理の場合だろ?

1サンプルづつデータを受信して、処理する場合、モジュロで処理しないの?
521デフォルトの名無しさん:2007/04/18(水) 12:29:19
普通に書いたら、

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 がモジュロアドレッシングなのか?
522デフォルトの名無しさん:2007/04/18(水) 12:32:07
それなんていう言語の擬似コード?
523デフォルトの名無しさん:2007/04/18(水) 14:02:00
   // :/:::::/::::::.!:::|:::: !::::::::、:::::::::::::::::、::ヽ::::::::ヽ
   !|:::/::::::.!:::::::|:::∧::::|、::::::::!.、:::::::::::::ヽ: !:::::::::: !
  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ィーミ./.:. :.:.:.!:::.!/  /   !::.!
.     |:::::::! ヽ ヽヽ.:.:.:.ヽ  / .:.:/ !::::|   /   |::::!
524デフォルトの名無しさん:2007/04/18(水) 15:22:39
>>522
PascalとかSmalltalkとかじゃないか?
525デフォルトの名無しさん:2007/04/18(水) 15:50:35
>>501
3、積和を2度に別ける
wp〜最後までと
 先頭〜 に
526デフォルトの名無しさん:2007/04/19(木) 01:57:52
久しぶりにパスカルチックな言語書く人みたわwwwwwwwww
:= なんてほんま涙がでそうやわ。

ここ見てる人はシフトレジスタ知らない人なんだねと心底思った。
527デフォルトの名無しさん:2007/04/19(木) 07:12:04
シフトレジスタ?
シフト命令の間違いか? だとしても、この話題のどこにシフト命令が?
528デフォルトの名無しさん:2007/04/19(木) 10:20:39
>>526
コンパイラが勝手にやってくれるところだろ。
529デフォルトの名無しさん:2007/04/19(木) 12:51:26
>>526
このスレと過去ログを := で検索してごらん
http://www.2chdat.net/data/html/01111704/996171508.html

たぶんあなたが思うより多かった筈だ。
たぶん、スレ参加者の半数くらいは windowsではDelphi使ってるカモ
530デフォルトの名無しさん:2007/04/19(木) 13:07:03
×スレ参加者の半数くらいは windowsではDelphi使ってる
○Delphi使ってる香具師が一人で頑張っている
531デフォルトの名無しさん:2007/04/19(木) 13:35:49
":= "が登場したのはフィルター計算とサイン波音源の話くらいかな
532デフォルトの名無しさん:2007/04/20(金) 05:00:43
:= 書いてるの明らかに一人だけじゃないかww

>>530に禿げ同
533デフォルトの名無しさん:2007/04/20(金) 07:28:59
Delphiは良いと思うよ
534デフォルトの名無しさん:2007/04/20(金) 07:38:28
うん。低レベルAPIのラッパコンポ作っておけば、
実験するときはポトペタで簡単にコード試せるし
GUI付けて、他人に試してもらうの便利。
BCBもいいけどコンパイルの早さでDelphiだな
535デフォルトの名無しさん:2007/04/20(金) 10:13:19
Delphiは完成品が重いし、コンポーネントはバグ抱えてるし、
意外とほかでの応用がきかないし、どうかな…。
536デフォルトの名無しさん:2007/04/20(金) 10:23:18
自分の場合、windows上だけで完成するわけじゃないからテスト用
アルゴリズムを評価してもらうためと自分のテスト用ね。
コンポーネントのバグは知らない。テスト用だから気にもしてないのかもね
537デフォルトの名無しさん:2007/04/20(金) 10:32:50
>>534
お前はまずPCを買い換えろ。
テストコード程度でコンパイル速度に顕著な差が出るってどんなマシン使ってんだ・・・
538デフォルトの名無しさん:2007/04/20(金) 10:51:14
Delphiは完成品がとても軽いのだが・・・・もしかしていまだにDelphi5使ってるから?

>>535はどのバージョンが何と比べて重いの?
539デフォルトの名無しさん:2007/04/20(金) 19:16:28
PC を買い換えたら Delphi の完成品の速度も、BCB のコンパイル速度も上がるな(w
540デフォルトの名無しさん:2007/04/21(土) 12:42:36
パソコンが速くなっても、BCBだとF9押して3秒くらい
Delphiは1秒以内。 実行ファイルそのままクリックしてる感覚と変わらない
だからCで書いたコードのテストでもDelphiからコマンドラインでBCCでコンパイルして
pascalでテスト部は書いてるな
541デフォルトの名無しさん:2007/04/21(土) 12:45:38
Delphi派は判ったから、他の人は何で書いてるのか知りたいな。
MATLABとか多そうだけど
542デフォルトの名無しさん:2007/04/21(土) 16:35:04
ノシ
MatlabとJava
543デフォルトの名無しさん:2007/04/21(土) 18:22:31
それ以前にこのスレはどうゆう人が多いのかな
DSP使った組み込み向け信号処理屋みたいな人とか、
PC向けリアルタイム処理(音楽関連アプリやVSTとかDXプラグインとか)やってるひととかさ。
それによってだいぶ違うよね?
前々からそれによって微妙に話しが食い違うときがあった気が。
いわゆるゲーム屋とかでは、このスレみたいなやれFIRとかFFTとかいう話題にならないし
544デフォルトの名無しさん:2007/04/21(土) 18:54:32
音を利用するプログラムを作ろうとしてるか、音データを処理するプログラムを作ろうとしてるかだけでもだいぶ違うな。
545デフォルトの名無しさん:2007/04/21(土) 19:22:09
>>543
ところがどっこい
エンタメ系サーバ書いてる奴がPhaseVocoder使ってたりするw
546デフォルトの名無しさん:2007/04/21(土) 21:06:25
私ゃ信号処理屋だから参考にしてるだけ。
まぁでも、光もナノテクの世界では音みたいなもんだしね。
547デフォルトの名無しさん:2007/04/21(土) 21:11:30
非現実的な妄想発言を見てしまった
548デフォルトの名無しさん:2007/04/21(土) 21:13:00
>>185書いた人?
549デフォルトの名無しさん:2007/04/21(土) 21:13:00
低学歴が犯しがちなトンでも発言だな
550デフォルトの名無しさん:2007/04/21(土) 21:37:05
このスレ 面白いんだけど、ドレが正解かよく判らん所もあるな
551546:2007/04/21(土) 21:37:39
私ゃ>185じゃないよ。

光の回折でエッジが暈けるから位相を反転して合成しようとか、
光の密度が均一じゃないから反射を利用して均一にしようとか、
そういう話を実際の光源でテストする前にシミュレーションする仕事が
よく来るのよ。実際何がどうしてそうなるのかなんてよく判らんけどね。
552デフォルトの名無しさん:2007/04/21(土) 21:40:29
じゃ>>185は正解なの? 
あと >>109は?
553デフォルトの名無しさん:2007/04/21(土) 22:52:39
低学歴なんでよくわからないけど、
スペクトル分解(フーリエ解析)なんかは、
電磁波でも音波でも全く同じ数学なんじゃないの?
554デフォルトの名無しさん:2007/04/21(土) 23:09:21
>>553
光と音は波としての性質は同じだが、目と耳は構造も機能も全く違うからな。
555デフォルトの名無しさん:2007/04/21(土) 23:30:56
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクwをやっているのかkwskw
556デフォルトの名無しさん:2007/04/21(土) 23:52:11
まあいいじゃないの、そんなとこに食いつかなくても
557デフォルトの名無しさん:2007/04/22(日) 00:04:21
はいやっぱり逃げたね
いくらなんでも愚かすぎる光学技術者だと思ったら
やっぱネタか
558デフォルトの名無しさん:2007/04/22(日) 00:17:39
画像処理と音声処理の共通点の無さは異常
559デフォルトの名無しさん:2007/04/22(日) 00:21:20
決まり文句も出たところでこのへんで
560546:2007/04/22(日) 05:54:18
面白いなぁ、勝手放題で。
信号としての特性に似たところがあるってのを似たようなもんだって書き間違えただけでこれだ。
それに私は自分が光学技術者だなんて一言も書いてないのだけれど。
561デフォルトの名無しさん:2007/04/22(日) 08:06:15
だいじょぶ、俺は信じるよ
562デフォルトの名無しさん:2007/04/22(日) 08:35:52
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクをやっているのかちゃんと言ってごらん
563デフォルトの名無しさん:2007/04/22(日) 08:37:10
>>545
PhaseVocoderを何に使うんだろうね
564デフォルトの名無しさん:2007/04/22(日) 10:04:38
>>109の音は干渉しても消えないというのは

・光の波は進行方向に垂直だから進行方向が異なっても
 合成した場合、電界変化がゼロになった場所は磁界変化もゼロで、その場所では検出出来ない


音の波は、
http://tmhf.eng.shizuoka.ac.jp/m5/yanafuku/resonance/wave.htm
・進行波は運動量変化が進行方向に生じるので、方向が違うならベクトル加算しても消えない
・定在波は、運動量変化と圧力は90度位相がズレているので、圧力変化が最小の場所は運動量最大である

だから音の波は干渉では消えない。 
>>181 のように仮想の壁で反射する事でダクト消音は出来るが、これは干渉ではない。


・・・という理解で正しい?
565デフォルトの名無しさん:2007/04/22(日) 10:25:13
高卒かよw
566デフォルトの名無しさん:2007/04/22(日) 10:35:27
V
567デフォルトの名無しさん:2007/04/22(日) 10:37:43
> 光もナノテクの世界では音みたいなもんだしね

どんなナノテクをやっているのかちゃんと言ってごらん
568546:2007/04/22(日) 11:49:46
私自身はナノテク技術者やってるわけじゃないんだけどな。
まぁ、同じレスがコピペされている段階で相手にするだけ無駄か。
569デフォルトの名無しさん:2007/04/22(日) 12:03:50
お前は自分の発言に責任を持っていない。
まともな神経を持った人間とは言い難いな
570デフォルトの名無しさん:2007/04/22(日) 12:09:18
この人は2ちゃんに何を期待しているのだろう・・・
571546:2007/04/22(日) 12:09:31
みんなごめんね☆

何か寂しくなっちゃって全然関係ないこと書き込みしちゃいました。

反省したので明日ボウズにしてきます。

(;_;)

572デフォルトの名無しさん:2007/04/22(日) 12:30:47
>>569
侮辱的な発言ありがとう
ちゃんと責任とれよ
573546≠571:2007/04/22(日) 13:19:56
あ〜あ、もう収集つかないね。
574デフォルトの名無しさん:2007/04/22(日) 15:08:07
今どき絵に描いたような煽りにつきあうなよ。
575デフォルトの名無しさん:2007/04/22(日) 15:46:49
>>564
ホントに光も磁界変化はゼロになるのかな?
2つの送信アンテナ1,2 で逆相で送信して、等距離の3の位置で受信すると考える

@      A
 \   /
   \/
   B

電界を検出するアンテナでは、3の位置では逆相で打ち消される
では、バーアンテナを3の位置に取り付けたらどうだろ? 
1−2に平行の場合は、話の通り、検出出来ない。 
バーアンテナを1の同心円方向に設置すれば2に対して指向性が働いて受信出来てしまうんじゃないのか?
576デフォルトの名無しさん:2007/04/22(日) 17:21:31
電磁波の場合、そのバーアンテナを設置した事で、状態が変化してしまうよ。
バーアンテナをその向きに設置したことでバーアンテナに磁界変化が起きる=然電界も変化するわけで、
バーアンテナを設置したことで、普通のアンテナでも受信出来る位置になってしまうわけ
577デフォルトの名無しさん:2007/04/22(日) 18:29:07
おまえら電波かよw
578デフォルトの名無しさん:2007/04/22(日) 18:40:00
波の物理的なイメージってのは、難しいよね。
だから、こういうのをしっかり掴む為にも、こういう議論は有意義だと思う
579デフォルトの名無しさん:2007/04/22(日) 18:54:37
>>577
デムパというよか、電子回路系なんだろうよ
この不思議な議論の流れから察するに
580デフォルトの名無しさん:2007/04/22(日) 22:54:13
電子回路系、、、ってのもずいぶんと無知な言い方だが
とりあえずスレ違いの域なのは確かだな
581デフォルトの名無しさん:2007/04/22(日) 22:57:33
ムリな言い訳しなさんな
あんた向いてないよ
582デフォルトの名無しさん:2007/04/23(月) 01:58:28
軌道修正を行います。
完了推定時間、9分です。
583デフォルトの名無しさん:2007/04/23(月) 07:31:03
スタジオエンジニアとか、ホール設計とかだと、300Hzの音聞きながら、
部屋の中に波長1mの定在波をイメージしてたりするんだろか?
584デフォルトの名無しさん:2007/04/24(火) 01:27:43
オレ、しないな。
585デフォルトの名無しさん:2007/04/24(火) 01:49:55
音を聴きながら波形をイメージすることはあるよな?
この音は丸っこい、とかカクカクしてる、とか。
586デフォルトの名無しさん:2007/04/24(火) 03:09:57
>583,>585
スレ違い。
プログラミング関係ねぇし、お前が何イメージしてるかなんてどーでもいい。
587デフォルトの名無しさん:2007/04/24(火) 04:08:07
プログラミングならグラフをイメージしないとやっていけないだろ
この音の振幅は・・・周波数は・・・・・だめだ、差分適応PCMは圧縮できそうにない・・・・・・
588デフォルトの名無しさん:2007/04/24(火) 07:03:29
>>586
スレ違いだと思うなら、何かネタをフルべきだと思う。
それじゃ潰し屋だ。

プログラミングネタは、APIの呼び出し関係は
それぞれの環境依存がすぎて本人特定されちゃうくらいなわけで、
まあ各自マニュアル嫁って事で、話題にし辛い。

アルゴリズムネタにどうしても流れてしまうのは仕方ないと思うが・・・限界があるよな。

でも、そろそろ新人さんのhelp meネタがあってもよさそうなんだが・・・・
怖がらずに質問してくれていいんだよ>>新人さん
589デフォルトの名無しさん:2007/04/24(火) 09:17:25
昔、質問したら、難しい物理方程式を出されて全く理解不能だった。
プログラムの実例を教えて欲しかったんだが。 物理の勉強をしに来たわけじゃないので。
590デフォルトの名無しさん:2007/04/24(火) 09:29:47
なるほど。 でも方程式を教えてくれただけでも良かったと思うのだが?
さすがにコードまでは書いてくれんでしょ
591デフォルトの名無しさん:2007/04/24(火) 09:58:17
人はそれを丸投げと言うからな。
592デフォルトの名無しさん:2007/04/24(火) 10:10:10
理屈を知ってないと応用が利かないしねえ。
いちいち質問する訳にも逝かないだろう。


音関係の弄りやすいライブラリって何?
やっぱりダイレクトエックスとか?
593デフォルトの名無しさん:2007/04/24(火) 10:11:43
>>589
数式が読めない人は、プログラムの前に数学を勉強すべき。
仕組みが理解できてないと、問題があったときに対処できないだろ?
594デフォルトの名無しさん:2007/04/24(火) 10:13:12
今は googleさんがあるから、キーワード一つ教えてくれれば、後はなんとかなるものな
595デフォルトの名無しさん:2007/04/24(火) 10:14:56
で、検索したらこのスレがヒットするという
596デフォルトの名無しさん:2007/04/24(火) 10:59:08
そして質問してみて、にちゃんの洗礼を受ける。
にちゃんねらーとしてにちゃん教に入信しました。他の宗教は信仰しては逝けません。
597デフォルトの名無しさん:2007/04/24(火) 18:57:23
やろうとすること次第であって、大半のことは中〜高校数学程度で足りるしょ。
複雑な数式理解できないと話しにならないような場面は限られてる。
数式が出てきても必ずしも理解する必要はないし、道具として使い方知ってれば事は足りる。
そこそこ詳しい人ってのは、必要以上に難しく説明しがちなもんだわさ。
598デフォルトの名無しさん:2007/04/24(火) 19:05:21
おめえはホント口先ばっか達者で話題が乏しいな
599デフォルトの名無しさん:2007/04/24(火) 19:48:33
>>597
高等教育とはそんなものじゃないよ。
中卒の方ですか?
600デフォルトの名無しさん:2007/04/24(火) 19:53:50
だからさ道具と思って知ってるだけじゃ応用効かないって話。
答えが見つかればそれを道具として中身を理解せずに使えば良いじゃんって頭悪い。
601デフォルトの名無しさん:2007/04/24(火) 19:57:13
じゃあ質問します
アナログアンプのシミュレータを作りたいと思ってるです。
真空管なんかは飽和歪みがひとつの特徴らしいのですが、そのほかに注目するべき点はどこでしょう。
位相特性みたいな話しをよく聞くのですが、
この場合の位相特性とは具体的にどうゆうことなんでしょう?
アナログアンプ的な特徴的な位相特性とはなんでしょう?
602デフォルトの名無しさん:2007/04/24(火) 20:18:17
                           _ , ─ - 、
                       , -‐'´      ヽー 、
                      , .'´        ソー     ヽ
                 -≠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旋盤工と推測・・・性交経験なし・・・
603デフォルトの名無しさん:2007/04/24(火) 21:05:27
自分で測定するのが一番いいのだろうけど、
回路シミュレータでやってる人がいるので
http://www.geocities.jp/ltspice_swcadiii/tube/index.html

これをベースにやればどう?
604601:2007/04/24(火) 21:42:16
あー参考になりそうだけどむずかしいな。。。回路設計とかの知識はまったくないもんで。
きほんてきなことなんだけど位相特性というのは、
周波数成分ごとの信号の遅れ(ディレイ)と単純に考えていいの??
ここのページのグラフだと、高域成分ほど遅れてると見るんでしょか。
実際に周波数特性をフラットなまま周波数成分ごとの遅れをシミュレーションするとしたら、
どういう実装方法になるんだろう。
605デフォルトの名無しさん:2007/04/24(火) 21:58:23
位相特性は位相特性 高域程ってあのグラフは1Mまで伸びてるから

10KHzで360度だから1遅延程度を入れて位相特性図を描きなおした方がいいと思う
位相だけを補正するなら 
 APF=オールパスフィルタ
が 検索キーワード
606デフォルトの名無しさん:2007/04/24(火) 22:00:45
ようわからんけどFFTで帯域ごとに処理でいんでね?
607デフォルトの名無しさん:2007/04/24(火) 22:05:36
FFTで帯域ごとにってのは・・・
 短時間FFTで周波数軸上で音の加工は基本的に出来ない。
 短時間FFTを使うならFIRフィルタの高速計算の目的で

位相特性だけを加工したいなら、オールパスフィルタ( IIRフィルタ)を複数組み合わせるのが最適
オールパスフィルタには1次と2次があり、
どちらも実現式は非常に簡単。

googleさんで調べて、ダメならまた聞いて。
608デフォルトの名無しさん:2007/04/24(火) 22:25:15
DTM板の関連スレを焼きなおしてるだけじゃん最近の話題って
なんでそんな貧しい行為に必死になるかな
609デフォルトの名無しさん:2007/04/24(火) 22:40:03
高域だけを遅延すりゃいいのなら、FIRフィルタでも出来る
0, 0.038394
1, -0.188396
2, 0.958548
3, 0.191451
これで大体高域が90度回る

低域で位相を回したいならIIR-オールパスフィルタでないと面倒だ
610デフォルトの名無しさん:2007/04/24(火) 23:01:38
これで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
611601:2007/04/24(火) 23:07:07
オールパスフィルタって、存在はは知ってたけどこうゆうときに使えるのか。
とりあえずフィルタの実験に入ることにします。
FIRも係数このぐらいのなら低負荷でいけますね。(てか設計すんの速いですね・・・
612デフォルトの名無しさん:2007/04/25(水) 01:13:29
設計はMatlabでポンだよ。
613601:2007/04/25(水) 01:18:18
位相いじるの面白いですね、オーディオ的にかなりいい経験です。
オールパスフィルタをスタックしたりして極端なことやってみてるのですが
スペアナ見てるぶんには周波数特性変わらないのに、
ほんとに音の太さとか(というと曖昧だけど)ニュアンスが変わって
特にベースやキックなんかの低音楽器はわかりやすいですね。
周波数特性だけじゃ出音は語れないっての痛感・・・
614デフォルトの名無しさん:2007/04/25(水) 02:33:15
本来は位相も含めて周波数特性というんだが、スペアナとかで見える値は振幅の絶対値
でしかないわけだから本来の周波数情報のうち大部分欠落した情報を見せられているから
無理もない話なのかもしれん。
615デフォルトの名無しさん:2007/04/25(水) 03:03:57
真空管の振幅を実際見てないとイメージしにくいだろうなあ。
経験的にどうなるかは知ってても、知らない人に説明できる自信は無い。orz

なんとなくプラグイン買う金がないから自分でなんとかしよう的な雰囲気はあるよね。
PCでシュミレーションもいいけど、実際に回路設計して半田ごてで制作するのも楽しいと思うよ。
616デフォルトの名無しさん:2007/04/25(水) 06:30:10
> 本来は位相も含めて周波数特性というんだが

位相の周波数的変化を群速度という。
617デフォルトの名無しさん:2007/04/25(水) 10:12:43
理屈抜きで音だけでいいなら、
素の音と、軽くディストーションをかけてLPFを通したものをまぜて、
それにディストーションをかけてHPFを通すと、アンプの音になる。

役立つ参考リンク
http://www.harmony-central.com/Guitar/guitar-amp-evolution.html
http://www.harmony-central.com/Guitar/guitar-amp-evolution.html
618デフォルトの名無しさん:2007/04/25(水) 10:16:01
なんだここ荒してたのもアイツだったのか
世も末だな
619デフォルトの名無しさん:2007/04/25(水) 17:16:41
何をいまさら
620デフォルトの名無しさん:2007/04/26(木) 08:29:57
FIRフィルタで位相が変化しないフィルタが作れるっていうのは、それは遅延を無視してるからだよね?
621デフォルトの名無しさん:2007/04/26(木) 08:46:44
よし、googleさんで、このスレがヒットするように書き込み

オールパスフィルタで フェーズシフタとかワウワウ とか
622デフォルトの名無しさん:2007/04/26(木) 22:50:54
前から思ってたのだが、
このスレってスレタイから想像するのと微妙に雰囲気違う気がするな。
次回から【FFT】デジタル信号処理プログラミング【IIR/FIR】とかにしてはw
623デフォルトの名無しさん:2007/04/26(木) 23:18:18
それは悲しい。
624デフォルトの名無しさん:2007/04/26(木) 23:40:49
>>622
おまいはスレタイからどんな想像するのか言ってみろ
625デフォルトの名無しさん:2007/04/27(金) 00:47:34
いやほら、サウンドのプログラミング、サウンドをプログラムするというと
もっとサウンドそのものというか、コンテンツ自体に近いイメージないか?
あとゲーム系。実際サウンドプログラマーと呼ばれる職種があるしさ
シンセなんかの音色を作ったりするのもサウンドプログラミングと呼ばれることがあるしな。
626デフォルトの名無しさん:2007/04/27(金) 01:00:32
おすすめ2ちゃんねるに注目w
627デフォルトの名無しさん:2007/04/27(金) 01:16:41
>>625
その辺はDTM板で扱う話題のような。

まあ、紛らわしいのは良くないんで次スレは「音声処理」にでもするか?
「デジタル信号処理」は音声以外にもいろいろあるし。
628デフォルトの名無しさん:2007/04/27(金) 01:25:03
>>625
シンセの音色はマズイが、その上はまあスレ違いとは言われないだろ
629デフォルトの名無しさん:2007/04/27(金) 01:35:29
自分は「サウンドプログラミング」の語感からだと音に関しての出力段に近い処理の事のニュアンスが強いな。
このスレの流れだと「信号処理」(デジタルに限らないが周波数は可聴領域)って感じかしらん?

630デフォルトの名無しさん:2007/04/27(金) 01:49:05
そんなに話題の幅を狭めなくても、音に関する処理全般をプログラム板的に扱うスレ、でいいじゃん。
631デフォルトの名無しさん:2007/04/27(金) 02:47:44
このスレでよく出てくるようなデジタルフィルターや、いろいろな変換/解析技術とか、
デジタルオーディオを扱うソフトウェア技術を総称してなんと呼ぶのか、ということだな。
DSPプログラミング、とかもありかな。
632デフォルトの名無しさん:2007/04/27(金) 04:42:50
サウンドの技術屋なんてただでさえ多くないんだから別に細分化しなくてもいいでしょ。
ドライバ語ってもいいし、MIDIデータ語ってもいいじゃない。
633デフォルトの名無しさん:2007/04/27(金) 06:12:38
同意

それにしても
サウンドプログラミングというと、楽器機材のオペレーションや打ち込みを意味したり
サウンドエンジニアというと、音楽スタジオのレコーディング・ミキシングエンジニアを意味したりするから
世の中ややこしいわな・・・
音楽スタジオのエンジニアのほうもそう言ってたの聞いたことある
634デフォルトの名無しさん:2007/04/27(金) 06:32:14
空理空論ばっかりの荒しうぜぇ
635デフォルトの名無しさん:2007/04/27(金) 07:48:40
まあ、プログラム板にある時点で察しろってことだな。
636デフォルトの名無しさん:2007/04/27(金) 10:05:21
シンセの音作りや、効果音の鳴らし方の質問も答えるよ。
637デフォルトの名無しさん:2007/04/27(金) 10:46:00
MIDIデータの音長に1/fのゆらぎを与えるプログラムの書き方を教えてください
638デフォルトの名無しさん:2007/04/27(金) 10:57:13
1/fゆらぎ というのは、周波数に反比例してノイズが大きくなる事
正規乱数を累積すればいいのだが、正直にやると、発散してしまう。

単純に乱数を2個取って は cは小さい係数として
d := ( (rand()-rand())*c + d*(1-c) );

この d を単位時間毎に更新しては、オフセットとして加算しては?
639デフォルトの名無しさん:2007/04/27(金) 10:59:12
>>637
ランダムに値を増減する、というのを何度も繰り返すと、
元の値に近い部分が最も多く、元の値から離れたものが最も少なくなる。
これが一番簡単な1/fゆらぎの作り方。
640デフォルトの名無しさん:2007/04/27(金) 12:02:55
ゲーム業界の狭い呼称を世界標準と勘違いされてもねえ。
ここは音響全般のプログラミングでしょ。

ゲームとか楽曲とかのエンジニアはミュージックプログラミングの方が近い。
DTM板の方が適当だろうね。プログラムあんまり関係ないし。ソフトでどう表現するかの方が主体。
641デフォルトの名無しさん:2007/04/27(金) 15:28:54
Flashでサウンドプログラミングしてる人っている?
いろいろできるみたいなんだけど。
http://www.dtmm.co.jp/archives/2007/04/flashmod.html
642デフォルトの名無しさん:2007/04/27(金) 20:32:19
>>641
おお興味ある。
前からFlashでリアルタイムのサウンド処理できたらと思ってたんだけど、不可能とあきらめてた。
で、びっくりしたんでざくっと調べてみたんだけど、
最新のFlash CS3(FLASH 9) with ActionScript3で可能になってきたっぽいな
ランタイムVM(Flash player)もインタープリタ式からJITコンパイラに変わったり
すげすげ
643デフォルトの名無しさん:2007/04/28(土) 01:51:29
もうねすれ違いでわりぃんだけど
ECMAScriptのJIT実装ってどうやって型の解決してんだか、そっちが気になったのと
AMラジオの帯域だと今時のCPUで処理可能なんだなと思うとサウンドプログラミングって名前で良いのかとちょいと疑問に思う(w
644デフォルトの名無しさん:2007/04/28(土) 07:08:22
もう支離滅裂やん
いい加減にしろキチガイ
645デフォルトの名無しさん:2007/04/28(土) 08:06:19
AS3ってJTIとかそういうのじゃなくて
単なる実行エンジンの改良で早くなったときいたんだけど。
というかマジちんこ痒い。
646デフォルトの名無しさん:2007/04/28(土) 08:10:14
いい加減にしろよ
647デフォルトの名無しさん:2007/04/28(土) 08:27:41
といって、このスレでf0/Qがコントロール出来るフィルタ教えろと言っても教えてくれんだろ?
648デフォルトの名無しさん:2007/04/28(土) 09:18:10
http://pc.watch.impress.co.jp/docs/2006/1122/mobile357.htm
2.7MHzの1bit信号を88.2kHzのPCMに変換するデシメーションフィルタ
って、あるけど
http://www.sony.jp/products/Consumer/SACD/format/index.html
サンプリング周波数は2.8224MHzとあるから64倍でしかないのだから

コレって何てこと無い単なるFIRのLPFだよね?
演算負荷下げる為にFFT使う程度だと思えるのだが
649デフォルトの名無しさん:2007/04/28(土) 13:06:20
なんだよソフトウェア・ラジオの話題かよ
そんなInterfaceの過去記事みたいな話題を
いまさらここでやって何になるの?

何かハッタリをこいたつもりなのかこの親父は
650デフォルトの名無しさん:2007/04/28(土) 13:07:42
>>648はDSDかよ
651デフォルトの名無しさん:2007/04/30(月) 08:57:31
Winampのプラグインか、VSTプラグインで、エフェクタ系のプログラムを
作ってみたいのですが、何かいい参考書、文献、Webなどありませんか?
みなさんは、サウンドプログラミングを始めるとき、何をとっかかりにして
スタートしたんですか?
652デフォルトの名無しさん:2007/04/30(月) 09:17:12
俺はDelphiで WinAmpの winampDSPGetHeader2 を書いた
SDKを落として、そのDSP.Hを見れば判ると思う。 他に特に資料は必要なかったよ。
653デフォルトの名無しさん:2007/04/30(月) 11:38:49
654デフォルトの名無しさん:2007/04/30(月) 11:55:59
周波数変調について詳しく書いてるウェブページとか本とかない?
655デフォルトの名無しさん:2007/04/30(月) 12:28:45
普通に信号処理の本に当たればいいんじゃないの
656デフォルトの名無しさん:2007/04/30(月) 16:52:03
>>652
>>653
感謝。参考に勉強させていただきます。
657デフォルトの名無しさん:2007/04/30(月) 17:15:50
Wikipediaをwikiって略すな!
同時にWikipedia以外のWikiも盛り上げよう!

658デフォルトの名無しさん:2007/04/30(月) 17:36:38
まずはお前からな
659デフォルトの名無しさん:2007/04/30(月) 17:40:19
sage
660デフォルトの名無しさん:2007/05/01(火) 18:46:42
>>597
経過をすっ飛ばして結果だけを見たらそうだろうな
661デフォルトの名無しさん:2007/05/04(金) 01:11:36
ソフトラジオって馬鹿っぽいな。
モデムみたいに音声帯域で振幅変調して送受信するのか?
662デフォルトの名無しさん:2007/05/04(金) 04:55:34
>>661
送信したらラジオじゃないから
663デフォルトの名無しさん:2007/05/06(日) 13:01:07
トランシーバーか
664デフォルトの名無しさん:2007/05/06(日) 13:28:43
高周波の聴きすぎでなんとなく耳が痛い
665デフォルトの名無しさん:2007/05/06(日) 13:32:33
帯域400KHzくらいにスペクトラム拡散するトランシーバとか面白そうだな
666デフォルトの名無しさん:2007/05/09(水) 18:48:34
サイン波オシレーターを別のサイン波オシレーターで
周波数変調(FM)した結果をアンチエイリアス化するにはどうしたらいいすか?
オーバーサンプリング以外の方法で。
発生してしまったナイキスト周波数以上の高次倍音を取り除くというより、
あらかじめナイキスト周波数以上の倍音を含まないように周波数変調を行うみたいなイメージなんですが
667デフォルトの名無しさん:2007/05/09(水) 20:08:15
あらかじめ指定された帯域に引き伸ばすFM変調というと TSP(時間引き延ばしパルス) の事が思い浮かぶのだが?
668デフォルトの名無しさん:2007/05/10(木) 00:55:36
すっかりデムパスレと化したなw
669デフォルトの名無しさん:2007/05/10(木) 02:56:34
あらかじめ指定された帯域に引き伸ばす?
TSPがどう関係あるの??
670デフォルトの名無しさん:2007/05/10(木) 03:21:29
>>666
俺も考えた事ある

積分とかできんのかな
671デフォルトの名無しさん:2007/05/10(木) 10:25:21
FM変調の原理的に、高い周波数を含まないような変調をするのはまずムリ。
だからみんなオーバーサンプリングかフィルタをかけるかする。

オーバーサンプリングがいやなら、補間して平均とってデータをなまらせるか、
フィルタをかけるかぐらいしかない。
672デフォルトの名無しさん:2007/05/10(木) 10:49:34

sinc関数との畳み込みした結果が綺麗になってくれたらいいんだけど
673デフォルトの名無しさん:2007/05/10(木) 13:12:13
sin(t*freq + ( sin(t*freq*ratio)*depth ) )
の1サンプル分の区間の積分とかできんの?
CPU負荷はとんでもないかも
知ったぶりぶり
674デフォルトの名無しさん:2007/05/10(木) 13:17:16
1サンプル分じゃないだろ 周波数を制限するんだから
∫ sin(t*freq + ( sin(t*freq*ratio)*depth ) ) * sin(x-t)/(x-t) dt
では?
675デフォルトの名無しさん:2007/05/10(木) 15:06:38
>671
フィルタだけでは折りかえしちゃったのはもう取れないよな
結局upサンプリングしてフィルタしないと
676デフォルトの名無しさん:2007/05/10(木) 15:09:33
まあでもFM音源の場合は、 >>673の ratioが整数か 1/整数 だから
ナイキスト周波数以上が折り返しても、ソレはソレで 
677デフォルトの名無しさん:2007/05/10(木) 15:36:14
その後考えたんすが
周波数変調というより、サイン波の位相変調(世間のFM音源と同じように)と考えて
1サンプルあたりの位相の変化幅を制限するみたいなアプローチはだめすかね??
山を飛び越えないようにみたいな
678デフォルトの名無しさん:2007/05/11(金) 07:06:25
簡単な計算方法があるんなら、それでFM変調してサイン波掛算してやれば理想のFM放送波の出来上がり
679デフォルトの名無しさん:2007/05/11(金) 20:56:48
周波数領域で変調してナイキスト周波数以下を逆FFT(w
680デフォルトの名無しさん:2007/05/13(日) 02:03:47
初めてサウンドプログラムに挑戦していますが、このスレにとても助けられています。


ありがとう。
681デフォルトの名無しさん:2007/05/13(日) 13:05:13
よかったら何でもいいから質問してね。
低レベルから高レベルまで大丈夫だと思うからさ
682デフォルトの名無しさん:2007/05/13(日) 14:17:27
といって、このスレでf0/Qがコントロール出来るフィルタ教えろと言っても教えてくれんだろ?
683デフォルトの名無しさん:2007/05/13(日) 15:46:40
そりゃ、教えられん。 
2次IIRフィルタの係数をゆっくり変更するので我慢しておくれ。
684デフォルトの名無しさん:2007/05/13(日) 15:53:41
2次IIRフィルタの係数を求める方法は
http://ufcpp.net/study/digital_filter/biquad.html

f0/Qを変更する場合、実行中に急激に変更すると発振する場合があるので
ある程度ゆっくり変更しなければいけない。
どの程度ゆっくりでなければいけないかは、教えられない。自分で試してくれ。

f0/Qを独立に制御出来るフィルターもあるけど、それは教えられないよ。
685デフォルトの名無しさん:2007/05/13(日) 18:24:41
16bit44.1kHzモノラルの連続サウンドデータに、ホールのような響きを加える方法を教えてください。
686デフォルトの名無しさん:2007/05/13(日) 18:32:03
for(n=0; n<Length; n+=1)
 for(i=0; i<A; i+=1) data[n] += data[n-i] / (A-i);
687デフォルトの名無しさん:2007/05/13(日) 19:45:40
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);
688デフォルトの名無しさん:2007/05/13(日) 23:36:27
サウンド初心者です。

まずこの二つの音を聞いて欲しいですが、
http://kissho6.xii.jp/14/src/1yon2350.wav.html
http://kissho6.xii.jp/14/src/1yon2351.wav.html
片方がオリジナルで、もう片方はOpenALに出力された音をファイルに落としたものです。
ずいぶん変わったような気がするのですが、
これ実際のところどの程度劣化しているのでしょうか?
また、これだけでこの原因が分かる方がいたら是非教えて欲しいです^^
689デフォルトの名無しさん:2007/05/14(月) 01:22:26
前者 nSamplesPerSec 44100
後者 nSamplesPerSec 22050

えーと。
690デフォルトの名無しさん:2007/05/14(月) 04:06:44
>>688
倍違うサイズにすら気付かないフリして釣ろうって辺りが無理ありすぎ。
マジレスすると、マ板の方が良く釣れると思われ。
691デフォルトの名無しさん:2007/05/14(月) 08:29:38
前者 nSamplesPerSec 44100
後者 未知のエネルギーを感じる・・・

なんだこれは・・・!?
692デフォルトの名無しさん:2007/05/14(月) 09:25:14
イデの以下略
693688:2007/05/14(月) 10:09:05
>>689-692
ありがとうございます。
サンプリングレートが違うことは気づきませんでした。
ただ、これは書き忘れていたのですが後者がオリジナルで、
前者がOpenALから出力したものです。
(>>688の書き方でミスリードされた方がいたらすいません^^)

つまり、自分としては44100の後者の方が音質が劣化していると感じたのですが、
そういったレスが無いとするとあまり優位な差では無い、もしくは完全に自分の間違いと言うことなのでしょうか?
もしくはどちらがオリジナルか分からなければ優劣はつけられないと言うことなのでしょうか?
(音量レベルが違うことやサンプルの長さが短いなどの問題もありそうですが^^)
694デフォルトの名無しさん:2007/05/14(月) 10:30:31
前者 nSamplesPerSec 44100 実質モノラル
後者 nSamplesPerSec 22050 ステレオ
モノラルとステレオの差が大きいのだろ
695デフォルトの名無しさん:2007/05/14(月) 11:04:30
     .i\ /i
    < '´  ̄ ヽ
   __彡ノメノノlノリ〉 
   \ `ソリ!゚ ヮ゚ノi  耳も2つとかケチくさいこといわずに、
     ><(つ!>つ  3個とか4個とかついてれば、立体感あるのかしら?
    / ,く//_|l〉
     ̄ l.ノl.ノ
696デフォルトの名無しさん:2007/05/14(月) 11:09:39
そりゃまあ3次元を伝わる波だから3つ欲しい所だろうけど
地上には重力があるから上下については鈍感でよかったんだろな
697デフォルトの名無しさん:2007/05/14(月) 11:26:43
>>693
逆だと思ってたから、どうやってステレオ化してるのかとちょちビビッてたよ。
44.1Kの方が後から作られたんなら、単にモノラル化されただけ。
698デフォルトの名無しさん:2007/05/14(月) 12:48:32
脳もry
699デフォルトの名無しさん:2007/05/14(月) 12:53:36
実際キリギリスとかは足に幾つも耳がついてた様な気が
でもこの場合単に振動を感知するだけだから話が違うかもしれない
700デフォルトの名無しさん:2007/05/14(月) 23:50:51
猫は縦方向も聞き分けているみたいだよ。
#あ、あいつらは耳を動かすから指向性を持たせられるのか。
701デフォルトの名無しさん:2007/05/15(火) 00:05:03
>>694
>>697
そうでした。
OpenALは内部でモノラル音源になってしまうことを
すっかり忘れていました。
一応3Dサウンドらしく、ステレオを左右の音に分解して
それぞれの発生位置を左右にズラしてみたのですが、
結局モノラルのままでした。
http://kissho6.xii.jp/14/src/1yon2362.wav.html
702デフォルトの名無しさん:2007/05/15(火) 00:22:48
「サウンドにおける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;
 ...
}
703デフォルトの名無しさん:2007/05/15(火) 01:21:12
つ DSP
704デフォルトの名無しさん:2007/05/15(火) 07:39:26
EAXはいわば固定機能みたいなもんか
705デフォルトの名無しさん:2007/05/15(火) 21:51:31
>686-687
プログラムだけ出されても正直理解に苦しみますが、とりあえずありがとう。
706デフォルトの名無しさん:2007/05/15(火) 22:13:48
>>705
あなたがやりたい事は>>208さんのやりたい事と同じだから、参考にしたら?
707デフォルトの名無しさん:2007/05/15(火) 22:15:23
218さんの間違いだった
708デフォルトの名無しさん:2007/05/16(水) 12:33:40
>>703
たしかにそうなんですけどね^^
Creativeあたりが汎用的なチップを作ってくれないと、
ゲームなどで使うのは難しそうです

>>704
まさにそんな感じですね。
EAXを再現できるような
命令セットを妄想するだけでも楽しそうです^^
709デフォルトの名無しさん:2007/05/16(水) 13:37:35
現代のパソコンのCPUさんにとったら、それくらいの演算はゴミみたいなもんだからな

あと、そういうFIRフィルターかけても頭部伝達関数くらいしか使い道が無い。

で頭部伝達関数は一瞬面白いけど、長時間聞けないよ。
気持ち悪いんだよね。
710デフォルトの名無しさん:2007/05/16(水) 14:06:37
個人的にはこれからのゲームのサウンド処理はCPUの1つのコアで計算し、
その結果をサウンドカードでD/A変換して外部のスピーカーにつなぐような時代
になると確信している。

サウンドカードの優劣はEAXに対応しているかではなく、D/A変換の精度の高さで
評価される時代が到来するんじゃないかな?
711デフォルトの名無しさん:2007/05/16(水) 15:23:39
今だってマルチコアのCPUで、サウンド処理用に1つのスレッドを実行してれば、
1つのコアの一定の時間をサウンド処理に使ってることになるっしょ。
わざわざ1つのコアをサウンド専用に独立させるメリットは少ないかもね。

それとサウンドカードの優劣でEAX重用視してるのなんてゲーマーぐらいだとおもうが
712デフォルトの名無しさん:2007/05/16(水) 18:23:42
>708
専用CPUて一昔前のゲーム機のハード仕様だろ、それ。
おまいさんが10年前から書き込んでるとしてもサターン辺りに抜かれてるくらい発想が遅れてる。
今時のPCならその程度の処理メインCPUで十分過ぎるし、特殊な用途なら既にいくらでも実現されてる。

>710
デジタル出力してアンプでD/Aしる、ってかそうしてるだろ?
713デフォルトの名無しさん:2007/05/16(水) 18:47:45
>>712
> デジタル出力してアンプでD/Aしる、ってかそうしてるだろ?

確かゲームに関しては5.1chサラウンドサウンドのデジタル出力は著作権か何かの
問題で禁止されていたと思う。だからゲームでサラウンドを実現するにはアナログで
5.1ch出力しなければならない。

どうしてもデジタルにこだわるなら2chにダウングレードされてしまう。
714デフォルトの名無しさん:2007/05/16(水) 19:03:33
特許か?ドルビーあたりの。
715702:2007/05/16(水) 19:52:14
なんか誤解している方が多くいるのですが、
>>702>>703に対してのレスです。
CPUでSPU作ったら面白そうじゃない?
→DSP使えば
→(DSPで計算するのは)Creativeあたりが汎用的なチップを作ってくれないと難しいんじゃない?
という流れなので、別にCPUで計算することを否定してるわけでは無いです。
むしろ推奨派です。
716702:2007/05/16(水) 19:56:36
× >>702>>703に対してのレスです。
>>708>>703に対してのレスです。

未来のレスにカキコしてどうする^^
717702:2007/05/16(水) 20:28:39
あと、もう一つなのですが、
自分は別にEAXを特に優遇しているわけではありません。
EAXと同等のことができる汎用的なSPU命令セットがあれば
他のことをするにもいろいろと応用が利くのでは無いかと思ったのです。
「参考にするにはいいんじゃないかな」程度の意味でお願いします^^

PS
話が前後して申し訳ないのですが、もしかして>>702さんは
「DSPを参考にすればいいんじゃない?」
という意味でDSPと言ったのでしょうか?
たしかに、ちまたにあるDSP用のソースを
x86やPowerPCあたりで高速に実行できれば、それはすばらしいと思います。
718デフォルトの名無しさん:2007/05/16(水) 23:23:35
>>715-717
>話が前後して申し訳ないのですが、もしかして>>702さんは
702はお前だろ?
もう少し落ち着いて、考えをまとめてから書け。
コードもその調子で書くとバグだらけになるぞ。
719デフォルトの名無しさん:2007/05/17(木) 00:03:12
DSP用途にPC使うのはWindowsを使ってる以上はかなり厳しいんじゃないのかなぁ
と思うんだけど。
兎にも角にもまずDSPプログラム以外の割り込み処理が第一関門だよな。
んでFIRを時間軸で実装・・・ってとこで書いてた人がいたけど外部RAMとの
転送速度の遅さが第二関門。
SIMD命令とかをVCで使うにはインラインでもアセンブラ使わないとどうにもならないから
要求されるプログラミング能力の高さが第三関門。

1はμTronでもPCに入れて組込みOSみたいにすればまぁできない事もないかもな
2はアーキテクチャ的にまず無理だよなぁ。DSPの設計なんてほとんどそこに金かけてるようなもんだもんな。

3は誰かがすごいライブラリでも作ってくれたらまぁできないことも無いか。

っと妄想。

実際PCをDSPチックに使えるようになったらいいよな〜 DSPなんて評価ボードでも高いし。
PCならコスト10分の1くらいで何でもかんでも付いてくるし。
720デフォルトの名無しさん:2007/05/17(木) 06:24:15
サウンド処理→Creative
って発想が臭すぎる

PowerCoreとかUADのカスタムプラグインて自分で作れんのかね
721デフォルトの名無しさん:2007/05/17(木) 11:55:13
>>719
サウンド専用CPU載せるにしろDSP載せるにしろ、アセンブラレベルは理解してないと不味くね?
発展すればそのうちCgみたいなのが出てくるかもしんないけど
722デフォルトの名無しさん:2007/05/17(木) 12:10:56
低レイテンシには2つの要求があると思う
1、入力と出力の間の加工
2、インタラクティブな合成・加工

1については、現状では、サンプルレートがデバイス毎に微妙に異なるので
 そのサンプルレート調整をする仕掛けが無く、PCで一般的に行うのは無理な状況
 そもそもCODECが既に強力なLPFを要求するにで、ここで既に遅延を持っている以上
 数サンプルの遅延で処理するというのは、無理

2については、低レベルオーディオを使っても100ms程のバッファを用意してやらないと
 他の割り込み処理で時間を食われると、音が途切れてしまう問題がある。
723デフォルトの名無しさん:2007/05/17(木) 12:30:02
>>720
栗がうまくMSに取り入っているから、PCゲーでの音の処理は、PS3やXBOX○のように
CPUのコア上で処理することはできないようなレスを以前誰かがしていたような気がする。
OpenALとのからみだったかな?
724デフォルトの名無しさん:2007/05/18(金) 01:44:57
>>719
たしかに純粋なDSPのような性能が求められると厳しいかもです。


もちろんμTron使うという手もあるのですが、
Windows上で実行可能な形式にしてしまうのが現実的かなという気がします。


これはCPUをベクトルプロセッサ的に扱おうとするといつも出てくる問題ですよね。
画像処理で考えた場合、800×600×4bppな画像の転送+加工を1秒間に60FPS×2回程度は
問題なく行うことができますので、そこから考えると
800×600×4×60×2 = 219[MB/s]
このあたりがSPU on CPUの性能限界でしょうね。
sseを使って4サンプルまとめて計算&ロード・ストアしていけば
あと2倍くらいは性能がでるかもしれません。
他にも、メモリ技術の進歩がこの性能を引き上げてくれるに違いないです。
(上がってくれるといいなぁ^^)


そうですね。誰かがやってくれると思います^^

>>722
2については、スレッドの優先順位を上げることで
ある程度は対応できますよ。
725デフォルトの名無しさん:2007/05/18(金) 05:14:08
組み込み系?の話しはよくわからないんだけど、、、
現実的にはPCには高機能のオーディオアプリケーションが沢山ありますよね。全盛といってもいいくらい。
入出力レイテンシーもかなり小さくなってるし、
高品位なソフトシンセを複数動かしつつ、HDから何十トラックものストリームオーディオを再生し、
なおかつ大量のエフェクトをかけて・・・みたいなことがリアルタイムで動く時代なのに、
CPUのリアルタイムオーディオ処理能力は、DSPと比べてやっぱ劣るもんなの??
726デフォルトの名無しさん:2007/05/18(金) 05:25:01
FIRの話しが出てるけど、
音楽制作用途のアプリケーションとかだと、現実的にはFIRってあまり必要にならないし。
727デフォルトの名無しさん:2007/05/18(金) 10:10:50
FIRもほぼゼロレイテンシーだよ。
http://www.dtmm.co.jp/archives/2007/04/firkefir.html
728デフォルトの名無しさん:2007/05/18(金) 11:25:15
FIRといっても色々あるのだけど、CODEC内部に入ってる強力なLPFなどは
直線位相特性という、定めた遅延時間だけ遅れるけど、遅れた状態では完全に
位相特性がフラットなものが入っているのよ
729デフォルトの名無しさん:2007/05/18(金) 11:33:16
SPUの話で思い出したけど

ttp://ja.wikipedia.org/wiki/SPU#SPC700

スーファミのSPU作ったのって、なんとクタたんなんだよな
730デフォルトの名無しさん:2007/05/18(金) 12:47:35
>>725
最近の CPU は糞早いし、マルチメディア用の専用命令も持ってるから、
性能的にはそんなに劣りはしないと思う。

DSP の利点は、ハードリアルタイム性の保証とか、
コストパフォーマンス(チップサイズ、価格ともに)かな。

大き目の据え置き機器は今後、PC 上のソフトウェアに置き換えられて減ってくかも。
でも、携帯型のとか、小さめの機器では DSP の利点がある。
731デフォルトの名無しさん:2007/05/18(金) 13:12:43
性能的に見劣りしないどころか、
民生用に使われてるDSPだと200MIPS も無いのが殆どさ
732デフォルトの名無しさん:2007/05/18(金) 21:39:38
730 とか 731 はDSPとPCの根本的なアーキテクチャの違いを知らないんだろうな。

Intel CPUなんか実際のアプリでMIPSで比較したら一桁低いよ。
CPUの性能自体はそりゃDSPに比べたらめちゃめちゃ早いけどな。

>>726
オーディオアプリとかは知らないがDSP使って信号処理するような製品作るときは
まだまだFIRが多いよ。FFT使って〜とかやるよりは設計が楽だからだろうね。
そもそもDSP自体がFIRを構成しやすいように作ってあるし、命令も備えているから。


ま、あれだ グダグダ机上の空論やってもしょうがないから誰か
Windowsアプリで サウンドカード経由の入出力使った リアルタイムFIRフィルタプログラム作ってよ。
俺はWindowsアプリのプログラミング能力は0だw  TiのDSPなら使えるが・・・
733デフォルトの名無しさん:2007/05/18(金) 23:05:15
DTM板でみかけた話しによると、、、

PowerCore mk2(モトローラ56K/150MHzを4個)とPCネイティブ(C2D)
で同じプラグインを使った場合(両方用が出てるプラグイン)
PowerCore mk2の場合18個に対して、C2Dでは30個以上動いたそうな。
ただし、PowerCore mk2自体はPCIで接続されてるから、そのオーバーヘッドもありそうだがね。
734デフォルトの名無しさん:2007/05/19(土) 01:57:31
ところで、
プラグインで良く見かけるリニアフェーズEQってどうやってるの?
2次IIRとかじゃないわけだよな。設定変更すると動的にIR生成するFIRですかね。
他にも方法あるの?
735デフォルトの名無しさん:2007/05/19(土) 02:34:51
よくは知らないけど、
与えた特性との最小二乗誤差なり minmax 誤差なりを最小化する
線形位相 FIR とか、線形に近い位相の IIR を作る手法はあるよ。
736デフォルトの名無しさん:2007/05/19(土) 07:07:24
>線形に近い位相の IIR
IIR+位相補正ってことですか?
737デフォルトの名無しさん:2007/05/19(土) 11:30:31
>>736
時系列の方で二乗誤差を最小化とかそういう制約付けて設計すると、
IIR でもあんまり位相がゆがまない。
もちろん、次数は高めになる。
738デフォルトの名無しさん:2007/05/19(土) 23:58:25
>>732
実際のアプリでって、それ石の性能比較じゃねーじゃんw
パイプラインの深い最近のintel系CPUと、DSPをMIPS値で単純比較するのもどーかとは思うがな…
739デフォルトの名無しさん:2007/05/23(水) 08:17:50
FLOPSなんかで比較したら、それこそ悲惨な結果になるじゃない。
そもそも浮動小数点演算出来るDSPに恵まれてる人の方が少ないだろうし
740デフォルトの名無しさん:2007/05/24(木) 02:30:45
>739
そういう意味じゃなくね?
パイプライン云々って事は命令の並びで効率変わるってことでしょ?
Intelは内部でCISC命令に置き換えてるしSIMD命令なんかもあるから単純に1命令単位で比べても意味ないっしょ。
実装にも左右されるだろうけど、>733みたいなタスク単位の処理量での比較なら意味ありそうだけど。
741デフォルトの名無しさん:2007/05/24(木) 02:32:32
>740
CISCはRISCの間違い。
すまそ。
742デフォルトの名無しさん:2007/05/26(土) 11:19:59
DSP関連の話は言うと、GPUをグラフィック処理に限らない
プログラマブルな汎用フィルタとして使えるような話が盛り上がってるから
それを待ってみたいな。
743デフォルトの名無しさん:2007/05/26(土) 11:49:00
汎用フィルターって言っても問題は何をするかだろう
頭部伝達関数みたいな気持ち悪い音出すだけじゃ、特にありがたみがない。
744デフォルトの名無しさん:2007/05/26(土) 11:57:27
サンプル毎に自由にシェーディングできるとして、
いったいどれほどの使い道があるんだろう。
自分、全然詳しくないんだけど、結構あるのかな?
745デフォルトの名無しさん:2007/05/26(土) 14:44:41
サウンド処理用としての使い道なんか全く無いでしょ。
サウンド用DSPは専用ハードならではの低レイテンシなわけで、
GPU通すくらいレイテンシあっていいなら現行ハードでも十分だろ。

結局この手のハードは 入力→処理→出力 が非同期で安定して動くところがメリットなんであって、
サウンド出力の存在しないグラボに音データ送ったところで手間増えるだけ。
746デフォルトの名無しさん:2007/05/26(土) 17:17:17
音楽制作用途だと、なにか一つの処理が動けばいいわけではないじゃん。
GPUがサウンド処理用として適しているということではなくて、
最近の強力なGPUの処理能力を遊ばせとくのはもったいないからって感じだと思う。
重くなるリバーブなんかをGPUで処理できれば、負荷を気にせずゴージャスな実装ができるとか、
CPU側であと10個コンプやEQ使えるみたいな感じなんでは。
747デフォルトの名無しさん:2007/05/27(日) 04:40:33
ここのスレ見てると、PCのDTM環境の進歩を知らないひとが多そうにみえる。
組み込みやクローズドなシステムばっかりやってるプログラマは
NuendoとかLogicとかPCベースのDAWが今どんなことになってるか一度見てみるのもいいと思う。
うらしまたろうになってしまうよ。
748デフォルトの名無しさん:2007/05/27(日) 08:15:45
もったいぶらずに教えろよ
749デフォルトの名無しさん:2007/05/27(日) 09:39:23
>>747
今の話題は低レイテンシをどうやって実現するかであって
DAWの多機能性では無いと思うんだが
750デフォルトの名無しさん:2007/05/27(日) 10:06:56
PCの場合はFFTが使えるから、数秒レベルのFIRでも苦労しないからな
751デフォルトの名無しさん:2007/05/28(月) 03:52:15
DAWが今どんなことになってるかって?
結局アウトボードでDSP積む時代に逆戻りしてるよ。
752デフォルトの名無しさん:2007/05/28(月) 10:14:52
>>751
業界が全然わかってないなw
開発メーカーは、TDMからだんだんRTASに移行してるだろ。
753デフォルトの名無しさん:2007/05/28(月) 17:25:35
その一方でUAD-1大人気
754デフォルトの名無しさん:2007/05/28(月) 20:32:31
そのへんはDSPかPCネイティブかとかあまり関係ないと思うよ
純粋にサウンドの良し悪しとコストパフォーマンス
UAD-1のハードウェアがどうとかじゃなくて、そこで動くプラグイン=ソフトウェアの出来が良かったと。
ま要するにFIRのタップ数じゃなくてまずサウンドデザインってこった
755デフォルトの名無しさん:2007/05/28(月) 22:49:14
まあ信号処理の現場を知らないと752みたいにそもそもDAWと本当のリアルタイム信号処理の区別
ついてなくて、高機能、何万次のFIRでもリアルタイム処理可能とかのたまう輩がでてくるんだろうなあ。
無理して話についてこなくてもいいのに。

ちなみに、音質とかサウンドデザインなんていうのも今の流れじゃなし。
756デフォルトの名無しさん:2007/05/29(火) 02:34:30
えっと今の流れはなんだっけ?
757デフォルトの名無しさん:2007/05/29(火) 06:40:53
端的な例をそれが全てであるかのように挙げて
否定レスの材料にするって流れだよ。
758デフォルトの名無しさん:2007/05/29(火) 10:07:43
ハードウェアは今となってはただのドングル。
759デフォルトの名無しさん:2007/05/29(火) 12:38:45
信号処理の現場てDSP使ってたとえばどうゆうの作るの?
いや純粋にそのへんの業界のことしらないんで。
サウンドスレだしオーディオ・音響機器とかエフェクタとか?
760デフォルトの名無しさん:2007/05/29(火) 14:34:17
具体例としては自分の声をリアルタイムで松田聖子に変えるとかね。
セクシーボイスアンドロボとかいうドラマの現場でもたしか使われているはず。
761デフォルトの名無しさん:2007/05/29(火) 15:10:22
音声認識+音声合成かよ。 そらすげーわ
762デフォルトの名無しさん:2007/05/30(水) 10:08:34
>>760
自分の声を松田聖子に変えられる技術があるなんて知らなかったw

せいぜいピッチシフト、フォルマントシフト、
スペクトラム・シェイパーぐらいしかないと思ってたよ。
こういうのだとCPUでもリアルタイムでできるから、まったくの新技術なんだろうね。
763デフォルトの名無しさん:2007/05/30(水) 10:15:27
PARCOR分析・合成して試したけど、フォルマントを単純変換してもそう変わったように聞こえないんだよね

フォルマントよりもう一段上でないと人変換までは無理だよ
764デフォルトの名無しさん:2007/05/30(水) 10:27:36
バーローネクタイもSFじゃないのか
765デフォルトの名無しさん:2007/05/30(水) 13:04:31
>>762
単なる空想科学なんじゃね?
766デフォルトの名無しさん:2007/05/30(水) 13:13:55
モデリング・ギターとかがあるからできるって勘違いしちゃったのかな?
人間の声ってめちゃめちゃ複雑だから、せいぜいAntaresのAVOX程度の加工が関の山。

誰かの声っぽく合成するだけでも難しいのに、同じ声に加工する技術があるなら、教えてほしい。
767デフォルトの名無しさん:2007/05/30(水) 13:20:14
てかネタにマジレスってやつですかね
768デフォルトの名無しさん:2007/05/30(水) 13:53:09
でも、そのうち出来るようになってしまうんだろうな。
769デフォルトの名無しさん:2007/05/30(水) 19:46:50
変な週刊誌の受け売りだろ

誰かの声ってなら声質よりも喋り方とか表情とか演技の部分の影響の方が多いと思うぞ
それこそコンピューターの一番不得意な部分だが
770デフォルトの名無しさん:2007/05/30(水) 21:01:43
喋りを再現って事は、その人のリズム感だったり、単語や接続詞なんかの音程だったり、
安倍総理のカ行みたいな上手く発音出来ない子音だったり、そういう部分が似てると感じるんじゃないの?
ものまねとか見るとそう感じる。

声質だけなら「自分の声を松田聖子に変える」なんてのも機械的に可能だろうし、
松田聖子のものまねで喋れば似るだろう。
ただ普通に喋っただけで同じになるとしたら>761しかありえないが、音声認識をリアルタイムでという時点で極めて困難だろう。
771デフォルトの名無しさん:2007/05/30(水) 21:20:27
ちょっと話はずれるかもしれないが
某タレントがCDを出すのに'あ'から'ん'まで録音しただけで歌ってないと言っていたが本当だろうか
772デフォルトの名無しさん:2007/05/30(水) 21:43:58
>>771
まず無理。
そういえば昔J-POPはコンピューターが全部自動で作ってるって言ってるヤツもいたな。
それと似た類いの戯言だ。

今の技術だとせいぜいVocaloidぐらいが限界じゃないかな
たぶんピッチ補正をオートでかけまくりの声を合成音声だと間違ってるんじゃないだろうか。


フォルマントの単純シフト、ピッチ変換位だけじゃどうやってもどことなく自分の声っぽいんだよね
773デフォルトの名無しさん:2007/05/30(水) 21:45:11
>>771
出来なくは無さそうだけど、ホントだとしたらすげぇな。
ただ、大抵の人は高音域で声が裏返るけどそういうところってどう処理してるのか気になる。
774デフォルトの名無しさん:2007/05/30(水) 21:58:41
>>772
全部は言い過ぎだが最近の楽曲のほとんどはコンピューター合成された音だぞ。
だからコンサートとCDの音質の差は開く一方で・・・
775デフォルトの名無しさん:2007/05/30(水) 22:01:54
JPOPはコンビュータが作っているてのはMIDIの事じゃないのか
ちょっと前に松下がプリセットされた曲の速度やピッチを変えることで
BGMを作る機械出してたよね。
776デフォルトの名無しさん:2007/05/30(水) 22:06:27
>774
シンセ音とメロディを混同してね?
コンピュータが自動で作曲&編曲系はいくつか見たけど、
作曲&編曲と呼べるレベルのもは一度も目にしたことが無い。
777デフォルトの名無しさん:2007/05/30(水) 22:27:42
東大の某研究室はジャズの自動伴奏で十分なレベルのシステム作ってたな。
778デフォルトの名無しさん:2007/05/30(水) 23:02:10
>>762
以前、vipでエッチなセリフや喘ぎ声を自分で喋って録音したものをトーンだか
再生スピードだか調整して女性の声っぽくしてうpしてた馬鹿を思い出した。
しかも、その直後、それに逆の変換をかけて元の音声に近いとてもキモイものを
うpしてる馬鹿もいた。・・・アレは本当にキモかった。
779デフォルトの名無しさん:2007/05/31(木) 00:10:34
そういやテレビとかでさ、
個人の声をわからなくするのに単純なピッチチェンジかけてたりするが、
きょうびあれ意識低杉だよな〜
完全とまではいかなくても、ほぼ元に戻せるのにさあ
780デフォルトの名無しさん:2007/05/31(木) 01:37:14
>>779
だからわかっているところはちゃんと多重処理とかかけているが
781デフォルトの名無しさん:2007/05/31(木) 03:54:01
こりゃしつれい、まあでもずさんな制作会社も多そうだなあ
782デフォルトの名無しさん:2007/05/31(木) 04:01:28
>>777
自動伴奏って?
人間ジャズミュージシャンの演奏と呼吸を合わせてセッションできるならすごいな。
そうゆうの夢なんだよ。
783デフォルトの名無しさん:2007/05/31(木) 10:08:44
>>771
とあるミュージシャン(そこそこ有名)と音声合成の話になった時、
その人は、「あ」から「ん」まで録音して並べたら楽できるのではと思ってやってみたが、
全然使い物にならなかった、って言ってたぞ。

>>777
ジャズでBIABにはかなうまい。自動作曲させてもまだ一番マシ。

>>782
人間と呼吸を合わせてセッションする類の研究はMax/MSPの方面、特にフランスで盛んだよ。
日本人でもやってる人が何人かいたはず。
784デフォルトの名無しさん:2007/05/31(木) 10:37:04
いかん、ジャズ限定は早稲田のだった。

>>782
独奏の変化にも対応可能だそうだよ。
ttp://ci.nii.ac.jp/naid/110002885261/

>>783
上のはここの研究室ね。
ttp://staff.aist.go.jp/m.goto/PROJ/virja-j.html

#どっかで伴奏のリアルタイム生成みたいなの見かけたんだけどどこだったかなぁ
785デフォルトの名無しさん:2007/05/31(木) 11:32:28
歌じゃないけど、昔SEGAのサウンドの部署にいた頃、サカつくの応援団(?)用音声で
20人くらいの同時発音で同じく50音録って応援歌みたいなの作ってた人居た。
ソロボーカルで綺麗なものを作るのは難しいだろうけど、用途限れば使い道はいろいろありそう。
786デフォルトの名無しさん:2007/05/31(木) 12:52:22
>>784
DSPネタばっかりだったからこうゆう話しは面白いな(スレタイ的に範疇にはいるのか微妙だけどさ
この研究は人間はピアノ担当と決まっているみたいだけど、演奏はMIDI情報として交換するのかな。
それともオーディオ信号から解析するのだろうか(だったらまたすごい
787デフォルトの名無しさん:2007/05/31(木) 15:03:56
この辺の「音色、音響」ではなく「楽譜」側の音楽要素のプログラミングにきょうみがある香具師は、
是非DTM板の自動作曲スレをお気に入りに登録してうれ
プログラマ不足だ

【アルゴリズミック】 自動作曲 【コンポジション】
http://pc11.2ch.net/test/read.cgi/dtm/1143044078/
788デフォルトの名無しさん:2007/05/31(木) 15:45:02
プログラミングスレなんだから、もっとプログラム寄りの話をしよう。
789デフォルトの名無しさん:2007/05/31(木) 17:25:47
DTMのプログラミングって意味が違う
790デフォルトの名無しさん:2007/05/31(木) 19:49:02
まぁゲームのスタッフロールとかじゃ打ち込み担当のことを指して
サウンドプログラムと書いたりしてるな
791デフォルトの名無しさん:2007/06/01(金) 04:46:54
それは効果音を制御する為のプログラムじゃないのか

DTM板周辺では両方の意味普通に使うよ
ここのプログラミングみたいなことも自動作曲とか音響とかでやる場合はあるし、

リズムプログラミングとか打ち込みの事をさす場合もある、でもあんまりつかわん
リズムの打ち込みとか言っちゃうし
792デフォルトの名無しさん:2007/06/03(日) 00:09:21
これからはGPUでもサウンド処理してもいいと思うけどね。
つ HDMI
ただ入力の規格は無いけど。
793デフォルトの名無しさん:2007/06/04(月) 12:03:47
GPGPUですか。
でも将来的にはCPUの中にGPUが統合されていく流れがあるみたいね。
今みたいなマルチコア化は実質的なメリットが少ないもんだから、
汎用コアを増やすよりGPUを統合して(もはやGPUと呼ばないのかも
グラフィックのみならず強力な汎用ベクトル処理プロセッサとして利用するとかなんとか。
AMDはそのためにATI買ったという話しだしね。
794デフォルトの名無しさん:2007/06/04(月) 12:42:17
まぁ無理に統合せずとも、CPUもGPUもマザボ上に設置してなおかつ脱着できるようにしてほしいね。
汎用バススロットにCPUより高い発熱体設置って狂気の沙汰とは思えん。
せめてCPU用の大型クーラーをGPUにも装着できるような配置にしてほしい。
795デフォルトの名無しさん:2007/06/04(月) 14:40:20
>794
難しい言葉を使ってみて素で間違えてる馬鹿w
796デフォルトの名無しさん:2007/06/04(月) 14:58:39
>>795
m9(^Д^)プギャー
797デフォルトの名無しさん:2007/06/04(月) 17:37:16
>>794
汚名挽回の類義語?
「狂気の沙汰」を使うならそのあとに「とは思えん」の否定は不要。
否定を入れるなら「正気の沙汰とは思えない」になる。
ま、PC弄るのも程々にして日本語の勉強もな。
798デフォルトの名無しさん:2007/06/04(月) 17:50:04
「狂気の沙汰としか思えん」でもいいね。
799デフォルトの名無しさん:2007/06/04(月) 18:02:43
せこいとこに食いついてると「類義語」の意味は?
とか言われちゃいますよ
800デフォルトの名無しさん:2007/06/04(月) 19:10:08
>狂気の沙汰とは思えん。

これじゃあCPU+GPUべた褒めだよwwwww
801デフォルトの名無しさん:2007/06/04(月) 21:07:38
ワロスwwwww
802デフォルトの名無しさん:2007/06/04(月) 21:37:19
キメーナキモイデス!!
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だけしか使ってません。
とりあえずノイズが出てしまう原因だけでも知りたいのですが、
どなたかご教授お願いします。
804デフォルトの名無しさん:2007/06/12(火) 01:02:53
・buff[]とbuf[]は別だよな?
・jとJは同一だよな?
・変数の型は?
・sumを初期化しろ
・3行目の j=0;はいらんだろ
805803:2007/06/12(火) 01:31:27
>>804
buff[]とbuf[]は別物です。
jとJは同一です。完全に表示ミスです・・
変数は全てintでやってます。
おっしゃる通りで、3行目のj=0はsum=0の誤りでした。
自分で書いといて間違えばっかで申し訳ないです。
806デフォルトの名無しさん:2007/06/12(火) 02:03:14
buff[i] = sum/50;

buff[i-50] = sum/50;

じゃない?
807デフォルトの名無しさん:2007/06/12(火) 02:06:40
あと、write(/dev/dsp, buff, BUFSIZE); も
write(/dev/dsp, buff, (BUFSIZE - 50) * sizeof(int));
じゃね?
808デフォルトの名無しさん:2007/06/12(火) 02:39:23
それはどうかな
809デフォルトの名無しさん:2007/06/12(火) 02:47:56
元データの範囲は?
というか、デバッグくらい自分でやれと
810803: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秒程のものを使用しています。
811デフォルトの名無しさん:2007/06/12(火) 02:54:29
元データが2chなのにbuf[]が1個しか無いってのが怪しい。
入力処理を書いてみろ。
812803: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ファイル再生のプログラムに移動平均の式を書き加えています。
813デフォルトの名無しさん:2007/06/12(火) 06:47:09
>>805
bufの型はちゃんと16bitになってるか? 8bitや32bitでやってないか?
あるいは符号無しになってないのか?
814デフォルトの名無しさん:2007/06/12(火) 08:12:22
>>812
おまいはwaveファイルのフォーマットを理解していない。それが原因。
はい終了。
815デフォルトの名無しさん:2007/06/12(火) 08:18:23
こらこら、ありがたい新人様に、なんて扱いするんだ!
煽るのは、もちっと育ててからにしろ!

>>812 RIFF ヘッダというのがwavファイルには付いていて、
それをまず読んでサイズや形式を調べてる筈なんだが?
816デフォルトの名無しさん:2007/06/12(火) 09:42:37
>814
同意。
最低限の調べ物をしてない教えてクンに餌を与えるな。
そいつの為にもならん。
817デフォルトの名無しさん:2007/06/12(火) 12:23:36
自己努力が足りなそうな質問はたしかにあれなんだが、、、
新人クンとか教えてクンとかいっても
このスレは質問者で成り立ってると思うがなあ
ベテランっぽい人は話題出せないし、あとは荒らしみたいなのばっかりだし
818803:2007/06/12(火) 14:05:13
>>813-817
いろいろとご意見ありがとうございます!
たしかにみなさんのおっしゃる通り、勉強不足感はいなめない状態です。
プログラムをいじる前に、waveファイルのフォーマットについてちゃんと勉強してみます。
自信がついたらまた違う名前で質問しにくるかもしれないんで、
そのときはヨロシクおねがいします。
板汚し失礼しました〜
819803:2007/06/13(水) 18:12:09
またきました803です。
昨日騒いでたことは色々いじった結果無事解決しました。
色々忠告していただきましてありがとうございました。
まだいくつか問題はありますが、一ヶ月くらいはうじうじ考えてみようと思います。
それでもダメそうならまた質問にくるかもしれません。
ではROMにもどります。
失礼しました。
820デフォルトの名無しさん:2007/06/13(水) 19:00:54
mciSendStringについての質問はここでいいでしょうか。
821デフォルトの名無しさん:2007/06/13(水) 20:14:14
ダメです。
822デフォルトの名無しさん:2007/06/13(水) 20:15:17
分かりました、別スレで聞きます。
823デフォルトの名無しさん:2007/06/13(水) 20:44:42
ごきげんよう旅の人
824デフォルトの名無しさん:2007/06/13(水) 20:57:20
mciってサウンドプログラミングと呼ぶにはアレ杉だからなぁ
825デフォルトの名無しさん:2007/06/13(水) 21:42:15
箸休めな話題があってもとは思うがな
826デフォルトの名無しさん:2007/06/13(水) 22:36:09
では >>820 さんどうぞ
827820: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は書き換えたくない

実験しているんですけど、如何せん起こる事の方が少ないので難しいです。
原因と思われることがありましたら、教えてください。
828デフォルトの名無しさん:2007/06/13(水) 23:46:34
たしかに似たような環境でmciは挙動不信なところあった。
エラーしたら何度かリトライするとか。
829820:2007/06/14(木) 00:25:49
>>828
なるほど、エラーメッセージを表示して終了するのではなく、
中ではこっそりと何度かopenを試みるという事ですね。
それも入れたいと思います。
830デフォルトの名無しさん:2007/06/14(木) 00:36:37
mci使うくらいならDirectShow使えば?
安定度は幾分か上がると思う。
ってか、MIDIなら再生部自作してもそんな手間じゃないよ。
831820:2007/06/14(木) 00:54:57
>>830
DirectXはなんとなく使いたくないです。
自作は、waveの方で少しやった事があるので、
少し感じはつかんでいるんですけど難しそうです。

mciは他にもCPU率高いし、リソースも使えないし、
ループ再生も雑なので、不便なんですけど。
832デフォルトの名無しさん:2007/06/14(木) 02:34:44
>831
dshowはDirectXではなくPlatformSDKだぞ。
WMPとほぼ等価の動作になるしmciでぐだぐだやってるよりはいいと思うが、使いたくないならしゃーないな。
833820:2007/06/14(木) 11:29:44
>>832
起動するのに必要なソフト:特に無し、と書きたいというか・・
ちっちゃい事なんですけど。
834デフォルトの名無しさん:2007/06/14(木) 23:36:22
起動するのに必要なソフト:特に無し
だと思うけど違うのかな?
835デフォルトの名無しさん:2007/06/14(木) 23:45:59
ちがうね
836デフォルトの名無しさん:2007/06/15(金) 00:51:37
まずWindowsが必要だしな。
837820:2007/06/15(金) 01:27:48
>>828氏に教えていただいた、リトライを試しているが、
数百回は音楽変更の機会があったのに、エラーが起きてくれない・・

>>834-836
DirectXバージョン*が必要とかそういうのです。
もうデフォで大体入っていると思いますが。
後、DLLも使っていません。
838デフォルトの名無しさん:2007/06/15(金) 02:30:26
winmm.dllもか。
839820:2007/06/15(金) 10:40:21
>>838
最初から入っていそう?なのは除いてです。
画像なんかはいまだにbmpでやっています。
840デフォルトの名無しさん:2007/06/15(金) 16:44:56
なんかイラっとくる奴だな・・・情報を小出しにしてるとことかマンマ>http://www.redout.net/data/osietekun.html
841デフォルトの名無しさん:2007/06/15(金) 17:58:42
せこいあげ足取りもいくないが
延々実況デバッグみたいのも勘弁だな
842デフォルトの名無しさん:2007/06/15(金) 18:03:33
ありもの使えば済むのに自分で作らないと気が済まない自己満ヤローのくせに技術のない教えてクソ。
そろそろ逆ギレをはじめるんじゃないかと思うと気が気でない。
843デフォルトの名無しさん:2007/06/15(金) 20:09:38
とんだ箸休めw
844820:2007/06/15(金) 20:22:27
すいませんでした、質問を終わりにします。
教えてくれたかた、ありがとうございました。
845820:2007/06/15(金) 20:58:39
すいません、最後の最後です。原因が分かったので。
原因は、>>827のカレントディレクトリの位置が変わるでした。

プログラムを起動して、別のパスにあるwavなどを開いて再生したり、
または別のプログラムを起動した後、音楽の変更処理を行うと
確実に275エラーが発生してくれました。

なので、音楽変更の前に再びカレデレを
プログラムの位置にすればエラー回避できそうです。
aliasでもいいかもしれません。

なお、notifyによる連続再生の時は、
カレデレが違っていても普通に処理されます。
その後、音楽変更処理を行うと、同じように275エラーが発生します。
846デフォルトの名無しさん:2007/06/16(土) 04:47:14
カレデレ
847デフォルトの名無しさん:2007/06/16(土) 05:55:10
カレの前ではデレデレ
848デフォルトの名無しさん:2007/06/19(火) 21:18:38
>>845
おめでとう

ちゃんと事後報告した行動は評価するよ
849デフォルトの名無しさん:2007/06/26(火) 19:33:35
Javaで、ゲームで使うようなサウンドファイル(mp3やwavやmidi)を再生する方法はありますか?
いくつかの音を重ねたり、ゲーム内で音量を操作したりしたいです。
できればライセンスに縛られたくないので、ライブラリはなるべくライセンスが緩いもので……
850デフォルトの名無しさん:2007/06/26(火) 20:16:44
下げてしまいました…質問なので上げます。
851デフォルトの名無しさん:2007/06/26(火) 21:38:46
Javaは使ったこと無いが、

>音を重ねる
APIにデータを流す前に、単純に複数の波形のデータを加算してAPIに渡す。

>音量
APIにデータを流す前に、単純に波形データに数値を掛ける。
1.0未満なら音量は下がるし、1.0よりも大きければ上がる。
852デフォルトの名無しさん:2007/06/26(火) 22:12:48
>849
iアプリとかならAudioPresenterとかMediaSoundとかがあったなぁ。
ってかJavaスレで聞いた方が早いと思われ・・・
853849:2007/06/26(火) 23:06:36
あれから調べて、ゲーム系のサイトを見つけました。
wavはClipクラス、midはSynthesizerクラスで扱えることが分かりました。
>>851の重ねる方法、音量を加工する方法はそこには書いて
ありませんでした…ちょっと難しそうです。

mp3はデコード処理があるため?ライブラリが必要なようです。
また、ライブラリがあってもPureJavaだと速度的に難しい?みたいな
ことが書かれているMLがありました。

とりあえずwavとmidで進めてみます。 >>851-852 感謝です。
854デフォルトの名無しさん:2007/06/27(水) 04:15:38
貴様に感謝される筋合いは無い。
855デフォルトの名無しさん:2007/06/27(水) 04:48:32
>>854
何様だよw
856デフォルトの名無しさん:2007/06/27(水) 05:33:26
851だ。
857デフォルトの名無しさん:2007/06/27(水) 13:15:55
>>853
ogg形式ならjavaの実装がある
ttp://www.jcraft.com/jorbis/
858デフォルトの名無しさん:2007/06/28(木) 13:57:27
とあるデータ
*[0123456789]
逆再生用データ
*[9876543210]

これはなんていうの?
*[0927456381]
859デフォルトの名無しさん:2007/06/28(木) 14:35:00
>>858
言ってる意味が解らないし、そもそもサウンド関係無いような気がするが?
860.858:2007/06/28(木) 15:17:58
>>859
昔とある人が、前後反転させたデータ全体をn等分して更にそれを反転、
そしてnを∞とするとどうなるか、というのをアナログ回路実験したんだが、
それをデジタルにすると858に書いてある様になるらしい。
これについて詳しく知りたいので、できれば関連するキーワードでも見つけられたらと思って。
861デフォルトの名無しさん:2007/06/28(木) 17:21:04
いみがわからん
「それ」てなんだ
862デフォルトの名無しさん:2007/06/28(木) 17:29:59
とある人に聞けw
863デフォルトの名無しさん:2007/06/28(木) 20:15:51
>860
そんなアルゴリズム聞いたこと無いなぁ。
ちなみにどんな音で鳴るの?
窓の大きさと繋ぎ方が解れば再現できそうだけど、意味のある音が出るとは思え無いんだよなぁ・・・
864デフォルトの名無しさん:2007/06/28(木) 20:36:57
FFTのビット逆順に似てるなあ
865デフォルトの名無しさん:2007/06/28(木) 20:54:55
元データと逆再生データを半々で混ぜただけじゃないの?
866デフォルトの名無しさん:2007/06/28(木) 21:46:52
時間軸で無限はないな
860自身言葉を覚えただけで全く意味は分かってないだろ
867.858:2007/06/28(木) 23:39:17
>>863
通常再生と逆再生が混じって聞こえる感じです。

「とある人」というのは、何十年も前にこの事に関する論文を書いた人で、
もしかしたら今は死んでしまっているかもしれません。
868デフォルトの名無しさん:2007/06/29(金) 00:19:04
なんじゃそりゃ
869デフォルトの名無しさん:2007/06/29(金) 02:13:22
もうええわw
とある人の名前でぐぐって、見つからなければ諦めろ
870デフォルトの名無しさん:2007/06/29(金) 02:56:26
とある人の名前が分からないんだろw?とエスパー
871デフォルトの名無しさん:2007/06/29(金) 14:05:41
質問です。

FFTによるピッチシフトするプログラムを作ったのですが、
周波数をシフトさせると、音量が小さくなってしまいます。

FFT→周波数操作→逆FFTした後、出力する際の振幅に
xをかけて、周波数 * 1.0 (つまり変化させない)の場合に
元通りの音量になるようにxを調整したところ、
周波数を * 2.0したときに、感覚で音量が半分以下になってしまいます。

シフトさせる量と、振幅にかけるxには
関数関係が必要なんだと思いますが、
どんな式にすればいいんでしょうか?

【補足】
・使い物になるかは度外視して周波数 * 8.0とかやってみたところ、
 音量はむしろ元より大きくなりました。
 まぁ、シフト量は0.5〜2.0くらいを限度にしたほうがいいようですね。

・もろもろの処理の仕方はCマガに載っていたものをそのまま使っています。
 FFTサイズ2048、オーバーラップ4で、出力の際にコサイン窓をかけてます。
872デフォルトの名無しさん:2007/06/29(金) 16:14:23
873デフォルトの名無しさん:2007/06/29(金) 16:18:53
>871
虚数成分を処理して無いとかじゃね?
874871:2007/06/29(金) 16:31:33
>>873
えっ?処理してない!
Cマガのソースだと逆FFTの結果は実数部しか使ってない。

そうか、逆FFT後は虚数成分が出るから、それを無視することで
そのぶん振幅が減ってしまうってコトかな…

ちとやってみます。

…と思ったけどその前に>>872を読んだほうが良さそうなので見てみます。
875871:2007/06/29(金) 21:19:17
>>872の言いたい事は分かりました。
耳で聞くと、高い音ほど小さく聞こえる、と。

>感覚で音量が半分以下に
と書いたのは少々語弊があって、

元ファイルと変換後ファイルを、波形を表示するソフトで表示すると、
全体的な波形の幅が、大体半分以下になってます、ってことです。


…で、虚数を使おうとしたけど、どう使えばいいかわかりません。
そもそも、逆FFTの結果得られた値の虚数は何を表しているのか?

適当に、ルート(実数*実数+虚数*虚数)とか試してみたけど
ヘンなガタガタした波形になります。


数学知識が足りず、FFTを理解できてないのですぐつまづく…。
876デフォルトの名無しさん:2007/06/29(金) 21:43:42
>875
(x*x+y*y)^.5じゃ負数が無くなるから、実数部の符号を最後に掛けてみるとか。
・・・ごめん、適当言った。
877デフォルトの名無しさん:2007/06/29(金) 23:15:21
>>875
単純なピッチシフト処理で、IFFT 後のデータに虚部が出るっておかしいよ。
878デフォルトの名無しさん:2007/06/29(金) 23:15:51
特別な理由があってそうしない限り
IFFTの結果得られる虚数成分はゼロじゃなくちゃおかしいよ

そもそもピッチシフト法の説明がないし,誰も応えられんのとちゃう?
879871:2007/06/30(土) 00:22:33
>>876
そう、それをやってみた結果がガタガタ。

>>877-878
虚数が出てるかどうか、確認してませんでした。
確認してみたところ、出てます。
この時点で既におかしいのか。

もともとC++のソースをCに直して実装したから、地味なバグが居るのかな…。

ピッチシフト法の説明が十分にできる理解レベルにないと思いますが、
こんな説明でいいのかな。↓

・もとの信号をFFTで1本1本の正弦波に分解。
・各正弦波の振幅・位相を求める。振幅はそのままとっておく。
・位相を、「位相差計測法」によって真の周波数を測定
・周波数軸上でシフトし、位相差計測法の逆処理
・もとの振幅と処理済の位相を実数・虚数に直してIFFT

880871:2007/06/30(土) 00:39:42
肝心なことを忘れてた。

上記質問にピンポイントに答えられる方がいるのが
一番ありがたいのですが、それよりまず簡単な質問。

そもそも普通、ピッチシフトしたら音量が下がるなんてことは無い?
(つまり、明らかに俺のソースのバグ?)
881デフォルトの名無しさん:2007/06/30(土) 01:34:42
>>880
ピッチシフトも何もせず、素通しのつもりのコード書いてみた場合、
音量下がらない?
一度それ試して。

ピッチシフトするって、要するに、周波数領域でデータをずらしてくのよね?
その際、音程下げるなら低周波、上げるなら高周波のデータがちょっと欠けるわけで、
その欠けた分の音量は下がって当然だけど。
音程2倍程度でそんな音量変わるとも思えない。
882871:2007/06/30(土) 01:49:34
>>881
ああ、下がります。
例によってCマガのソースが、なわけですが
出力する際に波形に…つまりIFFT後の実数に「4」をかけてます。

(※ソースを知っている人のために注意を入れておくと、
  かけてる数字は8だが、コサイン窓をかけてオーバーラップして
  出力してるぶん、そもそも2はかけなきゃいけない。)

この「4」が何なのか、書いてないので意味がわからないのです
(解説には「ゲインの調整をしています」としか書いてない)

ちなみに、これ4だと多すぎるみたいで…。
このままのコードで素通しすると、むしろ音量が上がってます。
883デフォルトの名無しさん:2007/06/30(土) 02:01:35
>>882
何タップの FFT でやってる?

FFT の実装の仕方によるんだけど、その 4 のところは、
FFT のタップ数か、その平方根かを入れないと駄目かもしれん。
884デフォルトの名無しさん:2007/06/30(土) 06:05:23
>882
ソースをどっかのロダにうpしる
その方が早い
885デフォルトの名無しさん:2007/06/30(土) 14:14:21
FFTなんかさ、初めから出来てるプログラムそこらじゅうにころがってるから
自分で作る必要ないだろ
886デフォルトの名無しさん:2007/06/30(土) 14:51:52
勉強のためじゃね?
あとはライブラリ使うのがうざいとか。
887871:2007/06/30(土) 15:07:38
ライブラリがうざい、ですね。

Cマガのソースには、FFT関数自体は載ってなかったため
FFTはこれを使いました。↓
ttp://www5.airnet.ne.jp/tomy/cpro/sslib8.htm
使ったのはfft1()です。

ちなみに引数iterの意味がわからず、
ページ上部の「使用例」を参考に、必ず0を渡してます…。
888デフォルトの名無しさん:2007/06/30(土) 15:13:08
俺が見やすいFFT書いてやるぜ
889デフォルトの名無しさん:2007/06/30(土) 15:14:22
もっとも、関数オーバヘッドがでかいけどなw
890デフォルトの名無しさん:2007/06/30(土) 15:18:18
>>887
http://oku.edu.mie-u.ac.jp/~okumura/algo/
ここの
http://oku.edu.mie-u.ac.jp/~okumura/algo/archive/algo.lzh
のfft.cオヌヌメ

ライブラリ使うのうざいっつって他人のソースマンマ使ってるんじゃ意味無い気もするがな。
891871: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にしてるんですが。
892デフォルトの名無しさん:2007/06/30(土) 17:15:19
>>891
いや、だからピッチシフトしてみる前に、
素通しの FFT → IFFT の結果確かめてみろって。

高周波に関しては、普通は 0 で埋めとく。
ない情報は(簡単な方法では)作れない。

たいていの音はハーモニクスを持ってるっていう経験則から、
低周波の情報を使って(元々ない)高周波を推定する手法はあるけど、
詳細は知らない。
893デフォルトの名無しさん:2007/06/30(土) 19:01:12
>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すれば虚数成分は出現しない。
894デフォルトの名無しさん:2007/07/03(火) 23:36:51
標本化定理ってよく以下のように紹介されてるんだけど、

>原信号に含まれる最大周波数成分を f とすると、
>2f よりも高い周波数 fs で標本化した信号は、
>低域通過(ローパス)フィルターで高域成分を除去することによって
>原信号を完全に復元することができるということを示している。

5512Hz の正弦波をサンプリング周波数 11025Hz でサンプリングしたら、
とても原信号を完全に復元したとは言えないような結果になった。
#音量が大きくなったり小さくなったりを繰り返して聞こえる。

以下のフリーウェアで簡単に再現できるので理由を教えてくれると有り難い。
WaveGene
http://www.vector.co.jp/soft/win95/art/se097634.html

WaveSpectra
http://www.vector.co.jp/soft/win95/art/se085448.html
895デフォルトの名無しさん:2007/07/03(火) 23:55:44
2倍じゃ完全復元なんてできないよ。図に書いてみればすぐ分かる。
896デフォルトの名無しさん:2007/07/03(火) 23:58:24
1Hzの差でうなりが出るんじゃね?
897デフォルトの名無しさん:2007/07/04(水) 00:19:19
つうか、どんだけスゴイローパス使ってるのかと小一時間
898デフォルトの名無しさん:2007/07/04(水) 00:33:43
サンプリング定理で前提とされている理想低域通過フィルタが肝だな。
本当に理論どおりならサンプリング周波数の0.49999倍でもうなりが出ずに完全に復元できる。
899894:2007/07/04(水) 00:40:50
>>895
>2倍じゃ完全復元なんてできないよ。図に書いてみればすぐ分かる。

やはり、完全復元は無理だよね。

>>896
>1Hzの差でうなりが出るんじゃね?
うん、激しくうなってます。

で、894の標本化定理の説明の引用元は wikipedia なんだけど、
これって間違ってるって考えてよいのだろうか?

気になって眠れなそうだったんだけど、
これで寝れそう。 895氏、896氏に感謝。
900デフォルトの名無しさん:2007/07/04(水) 00:43:04
標本化定理は間違ってない。
離散ではない連続関数のフーリエ変換をきちんと理解すればわかる。
901デフォルトの名無しさん:2007/07/06(金) 15:51:46
ローパスフィルターなんか使って無いじゃん
902デフォルトの名無しさん:2007/07/06(金) 16:25:48
ローパス使わないと音(アナログ)に戻らない
903デフォルトの名無しさん:2007/07/06(金) 17:12:41
AD変換にもDA変換にも強烈なローパスが必須だ
904デフォルトの名無しさん:2007/07/06(金) 18:10:09
ローパス使うとうねらないの?
905デフォルトの名無しさん:2007/07/06(金) 18:14:02
>>904
カットオフ周波数でスパッと切れる理想ローパスフィルタ(=カーネルがsinc関数)が実現できるならね
906デフォルトの名無しさん:2007/07/06(金) 18:29:50
>>905
そしてサンプリングデータも-∞から∞の時間範囲ですべて揃ってるならなw
907デフォルトの名無しさん:2007/07/06(金) 21:07:03
まああれだ
適当なところであきらめろ
それか難聴になればおk
908デフォルトの名無しさん:2007/07/06(金) 21:22:05
みんなが不思議に思ってるのは >>894 のように 11025Hz サンプリングのADCは
普通は 5512Hz の入力をほとんど通さないのに、どうやって録音したのかという事だろ?

どんな急峻なLPF使ってるんだと、
LPFが入ってないなら理解出来るが、LPF無しでは 折り返しがひどくて使えない筈。

さらに、DACも、最近のDACはデルタシグマ方式だから、やっぱりLPFが入ってて 5512Hzを聞くのは難しい。


テスト信号発生ソフトのリンクを張ってるって事は、、単にサイン波をソフトで作ったのか?
だったら嘘吐き野郎がという事になるが
909デフォルトの名無しさん:2007/07/06(金) 23:19:17
>11025Hz サンプリングのADCは 普通は 5512Hz の入力をほとんど通さない
あぁ、強烈で理想的なローパスとは、録音する時の事ですか。なるほど。
910デフォルトの名無しさん:2007/07/06(金) 23:35:56
いやだから再生するときも必要なんだってばさ
911デフォルトの名無しさん:2007/07/06(金) 23:50:59
ローパスフィルタの理想度はむしろDA変換時のほうが大事
912デフォルトの名無しさん:2007/07/07(土) 07:20:46
強烈で理想的なローパスがあれば5512HzでADC入力->11025->DAC出力で  正しく再生出来る。
ただ,これを実現するには、出力まで10秒以上の遅延が必要だろう。

現実的な数10msの遅延で実現出来るフィルタでは 5512Hzは入力でもカットされ 出力でもカットされるだろう
913デフォルトの名無しさん:2007/07/07(土) 21:10:14
録音時のマスターサンプリングならいくらでも時間掛けられるから実現可能だろうけど、
再生時に遅延しまくると困るな。

MDみたいに4秒バッファと称して遅延も込み込みにする手法はどうだ?w
914894:2007/07/07(土) 22:17:38
>>908
テスト信号発生ソフトを使えば、理想にかなり近い状態で、
標本化が可能だと思ったからです。

私が標本化って書いたのは、録音してないからです。
で、再生はWindows のサウンドレコーダを使ったんですが、
この場合、個々のサンプルを通過する正弦波を再生するのではなくて
個々のサンプルを適当に通過するような正弦波よりとがった
波形で再生されました。

FFTの結果には、本来再生できないはずの5512Hz以上の成分が、
表示されたりしてました。

少なくとも Windows のサウンドレコーダを使用した場合には、
定理とかけ離れた動作をするようですね。
915デフォルトの名無しさん:2007/07/07(土) 22:28:21
>サウンドレコーダを使用した場合には
ドライバが同一ならどんな再生ソフト使っても同じだぼけぇ
再生時のローパスってのはD/A変換の際にかけるもので、それはサウンドカードの仕事だ
デコーダでもサウンドドライバでもないわアホ
916デフォルトの名無しさん:2007/07/07(土) 22:32:02
自分にとって都合の良い意見だけ聞こうとせずに,
ちゃんと全部の話を理解しようとしてみなよ

それと,100Hzだろうが1000Hzだろうが,正弦波の切り出し方によっては
スペクトルにいくらでも高周波がでてくるって

もういい加減この話題は疲れた
917デフォルトの名無しさん:2007/07/07(土) 22:36:09
そういやサンプリング定理って位相ズレがある場合どうなるんだっけ?
む、ちょっと考えてもわからん。これはフーリエ変換を勉強しなおしたほうがいいな俺
918894:2007/07/10(火) 23:22:53
>>915
11025Hzのファイルを読んでから、
サンプルを補って22050Hzや44100Hzでデバイスに出力するような、
プレイヤーがありそうなので、サウンドレコーダと明記してみました。

また、グラフィックイコライザつきのプレイヤーなどでは、
デバイス出力前にフィルタが動作しているように感じます。

ところで、再生時のローパスフィルタの役割が未だに理解できません。
どなたか、ヒントを頂ければ幸いです。
919デフォルトの名無しさん:2007/07/10(火) 23:41:18
とりあえずwindowsのサウンドドライバの仕組みも勉強しる
920デフォルトの名無しさん:2007/07/11(水) 00:08:46
>>918
再生時のローパスフィルタはDACの回路の話だってのはわかってる?
921デフォルトの名無しさん:2007/07/11(水) 04:38:54
>>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の信号を取除けば
原信号を完全に復元できる、というのが標本化定理の言うところです。
922デフォルトの名無しさん:2007/07/11(水) 08:19:27
>>918
再生はDACが行う。 ADCが瞬時値を読んでるように
音声用のDACも理屈の上ではパルスを出さなければいけない。 
このパルスをカットするのにアナログレベルでLPFが必要だ。

しかし、パルスを出すのと、特性の良いアナログLPFは難しいので、
サンプル周波数を上げ、オンオフの方が楽なので1ビットの出力にしたデルタシグマの
DACが現在音声用では主流だ。

サンプリング周波数をあげるのは強力なLPFが必要になる。
たとえば128倍にサンプリング周波数をあげるには、1個データがあって残り127個がゼロの
データをfs/256 のf0で十分なカットをしなければならない。
そうすると、f0=5512.5で 5512Hzは殆どカットされてしまう
923デフォルトの名無しさん:2007/07/11(水) 10:16:37
>>918
記録できるギリギリの周波数のサイン波はほぼ矩形波。
矩形波をフーリエ変換すると、たんまり高周波がでるだろ。
それをカットする。
924デフォルトの名無しさん:2007/07/11(水) 11:21:08
>921
>信号になってしまいます。この51Hzの信号をサンプリングノイズ(量子化雑音)といいます。
これ、どっかの書籍でも同じような事書いてるの見たことあるけど、
サンプリングノイズじゃなくてエイリアシングノイズだろ。
量子化ってのは音量(波の高さ)をbit値に置き換える作業の事で、
その時に出る誤差で乗る雑音を量子化ノイズと呼ぶ。
925921:2007/07/11(水) 17:28:04
>>924
ずっと量子化ノイズと言ってました。何時からかは覚えてませんがその書籍を
読んだのかもしれません。時間軸方向に連続した信号をサンプリングで量子化
することで発生するノイズですから量子化ノイズと言っても間違いでは無い
気がしますが・・・ 言い訳っぽいですね、ごめんなさい。
ここはエイリアシングノイズに訂正します。

ご指摘に感謝です。
926921:2007/07/11(水) 17:37:20
>>921にもうひとつ間違いがありましたので合わせて訂正を。

12行目
×信号(逆相)をD/A変換した時   → ○信号(逆相)をA/D変換した時

18行目
×サンプリングノイズ(量子化雑音) → ○エイリアシングノイズ

#なんか途中から文体変わってるし多重人格かしらん
927デフォルトの名無しさん:2007/07/11(水) 17:53:56
>>925
> サンプリングで量子化することで発生するノイズですから

だーかーらー、標本化と量子化はまったく別の概念だっつーの
928デフォルトの名無しさん:2007/07/11(水) 19:00:36
うん。
昔、アナログのBBDエコーというのがあったけど、
これは標本化はあるけど、量子化は無い(アナログだから)
929デフォルトの名無しさん:2007/07/11(水) 22:49:01
時間を離散化→サンプリング
音圧を離散化→量子化
でおk?
930デフォルトの名無しさん:2007/07/12(木) 04:16:23
>929
音圧は離散化っつーと多少誤解があるかも。
別に量子化は整数じゃなくてもいいし、整数じゃなくても量子化ノイズは存在する。
931デフォルトの名無しさん:2007/07/12(木) 07:49:07
>>929
okだけどサンプリングと量子化を同じ意味で使う事もあるから読むときは要注意
932デフォルトの名無しさん:2007/07/12(木) 20:29:28
サンプリングと量子化を同じ意味で使ってたら
その書き手が間違ってるね
933デフォルトの名無しさん:2007/07/13(金) 13:47:24
サンプリング定理って、もしかして、サンプリング周波数の「半分以下」ではなくて「半分未満」なんですか?
(逆に言うとサンプルしたい周波数の2倍以上ではなく2倍を越える周波数?)
>>921
うねりのない49Hzをサンプリングして出力したとき「うねり」が付いてしまったら、再現できていないと思うのですが。
934デフォルトの名無しさん:2007/07/13(金) 14:10:59

サンプリング定理は、無限に来る信号に対してだから、以下とか未満とかの区別はない
実用的には用意出来るLPFの特性によるという事になる。

49Hzが無限にサンプリングされていて、DACで理想的なインパルス出力が出来て
その出力に完全に50Hzで切れる理想LPFが付けられるならうねりは出ない。
うねりが出るのは、LPFの性能が十分でなかったり、
インパルスでない出力しか出せないからだ

なお、モノラル値で記録した場合に1/2であって、
振動は本来は円運動なので、
円運動に対して複素数で記録した場合はサンプリング周波数まで再生出来る
935デフォルトの名無しさん:2007/07/13(金) 14:21:31
>>933
>>921はエイリアシングの話しかしてないよ。
「原信号を完全に復元できる」と書かれているけど、その復元原理は説明されていない。

完全に復元できるかどうかは>>934の説明が正しい。
936デフォルトの名無しさん:2007/07/13(金) 16:49:59
スペクトラを見てエイリアシングが無いか自分の目で見ればわかるだろ
何で人に聞くかなぁwwwwwwwwwww
937894:2007/07/13(金) 23:59:02
>>934
>サンプリング定理は、無限に来る信号に対してだから、以下とか未満とかの区別はない
>実用的には用意出来るLPFの特性によるという事になる。

未満でない場合は直流と50Hzの区別がつかないように感じます。
もう少し解説していただけないでしょうか?
938デフォルトの名無しさん:2007/07/13(金) 23:59:58
未満の解釈でいいと思うよ
939デフォルトの名無しさん:2007/07/14(土) 00:04:53
サンプリング定理どおりの理想インパルス出力と理想ローパスフィルタが実現できるなら、
50Hzは無理だけど49.999999999999999999Hzなら「完全に」復元できる。
940894:2007/07/14(土) 01:16:03
10日間かけてやっと理解できた気がします。
でも自信がないので脳内をさらします。
間違いの指摘を頂ければ幸いです。

・標本化時のLPFは、ナイキスト周波数以上の成分が
エイリアスとして混入するのを防止するため。

・標本を通過する波形をナイキスト周波数以下の正弦波を合成して
作成するとその波形は元の波形を完全に再現したものとなる。

・標本をインパルスとして再生すると、ナイキスト周波数をはさんで、
鏡のようにエイリアス様の成分が発生する。
そのためナイキスト周波数以上の成分をLPFで除去しないと、
元の波形は再現されない。

以上は、無限精度/無限期間の標本と理想的なLPFを必要とするので、
実世界では妥協が必要である。

・計算のみでwaveファイルを作成すると、理想に非常に近いLPFを使用して
標本化を行った場合と同様のファイルを作成できるが、
そのようなファイルは実際に再生しようとすると理想に非常に近いLPFを
使用しないと正しい再生結果が得られない。
941894:2007/07/14(土) 01:17:39
>>940の以下は未満で読み替えてください。
942デフォルトの名無しさん:2007/07/16(月) 11:47:23
うん。良くなった。
今まできつい事言ってわるかった。
この調子で勉強に励め。がんばれ。
943デフォルトの名無しさん:2007/07/16(月) 13:47:28
>>937
理想的な50HzでカットするLPFの特性ってどういう関数になるか知ってる?
そう50Hzのサイン波になるのさ

それとの無限の畳み込みだから、理屈から言えば、50Hzには無限のゲインを持ってる
だからまあ、理屈の上では50Hzは無限小の振幅になっても、無限大のゲインで再生出来る事になるのさ

0.9999999999999..... と無限に続く数字は 1/9*9 だから1になるみたいなもの
944デフォルトの名無しさん:2007/07/16(月) 21:51:53
>>943
それだと、どんな信号でも理想的なLPFを通すと50Hzになってしまうのでは?
945デフォルトの名無しさん:2007/07/16(月) 21:54:10
理想的なLPFは同時に理想的なHPFってことか?
946デフォルトの名無しさん:2007/07/17(火) 01:27:55
>>943
理想LPFのカーネルはsinじゃなくてsinc関数だろwwwwwwwwwwwwwwwwwwwwwwwwwwwww
50Hzに対してゲインが無限のフィルタのどこが理想的なんだよwwwwwwwwwwwwっうぇwっうぇwwww
947デフォルトの名無しさん:2007/07/17(火) 08:48:37
943が意味不明なことをさも事実のように言ってるのはガチ
でも946みたいのは不快だな
948デフォルトの名無しさん:2007/07/17(火) 11:44:03
943 が言ってるのは、どうみても狭帯域透過フィルタよね。
LPF の応答は sinc。
949デフォルトの名無しさん:2007/07/22(日) 00:07:41
ハードウェアのIOでのLPFとか現実的な話だと上手くいかないのも分かるけど、
限りなく理想に近いsinc関数での畳み込みと、最終確認は画像での波形確認ってことで、
仮想的に理想の状態を作る事は出来んのか?

894はその話をしてたんだと思うのだが。

その状態で、高サンプルレート(アナログのアナロジーとして)で、低中周波のサインを生成して、
(Sinefreq-1hz)*2 位の「位相ずれによるうねりが発生しそうな」サンプルレートでサンプリングして、
それを高サンプルレートにもう一度持ってきて、理想のLPFをかけても、低周波のうねりって残ってるんじゃないか?(誤差レベルは無視しても)

という話では
950デフォルトの名無しさん:2007/07/22(日) 00:29:13
無限時間畳み込みできやしないのに何が「仮想的に理想」なんだよ
951デフォルトの名無しさん:2007/07/22(日) 00:31:53
まあ、せいぜい、「二乗誤差を最小化」か「最大誤差を最小化」だな。
それを「仮想的に理想」といいたいんなら、それは可能。
952デフォルトの名無しさん:2007/07/22(日) 02:08:44
>>950
だからあ、無限までやらなくても無視できる誤差レベルまでやれば確認位取れるでしょう
953デフォルトの名無しさん:2007/07/22(日) 02:35:14
>>952
それで「低周波のうねり」が確認できたとしたら、それは畳み込みを有限で打ち切ったせいだろ。
「無視できる誤差レベル」って何を基準に言ってるんだ?

標本化定理の理論どおりにsincで畳み込めば絶対にうねらないことは数式的に明らかなんだから、
もし「低周波のうねり」が残ったとしたらその時点で「理想のLPF」じゃないだろ。

おまえがいったい何を確認したいのかわからん。
954デフォルトの名無しさん:2007/07/22(日) 02:37:30
現実的/統計的に理想と同じよーな感じなんじゃないか
RSA公開鍵暗号だってそういう雰囲気だし
955デフォルトの名無しさん:2007/07/22(日) 05:20:44
ホント頭悪いな、理想論と実装は別物だといい加減気付けよ。
956デフォルトの名無しさん:2007/07/22(日) 09:51:24
「理論通りなら本当にうねらないのか?」ということを確認してみたいなら、
LPFのシミュレーションの精度(畳み込みの長さなど)を高めるにつれて
徐々にうねりが減っていく様子が観察できればそれで十分だな。

たとえば矩形波のフーリエ展開が本当かどうか確かめたくてずっと足していっても
永久にリップルがなくならない(けど全体として矩形波には近いづいていく)のと似たようなもんやね。
957デフォルトの名無しさん:2007/07/22(日) 11:43:08
永遠に足せればリップルはなくなるんだが
958デフォルトの名無しさん:2007/07/22(日) 12:07:23
なくなるところまで数値計算じゃ確認できないって話だろ
959デフォルトの名無しさん:2007/07/22(日) 12:23:11
>>957
矩形波のフーリエ級数展開を有限長で打ち切ったときのリップルのオーバーシュート量は
倍音をいくら増やしていっても減少せずにずっと持続するよ(ギブス現象)。
http://ja.wikipedia.org/wiki/%E3%82%AE%E3%83%96%E3%82%BA%E7%8F%BE%E8%B1%A1
波形としての極限は矩形波に一致するけど、リップル幅の極限はゼロにならないという不思議な現象。
960デフォルトの名無しさん:2007/07/22(日) 12:31:43
有限長で打ち切ったらだめだろ
961デフォルトの名無しさん:2007/07/22(日) 12:51:13
つまり、おまいは普通に精度を高めて行く方法では
実現不可能だと言う事を言いたいんだろ。

「無限に足せばいけるよ!」

っていう話はみんな理解してると思うよ。

計算上の工夫で「無限に近い状態」を作り出せるのかって事を聞きたかったんじゃない?
俺は数学科じゃなかったし、無限の数学的な扱い方なんて知らんけどよー。
962デフォルトの名無しさん:2007/07/22(日) 13:08:35
>>960
>>959のギブス現象は、n項までで打ち切ったときのオーバーシュート量をa[n]とすると、
n→∞の極限を計算してもa[n]がゼロにならないっていう意味でしょ(具体的には0.089490に収束)

標本化定理のシミュレーションでは不連続点はないからギブス現象は発生せずに収束するはずだから、
その意味では、>>956で例として矩形波のフーリエ級数展開を挙げたのはあまり適切でない気もする
963デフォルトの名無しさん:2007/07/22(日) 13:59:12
ウェーブレット変換とか使うといいんじゃないかな
964デフォルトの名無しさん:2007/07/22(日) 14:02:42
話が脱線してきました
965デフォルトの名無しさん:2007/07/22(日) 14:23:27
むしろ脱線してくれ
966デフォルトの名無しさん:2007/07/22(日) 15:38:56
>>962
まったく適切ではない
967デフォルトの名無しさん:2007/07/22(日) 16:15:05
>>966
標本化したインパルス列をsincで畳み込むということは、結局sincを平行移動させて加重和をとることに帰着される。
sincの平行移動の関数群は互いに直交するから、同じ直交展開としてフーリエ級数展開との類似性は認められる。
「まったく適切ではない」というのは言い過ぎではないだろうか。
968デフォルトの名無しさん:2007/07/22(日) 19:46:21
流れ嫁よ
>>956はそんなこと言ってるか?
969デフォルトの名無しさん:2007/07/22(日) 22:26:24
むしろ何も言ってないに等しい
970デフォルトの名無しさん:2007/07/23(月) 01:00:22
>>967
話が脱線しまくりだけど、標本化定理を直交関数系による級数展開として捉える考え方は面白いと思った。
band-limitedな任意の関数はsinc関数の平行移動の和として必ず表現できるわけね。
971デフォルトの名無しさん:2007/07/23(月) 13:09:03
この900近辺以降からのスレってほとんど1人か2人で書いてるんだろうなぁ。
と普通に思えるよなwww

自分で自分に突っ込んで楽しいかおぃ?
972デフォルトの名無しさん:2007/07/23(月) 13:30:37
俺の書き込みは10個くらいだからもう1人は頑張ってるな
973デフォルトの名無しさん:2007/07/23(月) 16:42:57
自演乙
974デフォルトの名無しさん:2007/07/23(月) 22:36:44
俺は2個くらい
975デフォルトの名無しさん:2007/07/23(月) 23:47:46
5個
976デフォルトの名無しさん:2007/07/24(火) 21:25:35
自分の知識をひけらかしたい為に自分でわざと間違った質問をする自演

いたいな
977デフォルトの名無しさん:2007/07/24(火) 21:32:04
(^_^;
978デフォルトの名無しさん:2007/07/25(水) 12:45:55
次スレの題は

DSPサウンドプログラミング4
【信号】サウンドプログラミング4【処理】

どっちがいい? それとも他の提案ある?
979デフォルトの名無しさん:2007/07/25(水) 12:53:00
DSPデジタルサウンドプログラミング4
980デフォルトの名無しさん:2007/07/25(水) 13:22:36
今のでいいんじゃないか?
もともとネタが多いわけじゃないんだから、幅広い意味で
981デフォルトの名無しさん:2007/07/25(水) 13:31:41
979だとDSPがデジタルサウンドプログラミングの略だと
思っちゃう初心者がいそう
982デフォルトの名無しさん:2007/07/25(水) 14:08:42
じゃ、無難に 同じ題名で

サウンドプログラミング4
http://pc11.2ch.net/test/read.cgi/tech/1185340076/
983デフォルトの名無しさん
>982
乙!