2 :
デフォルトの名無しさん:04/07/29 07:37
新スレ立て乙
。 ◇◎。o.:O☆οo.
。:゜ ◎::O☆∧_∧☆。∂:o゜
/。○。 ∂(*゚ー゚ )O◇。☆
/ ◎| ̄ ̄∪ ̄∪ ̄ ̄ ̄|:◎:
/ ☆。|.. 新スレおめ .|☆
▼ 。○..io.。◇.☆____| 。.:
∠▲―――――☆ :∂io☆ ゜◎∂:.
4 :
デフォルトの名無しさん:04/07/30 00:05
ボリュームコントロールのように出力する全ての音をいじるにはどうすればいいの?
x68sound.dllに興味を持ったんだけど
この音源のレジスタマップとか紹介してるサイトないかな?
当時はPC98人間だったんで手持ち資料が無い、
でもめっさ面白そうなんで。
サンプルプログラム読めばある程度はわかるんだけどね。
6 :
デフォルトの名無しさん:04/07/30 02:07
age
7 :
デフォルトの名無しさん:04/07/30 02:26
YM2151 と datasheet でぐぐったら
データシートがの pdf が出てきますた。
>>7 残念ながら既知だ。
>>8 よくわからん…関係あるのか?
>>9 既知だ、pdfはリンク切れしてた
オレが知りたいのは
X68Sound_OpmReg(addr);OpmWait();
X68Sound_OpmPoke(data);OpmWait();
でのaddrとdataをどうすればどうなるかの対応表。
エラそうですまん、とりあえずサンプルから少しだけ調べてみた。
発音系
[0x08:slot+ch]キーオン
[0x08, ch]キーオフ
[0x28+ch, kc]音階をOPMレジスタに書き込む
[0x01, 2]LFOをリセット
[0x01, 0]LFOをスタート
音色系
[0x20+ch, (v[0][9]<<6)+(v[0][0]&63)]PAN/AF
[0x1B, v[0][2]&3]WF
[0x18, v[0][4]]SPD
[0x19, 0x80+(v[0][5]&0x7F)]PMD
[0x19, (v[0][6]&0x7F)]AMD
[0x38+ch, ((v[0][7]&7)<<4)+(v[0][8]&3)]PMS/AMS
音色オペレータ系
[0x40+ch+(s*8), (v[t[s]][8]<<4)+(v[t[s]][7]&15)]DT1,MUL
[0x60+ch+(s*8), v[t[s]][5]]TL
[0x80+ch+(s*8), (v[t[s]][6]<<6)+(v[t[s]][0]&31)]KS,AR
[0xA0+ch+(s*8), (v[t[s]][10]<<7)+(v[t[s]][1]&31)]AME,D1R
[0xC0+ch+(s*8), (v[t[s]][9]<<6)+(v[t[s]][2]&31)]DT2,D2R
[0xE0+ch+(s*8), (v[t[s]][4]<<4)+(v[t[s]][3]&15)]D1L,RR
不明
[0x30+i, 5*4]KF=5
X68Soundを使ったVSTiがあったな、VSTiに興味ないのでそれ以上知らないが
保守あげ
ついでに質問
MP3とかoggのエンコードとかもこのスレであってる?
>>17 ありがと
基本的なことから聞きたいんですけど、よくエンコーダによって
音質が良いとか悪いとか言うじゃないすか。
具体的にはどの部分が影響でちゃうんですかね。
ビットレートだけの問題と違うのかなーって思うんです。
MP3を例に挙げます。
・ヒトの耳には聞こえやすい周波数と聞こえ難い周波数というのがあって、
実験的に調べられた結果ラウドネス曲線という形で表すことができることが
知られています。
・ヒトの耳は大きな音があるとその周波数付近の一定範囲の小さな音は知覚
しにくいという特性が知られています。これを周波数マスキングと言います。
・ヒトの耳は大きな音があるとその時間前後の一定範囲の小さな音は知覚
しにくいという特性が知られています。これを時間マスキングと言います。
これらの特性を利用して、ヒトが聞こえ難いとされる部分をカットしても
聴者にとってあまり問題にならない、ということから、MP3エンコードでは
こういった操作がなされます。
さて、音質との関係ですが、この部分の実装がその音質とかかわっている
のではないかと思います。
ヒトの特性を利用したものというのは結構感覚的・実験的で、数学的には
まだ解明されていない部分でもあるので実装が異なってしまうのでしょう。
>>19 いやーなんともご丁寧にご説明ありがとうございます。
調べる手がかりをたくさんいただけましたこと、深く感謝いたします。
余談ですが、
このあたりのことを利用して透かしを埋め込むアルゴリズムもあります。
でも、そういうアルゴリズムはMP3には使えませんね^^;
非常に良スレあげ
画像とオーディオ・サウンドを比べたら圧倒的にオーディオ・サウンド関連は
研究している人も文献も少ないね。
やはりゲームなどで重要視されているのが画像だから、興味を持つ人が少ない
のだろうか。
>>23 ゲームでいうなら、ストリーミング垂れ流しで発展が止まってしまってるし・・・
それで98%のゲームは困らないからな。
たとえばCDからのリッピングは、サウンドプログラミングの
範疇を超えてしまうよね?
いんじゃない?そんなこといったらmidiだってサウンドプログラムかどうか
微妙
ネタが少ないんだから、幅を広げないとね
>>29 データの吸い出し方にもいろいろあるじゃん?
ちなみに
>>29はどんな方法でやっとります?
むしろ新しい音源を開発
エミュレートにとどまらず、なんか奇妙なモデル音源をでっちあげてしまうのは面白いな
それいい!
あと興味あるのは、リアルタイムボイスチェンジャー みたいのできないかな。
ボイスチャット増えてきているし、そういう遊びがあってもいいかも。
音源名は Gian Recital Made-in 2ch で
google イメージ検索で「犯罪 写真」と検索してみろ!
一個目! 一個目!!!
で?
有名じゃんそんなん。
「オナニー やり方」と同じくらい有名だな
音量と周波数をリアルタイムで表示する方法ってどうすればいいんですか?
>>41 まず、サウンドデータを小さなフレームに分割し、
音量は一つのフレーム内の最大の値を検索し、
周波数は一つのフレーム全体をFFTして求める。
そしてそのフレームをサウンドデバイスに流す。
音量はRMSじゃないとやだー
一曲全体の周波数特性を計算するのってどうすればよいのでしょうか?
いまは4096サンプル毎にFFTして、フレーム毎の周波数特性は取れて
いるのですが、それを一曲全体に応用するところで行き詰ってます。
考え方とかまずはこの本っていうのがあれば教えてもらえないでしょうか?
サンプリング範囲を曲全体にすればいいがな
対数時間だからすぐ終わるかな?
窓関数外すのも忘れない。
サンプルはこれでいいかと。
|<---|<-----曲----->|--->|
`----------2^n---------/
曲全体を1度でFFTするようにもしてみたのですが、数分の曲をやっても
1Hz以下のやたら微小な周波数に分解されてしまってよくある波形編集
ソフトみたいにはグラフが描けませんでした。
周波数分解能は10Hz程度でよいと思って4096サンプルでFFTしてた
んですが、曲全体まるごとFFTじゃなきゃダメでしょうか?
>>46 窓関数はかけっぱなしだったので、窓関数を外してリトライしてみます。
>>47 曲全体のFFTにあまり意味は無いのではありませんか?
もし、意味が求めるとすれば、例えば、0-20kHzまでの区間を1Hz単位のビンに
わけて、ヒストグラムにするとかすれば曲全体の周波数の傾向がわかると思い
ますが…
>>48 最終的には曲の任意範囲の周波数を計算したいと思ってます。
曲全体でやっているのはSoundForgeをお手本としてグラフがあっているか
どうかを見比べているので、まずは曲全体をチャレンジしています。
>>46 やっぱり曲全体をFFTすると出てくる周波数の分解能が高すぎて
グラフを書くとわけわからなくなってしまいました。
基礎を固めないとだめだなあと思ったので、いまデジタル信号処理の
勉強をしてます。
なんだか嫌な予感がするんだが...
どっちにしても横軸を対数にするなら、必要な分解能以上にある部分、必要な分解能が無い部分が出来てくる
そこらへんを上手に処理出来ないといけないよね。
イコライザの原理ってFFTして出てきた周波数毎に音量上げる・・・
ってな具合なわけ?
確かに某 日→英→日みたいで不安だな。
>52
「周波数毎に」という表現に不安を覚える。
「周辺の帯域を持ち上げる」とかかな?
まぁ、ようはなだらかな山/谷型に操作する。
LPFの応用で、とある周波数帯だけ増幅するフィルタとかってあり得る?
BPFじゃん。
元信号とBPF結果を足し合わせれば増幅になるんかな?
タコな質問だったらスマヌ
まず、FFTして周波数領域を弄って逆FFTすれば好みの周波数特性を作れるのは正しいが、
それを短時間FFTでする事は出来ない。下降すると区間のつながりが保てないからだ。
つまり全部をサンプルして、全部を一度にFFTするならOKって事だ。
ある領域だけ増幅する事は2次のフィルター(IIR)を使う事が多い。
LC同調回路を模型化したものだが、
判りやすくいうと、 Q/f0の同じ
BPF+LPF+HPFの3つのフィルタに分解して再度合成すると フラットな信号になる。
そこで、3つに分けた後、ゲインを変えて合成すると色々と有用なフィルターが出来る。
BPFだけゲインを変化させると、その周波数帯だけゲインを上下出来る。
俺が、DSPでイコライザーのようなものを作る時は大抵このスタイル。
着メロのMFiフォーマットを解説した資料ってあります?
61 :
デフォルトの名無しさん:04/10/11 07:48:17
保守
過去ログ読みたい あげ
63 :
デフォルトの名無しさん:04/10/26 00:27:50
サウンド関係のAPIでw、indows対応のオープンソースなものってありますか?
portaudioを調べてみたのですが、資料がすくないので。
>>63 win32api
directsound
Windows版のESounDサーバってあるの?
66 :
デフォルトの名無しさん:04/11/01 00:19:20
>>5 なんか偉そうだなてめ
いきなり態度変えやがって
フリーソフトを作りたいので、プログラマーを募集します。
報酬は何もありません。
必要なスキルはC言語(GCC) MinGW GTK+ です。
少なくとも一人は、windowsでのリアルタイムプログラミング
(一定の時間間隔でポート出力する)ことができる人が必要です。
面子が揃ったら、そのままこのスレで開発連絡を行います。
70 :
デフォルトの名無しさん:04/11/02 10:51:15
wavファイルの音質を削って軽くする方法ってないかな。
ファイル形式は変えずに。
72 :
デフォルトの名無しさん:04/11/02 11:31:05
71>>て、言われることは無理なのか。
いや馬鹿ですよどうせ
>>72 どうして自分で調べないんだ?この大馬鹿は
少し調べりゃわかるだろ
>>70 色々ある
bit数を16->8にするとか
周波数を落とすとか
75 :
デフォルトの名無しさん:04/11/02 14:11:29
>>72 今時低速回線なので・・。DSLが羨ましい。
>>74 なるほど、アリガトdd です。
76 :
デフォルトの名無しさん:04/11/02 14:18:19
75ですがtimidi95ってソフトで実現できました。
一応載せときました。では消えます...。
はぁ?
wavの中に適当なcodecを仕込めば簡単に小さくなるが。
ファイル形式はwavのままだし。
↑馬鹿?
そりゃファイル拡張子はwavのままだろうが
形式は変わるだろ
mp3も拡張子wavに変えてwav形式だっ!って言いそうな勢いだなw
ビットレート、サンプリングレート、チャンネル数変えたら
同じファイル形式とは思わないけど、質問者はそれで満足してるようだし
ひょっとするとファイル形式は変えずに=拡張子変えずになのかもね。
それならMP3形式WAVEもありかも
Windowsで、midiStreamOut で演奏が終るのをCreateEventで取得しようとすると、
イベント発生にやたらと時間がかかるのですが、どうすれば演奏終了を瞬時に
取得できるかどうかを知るにはココへ書き込めば解かりますか?
演奏が終わるのを知りたいとなると難しいでしょ。
だって、音には理論的には終わりが無いんだから。
それじゃ、メディアプレイヤーはどうやってリピートしているの?
最後の命令の処理が終ったら、演奏が終った事になるのでは?
midiStreamOut は駄目っぽい。
みんな別スレッドで進行を管理している。
質問ですが、複数のアプリケーションでWAVEデータを同時再生すると
Windows側でミキシングしてるくれる様ですが
1つのアプリケーションで複数のWaveを同時再生したい場合は
waveOutWrite前に自前で加算合成して渡すしかないのでしょうか?
それとも自分のアプリケーションのみでWindows側に合成を任せる事が出来るのでしょうか?
DirectSoundを使えば簡単にミキシングできる
>>88 DirectSoundを使わないと不可能なのでしょうか?
87では書いていませんでしたが元々低レベルAPIを使い出したのは
DirectSoundを使わないで再生するのが目的だったので、
もし、DirectSoundを使わない方法がありましたら
そちらの方法で実装したいと考えているのですが…。
自前で合成した方が楽だと思うが 8bitで処理してるわけじゃないんだろ?
>>90 ありがとうございます。
暫く自宅に帰れないので確認できないのですが、後で見てみます。
しかし、対応してるのは2000以降ですか。ちょっと予定外でした…。
>>91 現在は自前でMIXしています。
OS側でMIX出来るのなら、片方だけ再生を止めたい時などに便利そうだったので…。
93 :
デフォルトの名無しさん:04/11/28 23:26:05
IMA ADPCMのエンコード/デコードアルゴリズム(プログラムソース可)はどこかにありませんか?
95 :
デフォルトの名無しさん:04/11/29 10:43:31
>94 ありがとうございます
簡単なことで質問申し訳ないんですが、音声処理で、ある音声データから特定の単語を認識したい(ワードスポッティングしたい)場合、連続DPマッチングがよくわからないです|||orz
出来ればプログラム例などをのせていただければ幸いですが、よければどんなアルゴリズムかだけでも教えてほしいですTT;
掲示板でさらっと答える内容には見えな・・・
98 :
デフォルトの名無しさん:04/12/01 00:55:11
>96 専門書かって嫁
99 :
デフォルトの名無しさん:04/12/02 16:47:25
C#でもサウンドプログラミングできるのか?
サウンドとは関係の話から始めますが、どうかよろしく。
起動CD-ROMめいたものを作りたくて、CD-ROM の direct read のプログラムを作っている
うちに、spticdda.lzh なるオーディオCDを読むソースを見つけて、試したら、音が出るん
で、ちょっと加工してと思って、いじっているのですが、最初に CD を開くのは CreateFile()
で、これは、win98 では効かないのに気がつきました。
今更 98 ってのもどうかとは思いますが、手元に 98 機もあるんで、動くようにできないか
と、ぐぐったのですが、見つかりません。
direct read では、DosMem16.dll, DosMem32.dll を使って VxdCall とかをやっている
のですが、98 では、audio CD はもっと簡単に開いて、再生する方法ってのはないので
しょうか。プログラムは、VC++ 6.0 を使っています。
サウンド本来の質問ではなく、申し訳ありませんが、他に適当なスレもないようなので
おすがりいたします。
>>102 なら、自分でぐぐろうと、あれこれ見てまして、初めて知ったのは、
CD-DA フォーマットってのは、一番古い仕様だったてこと。びっくり。
古いせいか、説明は既知のように書かれていて、中身に触れているのは
ありません。自分で作った absolute read でも、Disk Editor でも
読めません。0 - 15 sector には、何もないのでしょうか。
DirectX
回答まだですかね。こっちも急いでるんで。
それとも知識が無い人ばかりなのでしょうか。
>>105 貴方誰ですか?
勝手に騙らないでください!
>>101 簡単な方法はないぞアホ。
bootableCDなら書込みだろ、読み込んでどうするんだボケ。
>>104 ありがとうございます。調べます。
>>107 アフォでもボケでも気にしませんが、起動CD作るにはあっちのCD、こっちのCD
読んで、セクタ取りだし、CDイメージ作って書き込みましたです。
しかし、98ではなかなかのような感触があるのが分かりましたね。
>>105,
>>105 なかなか面白い方がここにはおられる。真性の101は急いでは
おりません。98が駄目ならxpでやるまでと覚悟しています。
code project の記事は勉強になりました。また参考URLがありましたら、
ご紹介ください。
110 :
デフォルトの名無しさん:04/12/07 23:20:04
SteinbergのASIOのホスト側のサンプルコードが少ない(付属している1つしか知らない)
のですが、どこかにおいてありませんか?
111 :
デフォルトの名無しさん:04/12/08 11:10:29
112 :
デフォルトの名無しさん:04/12/10 01:36:30
fmodについて質問です。
mp3を再生中に、
float *spectrum;
spectrum=FSOUND_DSP_GetSpectrum();
if (!spectrum)
{
printf("だめぽ");
return;
}
printf("OK--%p",spectrum);
どうしても、だめぽになります。
先に何か設定しなければならない事があるのでしょうか?
Remarks
Note that hardware sounds, MIDI, files do not register on the spectrum graph as they are not run through FMODs DSP system.
Note that to use this you have to turn on the FSOUND FFT DSP unit. This is achieved by calling FSOUND_DSP_GetFFTUnit, then using FSOUND_DSP_SetActive to turn it on.
114 :
デフォルトの名無しさん:04/12/18 02:36:29
質問っす。
ちょっとしたソフトシンセ作ってるんだけど、
単音で16ビット出力するモジュールを作ってから
「あとは多重動作させてしてミックスするだけ〜」
というところで、ミックスってどうやる?
ってな感じで詰まってしまいました。
単純に加算していくと簡単にクリッピングっつーか
オーバーフローしちゃうのでなんか別の方法考えなきゃダメっすか?
ちなみに1音あたりの解像度を下げるのはちょっとツライっす。
それだと16音出すと1音あたり12ビットになっちゃう。
いまどきのCPUだったら整数で小細工するより基本浮動小数でDSP処理して
最後にまとめて整数にするほうが効率よくないかい?
推測で者をいうなあふぉ
ハードウェアのアナログミキサーだと最後は全部足して終わりですね。
クリッピングしちゃうのはユーザーが気をつければいい、というスタンス。
音量も含め、人間の感覚量はほぼ対数に比例するから、
浮動小数点が有利なのは明らかだろう。
そりゃそうだ。フィルター一つ作ったって固定少数点だと面倒な事このうえない
>>114 結局理論上できないことは出来ない。足してクリップするか、自動ゲイン調整して誤魔化すしかない
どなたかMIDIをMP3に変えるフリーソフトをご存知ないでしょうか。
121 :
デフォルトの名無しさん:04/12/18 14:00:33
Visual C++6.0で作る MP3 Playerプログラミング
がどこにも在庫がないけど、どこかに売ってないかな
つーかそんな本読む価値無いだろ
>>120 そうだな…言ってみれば、「板違い」ってヤツだな。
すべて浮動小数でやってみた。
速度的には固定小数点でやっていたときより劣るものの、
音質の向上を考えると満足できる結果となりました。
ありがとうございました。
127 :
デフォルトの名無しさん:04/12/18 19:56:34
>>126 こんなに詳しくかいてあるとは思わなかった。
Visual C++6.0で作る MP3 Playerプログラミング
の独自のguiってどうやって実装するのか誰かしりませんか?
特に今はSKINというファイルをつかって自由に外観を変えることができるのがあるけど、
あれはどうやって実現しているのか不思議。
自分はbitmapをつかってguiを変更できるコントロールはCBitmapButtonぐらいしかしらないし。
知るか
とりあえず浮動小数点でやってみます。
みんなして回答ありがd
完成したら音聞かせてねん。
132 :
デフォルトの名無しさん:04/12/20 21:15:26
初歩的なプログラミングなのですが、お助けください。
種々の波形関数(正弦波、鋸歯状波、矩形波・・・)を
WAVファイルに書き出すプログラムを作成しようとしています。
周波数、音の強さをオプション指定としたいのですが、
参考となる書籍などがあれば、教えていただけませんでしょうか。
133 :
132:04/12/20 21:16:39
環境はVC.netになります。
>>132 Clear[p,F,Fsamples,s];
MakeSound[p_,F_,Fsamples_,s_]:=
Table[p Sin[2. Pi F n],{n,0,s,1./Fsamples}];
Export["hoge.wav",
ListPlay[MakeSound[1,1000,44100,1],SampleRate->44100]]
>>132 いきなりC/C++に落とすよりも、MathematicaやMatLabなどで実験してからC/C++に
落とした方が、綺麗にまとまったプログラムが書けますよ。
もし貴方が大学生ならMathematicaくらいなら学校のPCに入っているのでは
ありませんか。
入っていなければ仕方がありませんが…
136 :
132:04/12/20 23:13:11
レスありがとうございます。
大学生です。
しかしながら、学校のPCにはMathematicaもMatLabも
入ってないです。あるのは、Mapleだけです。
なんとかならないですかね…。
プログラミングの勉強がしたいのか、単純な波形をWAVファイルに出力したいのか どっち?
後者ならWaveGeneを使うとか
前者でこのスレにこられても…。
逆だ…orz
× 前者でこのスレにこられても…。
○ 後者でこのスレにこられても…。
自宅PCにMatlabとちょっと互換性のあるoctaveを入れるのも有りかも。
141 :
132:04/12/21 10:12:45
レス、ありがとうございます。
プログラミングの勉強です。C/C++をベースで。
そのあと、拡張していきたいと考えていまして・・・。
とりあえず、上の課題が出来るようになりたいのです。
よろしくお願い致します。
>>141 で、何が知りたいんだ?
WAVファイルのフォーマットとか?
単純波形だろ。
正弦波だと V=sin(t) とか 鋸波だと V=(t%2)-1 とか、
全然チョロいだろ。
というか、
あとあと拡張したいというレベルであればなおさらのこと
こんなところで質問してちゃダメ。
手順を踏んで設計してみることだね。
ちなみに俺は昔作ったことがあるぞ。
デューティ比とかどんどん機能追加したんだけど、
コマンドラインプログラムではかなり空しくなる。
もう面倒で面倒で。
Windowsにて、メディアプレイヤーなどで再生中の音を
自分のプログラムでキャプチャすることは可能?
サウンドレコーダとボリュームコントロール弄ってイロイロ試してみれ
誤差のないデータを録るのに、ドライバを作ってそこでキャプチャしてるソフトもある。
>>132 正弦波は簡単だけど、鋸歯状波、矩形波は難しいよ。
もちろん、ピッタリ割り切れる周波数なら、簡易に、作ればいいんだけど
理解が足りないうちは、1波形がnサンプルでしか作れなかったりするな(nは自然数)。
任意の周波数を出せるようになれば進歩。
それにより発生する折り返しノイズをオーバーサンプリングその他で軽減することを学べれば、
単純な波形の生成に関しての基礎は十分。
質問した奴はもう来ないだろうし、この話はもういいんじゃないか?
足し合わせなんてすごい贅沢なアルゴリズムですね。
>>153 アナログ的にはね^^;
ディジタルだったらもっと簡単にできるねー にゃんにゃん
確かに
>>145 のようなところから出発すると、矩形・三角は難しいだろうな。
周波数スイープすると、シュワンシュワン
漏れは矩形の作成を単純計算で行う所から出発したが、
ガビガビする問題はすぐに独自理論で解決した。
端数切り捨て。
矩形波って四角の波だすだけじゃないの?
周波数でうまくわりきれないのも、誤差拡散みたいなことするだけじゃないの?
サウンドなんてやった事ないから、とんでもなく的外れなこといってるかも。
いろいろ教えてくれ。
(1) 量子化ノイズ : 音量変換、画像色数変換
(2) エリアシングノイズ(折り返しノイズ) : 音程変換、画像サイズ変換
誤差拡散は(1)対策として使う。
今話してるガビガビは(2)。画像でいうならモアレが見える状態。
これへの対策はアンチエリアシングを使う。
補足。(1)(2)どちらも対象はおもに縮小処理。
同じサンプリング周波数のもとで、もっと高い音程にする、ってのも縮小と同じこと。
あんまり深く考えないで矩形波出力アルゴリズム作ってみた
例えば半波長3.6サンプルの矩形波を出力するとこんな感じ
wave(1)=0
wave(2)=0
wave(3)=0
wave(4)=0.6
wave(5)=1
wave(6)=1
wave(7)=1
wave(8)=0.8
wave(9)=0
wave(10)=0
wave(11)=0.8
wave(12)=1
wave(13)=1
wave(14)=1
wave(15)=0.6
wave(16)=0
wave(17)=0
wave(18)=0
もちろん台形波に近くなっちゃうけど。
オーバーサンプリングした後って結局こんなカタチになるのかな?
だとしたら耳で聞いても違和感ないしコレでいいか、
と思ってしまうんだが。詳しい方どう思われます?
165 :
デフォルトの名無しさん:04/12/26 18:05:53
.NET FrameWorkでASIOやPortAudioってつかえますか?
>>163 厳密さを求めないなら台形でやっちまっていい
それなりにガビガビノイズ減らせて実用
少なくとも、0か1だけの波形よりははるかにマシ。0か1かだけじゃガビガビノイズは消えない
英語読めるなら
>>162で
サンプリング44.1程度で誤差拡散とか
>>163をやって
周波数スイープしてスピーカーで音量上げて聞くと
シュワンシュワン はっきり聞こえちゃうよ。
ヘッドホンで聴いてると案外気にならないんだけどね
矩形波をデジタルデータとして正しく出すには、
結局は矩形波を録音したらどういう波形になるかを考えて作らなくちゃいけない。
色んな方法があるけど、
オーバサンプリングして、LPFを通して間引くのが基本
矩形の場合は、LPFを作るFIRフィルタの係数を単に間引いて加算すればいいので簡単
加算した結果をオーバサンプリング比率分だけテーブルとして用意しておいてもいいけど
周波数が高くなると、重なってくるので計算がややこしくなる。
この場合もオーバサンプリングした周波数で割り切れる周波数しか正確には出せないけど
64fs程度のオーバサンプリングなら誤差拡散してもいいし
それ以下なら補間すれば、まあ誤魔化せる。
理論的に攻めるなら、サイン波合成でゆくとか、
矩形波に限れば釣鐘関数の積分でどこまで誤魔化せるか頑張るとか
バーチャルアコースティック音源作りたい
です
>>163 漏れそんな感じだけど、ほとんど問題ないけどな。
171 :
デフォルトの名無しさん:04/12/30 01:50:44
かなり初歩的だけど、LPFとかHPFって具体的にどうやって実装するの?
前スレ14あたりにそれらしいものが書いてあったけど
どういう事かさっぱりわからないし。
DFTかけて出た結果の高周波部分をゼロクリアして
逆DFTとかじゃうまくいかないのか?
>>171 FIRでの場合ですが、
入力x、出力y、タップ数Nのフィルタ係数hとして、
y[n]=(h[0]*x[n]+h[1]*x[n-1]+h[2]*x[n-2]…h[N-1]*x[n-(N-1)])
を逐次実行してゆけば良いのです。
C++での実装では、例えば、Filterクラスを用意して、
メンバ変数
std::vector<double> hh_;
std::deque<double> ringbuff_;
メンバ関数
double filter(double x) {
ringbuff.pop_back();
ringbuff.push_front(x);
return std::inner_product(ringbuff_.begin(), ringbuff_.end(), hh_.begin(), 0.0);
}
などを作ります。
フィルタの関数は一サンプル入れるごとに一サンプル出力されるように作ると汎用性が高まりますよ。
>>171 フィルタの設計は、
振幅特性Gと位相特性θを与えればできますが(G*e^(j*θ)を逆フーリエ変換)、
実際には振幅特性だけで良いです。
例えば、サンプリング周波数8kHz、カットオフ周波数800Hz、タップ数10、の時、
G={1,0,0,0,0,0,0,0,0,1}
というリストを作り、位相特性を0とします。
G*e^(j*θ)=Gですから、Gの逆フーリエ変換ということになりますね。
この出力をプロットしてみると解かると思いますが、全要素の半分だけシフトして
やらないといけません。
あの、ごめんなさい。思いつくままに書いたものです。
コンパイルもデバグもしていませんので、通るかどうか解かりませんが…
std::vector<double> FIRCoeff::makeLPFCoeff(double fs, double fc, int tapn) {
std::vector<double> hh;
int fcint = (int)(tapn * fc / fs);
double gain1 = pow(10.0, 0.0 / 20.0);
double gain2 = pow(10.0, -200.0 / 20.0);
std::complex<double> freqres_fc1(gain1, 0.0);
std::complex<double> freqres_fc2(gain2, 0.0);
std::vector< std::complex<double> > freqres;
freqres.assign(fcint, freqres_fc1);
freqres.insert(freqres.end(), tapn - 2 * fcint, freqres_fc2);
freqres.insert(freqres.end(), fcint, freqres_fc1);
std::vector< std::complex<double> > cv = idft(freqres); // idftは離散フーリエ変換する関数
int cvsize = cv.size();
for(unsigned int i = 0; i < cvsize; ++i) {
hh.push_back(cv[(i + cvsize - cvsize / 2) % cvsize].first);
}
}
あ、メンバ関数先に作ってみたら、クラスにする必要がなくなっていました。。
FIRCoeffは必要ありませんね。
…ってなんだか、かなり電波な発言に見えるのは気のせいですか?
大掃除の影響で疲れている上に、眠いのでこれにて失礼いたします。
お疲れさまです。
大原ゆきさんのおっしゃるようにリングバッファを使うのが定石ですね。
Cマガジンなどでも過去に数回サウンドプログラミングの特集がありますから、そちらをあたるといいと思いますよ。
>>大原ゆきさん
すいません・・・。
>>174のソースの各々の変数が何を意味するのか教えてください・・・。
なんとなくわかる物もあるのですが、確証がほしいので・・・。
あと、入力・出力は、それぞれどれに当たるのでしょうか?
お願いします・・・。
>>171 前スレ14の書いているのはIIRフィルタについて
1次2次については理論的に色々調べられていて、実用的なフィルタや
特性をコントロールフィルタはこれを応用して作成するのが定石。
ただし、ゲイン特性はある程度好きに作れるが位相の問題がある
FIRフィルタは特性の急峻な良好なものが作れるが、そうすると遅延が必要になる。
最近の液晶TVのようにわざわざ何10、何百ミリ秒も遅延しなくちゃいけない場合とか
プレイヤーであれば問題ないけどね。
DFTかけて戻すのは全体をDFTして処理しなければいけないので、
バッチ処理でしか使えない。リアルタイムでは難しい。
区間DFTで処理しようとすると区間同士を接続する問題がある
ただし究極のFIRフィルタとして理想特性がいくらでも作れる。
求める性能と、状況で選択するって事ね。
>>172にある式と、
>>180のソースを使ってフィルタを
作ってみたのですが、いくらカットオフ周波数を下げても
出力データがほとんど0になってしまいます。なぜでしょうか?
使用したデータは、220、440、880Hzのサイン波を合成した
WAVファイルで、出力も同じ形式でやってます。
そのプログラムは試してないんだけど、
カットオフ周波数を下げると、フィルタ幅が狭くなって、
通り抜ける信号が小さくなるからじゃないか?
出力信号をノーマライズしたらどう?
>>182 サンプリング周波数、カットオフ周波数、タップ数は?
波形の全体見ましたか?
また、出力を離散フーリエ変換してみましたか?
グラフはgnuplotを使ってみると便利でしょう。
double* lst; //サンプル
FILE* gp;
gp = _popen("pgnuplot.exe", "w");
fprintf(gp,"plot '-' with line\n");
for (int i = 0; i < n; ++i)
fprintf(gp,"%lf %lf\n",(double)i, lst[i]);
fprintf(gp,"e\n");
fflush(gp);
fclose(gp);
>>181 実際にFIRをVSTに組み込んでいるものでつが
FIRの遅延 = (次数/2) - 1が実質なんで
数百msも遅延を作ったとしたら44.1kHzでサンプリングしても
数万サンプル必要になってCPU(DSPボードでもおんなじ)が暴走しちゃうよw
音に関して言えば
窓関数つかえばフィルタの歪み自体はなくなる
(フィルタカーブがどうしてもなだらかにはなるけれど)
FIRフィルタのよさは何より線形位相なところでFFTよりも音のひずみが少ない
とこににあるわけだから遅延自体はしかたないんではないんかい?
FFTに比べたら大分遅延も負荷も少ないわけだし。
フィルタの設計も基本的なフィルタなら
(ローパス/ハイパス/バンドパス/ハイシェルフ/ローシェルフ
/ベル(バンドシェルフ)/バンドリジェクト)
本で軽く学んだら容易に理解できるレベルだからみんなも実装汁
色んな手法があるからね。
一般的なIIRの実装よりもFFTの方が軽い
FIRフィルターの実装もFFTを使って不可を軽くする手もあるし
186に書いたFIRフィルターでFFT使う手法は、ようするに積和をブロック単位にFFTでやっちゃえば
実際にFIRフィルターを1件づつするよりコストが低くなる(ことがある)という手で
超多倍長 掛け算を高速に実行するのと同じ手法ね
サイン波を出力する物があったとして、
ナイキスト周波数を超える周波数を要求された場合、
仕様としてどうするのが普通?
つまりサンプリング周波数の1/2以上を要求されたって事?
仕様に盛り込むのは永久機関を発明しろというようなものだな。
ゼロだけを出力しておけばいいのでは?
『出力は未定義』
入力だったらまだ考えられるけどナァ
つかナイキスト周波数って入力側の用語じゃねえか?
ナイキストの定理は、実軸で表現した場合に fs/2に制限されるというもので
複素領域で考えて、回転方向を規定すればfsまでOK
つまり、L、Rを複素領域と考えて、90度位相差のサイン波を出せば fsまでOK
>>188 そのまま出力すればよい。
波形がおかしくても気にしない。
入力データの誤りです。再度入力して下さい。
周波数?:■
周波数?:440■
197 :
デフォルトの名無しさん:05/01/11 00:20:07
サンプリング周波数44.1kHz→48kHzの変換は22.5kHz以上に音がない限り可逆
それは量子化ビット数が無限大の場合だけの話のような
そうですね。不可逆でしょう。
一般人の聴覚には影響のない範囲で可逆、とも言えますが。
てか44.1kHzから48kHzに変換するとノイズのらない?
ノイズは変換アルゴリズムにもよります。
ものすごいオーバーサンプリングとかすれば
ノイズの発生はそこそこ防げますよ。
Java Sound APIでサウンドプログラミングを勉強中です。
2つの8bitモノラルのwavファイルを自前でMIXしながら再生する
プログラムを試しに作っているのですが、単純に加算することで
実現しようとしたらノイズだらけになりました。事前に元データを
2で割ってから足しているのでクリップはしていないんですが、
音は明らかに歪んでいます。
単純MIXは加算じゃダメなんでしょうか?
double型だったら単純加算でもいいけど、
もしかしたらunsignedとかsignedとかbyteだとか、
そういう変数の型が悪さをしているのかも。
う、byteなんですが・・。
どうやらunsignedを理解してないようなのがわかりました。標準出力で見てみたら、
無音が-127のようですね。たまたま難しいサンプルにあたってしまっていたようです。
signedでやってみます。
高速演算しなくていいんだったら
ファイルへの入出力部分だけを8ビットでやって、
内部的にはぜんぶdoubleで処理してもいいかも。
クリッピングのこととかそれほど考えなくて済む。
プログラミングする訳じゃないんですが、アナログ音声をPCに取り込んで音楽CDを作る場合、
サンプリング周波数44.1kHzで録音して音楽CDを作成するのと、
48kHzで録音して44.1kHzに変換して音楽CDを作成するのでは、前者の方がイイですよね?
max/msp→puredata→pd sdk→portaudioとだんだん
原始的な環境へと移行していってるんだけどオレ。
このままいくと、果てはアセンブラか。
使い方覚えてばっかで、手段がすでに目的化してる感じ。
現代社会の縮図を自分自身の中に見た心地です。
安物だと44より48の方がクロックの精度出ているとか、妄想も可能。
だとすると48で採ってから高精度srcで44にした方が、、なんてね。
色々試してみるも由
プログラミング技術だけじゃなくて、
「耳の良さ」も必要なんだな、この分野。
先輩から「こんなに音が劣化してるのがわかんねーのかよ、やめちまえよ」と言われたOTL
常々思うのは音感は味覚と一緒という事
始めの一口の感想もあり、一食二食〜毎日食べ続けた感想もあり
作る手順も「さしすせそ」あり
駄目出しされた聴感は良いとされる音を聴き込んで鍛えれば由
味を測るセンサはないが、音を測るセンサはある。
ゴールデンイヤーってどんな人だろう…会ってみたい。
Golden Year 1964
音を測るセンサといっても味に例えると糖度がこれくらいで〜とかそんなレベルかと
勘に頼らず、定量的な手法でなんとかするのが優秀なエンジニアではないかと
エンジニアと職人の違いか。
感覚を勘覚にされちゃったよ。
>>209 CODECのADCには強力なLPFが入っているけど、それ相当のフィルタをソフトで実現すると重くなるから
PC内で変換すると、一般的には特性が劣化する。
でも、安物のCODECだと、次数の低いLPFしは入ってなくて、肩特性が悪かったり、折り返しノイズが入ってきたり場合があるから
48kでサンプリングして、強力なLPFをかけた方がより特性が出る。
48000:44100は160:147なんで、原理的には147倍オーバサンプリングして、160分の1にダウンサンプリングする。
それぞれに使うLPFのタップ数を上げれば上げるほど特性は良くなる
>>217 黄金の耳について。
どっかのメーカー(タンノイか?)のスピーカーで、ウーファーの中央にツィーターがついていて、独立して動くと言う「同軸型スピーカーユニット」がありました。
ウーファーが前後に振動しながら、そのウーファーの中央でツィーターがより高周波で前後に振動するというものです。
黄金の耳を持つと言うとある先生が数種類のスピーカーのブラインドテストをしてみたら、
その中の一台に関して「高周波にドップラー効果がかかってるんじゃないか?」との評価を下しました。
その先生に師事していたサウンド・エンジニアたちもびっくり。彼こそ黄金の耳にふさわしいという話になりましたとさ。
>>224 へー。たしかに同軸型マルチウェイの問題点は、ドップラー効果による
高域のFM変調が回避できないことだけど、ウーファの振幅が3-4 mmぐらい
なら聞き取れる人はいないだろうって話だったと思う。どのくらいの音量
で聞いてたんだろうね。
Java Sound API のレイテンシってどのくらい?
>>227 レイテンシはプログラマが設計時に自分で決めるんだろ。
Java Sound APIが決めるわけじゃない。
229 :
デフォルトの名無しさん:05/01/25 15:24:34
Timidi95
CD全部mp3にして聴いてたらダメな耳になっちゃいますかね。
最近不安を感じて全部高めのレートでエンコードしてるけど、
圧縮音楽聴いてること自体がダメとか言われそうだ。
AV板の連中でも案外ブラインドテストに弱そうなのとか見てると、
あまり心配しすぎることでもないかもだが。
違った、ピュアオーディオ板だった。
>>230 「本物」の音を聴かないという時点でダメだ
無圧縮で聞いたところでCD自体が20KHz以上がカットされてて云々言われてキリがない。
A→D→Aと変換してる時点で本物とはかけ離れすぎ。
>>235が正論。
CDに音楽を入れる前には音量をかせぐために
かなりの量のコンプレッサなんかがかけられている。
そういう音量だけでかい音楽を聴いていると、
ダイナミックレンジの広さを耳が拾えなくなるよ。
耳のためを思ったらやっぱりホールでクラシックを聴くのがいい。
でも耳の訓練次第でなんとでもなるんだけどね。
サウンドプログラミングではなくて、そのプログラミングを基にして作られたソフトを
使って趣味で作曲をする立場の人間なんですが(SONARマンセー)、
市販のCDはガンガンコンプレッサー掛けてて、音圧だけはバカでかい。そうすると、
自分の作ったのを公開などするときに、こちらも多少のコンプ掛けないと、やたら
音量が小さくなって不評を買う。困ったもんです。
ココ見てる人の中には市販ソフト開発者もいるのだろうか?
サウンドサイエンス f2 だっけ。 ガンガンコンプレッサーは
色んな手法で音量をでかくしてますよね。
でも、そのせいでせっかく16ビットあるCDが
12ビットや8ビットみたいなダイナミックレンジに感じることがあります。
最近はクラシック録音でも薄くコンプがかかっているみたいです。
むう、確かにCD自体がダメかもしれん。
最近のJ-POPなんか黒ベタの波形だしなあ。
昔はピアノやってて演奏会とかよく行ったり出たりしてたけど、
このところ全然生で聞いてない。ちとコンサート情報漁ってみるか。
どう頑張っても生音には敵わないよな
そりゃ当然。
どう頑張っても生首には敵わないよな
6年前の古いwin98マシン上でfmod3.74でCDDA再生をしようとするとクラッシュします。
fmod.exe、sample/cdda/cdda.exe共に同じです。
cddatestのログにはFSOUND_CDDA_NtScsi_GetFileHandle(16) failedとか出てます。
fmodのフォーラム検索しても同様のケースがありませんがおなじようなじょうよぷになたひとはいますか?
んがおなじようなじょうよぷになたひとはいますか
解決したとですよ。よかった。
フリーサウンドソフトTWEで48Kで24khzの矩形波の音を、44.1khzに変換したらピギョーって音が出た。全然ダメポ。
フリーサウンドソフトTWE の変換品質をここで述べる人
そんな馬鹿なやつるわけないよな。
まあTWEなら仕方ないな。
ageてないだけマシ、だろうな。
ずいぶん低いところに基準を持ってくるんだな。
255 :
デフォルトの名無しさん:05/02/03 09:21:59
このスレで最強の高音質圧縮フォーマットを作りませんか?
oggを見りゃ需要が無いことが分かるだろう。
音響シミュレーションしてリアルな音作れない?
レイトレーシングの音版みたいにして
空気粘度とか楽器内部での反響とか客席、壁、人みたいなオブジェクトへの
吸収・反射全部考慮して。
5分の曲に一ヶ月くらいかかりそうだけど
画像の場合はリアルなようでいて、ゴマカシも可能というか、その方が綺麗と思ってくれる部分もあるけど
音の場合は非常にシビア。
そういう合成をした場合、自然に近づけば近づく程に、よりほんの少しの不自然が際立ってくるよ。
そもそも、楽器をシミュレーションしても演奏はどうするのよ
仮想の演奏者を組んで譜面を入力するとか?
需要とかそういうもんを一切無視して、只管高圧縮・高音質を目指すのも面白いと思うけどね。
賛同者が居ないのなら俺独りで朝鮮するよ。
>>260 理論的な部分に何かあてはあるの?
現行の圧縮技術よりも革新的な秘策みたいなやつ。
あれば是非お話をお聞かせください。
実は多少構想があったりする。
高圧縮には程遠いもののCDの1/2〜1/3には圧縮できるものと思われる。
ソースを分析して時間ごとに割り当てるビット数を最適に可変させるというもの。
PCMのように時間軸に対して一対一対応のデータを割り当てるのではなく。
最初の音を基準に変化量を記録していくというもの。
変化の少ない部分に割り当てるビットを減らし、変化量の多い部分は逆に増やす。
例えば変化量が1の場合は16ビットも割り当てる必要はなく、1ビットで十分である。
また変化量が大きい場合はデータを上手く補完して変化量を少なくし、割り当てるビットを減らすように制御する。
ありきたりだよな(ワロス。
・データをある程度のブロックに区切る
・16bitの上位と下位8bitずつに分ける
・上位をランレングスとかで、下位を辞書使うなりして圧縮
下位を圧縮するのは良いですね。
他にもデータをブロックに区切り、ブロックごとに分析して
使われていない周波数帯域をバッサリ殺ぎ落とすというのも良いかも知れません。
266 :
デフォルトの名無しさん:05/02/03 15:19:03
↑
そういうこと言わない。
以下1960年代に戻ったかの様なレスが続く
↓
あれだ、ソフトウェア危機に備えなければならない。
>>265 知らなかった…orz
仕方ないからベクトル型のフォーマットで構想を練り直そう…。
車輪の再発明スレ
ADPCMというより、動的なハフマン圧縮がより近いんじゃないかな。
ADPCMは情報を捨ててしまうから・・・・ただADPCMはビットレートが一定という大きなメリットがある。
サウンドに使うなら、やっぱりビットレート一定でないと使い難いよ
>>269 どんなことでも、やろうと思ったことが先にやられていることはよくあることだ。
2ch住人は、車輪の最発明だから止めとけ、とすぐに言うが、新規性はやっている内に
見えてくることもよくある。
根気が無ければ何も生まれてない。
メディアプレイヤーにあるファイルを突っ込むと
自動的にその曲のアーティストにメール送ってくれて
しばらく待ってれば生で演奏しに来てくれる。
つまり、メディアプレイヤーにメーラーの機能と
依頼メールのテンプレートをあらかじめ乗せておいて
あとはファイル側にメアドさえ記述しておけば実現可能だな。
>>271 269は、それ以前に、単に勉強不足という事を言いたかったのでは?
>>257 90年代初頭のSIGRAPHで似たようなものを見たことある。
観客一人一人に反射するようなものじゃないけどね。
まぁ、そんなに細かなシミュレーションしても、
人間の聴覚にはあんまり影響ないと思うよ。
労力ばかり大きくて効果が低い。
例えば、一週間くらい演算処理のために計算機を放置しておいて
やっとこさのアウトプット「> 2」を得ることができたとして
しかし、そのアウトプットに我々がどれだけの意味、意義、価値を
感じることができるか。それが問題だということだな。
かといって、安易な結果至上主義に陥るのも考えもんだけど。
もし、プロセスが重要であるのなら、そのプロセスごと含めて見せる
というか、プロセスを魅せる技が必要なのかもしれない。
もちろん、音響レイトレーシングの需要はあるし、
すでに立派なビジネスにもなってるよ。
コンサートホールの建設をするときに
音響を考えたデザインをしたい時なんかに使われてるね。
ごちゃごちゃ言っとらんで、やってみたらいいじゃないのか?
>>257 最近のシンセはそんな感じのがあったと思う
物理モデル音源やね。
そのうちウインドシンセと一緒に一台欲しい。
> もちろん、音響レイトレーシングの需要はあるし、
音響をレイトレースって何か違和感があるな…。
「音響レイトレーシング」でググっても一件もヒットしないしな
そういうことは良くある。
次テンプレ入り:
ディジタルフィルタ設計
畳み込み
ミキシング
音声のパワー
イメージとして、静寂な水面のプールに発生する波紋の減衰と壁反射と打ち消し(加算)
波紋を球体として3Dで計算、かなぁ(??)
波紋疾走
オーバードライブギター
なんなんだよ
エレキギターの物理モデリングの論文どっかで
見たことがあるような気がするんだけど
知りませんか?
レイトレースじゃ変だから、なんだろう、ウェーブトレースとか?
ウェーブって言うより、ソニックでいいんでないの?
バイオリンの音を計算で合成して作りたいです。
>>293 Synthesis ToolKit (stk) というのでググってみ。
色んな音の物理モデルがC++から扱えるようなライブラリ。
WindowsでストリーミングWAVE再生をしたいです。
演奏ファイルはオリジナルフォーマットで
50msec毎にPCMへ変換して、WaveOutのバッファへ放り込んでます。
変換自体はダブルバッファにして予め変換済みなのですが、WOM_DONEを受けて
次のバッファをwaveOutWriteしてるとどうしてもノイズがでます。
waveOutのAPI自体がダブルバッファに対応してないと
これ以上は難しいと思うのですが、何か対策あるのでしょうか?
DirectSoundを使わない理由は?
DirectSoundは近々廃止され……とか人心を惑わしてみるテスト。
OpenALの現状はどうなんだろう。
> 古いPCでも気にしないでいいように
いつのPCの話だよ・・・Pentium-166とかか?
>>299 延々とサポートされる、と言ってみるテスト。
>>300 自分の環境はXPでDirectX5が入ってるみたいなんですが、
DirectXのSDKはどのVerを使えばよいのか?
最新の9(?)で作ったら、Ver5あたりしか入ってないPCなどでは
ちゃんと動くのか?
等が、よくわからず調べるのも面倒だったので拒否してました。
DirectX9SDKだとしても古いバージョン対応のものも書ける。
仮にDirectX5以前のものに対応させたかったら、それ以上の
バージョンのインターフェースを使用しないだけ。
DirectSoundはDX2の頃からほとんど変わってない
DX5か6でNotifyが入ったぐらいか
> よくわからず調べるのも面倒だったので
waveOutはどのバージョンのWindowsでも同じように動くと思ってたの?
まあ、その程度じゃ何やってもダメかもな・・・
>>296 waveOutのAPI自体がダブルバッファに対応してるよ。
バッファを複数用意しておいて、waveOutWriteで先行して2つなり3つなりを送ってから
コールバックなりで空いたものから順に書き直したらいいじゃない。
ああ、日本語ヘルプには
>複数のデータ ブロックを送るときには、 追加ブロックを送るタイミングを調べるために、
> データ ブロックの処理が終了したことを監視する必要があります。
ってあるから、出来ないって思ってしまうよね。
でも、はwaveOutPrepareHeaderで複数定義しておいて、連続してwaveOutWriteして
MM_WOM_DONEで使い終わったバッファにデータを再度用意して waveOutWriteするようにすれば
古いパソコンでも大丈夫
>>304,305
お、できるんですか!?
試してみます。
ありがと!
ところで、もう一つ質問なのですがwaveOutProc関数のParam1/2には
何が入るんでしょうか?
ヘルプ見ても「メッセージパラメータが入ります。」としかないんですが、、、
(いくつめのバッファかの判断に使いたい)
>>296 途切れなくそういうことをやるときは、普通トリプルバッファを使う。
これはDirectXでも何でも同じ。
VBでサウンドプログラムって出来ますか?
4バッファが好み
>>306 MM_WOM_DONEには
>DWORD dwParam1バッファを識別するWAVEHDR構造体を指すポインタです。
>DWORD dwParam2現バージョンでは使われません。
とあるよ。
何番目か調べなくても WAVEHDRが判れば問題ないでしょ?
必要なら WAVEHDRの dwUser メンバを使って識別してもいいけどさ
構造体にいちいちわかりにくい構造あてて、しかも使ったためしない部分が多い
MSの仕様って使っててむかつく
(゚肉゚)
バカ除けだろ?
>>316 サンスコ!
これからそうします。
>>317 「日本語のページを検索」の方でやってました。
ヘタレでごめんなさい。
319 :
デフォルトの名無しさん:05/02/11 21:44:53
フィルタバンクに関して質問です。
2分割のフィルタバンクだと、低域の信号と高域の信号に分割して、
それぞれを1/2にダウンサンプルしますよね。
ここで、どうして高域を1/2にダウンサンプルできるのかがわかりません。
1ヶ月くらい調べているのですが、いまだに文献にたどり着けません……。
すみません!sage忘れました!
ν即逝きすぎました。回線切って首吊ってきます
サイン波に、exp(i*w*t)を掛け算すると、 wだけ周波数を移動出来ます。
という仕掛けで周波数を移動するわけです
>>321 ありがとうございます。
まさか移動できるとは思いませんでした。
LPFを平行移動してHPFを求めるときと同じような感じでしょうか。
ゆっくり考えてみます。どうもありがとうございました。
サウンドドライバを作成するならCとアセンブラどちらの
どちらで作ったほうがいいでしょうか?
>>322 ちがう。
相対性原理みたいなもんで、
φで回転してる人からみた回転速度Πは Π-φになるというだけの事。
>>323 Cで作って、必要ならアセンブラ
ミキシング部分だけアセンブリで。というのが現実的かと。
Cで何か不満があるわけ?
不満を感じる前からそんなこと考える必要はない。
ドライバって結構アセンブラというか機械語的な知識が必要だから、考えた方がいいとは思うけど
>>323 どういうサウンドドライバなんだ?
大昔のマシン用に石叩くならアセンブラ、
今時の中略ならC++、
石叩きじゃなくて波形入れるメモリいじるだけなら
>>325のやり方だな。
画像に対しては、ImageMagick、GraphicsMagick といった基本的な操作ライブラリ、ツール群がありますが
音声に関してそのようなものはありますか?
アレ開発停止?
>>329 PortAudio...はちょっと違うか。
SoXとか。
portaudioは各OSのAPIをラップして扱いやすくした感じかな。
libsndfileは各種音声ファイルを扱うライブラリだよね。
これは使ったことないんだけど、sndobjはどうなんだろ?
動画処理にはmalibがあるよね。なんか箇条書きになっちゃったな。。
>>334 MALIBってAugmentedReality関連のライブラリじゃないの?
あ、そっか。解析するのはちょっと目的が違うか。
IntelのIPPに音声処理用の関数がいくつか入ってたと思う。
ステレオの中央の音だけを取り出すことってできないかしら
誰か教えて
妄想だがL/Rそれぞれをフォルマント解析して差分を求めるしか無いんじゃなかろうか
中央の音を消すのは、単に減算すればいいので簡単だけど
中央の音だけを残すのは理論的には無理。
L+Rを行って(モノラル)、ここからL-R(カラオケ)を引けばいいんでは?
なぜ?
>>341 L=l+c,R=r+c(l,r:左右の音の成分、c:中央の音の成分)とすると、
L+R=l+r+2c,L-R=(l+c)-(r+c)=l-r
(L+R)-(L-R)=(l+r+2c)-(l-r)=2(r+c)=2R
となってしまうのでは?
実際にやった訳じゃないからわからんけど
>>341 (L+R)-(L-R) = 2R
右の音だけが残る
左右の音をベクトルだと考えて、ベクトルの直交化をすれば相関のない音ができあがる。
それを左右からそれぞれ引くと真ん中だけ残る?
なんて言ってみたかっただけ。たぶんうまくいかない。
L[n](既知)=l[n]+c[n]
R[n](既知)=r[n]+c[n]
式が2つで、わからない値が3つの方程式は解けない。
解けないけれど、あるていど推測することはできる、でいいかな?
l[n]+r[n]が出せればOKなんだけどね
入力した音声(音楽)をカラオケ化して出力するキカイというものを
以前どっかで見たことあるけど、あれってどーいう仕組みになってるんだろう?
やっぱりダメか。
>入力した音声(音楽)をカラオケ化して出力するキカイというものを
これは>>340の単純に減算すればOK
多少工夫するなら、音量を自動調整して一番音量の小さい個所にコントロールするとか、
相互相関を求めて、多少遅延時間を調整してやるとか、
>>347 推測するとなると、音源の特定が出来るようにならないといけない。
つまり、それが出来るなら中央の音だけでなく、バイオリンの音だけとかピアノの音だけとかを
オーケストラの中から取り出して来る事が出来るわけだ。
そんな事が出来るなら・・・・・
>>350 L[n]-R[n]って事か?
これだと、右側の波形の位相が180度反転して、音が変わっちゃうような気が
するのだが・・・
>>352 結果はモノラルだから、それで十分なんだよ。
カラオケバージョンを利用して歌だけ抜き出すツールがあったな
おまいら結構簡単なことに気づいてないぞ、
音源のモノラル成分を取り出せばいいだけやん。
逆チャンネルの逆位相成分を重ねるとモノラル成分が除去できるだろ
これの逆というかこれをちょっといじるだけで出来るよ。
つうかおまえら素人だろとあえrbjけぱrkbぱえい0−っらえb−ぴ
>>355 釣ってるんだろうから、あえてマジレスすると、
それはだ、
えとね、
・・・・なんか疲れた。 ・・・将来は256CHマルチトラック録音CDとか出るんだろうか?
2chは永遠に不滅です。でないと困るよ。
ドルビーなんとかでセンター成分とか取り出す奴なかったっけ
最初から録音してるんだろ 5.1CHとかは
ドルビープロロジックは2ch→5.1chコンバータだよね?
ドルビーサラウンドは単に5.1chの規格だったような気がする。
>>353 いや、問題あるぞ。L[n]+R[n]とL[n]-R[n]じゃ結果が違うだろ。
ためしにL[n]に矩形波、R[n]にノコギリ波を入れて合成してみ?
加算だと単純な合成波になるけど、減算だとタダのノコギリ波になるから。
ステレオでもモノラルでも結果は同じだと思うぞ。
なんか話を全然理解してない臭プンプンなんだが
もうひとつ問題があって、音の場所ってのは点じゃないってこと。
微妙に位相のずれた音や、反射音なんかがあるせいで、音の場所は多少広がりを持っている。
だから、単にセンターだけとっても、薄っぺらい音になってしまう。
>>362 完全に周波数・位相があっていれば、それは合成されてしまうだろうけど、
それぞれ別の周期か、ゆらぎの入った信号なら、耳で聞けば差か和かは、まず判らないよ。
ためしにステレオの単純な減算をやってみたけど、エレキギターとかストリングス
とかがエライことになった。(w
なんかものすごいノイズが乗る。場合によってはほぼ雑音と化す。
これじゃあだめだ。自分、完璧主義者なもんで。
あと、あまり関係ないが、センターだけを単純に消すと、ヴォーカルだけでなく
ベースなんかの低音形も一緒に消える。そしてヴォーカルのエコーは残る。ダメダメ
質問があります。
音声をキャプチャしながらリアルタイムでFFTをかける、みたいな処理をしようと考えていますが、
音声をキャプチャするライブラリはこのスレにもちょくちょく出てくるPortAudioがいいのでしょうか?
ただPortAudioは2003年以降更新されていないみたいですけど、大丈夫なんですかね?
また、ちょっとスレ違いな感じですが、PortAudioをVC++ .NET 2003で使おうとしたとき、
libファイルはMinGWをつかってmakeするんでしょうか?
いいのかわるいのかは、あなたがやってみて判断するしかありません
>>367 実質Portaudioはv19-developのバージョンが現在の主流かも。
あとは質問の意味がよく分からないのでパスします。
>>あと、あまり関係ないが、センターだけを単純に消すと、ヴォーカルだけでなく
>>ベースなんかの低音形も一緒に消える。そしてヴォーカルのエコーは残る。ダメダメ
やるまえからわかってんだろ。あとDSPやってるのにエコーっていう表現はダサすぎ・・・。
そういう意味では素人まるだしだなw
DSPやってる人はエコーを何て表現するんですか?
こーらs
残響成分の方が一般的だろうが
そんなところに突っ込んで得意げになられても。
>>373 コーラスではないことは確か。
おそらくディレイとリバーブの合成物だろうな。
っていうか、エコーで通じるし、それで良いじゃん。
俺DSPのプログラマやってるけど、エコーはエコーだしディレイはディレイ。
単純ディレィだと綺麗なエコーにはならないよ。
完璧主義を標榜するヤツにろくなヤツはいない。
例えば昔の俺
wmaからwav、wavからwma
というC/C++用のソースが置いてあるサイトを
知ってる方いますか?
>>380 ありがとうございます。
早速DLしてきました。
>339で出てきたフォルマント解析ってどういうモノ?
よさげな解説サイト、書籍があったら教えてくれ
383 :
デフォルトの名無しさん:05/03/15 05:36:22
mp3からmp3でラップされたwavへの変換方法を教えてください。webサイトでもいいです。
MPEGLAYER3WAVEFORMAT
385 :
デフォルトの名無しさん:05/03/15 23:47:26
ドルビープロロジックみたいな2ch→5.1chコンバータを
作りたいのですが、どういった理論を使用すれば良いのか
どなたか教えてください。
ドルビープロロジックは2ch->3.1chだよ。
2ch→5.1chはプロロジックIIだな
俺もこいつの仕組みは興味あるな
プロロジック2のアルゴリズムをそのまま再現するだけじゃ駄目なの?
5.1ch>2chのエンコードと言うか好きな方向から音出すのは楽だけど、
エンコードされた2chから5.1chの拡張は辛そうだね。
すまん、イマイチ意味不明だ。
PCで5.1ch>2chして外部のプロロジック2デコーダに渡すのは楽だけど、
アナログ5.1ch出力の様な外部デコーダの無いサラウンド環境で、
2ch>5.1chして、それぞれのチャンネルに出すのは辛そう?
後ろチャンネルふたつにはディレイかけたり
HRTFもどきなことをしてるだけじゃないの?
PL2にHRTFは関係ないです。
基本的にはマトリックス。
いや、HRTF「もどき」ね。
HRTFは用途が違うよね。
プロロジック2は基本的に逆位相当てるだけ。
プロロジックをそのまま実装したら特許に抵触するとかない?
逆に、ドルビープロロジック2互換を唱えなければ問題無い様な気もする。
むしろドルビープロロジック2って言わずに実装した方が問題なんじゃないのか?
>>393 逆位相当ててるだけだったらプロロジック1以下の仕様じゃないか?
それだけだったら、ただのPassiveMatrixなわけで。
Active MatrixこそがPLの肝。
>>398-399 よう解らんが、5chのポジショニングは逆相が全てじゃないの?
サブウーハ成分はハイパスして逆相に出さないとか、色々あるけど。
>>397 審査通らないとドルビーロゴ貰えないそうだけど。
ポジショニング>パンニング スマソ
>>400 逆相なのはスピーカの向きが逆だから当たり前のことで、なにも理論上特殊なことじゃない。
逆相にしないと打ち消しあって困ってしまう。ドルビープロロジックじゃなくても普通にステレオ
音源をスピーカーで囲んで後ろを逆相にすればそれなりに広がって聞こえる。でもそれは単に
あちこちから同じ音が聞こえるだけ。
プロロジックのミソは2chの中に後ろからだけ出る音が仕込まれているって点じゃないのか?
その理論がどういう理屈なのかは漏れも知りたいところだが、プロロジック1は後ろモノラル
から独立した音がでて、プロロジック2は後ろもステレオってのが漏れの理解なんだが。
単に逆相なんて仕様だったら子供だましもいいところだし、現にそんな聞こえ方じゃないよな。
>>404 違う違う違う違う。 全く見当違い。
逆相はリアのパンニングを2chにエンコードする為で、デコーダは
その逆をして?各chに振るんだよ。
403さんが資料見つけてきてくれたんだから読んでくれよ。
簡単な例上げると、モノラルソースを L正相R逆相にして、
Lの音量を0から100%にフェードインさせると、フロントLから徐々に
リアLRに移動する。
サラウンド環境あるなら、試してみ。
408 :
デフォルトの名無しさん:2005/03/24(木) 21:04:37
いや、それじゃプログレッシブじゃなくてレガートリンクでしょ。
409 :
デフォルトの名無しさん:皇紀2665/04/01(金) 10:05:04
いま練習で、SMFを読み込むプログラムを試作しているのですが、
既存のSMFを解析しているとメタイベントのtypeが21hというのが現れてしまいます。
以下は問題のトラックチャンクの"MTrk"から始まる冒頭部分のダンプです。
4D 54 72 6B 00 00 27 5F 00 FF 21 01 00 00 FF 03 0C 50 69 63 63 6F 6C 6F 20 49 20 49 49
トラックサイズが275Fhはいいとして、その次のdelta=0hのメタイベント(FFh)のあとのtypeが21hとなっています。(ちなみに、その次はtype=3hのメタイベント、トラック名(Piccolo I II)です。)
ぐぐってもメタイベントのtypeで21hというのは見当たらないのですが、これは何なのでしょうか。
410 :
デフォルトの名無しさん:皇紀2665/04/01(金) 10:30:39
?????
位相変換と入力値にあわせたQの変化で、1ch擬似サラウンドを実現できるかも知れない…。
413 :
デフォルトの名無しさん:int 2ch =05/04/01(金) 22:04:55
>>411 ありがとです助かりました。こんなのもあるんですね。
ウンマンコ 始動
水滴が落ちる「ぴちゃ」という音を合成するにはどうすればいいですか?
また、参考になるものはありますか?
参考になるものは実際の「ぴちゃ」という音を周波数スペクトル解析したもの。
それを元にモデルとなる発音原理を決定
>>415 プログラムじゃなくて、シンセを扱うセンスの問題。
モジュレーション、リバーブ、LFOをうまく使えればできるよ。
いえ、音を鳴らしたいわけではなく、どちらかというとシミュレーションです。
アコースティック楽器を物理モデリングしたいんですけど、という話題に少し近いな
>>1によると、スレ違い気味に思える
どっか別の向いたスレ探したほうがいいんじゃない?
過疎板のシミュレーション板に行けということかー!
昔、Mathematicaでの太鼓シミュレーションをわかりやすく説明してたページがあったけど、
今もあるかな?
音も鳴っておもしろかったんだけど。
個人的には、最終的なアウトプットが音なら、モデリングもここでいいと思うけど…。
もしくはDTM板にそういうスレを立てるとか。
>>422 円形の太鼓は波動方程式の解がベッセル関数の重ね合わせになって、
非整数倍の倍音が出てくるから面白いね
426 :
デフォルトの名無しさん:2005/05/14(土) 20:47:09
質問させてください。
商用アプリのサウンド入出力を自作プログラムでコントロールしたいのですが、
ターゲットとなるアプリはサウンドドライバを指定して音声を出力・入力するタイプになっています。
しかしながら私がDDKを持っていないため、サウンドデバイス自体の新規作成はすぐにはできません。
そこで、出力の場合を例にとると、
[アプリ]→<<汎用サウンド出力ドライバ?>>→(自作ルーチン)→[サウンドカードのドライバ]
のような感じを想定して、<<汎用サウンド出力ドライバ?>>に相当するフリーウェアやAPI?を
探しているのですが、そのようなものはご存知ないでしょうか。
たとえばサウンド出力がDirectShowのFilterGraphにリダイレクトされるような
ドライバがあれば嬉しいところなのですが。
・・・と思いつつぐぐっているとVirtual Audio Cableを見つけました。
これでもいいのですが、フリーでは3分しか使えない(以降ノイズが乗る)ようだし、
他に候補があれば教えてくださいm(__)m
427 :
デフォルトの名無しさん:2005/05/18(水) 19:04:05
内容が微妙に違うような気がしますがここで質問します。
つか、高速フーリエ変換の関数C言語で作ってください。
ネットに転がってるのは動作がおかしかったり、使い方がまるで分からなかったりで、
かといって自分で作れるほど頭よくないんですToT
とりあえずプロトタイプは
int fft( double real_dat[], double imag_dat[], int num, int nn, int flg);
な感じで
real_dat:実部が入る配列
imag_dat:虚部が入る配列
num:データ数(2^nのみ)
nn:2^nのn(なくてもいい)
flg:逆フーリエ変換するかどうかのフラグ(0:しない 0以外:する)
戻り値:0:成功 1:失敗
のようにお願いできますか
早速情報ありがとうございます。
>>429さんのは2次元のやつですかね??
>>428さんのとこのサイトから何とか使えそうなのを拾ってこれました。
これで頑張ってみます。
431 :
429:2005/05/18(水) 23:23:14
>>430 俺は分かりやすいと思ってああいう風なソースを書いたんだが、結局分かってもらえなかったということかい?
427のプロトタイプってどこかで見た覚えがあるんだが
Cマガのサンプルだったかなー
ステレオ・モノラルやら16ビット・8ビットやら、
全部対応しようと思うと、めんどくさいなぁ。
何かうまい方法ないもんかな。
内部処理は全部16bitステレオにして、入出力部でコンバート
>>434 おお、それは楽そうですね。
モノラルをステレオにするときは、
左右おんなじもん鳴らしとけばOKなのかな
438 :
435:2005/06/03(金) 01:06:08
あDTM板にあったんですね……見逃してました
でも、gccとかdlltoolとかの話になるかもしれないので
ム板のここにしておきます
DLLをダンプしてみたら?
名前に@が入ってたりしない?
DLLでエクスポートされるのはmainだけだけど
441 :
デフォルトの名無しさん:2005/06/04(土) 10:07:58
質問させてください。
VC++で192kHzサンプリングの音を出力したいと思うのですが、
Waveform Audioとかでは、構造体WAVEFORMATEXを見るに48kHz止まりですよね。
WindowsXP限定とかでも良いので、192kHzを扱う手段をご存知の方、
お教えいただけませんでしょうか。
解説本やサイト名だけでもかまいませんので。
>>441 実際に試したわけじゃないけど、サウンドカードが対応してるなら、
単純に WAVEFORMATEX の nSamplesPerSec に 192000 を入れたら動いたりしない?
MSDNのヘルプを見た限りでは、この値に特に制限はないみたいだけど。
ちなみに、高精度や多チャンネルを使いたいなら WAVEFORMATEXTENSIBLE が必要だね。
>>439 一応 pexports で他のプラグインと見比べたりしてみましたが
大体同じように見えます
誰か一人くらい同じ症状の人居ないかと、色々検索してみましたが特に見当たらず・・・
(英語力無いんで、見落としてる可能性大ですけれど)
cygwinでやるから悪いのかと思ってmsysとMinGW入れて試してみましたが、変わらずでした
いい機会なんでDLLとかツールの使い方とか勉強してみようと思います・・・
何をしたらいいのかさっぱり解からないので・・・
444 :
441:2005/06/05(日) 01:22:09
>442 サン
MSDNのヘルプに、こんな記述があるんです。
If wFormatTag is WAVE_FORMAT_PCM,
then common values for nSamplesPerSec are 8.0 kHz,
11.025 kHz, 22.05 kHz, and 44.1 kHz.
If wFormatTag is WAVE_FORMAT_PCM,
then wBitsPerSample should be equal to 8 or 16.
ですんで、192kHz 24bitとかはダメなのかな〜、と。
試してはいないのですが。
WAVEFORMATEXTENSIBLEというのは知りませんでした。
見てみましたが、これも24bitには対応しているものの周波数の記述はないですね。
しかし、WAVEOUTCAPS構造体でサウンドカードの対応フォーマットを取得すると
思いますが、ここでも48kHz 16ビット止まりですよね。
サウンドカードがどこまで対応しているかを確認してから、
対応フォーマットで出力させたいのですが・・・。
そんなに気になるならASIO使えば?
waveOutやDirectSoundはあまりアテにならんし。
446 :
441:2005/06/05(日) 11:54:59
>>445 さん
そうなんですか?>当てにならない
ASIOだと良い理由はどのあたりなんでしょう。
しかし、うちのサウンドカード、SE-90PCIなんでASIO対応してない・・・(汗)
「AC97」
>>444 nSamplesPerSecの記述はcommon values(よく使われる値)だから制限じゃないよ
449 :
441:2005/06/06(月) 00:51:21
>>448 さん
ん〜、でも対応フォーマットを取得するWAVEOUTCAPS構造体では、dwFormats値に
WAVE_FORMAT_4S16 (44.1 kHz, stereo, 16-bit)
までしか返すことできないですよね。
どっちにせよ、192kHzに対応しているデバイスかどうかが分からないと思います。
(対応しているときに、192kHzで出力する、という形にしたいです)
450 :
445:2005/06/06(月) 01:40:48
>>446 ドライバ等の環境にもよるかもしれないけど、
waveOut/DirectSoundを使った場合、自分以外のアプリが
自分と異なる周波数で音を出すと周波数がそっちの方に
引っ張られてしまうということが以前あった。
ところが、ASIOだとそんなことは無かったので、
ASIOを使ってみたらと言ってみた、というわけ。
あとはASIOの方がレイテンシーも小さいしね。
>>449 じゃあ、誰もが使ってる 48 kHz はどうなんだって話ですよ。
事前に対応を確かめたければ、実際にデバイスを開いてエラーチェックすればいいんじゃない?
waveOutOpen で WAVE_FORMAT_QUERY っていうフラグも用意されてるみたいだし。
ちなみに、実は mmsystem.h には WAVE_FORMAT_48S16 や WAVE_FORMAT_96S16 なんてのも
こっそり定義されてたりするんだけどね。MSDNなんて所詮こんなもんです。
452 :
デフォルトの名無しさん:2005/06/07(火) 23:17:27
今までの書き込みに関係あるか分からないけど、
WAVE64って何?
MSDNで検索かけても該当無し。
分かっているのは、64ビットデータが扱えて、
ファイルサイズが2G以上のものができることぐらい。
ヘッダの詳しい内容とかが知りたい。
454 :
441:2005/06/08(水) 00:57:26
>>445 さん
なるほどです >周波数が引っ張られる
試す際には気をつけて確認してみますね。
まぁ、最低限、他の音を鳴らさなければOKということでは
あるのですね、ASIO以外でも。
>>451 さん
こっそり定義、っすか。
> 実際にデバイスを開いてエラーチェックすれば
その手でうまくいくかどうか、週末にでも試して見ます。
ちょっと今時間ないもので・・・。
お二人ともフォローどうもありがとうございます。
455 :
デフォルトの名無しさん:2005/06/08(水) 23:41:41
>> 53
すいません、そのページに"SONY WAVE64"って
書いていたので、別物かと思ってスルーしてました。
教えてくれてありがとう。
456 :
デフォルトの名無しさん:2005/06/08(水) 23:51:53
457 :
デフォルトの名無しさん:2005/06/08(水) 23:53:57
>450
ASIOでプログラム組んだ事あるかね。
一般的には対応デバイスが少ないASIOはデメリットも多い。
ASIO4ALLを使えと言うかも知れないが一般ユーザーに
すすめるのもどうかと。(サポートが大変だ。)
>>441 WAVE_FORMAT_QUERY は当てにならない。
WAVEFORMATEXTENSIBLEを使って再生するには
Win98SE以降のOSとWDMのサウンドドライバが必要。
WAVEFORMATEXでも48kHz超えるサンプリング周波数は普通に扱う事ができるが、
非対応のサウンドカードでも再生できるのでカーネルミキサーやドライバで
リサンプリングしている可能性がある。
WAVEFORMATEXTENSIBLEを使えば96KHz以上、24Bit以上の高解像度や
5.1ch のマルチチャンネルも扱える。
459 :
441:2005/06/12(日) 22:55:28
>>458さん
WAVEFORMATEXTENSIBLEでOKなのですね。
Win98SE以降、WDM対応、はうちの環境ではOKです。
リサンプリングされるのは困るので、WAVEFORMATEXTENSIBLEの方を使ってみます。
結局、まだMSDNをチラッと見た程度でプログラミングまで手が回ってません。
週末もなかなか時間とれなくて^^;
また試してみてご報告しにきます。
ウェーブフォーマテフ
うーん、8bitを16bitに変換するのがうまくいかん。
mmioReadで読み込んだ後、符号ありに変換して、
16ビットに変換するって感じでやってるんだけど。
どっかにいいサンプルないかな。
16ビットにしてから符号を付けるが正解。
464 :
461:2005/06/18(土) 13:27:55
何が違うんだろ。誰かヘルプきぼん。
short * pTempBuffer = pTempBuffer = new short[bufSize];
long nRead = 0;
bool is8Bits = false;
if(waveFormat.wBitsPerSample == 8)
{
unsigned char * pTempBuffer_8_u = new unsigned char[bufSize];
nRead = mmioRead(hmmio, (HPSTR)pTempBuffer_8_u, bufSize);
unsigned short * pTempBuffer_u = new unsigned short[bufSize];
for(int i = 0; i < nRead; i++)
pTempBuffer_u[i] = ((short)pTempBuffer_8_u[i]) << 8;
for(int i = 0; i < nRead; i++)
((short *)pTempBuffer)[i] = pTempBuffer_u[i] ^ 0x8000;
delete [] pTempBuffer_8_u;
delete [] pTempBuffer_u;
is8Bits = true;
waveFormat.wBitsPerSample = 16;
waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 8;
waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
}
Cでは符号付きのビットシフトはできません。
てか無駄多杉。
ビット操作で中途半端に高速化しないで
普通の演算アルゴリズムを考えるべし。
正しい結果が得られるようになってからビット操作に置き換える。
コンパイラによってcharの符号の扱いが違うので注意が必要。
オレはVCで「キャストして引き算してから掛け算」で8→16ビットの変換してる。
論理シフトと算術シフトはCでも使えたような
>>465 >>466 C言語の仕様ではコンパイラ依存だよ。
最新の仕様ではどうなってるかわからないけど。
ISO/IEC 9899:1999 6.5.7 Bitwise shift operators -4
The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits
are filled with zeros. If E1 has an unsigned type, the value of the result
is E1×2^E2, reduced modulo one more than the maximum value
representable in the result type. If E1 has a signed type and nonnegative
value, and E1×2^E2 is representable in the result type, then that is
the resulting value; otherwise, the behavior is undefined.
なるほどね
い:16bitdata = (8bitdata - 128) * 256
ろ:16bitdata = 8bitdata * 256 - 32768
どっちでも同じじゃないの?
471 :
461:2005/06/18(土) 22:04:14
>470
コンパイラの符号の扱い方で同じじゃない場合もあると思う。
>471
pTempBuffer[i] =(((short)pTempBuffer_8_u[i])-128) * 256;
でどうだい?
473 :
461:2005/06/18(土) 23:37:20
>>471 駄目っぽい。とりあえず、いろいろ書き直したコードを載せてみます。
16ビットの読み込み部分と例外処理はカットしてあります。
long nRead = 0;
bool is8Bits = false;
if(waveFormat.wBitsPerSample == 8)
{
unsigned char * pTempBuffer_8_u = new unsigned char[bufSize];
nRead = mmioRead(hmmio, (HPSTR)pTempBuffer_8_u, bufSize);
for(int i = 0; i < nRead; i++)
((short *)pWaveHdr->lpData)[i] =(((short)pTempBuffer_8_u[i]) - 128) * 256;
delete [] pTempBuffer_8_u;
is8Bits = true;
waveFormat.wBitsPerSample = 16;
waveFormat.nBlockAlign = waveFormat.nChannels * waveFormat.wBitsPerSample / 8;
waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
}
else if(waveFormat.wBitsPerSample == 16)
; // 16ビット
pWaveHdr->dwBufferLength = nRead;
waveOutPrepareHeader(hWaveOut, pWaveHdr, sizeof(WAVEHDR));
waveOutWrite(hWaveOut, pWaveHdr, sizeof(WAVEHDR));
if(is8Bits)
waveFormat.wBitsPerSample = 8;
変換せずに鳴るのか試すとか…
結果が合ってるか見てみたら?
数字で。
コンパイラは何を使ってる?
477 :
461:2005/06/19(日) 11:19:42
みなさん、ありがとうございます。
>>474 8ビットでは、きちんと鳴ります。
>>475 なるほど。今夜あたりにやってみますね。
>>476 VCとBCC両方で試してみましたが、同じでした。
単純にヘッダが8ビットのままになっているとかじゃないのかい?
waveOutOpen はどこ?
まさか8ビットでオープンして16ビットのデータを流してないよね?
unsigned char buf[4]={10,80,120,255};
for(int i=0;i<4;i++){
printf("%d\n",(((short)buf[i])-128)*256);
}
VC6で正しい結果が出る。
480 :
461:2005/06/19(日) 14:10:08
(((( ;゚д゚)))アワワワワ
激しくそれっぽい。
あとで確認してみますね。
481 :
461:2005/06/19(日) 18:16:15
waveOutOpenの前に、
is8Bits = (waveFormat.wBitsPerSample == 8);
waveFormat.wBitsPerSample = 16;
としておき、
>>473のようにすることで、できました。
ちなみに、
>>473は、
pWaveHdr->dwBufferLength = nRead;
ってとこが間違ってました(*2が必要)。
お世話になったみなさん、本当にありがとうございました。
482 :
デフォルトの名無しさん:2005/07/10(日) 08:21:14
BCB6でMP3ファイルを再生しようとしているのですがうまく行かずに困っていま
す。以下の2つの方法を試してみたのですがどちらでも例外も発生せずにアプリケー
ションが異常終了してしまいます。テストに使っているtemp.mp3ファイルはWindows
MediaPlayer9で正常に再生できることを確認しています。また、再生対象のファイル
に.wavファイルを指定した場合では以下のどちらの方法でも正常に再生できました。
これはプログラムの書き方に間違いがあるでしょうか?それとも当方の環境を疑う
べきでしょうか、アドバイスなどいただけると助かります。
○TMediaPlayerを使う方法
TMediaPlayer* MediaPlayer = new TMediaPlayer(Application->MainForm->Handle);
MediaPlayer->DeviceType = dtAutoSelect;
MediaPlayer->AutoOpen = true;
MediaPlayer->FileName = "c:\\temp.mp3";
MediaPlayer->Open();
MediaPlayer->Play();
○MCIを使う方法
HWND m_Video = MCIWndCreate(Handle, Application->Handle,
WS_CHILD | WS_VISIBLE|MCIWNDF_NOMENU, "c:\\temp.mp3");
MCIWndPlay(m_Video);
483 :
デフォルトの名無しさん:2005/08/03(水) 18:20:10
一般にUSB接続の鍵盤(音楽演奏用のもの)が市販されていますけど、
鍵盤から流れてくるデータの実体はどんなものなんでしょうか?
MIDIデータか何かが流れてくるなら、これはどうやれば拾えるのでしょうか?
やりたいことは、鍵盤からの情報を自作のシンセサイザソフトに投げて
音を出してみたいということなんですが。。。
ちなみに、VC++6.0でアプリ作成しようと思っています。
適当な鍵盤を買ってきて試してみたらいいのでしょうが、買う前にやりたい
ことができるのか確認したかったので、ご存知の方がいたら教えてください!
midiIn〜 APIをMSDNで検索
>>484-485 >>483 です。
やっぱりMIDIですよね。
MIDIメッセージの受信方法は書籍を持っているので何とかなりそうです。
スレ汚し、どうも失礼しました。
(´-`).。oO(なんで2週間も経って的外れなレスが付くんだろう・・・)
「ぐちゃぐちゃな音」という表現には、主観が多すぎて、具体的な症状がわからない…
ノイズだらけでマイクでしゃべれば一応ノイズが変化してるけどって感じで
声は聞き取れないんですよ。
main loopってとこを#ifdef使って実行しないようにしたら
ピッチの変わってない声が出るからFFTと窓関数とその逆変換は
ちゃんと動いてるみたいだからmain loopの中がおかしいんだろうけど
解説ページ読んでもお手上げヽ(´ー`)ノ
このページのソースのままでもちゃんと動くもんなんですかね
警告が出た変数のとこをキャストしまくっただけなんですけど・・・
intで入ってきているのにfloatで扱っているとか、
エンディアンが逆になっているとか、そんなことはないか?
waveInで受け取ったデータを32768で割ってfloatに入れるところで
ホントはshortにする所をcharでやっててキャストミスってました><
配列のサイズも間違えてた・・・
逝ってきまーすorz
494 :
デフォルトの名無しさん:2005/08/29(月) 11:11:15
マイク入力されているかの様に曲(wav,mp3等)を流すことは出来ますか?
495 :
デフォルトの名無しさん:2005/08/29(月) 12:20:21
初めまして、皆さんには程度の低い質問かもしれませんが
教えていただけると助かります。
着ボイスをPCで拾って来てファイルがmmf(SMAF File)となっていました。
これをwavファイルに変換したりは出来ますか?
PCの起動音とかにしたいのですが、無理でしょうか?
497 :
495:2005/08/29(月) 18:38:19
>>496さん
良かったらやり方など教えていただきたいです。
PC初心者故、教えて厨っぽくなって申し訳ないです。
>>495 どこかにツールがすでにあると思うから、それを入手するのがいい。
SMAF→SMF→WAVというふうに変換するかな。
でも、それはプログラム板の話題じゃない。
分かんなかったら他のとこ行って聞きな。
>>497 >PC初心者故
えー、一応言っとくと
「この板はプログラムを作る人のための板です。」
と板TOPにも書かれているんだけど。
501 :
495&497:2005/08/29(月) 23:50:28
>>499&
>>500さん
ありがとうございました^^;
趣旨わからず質問してしまって申し訳です。
詳しいことは他の板で聞いてみます。
お騒がせして申し訳ありませんでしたm(_ _)m
良スレ発見。
windowsが基本かしら。
どーだろ。多くの人はWindowsじゃないかな。
自分はMacだけど、DSPの話とかが面白いときがあるから見に来てる。
>494だけど、ソフトウェア側から音楽データを流して、
それがあたかもマイク入力されているかのようにするにはどうしたらいいの?
ググってみたけどそれらしい事を解説してるページに辿り着けない。
もしかして、サウンドプログラマにとっては基本的すぎて解説してないとか?
検索キーワードキボンヌ
「マイク入力されているかのように」というのはどういうことなの?
一回アナログ線を通したような音質劣化をさせたいのかな?
それともソフトウェアAで再生したものをソフトウェアBで録音したい、みたいなことなのかな?
506 :
494:2005/08/31(水) 00:33:49
ゲーム内でボイスチャットする際にあらかじめ用意してる音声(wave)を
ボタン1つで再生するソフトを作りたいんですよ。
507 :
494:2005/08/31(水) 00:38:11
ゲームと言っても自分が作ってるゲームじゃなくて
市販のゲームなんですが、そんな事可能?
よくわかんね
電話のような音質にしたいのなら4000Hzから上をカット
なんだ厨房か。。。('A`)
Virtual Audio Cable のような事がしたいって事かな?
windowsメディアプレーヤーでサウンドを再生したときにあの音域ごとにバーが伸び縮み?する奴ってFFTでwavを解析してるんだよね?
これの実装ってどれぐらいの数学の知識と労力がいるの?この中で自前でソース書いた人いる?
>>513 FFTは理系の大学1年程度の知識で理解可能。理解せずに実装だけだったら中学生レベルの知識でOK。
FFTのソースは10行もあればかける単純なもの。
FFTのバタフライ演算のアルゴリズムは簡単だけど、それだけを理解したところであまり意味はないよね。
FFT自体は、離散フーリエ変換(DFT)を高速に計算するブラックボックスとして使えば十分で、
その結果を活用するためにはDFTの意味をしっかりと理解しておく必要がある。
理工学系では、大学2〜3年次に信号処理論として体系的に学ぶ場合が多いと思う。
>>513 FFT使わずにBPFでなんとかする手もある。
精度とか要求されない用途なのでいくらでも手抜き可。
ただ周波数帯ごとのレベルを見たいだけだったら、
>>517 の言うようにバンドパス・フィルタで実装するほうが
レイテンシーもメモリ要求も少なくていいかも。
WindowsMediaPlayerとかWinAmpとかは、
FFT結果を他の処理にも使ってるので
そのついでで情報をもってこれるからFFTを使ってるだろうけど。
というより、MP3圧縮を復元する時にバンド毎の強度が得られるから、ソレを利用してる可能性もあるよ。
俺が良く使うのは
バンドパスといってもQ無限大の発振器領域のフィルタに窓関数かける奴だな
他に2相の発振器を掛け算して求めるというのも使う
520 :
513:2005/09/01(木) 14:41:10
LPF,BPF,HPFってどんなふうな方法でやるの?
抵抗とコンデンサで作るのは知ってるけどデジタル処理でやるのはよくわからん…
ちょうどいいサイトとかあったら教えてほしい
>>520 実践ディジタルフィルタ設計入門という本で高校生でも解かるレベルで説明してあるよ。
>>522 520じゃないけどありがとう。注文します田。
>>520 BPFはLPFとHPFの組み合わせ。
HPFは元データからLPFの結果を減算すればいい。
あとはLPFさえ何とかすればOK
まぁ、単なる畳み込み演算なだけだから、フィルタ係数を固定して行うだけなら簡単なんだけどね。
簡単なLPFなら
考え方としては、信号の反応を悪くすればいいわけだから、
前回の値をそのまま今回の値にしないで、前回と今回の差分を2で割ってそれを前回の値に足す、と言うような方法でもきる。
HPFも似たようう簡単計算でできる。
>>528 そのLPFって、要するに、一番単純なフィードバック1回のIIRフィルタだよね。
具体的にインパルス応答から周波数特性を求めたりしてみると面白いと思うよ。
530 :
513:2005/09/03(土) 22:39:50
FIRフィルタ?印パルス応答?
>>521のサイトは役に立ちそうなんだが英語をすらすら読むのは無理なんできつい…
the Simplest Low-Pass Filterにあるコードとかを参考にしてみるよ。
>>528 前回の値をそのまま今回の値にしないってどういう意味なのかわからないんだけど…
>>530 > 前回の値をそのまま今回の値にしないってどういう意味なのかわからないんだけど…
うむ、ちょっと不思議な日本語だな。
ようは、こんなことをやるというわけ。
音声データが x[i] に入っているとして、
w = 0.5; フィルタ係数
y[0] = x[0]; // 一応初期値 y[0]=0 でも大差ないけど。
for (i =1; i < おしまい ; i++) {
y[i] = (1.0 - w)*y[i-1] + w * x[i];
}
w = 1.0 なら、これはフィルタでもなんでもなく、音声信号 x[i] は、
そのまま y[i] に出力される。 w をゼロに近づけていくと、x[i]が変化しても
y[i] は計算済みの値 y[i-1] や、y[i-1]を通じて間接的にもっと過去の値
に引きずられて、動きが鈍くなる。つまり、ローパスフィルタというわけ。
532 :
531:2005/09/04(日) 10:36:45
一方、w を 1.0 より大きくした場合には、(1.0 - w) はマイナスになるから、
y[i] は、 x[i] と 過去の出力y[i-1]との差分みたいなものになる。つまり、
変動分を強調するハイパスフィルタ。
当たり前だけど、w=0だと、出力は y[0] のまま永久に変化しないので
無意味。
そして、w の値をマイナスにした場合と、2.0以上にした場合には、
計算を続けているうちにオーバーフローして滅茶苦茶になる。
大原ゆき
「帯域制限したパルス波と位相をずらしたマイナスのパルス波の合成波を積分」
っていう場合、「積分」は具体的にコード上どうすればいいんでしょう?
「帯域制限したパルス波と位相をずらしたマイナスのパルス波の合成波を積分」
っていう場合、「積分」は具体的にコード上どうすればいいんでしょう?
まず帯域制限したパルス波をどう表現するかだろうね
Z変換出来れば単なる累積で代用出来る。
そうじゃないなら積分した式を直接積分しないといけないだろう。
バッファに2π長のパルス波形が入ってる状況下で、
その「積分」ってどういうことなのか?ってことなんです。
void 積分( double* wave, unsigned int bufferlength )
{
// なにしたら??
}
それなら単に 累積だろう
>>531 の 書き方なら
y[i] = y[i-1] + w * x[i];
>>538 たぶん前スレ114レス目の話を実装するにはどうしたら良いかって事なんだろう
矩形波をどう作るかという話ね。
帯域制限されたパルス波形は、この場合オーバサンプリングされていなければならない。
当然、帯域は実サンプリングの1/2では完全にカットされている必要がある。
で、オーバーサンプリングされた状態で累和しないで、実サンプリング上で累和(間引いて累和)
していいかどうかの問題かな?
>>539 なるほど、そんな文脈があったのね。
確かに単なる累積で良さそうだ。
出来ました。ありがとう。
積分した結果できる波形の値域を-1.0〜1.0にするナイスな方法ってあるんでしょうか?
>>542 もともと矩形波は出力したい周波数がサンプリング周波数に近づく程信号レベルが小さくなる。
全スレ798にあるように、fs/4を超えると、単なるサイン波で信号レベル差だけの表現となる。
だから、小さくなっていいんだよ。
>>542 値の最大値で割って浮動小数点にキャスト
MIDIの再生と同時に楽譜を表示して、カラオケのように
進行に合わせて音符の色を変えていくようなものを
作りたいのですが、音符の表示は普通どのように
行うのでしょうか?
メタファイルを用意しておいて...みたいな感じですか?
参考になるサイトとかあったら教えて下さい。
音符のデータを別に作るのが良いです。
MIDIの音符はnote on , note offで表現されているので、音符の長さはわかっても音符の種類がわかりませんから。
とくに休符がやっかい。
>音符のデータを別に作るのが良いです。
MIDIファイルとは別にということですよね?
MIDIの中に楽譜データも入っていると思ってました。
あと、音符の画像はどうやって描画するのが通常でしょうか?
550 :
545:2005/09/09(金) 17:29:05
まとめるとこんな感じですか?
1.楽譜データはMIDIとは別にファイルとして用意する。
(歌詞を出す場合も同じ?)
2.楽譜データを読み、メモリ上にビットマップとして展開しておいた
音符フォントを描画する。
3.MIDIの再生に合わせてカラオケ風に音符(+歌詞)の色を変える。
楽譜データはその場で作ったほうがいいと思うが。
1. SMFを解析して、おおざっぱにクォンタイズを掛ける(見やすい楽譜を作るため)
2. SMFを解析して、ノートオンとノートオフを対応付ける(ここで楽譜データの原型が出来る)
3. 楽譜の原型を解析して、1音も鳴っていない箇所を休符とする(おおざっぱな楽譜の完成)
俺ならこんな感じかなぁ。
もちろん、WRDみたく別に楽譜データを用意してもいいと思うけど。
大雑把な楽譜ならそれでできそうですねぇ。
MIDIデータはいじらずに楽譜だけいじったりはしないってこと?
好きなようにいじればいいと思う
簡単そうに見えて簡単に出来ない事がある
1.CDをかけるとカラオケで再生してくれるプレイヤーってあるよね。
逆に歌手だけ抜き出すってのも簡単?
2.アナログ時代の電話線のエコーキャンセラーってあったよね?あれと同じで
ビデオカメラにメカノイズが載るのはカメラ上に別のマイクつけて適応処理したら簡単に消せるよね?
3.最近3Dサウンドってあるよね。 2スピーカーなのにヘリコプターが立体的に飛び回って聞こえるよ。
だから、狭い間隔でおいた2スピーカーを広げて置いたように聞かせるのも簡単だよね
4.ホール効果とか残響のある部屋を再現する機能がついてるじゃん。 アレの逆でさ
残響の多い部屋から残響を消すのは、マイク付ければ簡単だろ?
マイクで部屋の特性取りながら逆位相の信号を足せばいいだけだろ?
俺の上司がこの4つに似た内容を ヤレ と定期的に言って来るのだが・・・
その上司に聞け。
1)ステレオ中央=左右に同相で記録された信号はL-R減算すれば消去可能だが
左右同相信号だけを取り出す事は理論的には出来ない。
3つのA,B,Cの信号が、Lのみ、Rのみ、L+Rに同相に入った場合を考えればいい。
C=0になる信号(A-B)を作る事は出来るが
C!=0 A=0 B=0 の信号を作る事は出来ない
2)ライン中の応答は適応処理で消去可能だが、空間上特定出来ない信号源が複数あると消去不可能
ビデオカメラメカノイズはメカなのだから、たぶん複数箇所から出力されてくるだろう。
だから多数のマイクを配置すれば効果はあるだろう。 1個のマイクでは難しいだろう。
3)モノラル信号を頭部伝達関数を利用して任意位置からに変換する事は可能。
2つのスピーカーより、さらに右、さらに左から聞こえるようにする事も可能。
だが、右の音はもっと右に、左の音をもっと左にというのを同時というのは少し計算してみれば困難演算と判る
右定位気味の信号をさらに右に、左定位気味の信号をさらに左にと、ごまかせ
4)
1、ゼロで割る事は出来ない。
「残響の多い部屋」にゼロ点(周波数特性を取るとノッチが出来る点)があると、答えが無い事になる。
2、人間の耳は困った事に2つある。
>555
>3
ステレオ感はスピーカーの間隔じゃなくてリスニングポイントとの角度じゃね?
音小さくしとけばスピーカーに近づかざるおえないから、角度も自然と得られる。
あとはBOSEあたりが中央に一つだけスピーカー置いて(実際には幾つかスピーカーが付いてる)
壁の反響を利用してステレオ感を得られる、とした20万くらいの製品が存在したけど、
1万そこそこのスピーカーの方がよっぽどマトモな音だった。
ボーカルキャンセルしてカラオケになった信号を、元の信号から減算すればいいんでないの?
>>560 ボーカルキャンセルで出来上がるのは、センター成分なしのモノラル信号。
>>560 残念ながら、それではダメ。
X=L-R で、センターで歌っている人の声をキャンセルすることはできるが、
それを使ってセンターだけを残そうとしても・・・
例えば、L-X = R となって、全然消せない。
563 :
デフォルトの名無しさん:2005/09/15(木) 23:22:03
>>562 それって、センターで鳴ってる楽器の音も消えないか?
もちろん消えるが。
ボーカルキャンセルてそんなもだよ。
まともまボーカルキャンセルなら周波数領域も限定してるんじゃないかね。
ベースやバスドラム(重低音)やスネアドラム(高周波ノイズ系)のような重要な楽器もも中央に来ることが多いから。
BPF(L-R) + LPF(L+R) -HPF(L+R) とかするわけね。
でも人間の声も低音から高周波まで広がってるからね
>555
自分の専門の範囲で分かることは・・・
1) そういうソフトがある。Windowsで動いているのを見た。
ただ、元曲とカラオケ版が必要。
それじゃあ簡単にできそうだと思って
自分でやろうとすると歌有りと歌無しが
サンプル単位でズレていたりして意外に難しいんだよ。
2) 適応処理すればできそうだけど、コストを抑えるのが大変そう。
原理としてはノイズ・キャンセル・ヘッドホンと同じ。
別の手法として独立成分分析を使う方法もある。
それだったらマイク数が多ければ多いほどノイズは消しやすいよ。
3) 可能だけれど、スイート・スポットがかなり狭くなるのは覚悟した方がいいかも。
クロストーク・キャンセレーションをした上でバイノーラル信号を再生すればよし。
ただ、耳の形状や頭の大きさによってだいぶ効果が異なるので、実用的じゃないかもね。
4) 四つの中では最も難しいかも。ブラインド・デコンボリューションはある程度
研究されているので、それっぽい音にするのは可能だけれど、
完全に残響音を消すのは今のところ無理。
568 :
567:2005/09/16(金) 09:18:15
たぶん、こんな感じだろう
Aを歌入り Bをカラオケとして
C=A*B 畳み込みの最大ピーク付近を採用して残りはゼロにしてしまう。
D=1/C その中央付近の逆演算(順逆でだいたいOKだろ)
A-B*D でAとBの相関のある成分は消えるだろう。
これを適応処理でやるか、FFT使ってやれば実時間で処理できるだろう
571 :
567:2005/09/16(金) 21:19:44
>570 の言うやり方でできるんだけど、ちょっと補足。
AとBは44.1kHzよりも高いサンプリング周波数で
作られたものからダウンサンプルして作られていることが多いし、
場合によってはアナログにいったん落としていることもあるので、
AとBはサンプル単位でマッチしない。
つまり、44.1kHzのまま処理をすると音が残っちゃう。
そういうノイズも消そうとすると
サンプルの補間処理なんかが必要になってくる。
572 :
570:2005/09/16(金) 22:26:18
大丈夫。例えば A/Bが 1/2サンプルズレていたとすれば
Dにはそういう特性の応答特性が出るわけだからさ
畳み込みをする事がすなわち補間処理でもあるわけだ。
ただ、「最大ピーク付近を採用して残りはゼロに」の処理がマズイけど、これが無くてもマズイ
A/B共に、最初に高域を削っておかないとな
573 :
567:2005/09/17(土) 02:00:55
Dを求める計算は周波数領域でやると言うこと?
それだったら確かにサンプルのズレは考えに入ってるよね。
時間軸でやるんだったら・・・勉強不足でよく分からないっす。
574 :
570:2005/09/17(土) 07:28:32
サンプルのズレについては
周波数(FFT)で求めようが、時間軸(適応や逆行列)で求めようが同じ。
上に書いた事の補足
全サンプルで求めたDで A-B*D を求めたら、結果はゼロになってしまう。
だから、最大ピーク付近だけを採用しなければいけない。
でも、そうすると、ローカットの特性が出てしまい、 A-B*Dで高域が残ってしまうから
その高域をカットしておこうという事
そもそもの問題は、
> Aを歌入り Bをカラオケとして
この両方を入手できるのか? と、いう点ではないのか?
そういうものを入手できる立場の人なら、
C 歌のみ
を、最初から入手できそうな気がしないでもないんだけど・・・
>>575 >>569 のリンク先にもある通り、
>シングルCDに収録されているオリジナルトラックとカラオケトラックの差分を取り
って事じゃ…?
もとネタは、
>>555 さんの、
> 1.CDをかけるとカラオケで再生してくれるプレイヤーってあるよね。
> 逆に歌手だけ抜き出すってのも簡単?
なのだから、職務課題として与えられているのは、ただの1枚のCDだけで、
それから歌手の声だけ抽出しろという、ご無体な指令ではないかと・・・
それはさておき、会議システムとかで、「大量のマイクロフォンで会議室の
あちこちの音声を同時にサンプリングしておいてから、いろいろ相関を
取って特定の位置の人物の声だけを抽出(周辺の他人の声はキャンセル」
と、いうような研究は、かなり進んでいるらしいね。数学の理屈は単純だけど、
システム同定とか逆フィルタの安定性とか計算量とかを考えると、すごい
仕事をやっているなと感心してしまう。
578 :
デフォルトの名無しさん:2005/09/19(月) 14:19:51
はじめまして!
いきなり、質問なんですが
C++でwaveファイルの出力って、どうすればいいのでしょうか?
580 :
デフォルトの名無しさん:2005/09/19(月) 20:05:39
ボーカルキャンセルはL-R以外でもできると思うんだが。
L-R 以外でキャンセルできれば
>>562の式がなりたたくなる。
と単純に考えてみた。
まあ、君は出来るんだろうね。
スペクトログラムに手書きで消しゴム入れてきゃいつかは消せるかもしれんね。
卒論でデジタルフィルタのソフトを作っていて、何も信号が出てこない失敗作
を作ったら、研究室の先輩が「ノーパスフィルタだな」と冷やかしてくれた。
Orz
>>581 ボーカルをL-R以外で消すには、
1、ボーカルだけを取り出して 減算する
2、ボーカル以外の音を取り出す
つまり、PC内に発音モデルを作って、そのモデルのパラメータ推定をして
合成させてしまう・・・・という方法という事になる。
1は、実はボーカルを完全合成しても出来ない。
声には摩擦音がある。摩擦音はノイズなので、ノイズを合成出来ても
元の音から減算しても消去出来ない
2は、FM音源のような音なら、シンセサイザーのパラメータを完全に取れれば可能
かもしれないね。
直交変換で簡単に分析できるわけじゃないから、厄介だろうけどね
>>588 ん? 587は、「L-R以外の方法でボーカルキャンセルをするなんて無茶だ」と、
説明しているのだぞ。
>>555の課題の2だけど
>>558にある他に
時間に対して動的にフィルタ係数が変化するフィルタなら対応出来るかもしれない
と思った
>>558の3だけど、
入力L/R、出力L'/R'としよう。
L = L1 + M1
R = R1 + M1 と考えるとするよね。
S = L-R = (L1+M1) - (R1+M1) = L1 - R1 と置けば、
L' = L+S = (L1+M1) + (L1-R1) = 2*L1 + M1 - R1
R' = R-S = (R1+M1) - (L1-R1) = 2*R1 + M1 - L1
となって、「左の音はもっと左、右の音はもっと右」ということが実現できるんじゃないだろうか。
自分の知るかぎりでは、いくつかの特許で使われている手法だし、
あるていどは有効なんだろうな。
追記:ただ、スピーカー位置より外側に音を配置するのが可能かどうかは知らない。
>>592 可能。逆相の音をパンディレイで飛ばすとかいう技を使う人もいる。
左右の耳位置と音速を考えると、
1msくらいのディレイ差を左右に与えれば
音が左右に飛ばせるわけですね。
ただ、スイート・スポットに頭がないと有効じゃないですが。
PCMの基礎中の基礎で質問です。
データの合成はオーバーフローチェックしつつの加算、8bit>16bitは<<8、
周波数変換は 約数の場合、とりあえずそのまま倍数分コピー、
約数で無い場合・補完したい場合は線形補完 で宜しいのでしょうか。
これ迄自分で生データ弄った事が一切無かったので、一からの
模索状態です。
あ あと、48KHz>44.1KHzで線形補完する余裕が無い時、
44.1KHz[samplecount]=48KHz[samplecount*48000/44100];
等でサンプルを飛ばしても、それなりに聞こえるのでしょうか。
・品質(ゲームの効果音の合成か?波形エディタか?)
・性能(リアルタイムか?オフラインレンダリングか?)
にもよるが、鳴ればいいっていうんなら595,596のそれでいい
8bitPCMはunsigned(0〜255)で16bitPCMはsigned(-32767〜32768)
なことも多いから気をつけろ
どもです。
unsigned の場合、128が0扱いになるのでしょうか?
あ 波形が半分で <<7になると言う事ですかね。
とりあえず実装してみる事にします。
>598
そう。8bitPCMのwavがソレに該当するから
ツールで吐いてバイナリエディタで見るとわかる。
>596
線形補完は多分想像してるよりも圧倒的にノイジーになるよ。
波形って合成音でもない限り基本的に曲線になるので、
線形で補完するとノコギリ波状になるから。
>>597 細かい突っ込みだけど、16bit符号付き整数は-32768〜32767だよね。
>600
>596 の方法だと線形補完すら行わない。
同じような音が鳴っていればいいというんだったら >596 で構わない。
ノイズを減らしたければ3次補間したいところだ。
>602
オーノー・・・レス番を595と間違えた。
スプラインで補完するのが一般的だと思うけど、
FFTとかで周波数成分から波形を起し直すって可能?
この場合、周波数成分用の補完方法が必要にはなるんだろうけど。
48000サンプルを44100/2Hz分までDFT、IDFTすれば補間は必要ないよ。
一般的なのは、LPFをかける事だろう。
606 :
デフォルトの名無しさん:2005/09/30(金) 22:11:43
サウンドの再生している部分の音量を取得するときに、その部分での最大値を取るって言うのをよく見かけるけど、どうして平均値じゃないの?(正負に振れている場合は絶対値の平均)
平均音圧はエネルギーの平均だからrmsで計算する
ピークで計算することが多いのは、
歪み防止などの目的で振幅自体を監視したいことがほとんどだから
ロジックを考えるのは午前中
午後はコードを書く
50分仕事したら10分休む
17時には仕事を止める
夕食はあまり量をとらない
酒はほどほどに
タバコは吸わない
セックスは金土に集中する
午前: 8〜12
コードを書く
昼休: 12〜14
昼食
昼寝しながらロジックを組む
午後: 14〜18
コードを書く
夜休: 0〜6
夕食
寝ながら翌日のロジックを組む
その他:
作業は45分休憩15分
酒は晩酌に少々
タバコは1日2箱
セックスは寝る前の挨拶
土日は体を動かす
>>606 もちろん『絶対値の最大値」「絶対値の平均」や「二乗平均」、いずれもでも
間違いということはない。
要は、使い道。
>>607が言うように、ピークでクリップしないようにしつつ、できるだけ
ダイナミックレンジ一杯にデータの数値を入れたいときは、
「絶対値の最大値」、あるいは、符号付の値の最大・最小値の範囲を
基準にするのが、計算上都合がいい。
もし電力やエネルギーについて調べたいなら、二乗平均を使うのがいい。
もし、アンプの電力効率について考えたいなら、絶対値の平均がいい。
と、いうわけ。
すれちがいっぽいですが。。。
ソフト音源を自作しようと思っています。
これを音源ドライバとしてMIDIマッパーから選択できるようにするには
レジストリ登録だけではだめなのでしょうか?
環境はWinXP, VC++2003 & XPDDKです
>>611 MIDIYorkとTIMIDITY++のソースでも参考にしたら。
613 :
デフォルトの名無しさん:2005/10/15(土) 23:45:05
wav(リニアPCM)音声を90%に正規化してから、
最後の3秒をフェードアウトにするっていうコンソールアプリを作りたいんだけど、
簡単に出来るかな?
1、waveファイルの構造を調べる事
2、ファイルの入出力コードを書く
3、あとは他に難しい事はないだろう
3秒に満たないwaveファイルが指定されたときは無視?
始まった時点でフェードアウト中なんじゃないの?
>>616 自分のPCの中だけで使う予定だから変なファイルが入ることは想定してない。
数値操作だけでやるつもりなんだけどwaveファイルでもリニアPCMだけならコーデックとか関係ないよね?
>>618 リニアPCMなんだから当然コーデックは関係ない。ヘッダの仕様を調べたらあとは楽勝。
8bit/16bitでunsigned/signedの違いがあるからそこだけ気をつけれ。
サンプリング周波数から3秒前のデータの位置しらべて、
位置まで来たらフラグ立てて窓関数みたい適当な係数かけて減衰させれ
AカーブとかBカーブとか自分の理想の減衰いくつか試せば楽勝
楽勝擬似ソースコード希望です
>フラグ立てて窓関数みたい適当な係数かけて減衰
窓関数?ここら辺がよくわからんです
621じゃないけど、こう修正するといいのかな?
三秒前の位置から適当な係数かけて減衰させれ
>>626 その窓関数は分かるんだけど、ここで何故窓関数なのかわからんです。
後ろ三秒をフェードアウトする波形を切り出すのに、三秒の窓(?)を想定して
掛け算しろっていう意味ですか? こういうのも窓関数って言うんでしょうか?
たぶん言ってるのは 窓関数のような滑らかなカーブで減衰させると格好いいよという事でしょ
なんだか目的見失って単語に右往左往してる?
窓関数って、与えられた未知の波形についてスペクトル分析とか行う際に、
切り出し範囲と実際の波形の周期とのずれによって生じる誤差を抑えるためのモノかと
思っていました。
結局、最後の3秒についてフェードアウトさせるために使うカーブの関数も「窓関数」の
ひとつということでしょうか? また、仮に全体の音量を下げるためにすべての定義域
について0.8倍するする関数を考えたときも、窓関数と呼べるんでしょうか?
窓関数じゃないけど、窓関数のようなって言ってるじゃないか
やっぱり目的を見失ってるようだ。
>>630 まあまあ。
確かに通常、窓関数と呼ばれている技法が使われるのは短時間フーリエ
分析だったりするけど、「窓関数」という言葉それ自身には、
「時間の非常に長いものを除く」というような条件はないから、極端な話、
1時間の楽曲データの頭と尻尾の数秒をフェードインフェードアウトする
ような音量制御も、「台形の窓関数をかける」と、言えなくもない。
もちろん、普通はそんな言葉づかいしないし、すれば「はぁ?」ってな顔で
見られるだろうけど。
さすがに、音量を変えるために全データを 0.8倍するなんて操作は、
窓関数とは言わないだろうね。窓関数を掛けるってのは、波形の切り出し
だと思う。
今回、
>>621さんは、窓関数「みたいな」としか言ってない。あくまでも
比喩だから、深く考えすぎないこと。
2ちゃんねるの遊び方
1. まともそうな文体で、適当にネタを振ります。質問などでも良いでしょう。
2. 誰かが返事をしてきたら、相手の言葉尻を捕らえて再度慇懃に質問をします。
3. 飽きるまで2を繰り返します。
635 :
デフォルトの名無しさん:2005/10/25(火) 00:53:00
今日のニュースでやってた必要のない音だけ消すのってどうやるの?
今日のニュースってなに?
お前が見たニュースは知らん。
俺も知らんが、なんとなくWBSのトレたまと予想
この装置を開発したのは、大手鉄鋼メーカー「神戸製鋼」と、国立の奈良先端科学技術大学院大学の共同チームです。
さまざまな音の中から、人間と同じように聞きたい音だけを聞き分けるには、
従来の装置では、音声信号を解析し分離するために膨大な量の計算が必要で、
いまだに実用化には結びついていません。
しかしこの装置では、これまでより計算量がはるかに少なくてすむ、
新しいプログラムの開発に成功したうえ、音の信号を高速で処理する半導体を使うことで、
瞬時に聞き分けが可能になりました。
また、市販の半導体などを使っているため比較的価格が安く、
ポケットにも入る10センチ以下のサイズまで小型化され、小さな電池でも、長時間動かすことができるようになりました。
この装置は、雑音が多い中でも、人の声だけをより鮮明に聞き取れる携帯電話向けや、
会話する能力を持つ介護用など、次世代ロボットへの応用などが期待されるという事です。
開発した神戸製鋼では、こうした技術は世界でも初めてとしており、
森田孝司主任研究員は
「すでにメーカーからの引き合いも来ており、用途に合わせて、さらに小型化することも可能だ」
と話し、来年度の実用化を目指すとしています
あー、つまり
>>635 は
記事中で言うところの『独自の音源分離アルゴリズム』を
訊いてるわけか。
判 る わ け な い だ ろ っ !
642 :
デフォルトの名無しさん:2005/10/25(火) 14:20:23
>>640の記事の
複数のマイクで拾った音を音源ごとに分離し、
音源からの距離などをもとに聞きたい音だけを取り出す。
原理は左右の音のずれから音源の位置を予測してフィルターかけるだけか
まぁやってることはそんな小難しいことじゃないだろう。
だからこそ、小型化と低コストの両立が出来るわけだし。
なんか誤解されそうな文なので訂正。
まぁやってることは
>>642の様に割と単純だったりするんだろう。
だからこそ、小型化と低コストの両立が出来るわけだし。
関連論文をリンク願います。
まてゴラ・・
ATR のレベルがどれほどのもんかは別として、普通に小難しくないか?
単音じゃなくて環境雑音から分離するんだぞ・・
FFTして左右inputから似てる山だけ削る。
左右の位相を考慮すれば方向ごとの分離もなんとかできないかな。
原理は単純だけどリアルタイムでやるのはきついな
どこらへんがきつそう?
やっぱり「似てる山だけ削る」のとこかね。
お前ら、勝手な想像するまえに、関連論文探せよ。
論文が無ければ、勝手な想像をしよう。
論文あさる前に思いついちゃったので勝手な想像で書いちゃう
別々の位置で音源AとBがなってるとする。
Rの位相をずらしたR'をつくって、L-R' する。
R'の位相ズレがある位置に来たとき、L-R'から片方の音源Aの音量が極端に減り、
音源Bにエコーがかかったようになる。さらに、L-R'に対してエコーの抑制処理をかければ
音源分離に近いことができそうなできないような。
以上勝手な想像ですた。
あーすっきりした
44100kHzでサンプリングして、左右の波形に1サンプルのずれがあると0.0227msで
音速が340m/sとして左右のマイクの距離は7.72mm程度になるから
これ以上の距離でマイクの距離を一定にして三角関数使って音源の方向はー
もうムリめんどくさいです(><)
まず、
・ FFTで周波数軸上で加工すると ブロック間の接続が出来ない
接続するようにサイン成分だけにすると、やっぱり違和感がある
1/2サンプルずらして分配して接続するとその周期の音が出る
独立成分分析つかってるんじゃないの?
おい、お前ら!
蓮根プロジェクトの今を語ってくれ。
よく知らんが俺にサイデラロッキングを語らせると長いぜ?
便乗して
ロックでもない石を売りつけた
659 :
大原ゆき:2005/10/31(月) 03:07:30
呼びましたか?
ボーカルキャンセルで音を消すレベルを設定するにはどうしたらいいですか?
勘で
右斜め45°から
663 :
660:2005/11/08(火) 22:08:53
このスレを1から読み直せばいろいろとヒントが落ちてる。
サンプラ用にループポイントの自動検出をやりたいのだが
サンプルのお尻から律儀に比較していく方法しか思いつかない
何かいいアイデアないかな?
ひっくり返して無理やり作っちまうのも手かなぁ。。。
ちなみに完璧に検出したいとは思ってないです
目安程度になればってことで
>>667 あっなるほど、音程をとればループ長は自然に求まるか
第nフォルマントまで調べて最小公倍数でもよさそうな。。。
まだ妄想段階だけど突破口が見えてきた
どうもありがとう!
ブレイクビーツの切り出しについてもありがとう
まずそっちをやってみるよ
音程は
PCでやるなら、FFTしてケプストラムでもリアルタイム処理できるでしょ
670 :
660:2005/11/09(水) 19:37:06
>>667 ありがとうございます。
でもCPU負荷を見るかぎりFFTは使ってないと思います。
音を聞いてもL-Rとはちがうんです。
671 :
667:2005/11/10(木) 10:09:22
672 :
デフォルトの名無しさん:2005/12/01(木) 09:16:15
fmod.dllの5.1chで再生機能って
DirectXつかったものなんだよね?
あれって、どういう環境で鳴るの?
うちは、オンボードとかS/PDIFでホームシアターセットへ出力してるんだけど
オンボードでデコードされずに、パススルーしてホームシアターセットで鳴らしたり出来ないの?
DirectXの多スピーカーの実装がよくわからないんだけど・・・。
どういう環境で鳴らすのを想定してるんでしょうか?
>>672 S/PDIFで出力するって事はドルビーエンコ出来なきゃ無利でしょ。
MCP-T以外にあったっけ?
昔と違ってDirectXの日本語SDKヘルプあるんだから
生の5.1chのWAVEファイルでも用意して勉強してください。
>>673 レスどうも。
と言う事は殆どの環境で鳴らせないんじゃ・・・
アナログでそれぞれのスピーカーへ個別に接続してる場合のみって事かな・・・。
ホームシアター系は全滅のような(汗
MCP-Tかぁ・・・、nForce2までだよね。。。
うぅSoundStorm復活しないかなぁ。。。>当方nForce4SLI
DirectXをパススルーできても、先の機器でデコードできなけりゃ意味ないw
サウンドカードが使ってるI/Oポートを直接制御して、音声ボリュームを変えようと思った
んだけどうまくいかない。そんなものなのか。
AC3のファイル構造と通信プロトコルを知りたいのですが
どこかに良い資料はないでしょうか?
679 :
デフォルトの名無しさん:2005/12/02(金) 22:10:20
ac3っつーのは、高い金払ってライセンスと一緒に情報買うから
普通は、そういうのは落ちてないもんなんじゃないかな?
>>676 カーネルミキサーを通さないのがパススルーなんですけど。
>>677 いつの時代のOS使ってるんですか?
>>678 海外探せば資料はあります。
681 :
デフォルトの名無しさん:2005/12/02(金) 22:51:33
気になったんだけど、サウンドのライセンスっつーか特許っつーか
その辺の所ってどうなの?
AC3のエンコーダーはオープンソースでフリーのやつが出回ってるけど、ああいうのって特許に触れないのかな?
もしくは商業利用以外はOKだとか?
国によってソフトウェアの特許の扱いが違うんだよ。勉強しろ。
AC3もmp3の特許と同じで
ネットワーク上で配布する限りは無形物として扱われるし
商業利用しなければ、著作権侵害にならんと思われ。
実際の裁判になったわけじゃないし、後半の部分も
弁護士の勝手な想像で言ってるように見えるが、根拠あっての見解なのかな
この記事を鵜呑みにするのは危険だな
690 :
デフォルトの名無しさん:2005/12/03(土) 20:20:02
上のほうでS/PDIFのパススルーの話が出てたので便乗して質問。
今作ってるソフトで実装してみたいんだけど、mmsystem.hに該当のデバイスの詳細取得の関数が見当たらないんだけど
具体的にどんな感じで実装すれば?
もしかして、waveOutGetDevCaps()見たいに単純に取れないデバイスなの?
WAVE_FORMAT_DOLBY_AC3_SPDIFを指定するだけで良い。
692 :
675:2005/12/03(土) 22:02:35
>>691 VC6みたいな古いのには存在しないが、
新しめのプラットフォームSDKには存在するな…。
ググると資料もヒットするし面白い事を聞いたな。
これでリップしたAC3のパススルーでも試して見るか。
693 :
691:2005/12/03(土) 22:42:26
今まさに
>>675が言ってるようなソフト作ってたりする。
昔AC3エンコーダー作った事があったんで、結構楽に出来るかも。
694 :
デフォルトの名無しさん:2005/12/04(日) 20:26:50
>>685 少なくとも日本のの著作権法には、商用利用でないならオッケーなんて条項はないね。
一方、特許法は微妙で、個人が趣味で作るものや、たとえ企業でも研究のために作るもの
は特許侵害ならない。例えば、他所の会社が出願した特許の書類を見て、本当に役に
立つかどうかをチェックするために、書類の内容を完全にまねて同じようなものを作っても、
特許法上は問題ない。(ただし、試作してテストするのはオッケーでも、その試作品を
工場に持っていって商品作りに使ったりすると、アウト。)
じゃあ、オープンソースのAC3コーデックやら
午後のこ〜だやら、Lameはどうしてるんだ?
午後のこ〜だは商業ソフトからも利用されてるようなソフトだぞ。
午後はソースのみの配布じゃないの?今はどうかしらないけど。
インストール時にコンパイルしてDLLを作ってたよね
Lameは知らんが
午後は
・個人の研究目的
・配布はインストーラーにソースとコンパイラを持たせて、インストール時にコンパイルする形
の2点でしのいでるが、正直グレーゾーン
前者は、個人の研究目的ならOKなんてのは無いし。(配布してるからアウト)
後者もソースコードならOKと言うわけではない。
企業が午後のDLLを採用する場合も、午後の作者が「各社の責任で」と言う形で、各企業に個別にライセンスを取らせてる。
つっても、こういうのは侵害されてる側が訴えない限り黙認されるし
それを侵害してる個人は山ほど居るので、いちいち訴えてたらキリが無い。
ただし、商業利用してる企業相手には流石に手を打つ。
だから、法的にはそういうわけではないが結果的には
商業利用じゃなければOK
と言う形になってる。
GIFのように突然徴収しまくる行動にでても文句は言えない
699 :
691:2005/12/04(日) 21:41:55
マジで?('A`;)
今作ってるソフト、もうやめたほうが良いかな?
仮想サウンドカードを用意して
DirectSoundの多チャンネル出力をAC3にエンコードして、リアルタイムでS/PDIFでパススルーする仕組みなんだが・・・
で丁度64bitプログラムを組みたかったので、リアルタイムエンコードは得意そうだからうってつけだと思ってたんだがね。
某コンテストに出す予定だったが、やめとくか・・・。
ちなみに今の完成度は、既にハードコーディングな実験的部分が多いが、ほぼ機能は全うするようになってる。
700 :
675:2005/12/04(日) 21:57:13
ちなみにオレはAC3とDTSのプレイヤがあるけど配布はしてない。
ロイヤリティを要求されても払えんしな。
GIFやMP3みたいに普及してから徴収はコワイ。
無いと思うがサブマリン特許ってやつにも気をつけないとな。
691が作るだけなら問題はない。配布は厳しいかもな。
特許がらみ気にしだすと、サウンドプログラミングみたいな特許にガチガチに固められてそうな分野は怖いな・・・w
ちょっとしたことでも、かなりの特許侵害してそうで・・・
分かっているとは思うけど、特許権と著作権はまったく別の権利なので、
混同しないようにね。法律も全く別のもの。
ちなみにGIFも、
まだ特許が有効であった時期であっても、
日本国内で個人が趣味でソフトを作る限りは、
ユニシスが何を言おうが、日本の法律では無問題だった。
もちろん商用ソフトはアウトだったけど。
ソフトシンセの類も、個人が趣味や研究で作る限りは、
特許法としては問題ないよ。ただし、それを商品化したり
しようとすれば、「商品化する人」がきちんと特許の処理をする
必要がある。
あと、規格制定団体がネットで公開しているサンプルコードを
勝手にコピーして自分も著作物として発表してしまったりすれば、
そりゃ特許ではなく著作権の侵害。たとえ趣味でも、そりゃ、アウト。
フリーソフトでも特許料が必要だと思ったが。思い過ごしか?
通報先は法的機関ではなく直でドルビーラボ。
704が言うとおりなら通報しても問題ないだろ。
問題ないとわかれば691も安心してコンテスト応募ができる。
706 :
691:2005/12/05(月) 17:10:51
とりあえず、まずは俺はドルビーに直接問い合わせれば早いんじゃないかな・・・。
もちろん、たとえ法的にOKでもアメリカの会社の特色的にNGって言われそうだけど・・・w
どちらかと言うと、日本における中古ゲームソフトの販売くらいシビアな問題だと思う。
フリーでも課金するとユニシスが言い出したから問題になったし、
特許法上でも、個人的、家族的な運用を超えたら引っかかることになってるはず。
つまり、
>>704の言ってる無問題ってのは、
個人が趣味でソフトを作って、かつ、その作者が個人用あるいは家族用にそのソフトを使ったとき、
ということなんだろ
ちなみに、特許が通ってない国からリリースするという方法もあり
Irfan ViewがGIFに対応し続けたのは、配布元がGIF特許の通ってない、
オーストラリアだったかオーストリアだったかからとかいう話
708 :
691:2005/12/05(月) 17:23:14
問い合えず問い合わせてみた。
・国内・海外で既にドルビーデジタルの技術を使用したソフトウェアが公開されているが、それに関しては許可・もしくは黙認されているのでしょうか?
・(私が作ろうとしているソフトウェアの概要を説明した上で)それをフリーで公開する場合はライセンスの取得が必要か?
の2点を問い合わせた。
まぁ、殆どダメ元だと思うけどね。
現状は気まぐれに近い黙認だと思うけど、こうやって聞くと回答はNGだと思う。
>>705 フリーソフト=趣味とは限らない。
企業に限らず一個人であってもがビジネスの一環として配布するなら、たとえ
無料でも特許法で言うところの「業務」ということになるから、特許法の対象だよ。
そうしないと、例えばDLLモジュールに特許侵害になる部分を詰め込んでおいて、
それだけ無料配布、本体のソフトだけが有料、なんてインチキができてしまう。
>>707 特許の成立していない国にあるファイルサーバーを通じて公開すると、公開した
のが企業であっても、少なくとも、その国の特許法では、ファイル公開を停止
できない。もっとも、IPアドレスなどで、特許の成立している国からのダウンロードは
弾くような仕組みを持たせておいたほうが安全だとは思うけど。
一方、それを別の国(そこでは特許成立している)の人が、趣味で使うために
ダウンロードするなら、使うほうも大丈夫。特許が成立している国で、個人が趣味の
ためにダウンロードした後で、それをCDに焼いて友人に配るのもオッケーだけど、
会社の宣伝のために大量に焼いて展示会なんかで配布したら無料配布でもアウト。
特許法は国ごとに違うけど、おおよそ、こんな感じ。
>>708 「大学で研究しているんだけど・・・」という質問なら、ほぼ確実にOKだろうけど、
個人の場合、「作ったソフトをどうするのさ?」と疑われると面倒かもね。
つーか
>>691は別にファイルとしてac3ファイルを出すわけでもなく
内部的な処理で必要なだけだし、結果的にはAC3の正式ライセンスのデコーダーが要るわけで・・・。
ドルビーからすると、不利益を蒙る内容でもないから、黙認しても良いと思うんだがね。
>>710 実はその仕組みはドルビーからすると良い商売になるんだよ。
だから内部処理でも、商用であちらは出したいからそれ自体不利益だと思われ
つっても、どこもそれをソフトウェアでやるような行動をしてないのが謎だが
ハードウェアはあるがね。
カルビーからすると、不利益を蒙る内容でもないから、黙認しても良いと思うんだがね。
サウンドライセンスのスレでも作ってそっちで話しろよ
自己紹介乙
ac3のライセンスの話のところ悪いけど
ac3のファイル構造の情報載ってるサイトない?
717 :
デフォルトの名無しさん:2005/12/07(水) 04:56:42
昨日、MATLAB EXPO行った人いる?
718 :
675:2005/12/10(土) 19:18:01
ac3のS/PDIF出力って同期ヘッダ(6+2byte)が必要みたいだな。
スレ違いだからこの話はここで終わらそうと思ったけど
とりあえず、オチくらいは報告しとこうとおもう。
例のメール
>ドルビーの各テクノロジーのライセンスは、AV機器開発メーカ様やPCソフトウェアメーカ様などの
>企業様を対象としており、フリーウェア作成のための個人様を対象としたライセンスということは
>行っておりません。また、今後もそのような予定はございません。
で、個人で作成する場合はライセンスの取得が必要か?と言う質問に対して
上記の理由で、個人へのライセンスはやってないので、必要ないとのこと。
と言う事で、企業様ではなく
個人の使用であれば、黙認と言う形のようです。
さすがゴルビー、太っ腹だな。
え?どこが太っ腹??
フリー作家にはつかわせねーよって内容じゃないのか?
>>719 詳しく。
>個人へのライセンスはやってないので、必要ないとのこと。
「個人へのライセンス取得はできない」って事だけど、
722はそれを「個人では使用できない」と解釈したみたいだね。
719の返事の文章に続きがないと722の解釈であってると思うが…
そりゃ、特許があっても研究目的とかのレベルなら問題ない。
当然
個人でも販売したりフリーで流通させたる事までドウゾと言ってる筈がないだろう
フリー作家=個人での使用
という解釈はできないな
>>719 それは、基本的に企業が「黙認」を表す時に
言葉を濁す時に良く使われる手法だと思う。
ダメなときは、基本的にはっきりと「個人の使用でも禁止している」的な事を書くはずだから・・・。
まぁ、
>>719の質問まで載せてくれないとはっきりわからないんだが
ライセンス取得しなければ作れないか?と言う質問に対してなら
まぁ、基本的に「黙認」を表してると思う。
企業が「黙認」を公言するわけにいかないし・・・。
「おおっぴらにやらなきゃ煩い事言わない」ってとこか。
フリーはコントロール効かないし、ヘンな所で火がついたりするから難しいんだよなぁ。
向こうの気分一つで天国か地獄か分かったものじゃないな…。
フリーソフトとかだったら
文句来れば、公開止めるだけで済むんだから、対して問題じゃない気がする。
公開したのを止めただけでは、2次公開を防げない。
それは事前に容易に想像可能な事なので、
2次公開についても最初に開発して公開した人の責任という事になるだろう。
つまり、経済的な損害について賠償する責任がくっついてくるわけだ
禿同
黙認してた場合、そこまで追いかける企業ってあんまり無いと思うよ。
基本的に、今配布してる所を叩くと思う。
黙認なんてのはありえない。
>個人へのライセンスはやってないので、必要ないとのこと。
ライセンスが必要ないというのは、ライセンスは発行されないという事
特許権絶対的な独占権であり、
ライセンスが発行されないかぎりは、
例え独自に実装しようが、フリーだろうが、さらには個人的にさえ
利用できない強い権利。ただ唯一 試験又は研究のためにだけ使う事が可能。
個人の利用で黙認というのは、それは勝手な解釈だと思う。
っていうか、黙認を法的に解釈しようとするのが間違ってる。
法や規則の例外だから、黙認なのであって、
>>733みたいな考えで黙認を考える事は出来ないよ。
まあ、許可でもNGでもなく
黙認だからな…
全てにおける例外と言うか、不確定要素というか・・・
普通なら>729,>732の言う通りだけど、ライセンス煩そうなドルビーだからなぁ。
gifの前例もあるし、ビビり入るよ。
金になりそうにない個人に噛み付くってのも考えにくいけど。
関係ないけど、うちの会社の知財部に聞いてみた
個人の場合「黙認」じゃなくて「放置」することが多いらしい
気が向いたとき責任追求するってスタンスらしいです
>>736 現状では個人相手にライセンスしないと言う感じなので
やはり個人相手に噛み付く事も無さそうだけど
せいぜい公開停止を求める程度だと思う。
737の放置ってのがあってるような気がするな。
サブマリンにするのが一番おいしいからな
『個人を対象としたライセンス付与を行っていない』
という文面の行間をどのように解釈するかだ。
>>719は、この文章を
「個人ならばライセンス取得不要」→「黙認」と解釈したようだが、
黙認というまで解釈を飛躍させるのは、かなり危険だと思う。
「個人にはライセンスを付与しない」と解釈するのが一般的だろうな。
あと、開発するのは自由だが、配布まで自由だとは言ってない。
ということで、
>>724の言うことが正しいと思われる。
ドルビーが遠まわしに「NGです」と言ってくれているのを、勝手な解釈で
黙認→公開 として訴えられても、俺には関係無いけどな。
激しくスレ違い。
ソフト作って公開→ドルビーに文句言われて公開停止→ソフトを改変して公開
→またドルビーに文句言われて公開停止→またソフトを改変して公開→(以下略)
これで解決!
745 :
デフォルトの名無しさん:2006/01/16(月) 08:01:58
mciSendString()なんですが
これ、PLAY命令で1度は音が出るんですが、もう一度PLAYを押すと音が出なくなります。
で、一度CLOSEしてOPENしなおすといけます。
こういう仕様なんでしょうか?
ちなみに再生ソースはwaveです。
>745
seekは?
そういう仕様です
waveOutOpenを同時にいくつか開いて
waveOutWriteでそれぞれのハンドルへwaveを書き込む
あるいはDirectSound使う
748 :
デフォルトの名無しさん:2006/01/28(土) 22:05:55
サウンドとマルティメディア-音の再生-優先するデバイス(Win2kの場合)、を切り替えるAPI(もしくは方法)御存知の方いましたら、お教えください。
やりたいことは、複数のサウンドカード利用時にシステム全体のサウンド出力を手軽に切り替えたいだけなのですが。。。
Mixer APIに当たりをつけ、複数の記事を読みサンプルもいじってみたのですが、
出力先の切り替え方だけ載ってないような(コントロール利用時のフラグで設定できるのかもしれませんが、使えそうなフラグが見つかりません)。
DirectSound関係は、DirectXなくてもOSの出力には関係なさそうだし。
そもそも優先するデバイスがどれかという情報はどこに保存されているんだ。。。
胃が痛いです。。。
検索したキーワード
windows サウンドカード 切り替え api 複数
優先するデバイス 切り替え api
変更 windows 再生 mixeropen
windows api sound device change output
チェックしたサイト
www.codeproject.com他
>748
仕事で散々苦労した俺が答えるぜ!
つまりは、waveOutOpen( &h, WAVE_MAPPER, ... ) や、
メディアプレイヤーなんかのデフォルトのWAVEデバイスを切り替えたい、と。
レジストリエディタで、
HKEY_CURRENT_USER\Software\Microsoft\Multimedia\Sound Mapper
を見れば解ると思うけど、ここの Playback にWaveOutのデバイス名を書けばOK。
デバイス名の列挙は waveOutGetNumDevs()/waveOutGetDevCaps() で良かったはず。
ただし、SetupPreferredAudioDevicesCount のパラメータを間違えると意図した動きをしないので注意。
詳細はチト忘れてしまって申し訳ないが、通常弄らない値なので変えないこと。
#waveOutGetNumDevs()の返り値だった気もする。
上記レジストリが存在しない/壊れた場合、コンパネからデバイス選択し直せば元に戻る。
mixerは乱暴な言い方をすると、音量の調整と録音時のライン指定操作がメインなんで関係無い。
資料が手元に無いんで記憶だけで書いてるので間違いがあるかもしんない。
750 :
748:2006/01/30(月) 03:47:04
>>749 助かります。組み込んでテストしてみますです。。。
数学Tで座札した俺でもできますか?
752 :
デフォルトの名無しさん:2006/02/01(水) 22:47:49
、「、?サクサ、ホシ?ヌネソ?「イサト??。テホ、ケ、?ax/msp、ホ・ム・テ・チ、テ、ニ、ノ、ウ、ォ、ヒ、「、熙゙、サ、?ォ。ゥ
、ハ、ェ、ォ、ト。「、ス、?ヒアヌチ??ソア?、オ、サ、鬢?ソ、鮖ケ、ヒ、、、、、ホ、ヌ、ケ、ャ。「。「。「。」
753 :
matsu:2006/02/01(水) 22:48:58
ある音源の周波数、音程を検知するmax/mspのパッチってどこかにありませんか?
なおかつ、それに映像を反応させられたら更にいいのですが、、、。
FFTというものを勉強しろ。
755 :
デフォルトの名無しさん:2006/02/01(水) 23:44:08
FFTは知っているのですが、今とても急いでいて、明日の朝までに
組み立てたいのです。もしご存知でしたら教えて下さい、、。
756 :
デフォルトの名無しさん:2006/02/02(木) 00:38:25
なんかあったよね、、
切羽詰る前に言えばいいのに。
そもそもそんなマイナーなモンを
こんな過疎スレで聞いても解答返ってくるわけねぇじゃん。
知ってるけどおしえな〜い
きっと宿題かなんかだったんだろうな。
締め切り終わった頃に回答出してるところが教育的ですばらしいw
759=667?は意地が悪いのう
もっとも
>>753がこれをMax/MSPに応用できるとは思えんが
別に質問スレでも宿題代行スレでもねぇからな。
解らない部分聞くでもなけりゃ、やり方聞くでもなし、答えだけ知りたいってのが気にいらねぇ。
しかも明日までとか期限切ってるし、しらねっつーの。
つーか、「今は全く無知です。明日までに勉強して作る必要があります」
なんて相談事では、回答者がどんなに手伝ってあげたいと思っても、
手の施しようがないべさ。「理解して作る」じゃなくて、「他人の解答を
理解せずにコピーして提出する」ってことなら、誰が手伝うものか。
んだんだ。
「急いでるから今すぐ回答だけ教えろ」なんて自己中すぎ。
766 :
デフォルトの名無しさん:2006/02/06(月) 18:20:10
WindowsXPとかに標準で入っている汎用USBオーディオドライバって、
2chを超えるような多チャンネルのPCMデータのやり取りには対応して
いるんでしょうか?たとえば3chとか4chとか。USBのAudio Data Format
仕様書では、多チャンネルデータが規定されているようなんですが。
ご存知の方いましたら、教えてください。よろしくお願いします。
WDMなら使える。後はデバイスしだい。
>>766 WAVEFORMATやWAVEFORMATEXでは3チャネル以上は対応してなくて、
WAVEFORMATEXTENSIBLEを使わないといけなかったような気がするする。
769 :
Sound:2006/02/07(火) 01:36:22
現在、パソコンのサウンドカードから音(ステレオ)を取り込み
イコライザー等の処理を施した後、リアルタイムで再びサウンド
カードから音を出すアプリケーションを作りたいと思っております。
開発環境はVC++等を考えています。
現在、DirectXのDirectSoundを用いてサウンドカードからの
音をWaveファイルに録音したり、録音済みのWaveファイル
を再生したりすることはできているのですが、サウンドカード
からの入力データを動作中のプログラムの一時メモリを参照し、
それを操作・処理した後に、一時メモリから再びサウンドカード
から音を出したいと考えています。
参考となるホームページやキーワード、書籍、具体的な
方法等知っていたら教えてください。よろしくお願いします。
バッファリング再生のこと?
>769
そこまで出来れば、あとは同時にやるだけで、特に悩むようなことはないと思うんだが。
>769
つ[リングバッファ]
リアルタイムってことはレイテンシなしでやりたいってこと?
楽器繋いでエフェクタ代わりとかにしたいなら結構面倒だと思われ。
「ASIO」辺りで調べてみ。
WDMでリアルタイムは難しいよな…。
ASIO4ALLのソース見れば、たいていのサウンドカードでなんとかできるかも。
バカだなリアルタイムとか言うとすぐASIOかよ。
使った事もないくせにw
低レイテンシとまでは言ってない。
録音と再生のサンプリングレートが完全に一致してるならいいんだけどね
そうじゃないならサンプリングレートあわせの為に
強力なLPF(ローパスフィルタ)が必要になるね。
アップサンプリングの場合でもLPFなんですか。
>774
バカはお前だよ。
16bit, 44.1kHz で処理する時、録音と再生にそれぞれ2KBのバッファを使うと、46msec程度遅延する。
ドライバ内にもバッファがあるので更に遅延するが。
楽器の演奏で50msec遅延すると気持ち悪くなり、100msec以上は使い物にならない。
ま、楽器触らない>774には理解出来ないんだろうガナー。
769は楽器を使うなんて人ことも言ってないが…
なんで質問者の内容と違った回答する奴が多いのかね
だれも遅延の話なんて聞いてないんだよ
リアルタイムの範囲をどこに置くか。とても難しい問題だな。
リアルタイムかどうかと遅延の大小はあまり関係ない気が。
遅延が一定ならリアルタイムと言えなくもないし。
リアルタイム処理した出音とそれ以外の音を同期ミックスするなら遅延を20ms内外に
納める必要があるが、ミックス込みで処理するなら遅延は100msでもいいわけだし。
要するに出音をどう使うかに依存すると。
ん?
772はレイテンシ無しでやるなら難しい、そうでなければリングバッファ使えって言ってんじゃん。
なんで噛み付いてんの?
漏れも入出力同時にやりたいって言われたらエフェクタがわりにしたいんだと憶測するが。
そうじゃなけりゃwavファイル操作した方が楽だし。
関連論文はないけど学生自体にちょうどそれの研究が流行ってた。
基本は想像どおりで消したい音の逆相をあてる。
>>774=778は本当に
あれ?
声が遅れて聞こえるよ?
馬鹿だなぁ。
785 :
デフォルトの名無しさん:2006/02/09(木) 20:09:38
すみません教えてください
入力された音声をトランシーバー風に加工したいのですが
EQで1KHzあたりをあげても
あのザラザラ感がなかなかでません。
あれは変調されている音なんでしょうか?
タクシー無線とか、飛行機とかあんな感じの音をつくりたいです
どなたかアドバイスください
柳沢慎吾に弟子入りしてみるとか
適当だけど。
3kHz以上カット→300Hz以下カット→非直線性歪
>>787 さらに、ノイズを追加。ノイズは出しっぱなしだと面白くないので、
音量と掛け算するとか
1msでも遅延したら厳密に言えばリアルタイムじゃないと思うのですが。
じゃPCで音楽のリアルタイム演奏は無理だね
音の速さは340m/sくらいだっけか?
コンサート会場で生声使ってもリアルタイムとは言えないわけだ
>>787,788さん ありがとうございます
非直線性歪 ためしてみます
あと、ノイズゲートもかけて試してみます
>789
ケーブル通る電子の速度分遅れるから厳密に言えばリアルタイムは存在しないと思うのですがwww
ま、どの方法使っても789の脳味噌ほど遅れはしないだろうよ。
>>789 厳密にって?リアルタイムの厳密な定義なんて存在するの?
>>789 うむ。0msじゃないとリアルタイムじゃないよな。
ぜひキミがそういうシステムを作ってくれ。宇宙がひっくり返るぞ。
厳密なリアルタイム ⇒ 遅延0ms ってことだろ?
そんな話はバカらしいから、あーだこーだと物言いがついてるんじゃないか。
大辞林 第二版 (三省堂)
リアル-タイムしょり 【―処理】<
〔real-time processing〕データ処理方式の一。
データが発生したとき、そのたびごとに処理を行う方式。
定時間処理。
--------------------------------------------
データの発生から処理の完了が規定時間以内にできれば、たと
え一週間かかってもリアルタイム処理だよ。
>>769 が何をしたいのかわからんから、規定時間がどんなも
んか知る由もないが。
まあ、
>>772 は単に ASIO って言いたかっただけだろ。
>797
>一週間かかってもリアルタイム処理だよ。
常識の範囲で物言えよ。
間違ってもその調子で仕事とかすんなよな。
799
プギャーって言って欲しいのかい?
この板も厨荒らしフラグが立ちました!
>>798 惑星探査機とかで制御に数分〜数時間かかるものもある。
あと、化学関係の奴とかならそれこそ制御のサイクルが
一週間レンジと言うのもざらにある。
自分の狭い「常識」が全てと思ってたら、恥をかくぞ。
1万光年も離れた星の光も1万年遅れてリアルタイムに見ています
リアルタイムの定義について1000まで議論するスレかよ。
低レイテンシ=リアルタイムだよ。
×低レイテンシ
○定レイテンシ
少なくとも俺の周りでは100msもかかるようなサウンド処理をリアルタイムとはいわんな。
そんな馬鹿なこと言ってたら話がすすまねぇ。
だれかこのどうでもいい話にケリをつけてくれ
けり。
レイテンシという言葉を見るとなぜか脳内で必ず「0.4」に変換されてしまう。
807の言うのは低レイテンシ処理であってリアルタイム処理ではないってこと。
0(レイ).(テン)4(シ) orz
0点死
>>808 自分の常識≡世間の常識 と思い込んでるお馬鹿が一人
暴れてるだけだろ。
>>810 ちとわろた。
>>812 残念ながら、全然面白くないぞ。
単にASIOアレルギーなだけだったりして?
恥ずかしながら
>>811の説明を読むまで 0.4 の意味が分からんかった。
これであなたも0.4
レンテンシーだろ。
シなんてブチ切るから四とか死とか連想すんじゃね?
レンテンシーってなんだorz
レイテンシーだお。
電気関係だと最後の「ー」は省くのが一般的では。
「ー」と「−(マイナス)」を間違えないようにするとか聞いた。
>>819 JIS かなんかで、決まってたはず。
昔は、ちょっとでもデータサイズを小さくするために省
ける (省いても混乱しない) ところは、省いてしまえと
言う発想だった。今時は、携帯とかにも 4G HDD が載
る時代だから、時代遅れの考え方なんだが、別に省いて
困るわけじゃないからそのままになってるだけ。
あと、いきがって「レイテンシー」とか言ってても所詮
カタカナ英語なので、「レイテンシ」と五十歩百歩。
すいません。急いでいるので教えてください!
いっこく堂のレイテンシはどのくらいですか?
823 :
age:2006/02/11(土) 19:31:58
音スレで惑星探査の話を持ち出すバカ晒しage
比喩というものが理解できないアフォがきたな。
プログラマどころか、技術者としての素養に欠けるから、
転職を勧めるよ。(w
理系って下らない揚げ足とる奴多すぎて困る。
キャッ!><
見えない他人に対してはなwww
「低0.4=リアルタイム」野郎の嫌がらせですか?
とりあえずスルー
スルーを宣言する奴は無様
意訳 寂しいので相手にしてください、無視しないでください。
あいつサンドバッグ状態だな
惨めすぎ
769が出てくりゃ済む話だと思うんだがな。
解決したのか、769=774なのか。
>>776 つまり、録音より再生周波数がわずかに高い場合でもLPFが必要かって事かい?
当然必要になる。
そして強力でかつ位相特性がフラットなLPFは大きな遅延を必要とする。
たとえば、PCIカードで入力してUSBスピーカーで出力なんて場合は、この同期を合わせる処理が必要だ。
だから、遅延の少ないリアルタイム処理をしたいなら、
まずは録音と再生が同期しているサウンドカードが必要だね。
まずはそっからだ
835 :
774:2006/02/13(月) 18:22:55
>>833 769はオレじゃない。769=785だと思った。
録音した音をイコライザ(トランシーバ処理)して出力とかな。
話がそれてしまったから785で再度質問したように見えた。
質問者(769)のレベルを考えれば、彼のリアルタイムと言うは
「ファイルに保存しないでメモリのみで」って意味だとオレはとったけどな。
書き込みが無いなら彼にとってレイテンシ問題は関係なかったのだろう。
>>835 > 「ファイルに保存しないでメモリのみで」
また、斬新な「リアルタイムの定義」だな…。
どう見ても769 != 785だし
もうちょっと観察力・洞察力をつけような。
だから774や835みたいなことを書いてしまうんだ。
774の人気に嫉妬……は、しねぇなwwwwwwwww
>>838は本当に
あれ?
発言が負け惜しみに聞こえるよ?
馬鹿だなぁ。
質問者は、単に、パソコンをエフェクターとして使いたいってだけの
発想だと思うなぁ
なんかイヤなことでもあったんだろ
オレも含めての話だが
>>769の欲しがっている回答は100レスくらい経過した今もまだ得られていない。
俺達、不毛な議論が大好き!!
これがプログラム板クオリティ。
>>769 オレも勉強中でよくわかんねぇけど、
まずはSteinbergのVST SDKとやらで勉強してみたら?
サンプルにエフェクターのプログラミングが幾つかあったと思うよ。
そこから、VSTi(DLL)じゃないStandaloneなアプリへと移行してみてはどうでしょうか?
843 :
842:2006/02/15(水) 06:40:29
あ。おれも見当違いな回答しちまったか?orz
VST SDKじゃ音を鳴らすところのプログラミング知識は得られないか・・・
Hostに波形をわたすだけだもんな・・・・
そうか
VST Hostっていうアプリのソースを解析すりゃいいんだ。よし
>>764 VST Hostっていうオープンソースなアプリがあるからそいつを見るんだ。
なにかわかるかもしれないっす。
ってサウンドプログラミングを全然わかってない俺が回答してどうする?
>>764じゃなくて
>>769だ。
ム板ってIDが出ないから、なんか面倒くせぇなぁ。ひろゆきさんID出すようにお願いしてこようか?
>>842 >オレも勉強中でよくわかんねぇけど
じゃあ黙ってろ。
ここって口先だけの無能な奴の集まりだよ。
難しい質問の答えは、いつだって、抽象的w
そして、どうでもいい言葉の綾にすぐつっかかる。
>>845は
>>772が答えだと最良の答えだと思ってるほど引出しもゼロのくせに出てくるし。
>>846は無能な奴の発言をぶった切る。
>>842は無能なのにつっかかる。
そして、おれもつっかかる。
こんなスレじゃ
>>769のためになるような答えは出てこないよなw
他人が自分のレベルに追いつく(追い抜く)のを恐れている。
実は wave inと wave out をつなぐのは簡単なようで、簡単じゃないんだよ。
一昔前のPCIサウンドカードは1枚で同時に使おうとすると、in-outのアイソレーションが悪くて使えたもんじゃなかったし
2枚刺しだと、同期がゆっくりズレてゆくから、
>>775の処理をしなければいけない
USBサウンドカードも、どうもデータが抜けるようでプチプチ音が入ってしまうのが結構ある
最近は良くなってるけどね
サンプリング変換の技術を持っていれば、簡単かというと
リアルタイムなら
入力したものをリングバッファに入れて、8倍程度のオーバーサンプリングでデータを取り出して
入力したカウント数と 出力したカウント数がだんだんズレてくるからそれにあわせてPLL的な処理をするのだけど
ところが、InもOutもブロック入力出力なんだよね。
だから、1ブロック分ズレないとそのズレが判らない。
で、それをもっと早く知るには高分解能タイマーが必要になる。
その付近が自分で作るとなるとメンドクサイんだよ
>>847 自分の欲しい回答が出てこないからって逆ギレ乙。
769がでてきてないってことはたぶん769はでてきたキーワードで
解決できたってことだ。
逆ギレしたら解決したのかも。
まぁタイミングが悪かったよな。
854 :
851:2006/02/17(金) 10:18:15
>>852 769≠847、847も同様のギモンを持っていたが、
あの情報だけでは解決できなかった、というつもりで書いた。
はぁ?
856 :
785:2006/02/22(水) 01:18:46
すみません 785ですが
769さんとは無関係です
ちなみに私のやりたいのは 録音ー>通信ー>再生です
この部分は可変バッファ込みでできてます/
昨日
急にSFだな
おととい来やがれ!
おとといって…今更言われても、過ぎた日には戻れません
DelayLineでなんとかならんかな
すいません今ドップラー効果が発生しておりまして
リングバッファを一周してきました
レイテンシが172800000msほどあるようです
あんま盛り上がらないからなにかお題を上げてそれをみんなで作るってのはどう?
っていう名目の上に俺の作ってほしい物を作ってもらうだけのクレクレ企画やろうぜ
「ザ・ワールド、時よ止まれッ! WRYYYYYYYYYYーーーッ」
「最高に「ハイ!」ってやつだアアアアアアハハハハハハハハハハーッ」
「オレはたぶん… プッツンするだろうということだけだぜ」
「ロードローラーだッ!」
つづく
うむ
869 :
デフォルトの名無しさん:2006/03/17(金) 19:30:09
クリエイティブのEAXってサウンド周りの重い処理を全てハードウェアで処理して
CPUの負担を軽減してやれって発想なんだよね?
ってことは波形処理に伴う効率的なFFTもサウンドカードのDSPに実装されているってわけだ。
それを逆手に取って、FFTを使うプログラミングを書くときは、ソフトウェア的に処理するのではなく
EAX機能を搭載したサウンドカードに計算させちゃうってことはできないかな?
ハードウェアで処理することで圧倒的なスピードでFFTとかやってくれそうじゃん。
それにFFT意外にも畳み込みの計算とかもスピーディーにやってくれるんじゃない?
>>869 プログラムを書き換えたり出来るの? そもそもプロセッサの仕様は公開されてるの?
プログラムは書き換えられないだろうけど渡すパラメータを変えて対応できないだろうか?
ちなみにプロセッサの仕様は公開される必要はないでしょう。
入力を入れて正しい出力結果が得られれば満足なんだから。
リアルタイム系のフィルターでは、普通はFFTは使わないと思うけど?
ここ数年のグラフィックス・カードの処理能力向上にともなって、
研究者たちが「GPUを汎用計算機として使えないか」ということを考えています。
それと同じですよね。
自分は、GPUを使ったリバーブ・アルゴリズムなんかについて考えているんですが、
GPUに値を渡すことはできても、GPUから値をとってくるのが難しく困ってます。
GPUから値が取れないのは、GPUに情報が入ったら計算させて表示しておしまい、
というのが原因だと思いますが、もしかしたらサウンドカードでもにたことになってるかも。
>>873 な、なるほどΣ(´Д`; )
サウンドカードにデータを渡しても結果は音として再生されて終わりってこともありえるわけか・・・
875 :
873:2006/03/18(土) 01:22:14
サウンドカードの場合は録音もできるものがほとんどなので、
グラフィックスカードと違って、
サウンドカードからデータを取ってくることはできます。
ただ、PCから渡したデータをサウンドカードのプロセッサ経由させて
またPCに持ってこれるかどうかは別の話なんですが。
つまり計算結果を音として再生させてそれをケーブルで録音端子に戻して録音すると。
アナログコンピューターかいな('A`)・・・
877 :
873:2006/03/18(土) 04:21:27
サウンドカード内部でルーティングできれば、
アナログにする必要ありませんね。
>>875 GPU使うのだって、計算結果をテクスチャ領域にレンダリングして
取り出すんじゃなかったっけ?
880 :
http://www.vector.co.jp/soft/win95/util/se072729.html:2006/03/18(土) 19:04:51
TextSS のWindowsXP(Professional)64bit化おながいします
もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
>>878 MPACT2はDSPだからVGA専用というわけではない
MacOSXに、CoreImage技術を使って、GPUに音声処理をさせる、AudioUnitsプラグインがあったぞ。
名前忘れたがモナリザっぽい名前だった気がする。
883 :
デフォルトの名無しさん:2006/03/21(火) 02:54:44
HRTF って単純に線形補間していいの?
> HRTF
何の略だっけ?
頭部伝達関数
886 :
デフォルトの名無しさん:2006/03/24(金) 16:30:49
積分方程式から音声信号を算出する具体的なやりかた教えろ!
>>886 DTM板で教えてやったろアホ。
お前、大学レベルの数学勉強する前に人間勉強しなおしたほうがいいな。
人間勉強なんて(・∀・;)エロイナ
889 :
デフォルトの名無しさん:2006/03/27(月) 05:07:29
カスラックのせいで衰退したMIDIの事も時々思い出してください
当時はカスラックの所為だったが、
今は高速回線でMIDIにする必要なくなったろ。
それにソフト音源が主流になって再生環境合わせるのも難しいし。
プロが作った音が方々で聴けるってのに、
どこの馬の骨が作ったかわからんデータなんぞ、
DTM音源を買ってまでして聴かないよ。
DTXという電子ドラムと同じ動きをするプログラムを作りたいのですが、
困ったことにDTXは1つのパッドに設定できる音は5音までなのです。
パッドを1.2.3.4.5と続けて叩くと、C.D.E.F.G と発音される設定の上限を10音や20音とメモリを気にせずにプログラムしたいのですが・・・
このような動きのプログラムは難しいでしょうか?
894 :
デフォルトの名無しさん:2006/03/27(月) 11:59:51
>>892 簡単。
何番を鳴らすかのカウンタを作って、
叩かれるたびにインクリメント、
カウンタが最大値になったらもどしてやる。
レスありがとうございます。
プログラミング初心者には難易度が高すぎるみたいですorz
>>896 1音鳴らすのがやっとのプログラム初心者でもできることなんだけど、
ボタンを押すと画面に表示される数字が増えていく、ってのは作れる?
それができたら、数字を表示する部分を音を鳴らすのに差し替えて。
それも作れないですorz
プログラミングテラムズカシス( ´Д`)
よくテレビとかでプライバシーの配慮ということでボイスチェンジャーで声の音程を
変えたりしているでしょ?ああいうことってサウンドプログラムでも同じようなことって
できるのかな?
またクリエイティブのEAXを使えば高速化できてリアルタイム処理をするなんてことも可能?!
>>899 ・・・音声編集ソフトについてるの見たことないかね。
あと、リアルタイムとはなんだね。
>>900 > あと、リアルタイムとはなんだね。
自分でマイクに向かってしゃべって、スピーカーからは音程の変えられた声が聞こえてくると
そんな事を聞いているのではないのだよ。
>>899 プログラムでできるよ。EAXは関係ない。
>>902 以前、リアルタイムの解釈でもめたからって、初心者につっかかるなよ。
性格悪いな、おまえ。
誉め言葉をどうも。
>>903 > プログラムでできるよ。EAXは関係ない。
っていうか、誰かそういうツールもう作ってたりするかな?
そこから先はここで聞くことじゃないな
>>907 よう見つけてくるなぁ(;´Д`)ハァハァ・・・
ボイスチェンジャーを自分で作りたいんだったら、
どの程度の機能が欲しいか考えるといいと思うよ。
ただ声が変わるだけでいいんだったら
ディストーション、リング・モジュレーション、ボコーダーなんかでできる。
声質を変化させないまま音程だけ変化させたいというんなら
もうちょっと難しいけどタイムワープ(名前あってる?)とか、そういうのが必要。
音程を低くするのは、周波数ロックして 1/2周期の(1+sin(w*t)) を掛け算するとソレっぽい音になるよ
音程を高くするのは、キーコン方式が一番楽だろうね
音程だけ簡単に変えるなら、グラニュラーかな。
音を細切れにして、時間軸方向に縮めて、それをたくさんならべて隙間を埋める。
音程をあげるのとさげるのとでは方式が違うってこと?
>>912 これ、簡単な処理のくせにそれなりにちゃんと聴こえるだよね。
FFTとか窓関数とかやってた苦労はなんなんだ、ってくらい。
ただのピッチシフターじゃん
これだけでどれだけレス消費してるんだか
>>899はプログラム以前に普通に音声エフェクト処理の知識をつけたほうがいい
916 :
910:2006/03/28(火) 14:05:48
>>915 ピッチシフターじゃないボイスチェンジャーもあるわけで。
プライバシーの配慮どうこうは間違いなくピッチシフター
適度に音が荒れるから元の声がくずれるしね
楽器には使いにくいけど
電子工作とかエレキットとかでは見たことあるよ>>ボイスチェンジャー
でもソフトのもので(フリーの)ボイスチェンジャーは知らないなぁ。
別に作るのが難しいとかじゃなくてPCでボイスチェンジするメリットが
少ないからだと思うが…
ボイスチェンジャーでなくても、ピッチシフトはフリーのがあるよ。
フリーのホストからフリーのVSTを呼んでもいいし。
920 :
910:2006/03/28(火) 23:08:27
PhysXっていう物理エンジン処理用のチップがあるけど
これってサウンドプログラミングでも使えないかな?
複雑な残響音の反射などの計算って還元していけば
オブジェクト同士の相互作用と同じにみなせるでしょ?
>>921 たぶん使える。Rayverbのインパルス生成みたいなのを
リアルタイムにやったらすごいだろうな。
>>923 > 少し前に流行った「一青窈のキ〜を4つ下げると平井堅になる」を試してみたかったので
> 作ってみました。
トリビアでやってたやつか。
俺もちょっと興味あったんだよな。
フォルマントいじる系のボイスチェンジャーは単音入力じゃないとむりよ
>>922 すごいな、グラフィックスの処理もサウンドの処理もこなす万能物理演算チップに
なり得る訳か>>PhysX
デュアルコア世代で不要になる気がする。
あと、サウンドはやはりサウンドブラスターのX-Fiチップのような専門チップに任せたほうが賢い気がする。
>>927 > サウンドはやはりサウンドブラスターのX-Fiチップのような専門チップに任せたほうが賢い気がする。
どうだろう。サウンドカードメーカーが用意した枠組みに従う限りは不要な気はするけど、
その枠組みを超えて独自の音源処理を施したい場合とかにはPhysXみたいな汎用演算
チップは重宝するようになるかも。要は生かすも殺すも使い手次第ということで。
929 :
デフォルトの名無しさん:2006/03/31(金) 18:18:48
Windows2000/XP,C++,C#の環境です。
マイク端子やWaveファイルを入力として、その音声データから
電話のDTMF音を抜き出して、プッシュされた「1,2,3,4,#」などの
ボタンを識別したいのですが、参考になるサイトやライブラリなどは
ありませんでしょうか?
930 :
デフォルトの名無しさん:2006/03/31(金) 18:57:06
そんなマニアックなことを解説してるサイトを見つけるほうが
無駄な労力だろうな。自分で実際にそのプッシュ音の波形を見て
特長見つけて判別するものつくりなさい。
>>929 「DTMF 周波数」でググった後このスレを音程検出で検索すれ
昔電話のトーン音を正確に模せる音大在籍の姉妹が受話器の前でハモって
プッシュボタンに一切手を触れずに天気予報や電話案内に電話をかけている
様を見たときは戦慄を覚えたな。
トリビアの泉だろ?
そんな昔でもないじゃん
特報王国だったような?
そう、特報王国だったね。
>929
正弦波ふたつだけでできてるから検出はラクチン。
>>932 実は1と7しか出来なかった罠。しかも1と7は1209Hzが共通だから
1人は同じ音しか出していない。まぁ、やれって言われたら無理だが。
938 :
929:2006/03/32(土) 06:22:44
できたよ。情報ありがと。
DTMF音の間が極端に短すぎると抜けが出るけど、
実用にはOKかな。
間が20msくらいが限界。リアルタイムにやるならね。
キチガイが発生するからリアルタイムうんちゃらは止めれ。
( ゚д゚)?
リアルタイムシステム=遅延時間を常に一定値以下に”保証”できるシステム
「では”保証”できる遅延時間がどれだけか」という話は、リアルタイム性とは別の話だ。
”保証”出来ないシステムは、リアルタイムとは呼べない。
実に下らん。原理主義者のご到着。
そんなことぐらい誰でも知っていて、それでも使う意味を理解したらどうだいwww
って、別に批判してるわけじゃないのか。スマ。
本当のリアルタイムシステム (英語に直すとひどい言葉になりそう) なんて、
2chで不特定多数と話す価値が無いだろうね。
殆どの人間はリアルタイムじゃない仕組みしか使っていないだろうし。
結局
擬似的なレベルしかできないし、むしろ擬似的なレベルで上手く回る仕組みのほうが重要。
>>938もリアルタイムシステムとは言っていない。「リアルタイムに感じる」との解釈が正解のような。
擬似的じゃないリアルタイムとは?
そろそろこのあたりで時間と空間について語り合いませんか。
スレ違いのうえにどうでもいい
946 :
デフォルトの名無しさん:2006/04/03(月) 14:47:18
春だなぁ
948 :
デフォルトの名無しさん:2006/04/04(火) 09:15:27
質問です。
例えば、
「あ〜〜」って発音してる音声と
「い〜〜」って発音してる音声があって
それを1つのMIXしたデータAを用意
ここから、「い〜〜」と発音したデータを引いて差分から
「あ〜〜」と発音してるデータを作ることは無理なのでしょうか?
同じ人の声だと難しいかもねぇ。
発声タイミングが違えばなんとかなるかもしれない。
でも基本的にはすごく難しいと思っておこう。
独立成分解析でググれ
独立成分分析は多チャンネル録音してないと使えないよ。
声が2つだったら少なくとも2チャンネル必要。
よく刑事ドラマとかで無線越しの声が出てくるけど
あれって普通のマイクで録音した声をいじって
いかにも無線越しに聞きましたよ、と波形処理することって可能?
それとも一対の無線機買ってきてそいつに音を通さないと
それらしい効果は得られないのかな?
>>952 一度ものすごく低いレートでエンコードしてみなよ
いいヒントになると思うよ
>>953 それはローパスフィルターがらみじゃなかった?
柳沢慎吾に弟子入りしろとあれほど
ローパスとかバンドパス・フィルタに鋭いレゾナンスつけるとそれっぽくなるかもしれない。
ピーク周波数を上下させると、昔のAMレシーバー(スケルチ回路?)みたいな音がする。
ちょっとだけディストーションかけるとマイクに口くっ付けて話しているような音になっていいかも。
荒めのピンクノイズを混ぜたり、いろいろ試してみるべし。
http://saki.2ch.net/radio/kako/963/963053838.html >パトカー用無線(MPR-100)変復調方式
:PLL4相PSK 音声符号化方式
:ADM(適応デルタ変調)伝送速度
:16kbps フレーム同期信号
:11011000(正) 00100111(転)1フレーム320ビット構成
という事のようだから、サンプリング周波数を16kに減らしてから、ビット数を減らしてやれば良さそう。
あと、小信号時に8k 4k 2kHz を足してやるともっとそれらしくなると思う
あの警察無線や軍用無線の独特な声質って低ビットレートPCM変換されたことに起因するのか?
みんながイメージする警察無線って、
やっぱりアナログ時代の音だと思うよ。
アナログの音か・・・
ハイパスフィルターやローパスフィルターはかけてみたがそれらしい音にはならなかったような・・・
わざと潰して歪ませてみたりするか
その辺は感覚の問題だからプログラム板だと板違いだろ。
既存のコードを使ってなんとかするだけならDTM板でやれ
変調復調も音質に関係しているんじゃないかな?
理論上は線形変換でもアナログ回路で実装すると非線形になって
(近似すれば線形)独特の音質が形成されてると考えるのはうがった見方かな?
慎吾ちゃんがやってるのはもろにディストーションだもんね。
無線というのは決められた帯域、決められた出力があるから非線形が入るのが当然。
いや、そこをしっかりローパスフィルタ使って帯域制限してやれば
非線形にならない、というのがナイキスト理論。
音量が大きいと FM変調の場合 決められた帯域を超える
音量が大きいと AM変調の場合、決められた出力を超える
>>967 それは使う音量を間違えてるんだよ。正常動作範囲内だったら非線形。
でも965で言いたかったことが分かった。
ただ、警察ドラマみたいに無線機に向かって怒鳴ったりしたら
変調させる前にクリップするんじゃないかな。
そこで非線形が生まれるのか。
>>967 CB無線はAM方式だったはず。
もっと高い周波数だとFM使うことが多いのかな。
AM変調だとすると
> 音量が大きいと AM変調の場合、決められた出力を超える
つまり音が全体的に過大入力になることで歪み、無線独特の音質になったってことかな?
逆に入力の音量が正常なら、AM変調の無線でもAMラジオ並の音質は確保できるということか?
警察無線で定格以上の過大出力をするとは思えないんだけど。
全然サウンドプログラミングじゃねーよ
頭悪
つか、定格以上になる以前にクリップするだろ普通
普通はクリップしないように工夫するんじゃない?
その工夫がつまり、AGC=非線形な処理のわけだ
それならラジオだってAGC処理はしている。
でも無線みたいな音質にはならないからクリッピングが原因とは想像しがたいが・・・
SSB?
普通に受信するとモガモガ聞こえるんだよな、SSB。ナツカシス。
>>976 警察無線ってFMラジオ並みの音質あったっか?
>>980 音質は、FM/AMの方式で決まるんじゃなくて、どれだけ帯域を取っているかの方だろ
昔の警察無線は、さらに秘話装置も使われてたから >> 977の言うSSBの原理
人間の脳が音による空間認識をしてるから音源の三次元位置を忠実に再現するための
録音方式と言うのがいろいろ開発されてて、今のところ一番普及してるもので最限度が高いものが
人間の頭の模型の量耳の位置にマイクをつける方法というのがある
耳に直接入ってくる音と耳の中でこだまする音の両方で人間が空間を認識してるからこれが一番
効果があるらしい
普通に録音したものを擬似的にこういった加工はできないだろうか
一番興味があるのはホロなんとかってある科学者が録音した音があってこの録音方式の際限度は
上で書いた頭の模型の非ではないくらい忠実に再現できる
実際に検索すればころがってるのでヘッドホンつけて聞いてみるとわかる
ただこの科学者、世界が滅亡するとかいう理由で録音方法を死ぬまで誰にも言わなかったから
謎のままなんだそうだ
どういう構造で立体認識をする音になるのかがわかればこの録音方式の解明にもなるんじゃないだろうか
そういうことって可能なのかね?
>>984 適当な内容で長文かくなよ〜。
ホロフォニックよりアイソフォニックとか、優れた技術はあるだろ〜。
頭の模型だけじゃだめで、胸も必須だぞ〜。そこの反響がキモなんだから。
録音方法を死ぬまで誰にも言わなかったってのはウソ。
米軍が権利を買い取ってるし、録音に参加した人も多数。
録音中の黒い布の中には、精巧な上半身つきダミーヘッドが
あっただけだそうだ。当時のダミーヘッドはそれこそ頭だけだったので、
それだけでも革新的なんだよ。
ホロフォニックって、「耳から参照音が出ていて云々…」って
説明だけ聞くとえらいトンデモ発明に聞こえるんだけど
実際聞くとビビるな。
>>984 頭部伝達関数とかでググるよろし。
>>985 適当なのはあんた
isophonicなんてhorophonicsの比じゃない
聞いてみな
比べ物にならんよ
♪
♪