[リストへもどる]
一括表示
タイトル『レベルメータ』実現方法
記事No153
投稿日: 2006/06/13(Tue) 22:06:54
投稿者相田隆志
参照先http://ips.fc2web.com/
はじめまして。いんちき音響屋の相田隆志と申します。
HSPで製作中のプログラムに音声のレベルメータを実装しようと
いろいろ調べているうちに、ここにたどり着きました。
http://ips.fc2web.com/sea.html
上記リンク先のような、効果音ポン出しソフトを制作中なんですが
そこにレベルメータを実装したいと考えています。
(ソフト本体は、miaさんのdsoundxというプラグインに依存してます)
(参照先:http://www.taillove.jp/mia/

しかしどういうわけか、音源をコントロールすることに関する情報は
かなり多いのに、出力を監視することについては、情報が見つから
ないんですね。

もし差し支えなかったら、Miuraさんのレベルメータの作り方を
お教えいただけませんでしょうか?
ソースの公開に近いお話ですので、無理にとは言いません。
ちょろっとヒントだけでもいただけたら・・・

よろしくお願いいたします。

タイトルRe: 『レベルメータ』実現方法
記事No154
投稿日: 2006/06/13(Tue) 23:13:19
投稿者Mimura < >
はじめまして。
当管理人のMimuraです。

レベルメータのデータの取得方法といたしまして、左チャネルの取得方法をここに書きますと

-------------
定義
SAMPLES=360 ;// バッファあたりののサンプル数
-------------
repeat SAMPLES/2
L2+absf((absf(peek(CURWAVEDATA,cnt*2))-absf((absf(255)/absf(2)))))
loop
L2=absf(absf(L2)/absf(SAMPLES/absf(2)))*1.5
}
if L<L2:L=L2:else:L=absf(absf(L)-absf(4))

データは右と左が交互にデータに書き込まれているので、二の倍数で片側のデータだけを読み取り、加算し、平均値を出します。

その後、現在の数値(L)よりも、今取得したデータが大きいかを比較し、大きければ代入、小さければ現在の数値を-4するといった仕組みになっています。

録音の仕方は、APIで行う方法もありますが、
http://www.chichibu.ne.jp/~kawahira/soft/forhsp.htm
ここで公開されている、HSPWAVEというプラグインを使用する方法をお勧めします。

先ほどの方法で取得したデータは、
音量にあわせて数値が変化いたしますので、
そのままプログレスボックスなどに数値を持っていただければ、
レベルメータとして機能いたします。

その他サンプルソースファイルが必要でしたら、メールにて送信いたします。

ソフトの開発がんばってください。 応援しています。

タイトルRe^2: 『レベルメータ』実現方法
記事No155
投稿日: 2006/06/14(Wed) 13:57:14
投稿者相田隆志
すばやいご回答ありがとうございます。
なるほど、まず『録音』という概念から入っていかないといけないようですね。
(音響屋としては、ミキサの出力にちょこっと回路を足せばメータが作れる
じゃないか。つまりその回路をソフトウェア化するだけじゃないか。という
発想になってしまうんですねえーー;)

とりあえず、書いていただいたサンプルとhspwaveの中身を参考にやってみます。
行き詰まったらMimuraさんにソースを「おねだり」するかもしれませんが(^^;)

なんせ仕事の合間の道楽なんでいつ完成するかも分かりませんが、長い目で
見てやってください。なんせ、『気分はMSX-BASIC時代』で遊んでますので。

タイトル追伸
記事No156
投稿日: 2006/06/14(Wed) 14:36:05
投稿者相田隆志
hspwaveのサンプルスクリプトを実行してみるのに、Mimuraさんの
ソースコンバータに助けられてしまいました(^^)

趣味の開発なんで、自分で調べてというのがいいんでしょうけれど
楽させていただきました。

タイトルRe: 追伸
記事No157
投稿日: 2006/06/14(Wed) 19:08:25
投稿者Mimura < >
> hspwaveのサンプルスクリプトを実行してみるのに、Mimuraさんの
> ソースコンバータに助けられてしまいました(^^)
>
> 趣味の開発なんで、自分で調べてというのがいいんでしょうけれど
> 楽させていただきました。

ソースコンバーターに助けられる・・
ソースコンバーターのソースを見てないからなぁ・・
不具合はありませんでしたか?・・(^_^;)
なければいいですが・・

今回の一件で、私のほうでも、今レベルメータの再構築版を作成しているところです。
私の場合も、趣味同然でやっておりますので、公開が遅くなりそうです・・

互いにがんばりましょう!

タイトルとりあえずできました
記事No158
投稿日: 2006/06/14(Wed) 23:54:50
投稿者相田隆志
参照先http://ips.fc2web.com/sea.html
ソースコンバータ、no problem でしたよ。
hspwave のサンプルソースで問題だったのは、goto/gosub の飛び先に
アスタリスクがついてるかついてないか、という程度でした。

で、おかげさまで、レベルメータを実装することができました。
dB 計算などは面倒なので、とりあえず hspwave のサンプルプログラムを
だいぶそのまま流用して、音の大きさ分だけ"| "というキャラクタを並べるだけ
というものですが・・・「音が出てるのか出てないのか」が分かればいい
という程度のものなので・・・

怠慢に怠慢を重ね、タイトルバーをレベルメータにしてしまいました(^^;)

とりあえず現在のスクリーンショットは http://ips.fc2web.com/sea.html に置いてます。
気が向いたら見てやってください。

というわけで、Mimuraさんのおかげで結構あっさりとできてしまいました。
ありがとうございます。K-Kさんにも感謝ですね。

しかし、他の部分の手直しに時間がかかりそうです・・・
まあ、道楽だし(^^;;;)

タイトルRe: とりあえずできました
記事No159
投稿日: 2006/06/15(Thu) 09:14:30
投稿者Mimura < >
> ソースコンバータ、no problem でしたよ。
> hspwave のサンプルソースで問題だったのは、goto/gosub の飛び先に
> アスタリスクがついてるかついてないか、という程度でした。
>
> で、おかげさまで、レベルメータを実装することができました。
> dB 計算などは面倒なので、とりあえず hspwave のサンプルプログラムを
> だいぶそのまま流用して、音の大きさ分だけ"| "というキャラクタを並べるだけ
> というものですが・・・「音が出てるのか出てないのか」が分かればいい
> という程度のものなので・・・
>
> 怠慢に怠慢を重ね、タイトルバーをレベルメータにしてしまいました(^^;)
>
> とりあえず現在のスクリーンショットは http://ips.fc2web.com/sea.html に置いてます。
> 気が向いたら見てやってください。
>
> というわけで、Mimuraさんのおかげで結構あっさりとできてしまいました。
> ありがとうございます。K-Kさんにも感謝ですね。
>
> しかし、他の部分の手直しに時間がかかりそうです・・・
> まあ、道楽だし(^^;;;)


遅くなってしまってすいません。
先ほどHPのほうを見てきましたが、あのように書いていただいて、うれしい限りです。
CPUがとてもすばらしい(?)ことになっているようですが、
タイトルバーで書きますと、動作が厳しいことになります・・
また、ほかにも、録音方法をAPIで直接録音しますと、
録音が終了したと同時に割り込みメッセージが飛んできますので、
それでぐるぐる回すと結構CPUの食いが抑えられますが・・

公開が待ち遠しくなってきました。
SEAの公開を首を長くして待ってます。
 (あっ・・でも、急がなくても大丈夫です・・)

タイトルRe^2: とりあえずできました
記事No160
投稿日: 2006/06/15(Thu) 19:06:03
投稿者相田隆志
> CPUがとてもすばらしい(?)ことになっているようですが、
> タイトルバーで書きますと、動作が厳しいことになります・・

あはは、そうなんですか(^^;)
とりあえず普通にboxfでバーグラフっぽく作り変えました。

> また、ほかにも、録音方法をAPIで直接録音しますと、
> 録音が終了したと同時に割り込みメッセージが飛んできますので、
> それでぐるぐる回すと結構CPUの食いが抑えられますが・・

API・・・また新たな(そして重量級の)扉が・・・
でも割り込みで処理できるのは楽そうですねえ。

> 公開が待ち遠しくなってきました。
> SEAの公開を首を長くして待ってます。
>  (あっ・・でも、急がなくても大丈夫です・・)

おそらくキリンさんくらいに首を伸ばさないといけないかもしれません^^;
とりあえず動いてはいるんですが、goto と gosub の混在でわけわからん
ことになってたり、同じ場所に同じボタンを何度も配置してたりするので(そんな気がする)
API云々の前に、自分のソースを解読しないといけない状況です(−−)

タイトルRe^3: とりあえずできました
記事No161
投稿日: 2006/06/16(Fri) 07:12:19
投稿者Mimura < >
> > 公開が待ち遠しくなってきました。
> > SEAの公開を首を長くして待ってます。
> >  (あっ・・でも、急がなくても大丈夫です・・)
>
> おそらくキリンさんくらいに首を伸ばさないといけないかもしれません^^;
> とりあえず動いてはいるんですが、goto と gosub の混在でわけわからん
> ことになってたり、同じ場所に同じボタンを何度も配置してたりするので(そんな気がする)
> API云々の前に、自分のソースを解読しないといけない状況です(−−)

自分のソースを解読・・
と・・いうことは・・ソースが相当すばらしいことに・・?
(たぶん、私のメモ帳のソースよりは汚くないと思います。
解読作業、がんばってください(^_^;)

タイトルRe^4: とりあえずできました
記事No162
投稿日: 2006/06/16(Fri) 18:00:17
投稿者相田隆志
(1)
思いつくままにサブルーチンを書いていってるので、Cでいうmain関数に
相当する部分がすごく変なところにある
(C言語は学生時代に「授業で」かじっただけですが)

(2)
初期設定ルーチンを、なぜか実行中に何度も通過してる気が・・・

(3)
コメントアウトした部分、コメントアウトした理由がブラックボックス化

(4)
その他いろいろ(^^;)

ちなみにレベルメータはバーグラフっぽく作りました。
で、素直に描画せずに、
  ・現在のレベルを直前と比較
  ・現在のが大きくなってればそのまま描画
  ・現在のが小さくなってれば、現在の値を無視して、直前よりちょっと小さく描画
とすることで、現実のアナログメータ(そして多くの機材のバーグラフメータ)みたいな、たとえば・・・
  ・「どん」と一発鳴った瞬間に即座に振れて
  ・その後割とゆっくりと表示が(振れが)小さくなる
という動作ににしてみました。

タイトルRe^5: とりあえずできました
記事No163
投稿日: 2006/06/17(Sat) 12:51:54
投稿者Mimura < >
> (1)
> 思いつくままにサブルーチンを書いていってるので、Cでいうmain関数に
> 相当する部分がすごく変なところにある
> (C言語は学生時代に「授業で」かじっただけですが)
>
> (2)
> 初期設定ルーチンを、なぜか実行中に何度も通過してる気が・・・
>
> (3)
> コメントアウトした部分、コメントアウトした理由がブラックボックス化
>
> (4)
> その他いろいろ(^^;)

うわぁ・・・
現在のMimura Software メモ帳と同じバグを抱えていらっしゃる・・
(私の目玉ソフトのほとんどが同じバグを抱えてる。)

修正するのがめんどくさい・・と思うのは私だけでしょうか・・

こういうバグって・・私が初めてHSPで作った作品なんかには多数存在してます・・

修正方法としては案外、プログラムの再構築をしたほうがじっくり修正するより早くできますけどね・・

バグの修正がんばってください(^_^)v

------------------------------------------------------------
レベルメーター2 (仮称) Ver0.01
http://mimurasoft1133.hp.infoseek.co.jp/BePg/hsptmp.rar

こちらのプログラムの完成まで・・
キリンの首でも待ちきれないほどかかりそうです・・

タイトルRe^6: とりあえずできました
記事No164
投稿日: 2006/06/18(Sun) 21:52:12
投稿者相田隆志
う。rar...解凍ソフト見つけなきゃ(−−)

『再構築』。素敵な響きです。私のウェブサイトもまるごと作り直したい気分です。
(最近CSSの使い方を少しだけ覚えたので、最近作成したページは
 ある程度CSSで整えてあるんですが・・・)

で、HSPエディタ上(インタプリタ?)では問題なくても、コンパイルしみると
『内部エラー(10)』で強制終了したり(どうやらgosub-returnの関係が
おかしいらしい)、なかなかのツワモノです。

今日は、お仕事マシンのVAIOのキーボードにコーヒーを飲ませてしまいました。
あまり使ってないデスクトップ機のUSBキーボードでしのがないといけなく
なりました。VAIOにはBIOSパスワードかけてたので、奥さんのVAIOから
キーボードをそのときだけ移植して、と、大変な目に遭いました。
(同じキーボードで救われました)

ちなみに開発マシンはCeleron 400MHz なダイナブックです。
今となっては亀さんマシンですが、『劣悪環境でのソフト評価』にはもってこい、です(^^;)

タイトルRe^7: とりあえずできました
記事No165
投稿日: 2006/06/19(Mon) 14:14:15
投稿者Mimura < >
> 今日は、お仕事マシンのVAIOのキーボードにコーヒーを飲ませてしまいました。
> あまり使ってないデスクトップ機のUSBキーボードでしのがないといけなく
> なりました。VAIOにはBIOSパスワードかけてたので、奥さんのVAIOから
> キーボードをそのときだけ移植して、と、大変な目に遭いました。
> (同じキーボードで救われました)

うっ・・BIOSロック・・
パスワードを忘れて、CMOSリセットを何度もやった経験が・・

> ちなみに開発マシンはCeleron 400MHz なダイナブックです。
> 今となっては亀さんマシンですが、『劣悪環境でのソフト評価』にはもってこい、です(^^;)

わたしの環境は、
開発マシンのほうはPen4の3.12(クロックアップ)ですが、
テストマシンは、Penの100Mhz・・ 亀よりも遅いPCです・・

なんとなく、ふと思ってみれば、サポート掲示板でいいの(?)
という気もしましたが、
まっいっか〜wということで・・(^_^)

タイトルRe^8: とりあえずできました
記事No166
投稿日: 2006/06/26(Mon) 00:51:42
投稿者相田隆志
今回は『亀より遅い』レスにて失礼します。
仕事がかなり忙しくて、SEAもほとんどさわらずな日々です(××)

今日はSEAを披露宴現場で使ってみました。
EXE化しない限りはかなり有能(親バカ?)なんですが・・・・

しかし、100MHzとはまた渋いですね。そのスペックでのwindowsは
未体験ゾーンです。i486(16MHz)でDOSな環境から、いきなりMMX-200MHzな
windows環境に飛躍したもんで ^^;

そうですね、次からは雑談掲示板にお邪魔するとしましょう^^