HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
0704
makevolumeの設定について4未解決


make

リンク

2008/7/4(Fri) 01:16:24|NO.17139

wavevolumeのサンプルですが左右にわかれているので統一したいです
あとその統一したwavevolumeを
ボタンが10個あってボタンをおした時にボタン数と同じ10段階として変更したいんですが
どうすればいいんでしょうか?

/* ;waveのサンプルここから #uselib "winmm.dll" #func global waveOutSetVolume "waveOutSetVolume" int, int #module #deffunc setvolume int right, int left, local i i = limit(right, 0, 100) * 0xFFFF / 100, limit(left, 0, 100) * 0xFFFF / 100 waveOutSetVolume 0xFFFFFFFF, (i.0 << 16) + i.1 return #global size = 100,90,80,70,60,50,40,30,20,0 pos 10, 10 : mes "左" pos 10, 40 : combox lvol, 100, "100%\n90%\n80%\n70%\n60%\n50%\n40%\n30%\n20%\n0%\n" pos 80, 10 : mes "右" pos 80, 40 : combox rvol, 100, "100%\n90%\n80%\n70%\n60%\n50%\n40%\n30%\n20%\n0%\n" pos 10, 70 : button gosub "変更", *change stop *change setvolume size.rvol, size.lvol // 音量を指定サイズに変更する return ;ここまで */ #define blue 0,0,255 #define red 255,0,0 #define BUTTON_MAX 10 ;ボタンの数 #define BUTTON_W 30 ;ボタンの幅 #define BUTTON_H 30 ;ボタンの高さ dim button_x,BUTTON_MAX button_x =90,130,170,210,250,290,330,370,410,450 ;ボタンのX座標 button_ay=170 ;ボタンの上Y座標 *main screen 0,640,480 : color : boxf buffer 2 color red : boxf 3,3,31,31 color blue boxf 1,1,34,2 : boxf 1,32,34,34 ;枠の上下 boxf 1,2,2,32 : boxf 32,2,34,32 ;枠の左右 buffer 3 color : boxf 0,0,394,34 repeat BUTTON_MAX color red : boxf 2+40*cnt,2,32+40*cnt,32 ;枠をけす板 loop gsel 0 pos 88,168 : gcopy 3,0,0,394,34;1列目をならべる pos 448,168 : gcopy 2,0,0, 34,34;黒枠を右端に表示,1列目 *kurikaesi number_a=-1 ;---キー情報--- stick click_stat ;---ボタンの上にマウスがあるか?--- repeat BUTTON_MAX if (button_x.cnt<=mousex)&(button_x.cnt+BUTTON_W>mousex) { if (button_ay<=mousey)&(button_ay+BUTTON_H>mousey) { number_a=cnt}} loop ;---クリックされたら--- if click_stat&256 : if number_a!-1 : gosub *clickbox_a await 17 goto *kurikaesi ;---ボタンをおした時--- *clickbox_a pos 88,168 : gcopy 3,0,0,394,34 ;枠を全部けす pos 88+40*number_a,168 : gcopy 2,0,0,34,34 switch number_a case 0 : : swbreak ;lvol:100:100%→この書き方では動かせないです case 1 : : swbreak case 2 : : swbreak case 3 : : swbreak case 4 : : swbreak case 5 : : swbreak case 6 : : swbreak case 7 : : swbreak case 8 : : swbreak case 9 : : swbreak swend return



この記事に返信する


DoubleQuote

リンク

2008/7/4(Fri) 18:52:53|NO.17142


;waveのサンプルここから #uselib "winmm.dll" #func global waveOutSetVolume "waveOutSetVolume" int, int #module #deffunc setvolume int right, int left, local i i = limit(right, 0, 100) * 0xFFFF / 100, limit(left, 0, 100) * 0xFFFF / 100 waveOutSetVolume 0xFFFFFFFF, (i.0 << 16) + i.1 return #global ;ここまで #define blue 0,0,255 #define red 255,0,0 #define BUTTON_MAX 10 ;ボタンの数 #define BUTTON_W 30 ;ボタンの幅 #define BUTTON_H 30 ;ボタンの高さ dim button_x,BUTTON_MAX button_x =90,130,170,210,250,290,330,370,410,450 ;ボタンのX座標 button_ay=170 ;ボタンの上Y座標 *main screen 0,640,480 : color : boxf buffer 2 color red : boxf 3,3,31,31 color blue boxf 1,1,34,2 : boxf 1,32,34,34 ;枠の上下 boxf 1,2,2,32 : boxf 32,2,34,32 ;枠の左右 buffer 3 color : boxf 0,0,394,34 repeat BUTTON_MAX color red : boxf 2+40*cnt,2,32+40*cnt,32 ;枠をけす板 loop gsel 0 pos 88,168 : gcopy 3,0,0,394,34;1列目をならべる pos 448,168 : gcopy 2,0,0, 34,34;黒枠を右端に表示,1列目 *kurikaesi number_a=-1 ;---キー情報--- stick click_stat ;---ボタンの上にマウスがあるか?--- repeat BUTTON_MAX if (button_x.cnt<=mousex)&(button_x.cnt+BUTTON_W>mousex) { if (button_ay<=mousey)&(button_ay+BUTTON_H>mousey) { number_a=cnt}} loop ;---クリックされたら--- if click_stat&256 : if number_a!-1 : gosub *clickbox_a await 17 goto *kurikaesi ;---ボタンをおした時--- *clickbox_a pos 88,168 : gcopy 3,0,0,394,34 ;枠を全部けす pos 88+40*number_a,168 : gcopy 2,0,0,34,34 title ""+number_a*100/9+"%の音量" setvolume number_a*100/9,number_a*100/9 return


あともう一歩でどうしてここまで出来たのかよくわからないのですが・・・
とりあえず9段階ならこんな感じでは?



make

リンク

2008/7/5(Sat) 00:23:51|NO.17150

ご返答ありがとうございます、解決しました
あと追加の質問ですみません、midiのvolumeも変更したかったので
waveと書かれている所を全てmidiに書きかえてみたのですが動作しませんでした
数値の所かと思いmidioutsetvolumeで検索して調べたのですが、よくわかりませんでした
どうすれば変更できるようになるのでしょうか?
(midiは普通に再生できます、midi出力デバイスのボリュームコントロールは別なんでしょうか?)



DoubleQuote

リンク

2008/7/5(Sat) 00:35:20|NO.17151

midiはちょっとやった事無いですけど

http://fs-cgi-basic01.freespace.jp/~hsp/ver3/hsp3.cgi?print+200510/05100007.txt

こちらが参考になるかと思います。



make

リンク

2008/7/5(Sat) 23:19:05|NO.17164

ご返答頂きありがとうございます
紹介されているリンク先は検索した時にでてきてみています、すみません
紹介先にあるhspmix.dllを使えばいいのですが、できればwinmm.dllで解決を図りたいです

色々と調べている内にちょくとさんのページにあるMIDI出力APIのモジュールをみつけました
http://yokohama.cool.ne.jp/chokuto/download/index.html
関連がありそうな部分をぬきだして下記に書いてみました

#define MIDICAPS_VOLUME 0x0001 ; MIDIOUTCAPS 構造体 dwSupport メンバのフラグ #uselib "winmm.dll" #func global midiOutShortMsg "midiOutShortMsg" int,int #module #deffunc _midi_prep hMidiOut = 0 ; MIDI 出力デバイスのハンドルを入れるための変数 dim outcaps, 16 ; MIDIOUTCAPS 構造体 return #deffunc SendMidiMsg int ステータスバイト, int 第1バイト, int 第2バイト midiOutShortMsg hMidiOut, (ステータスバイト&$FF)|((第1バイト&$FF)<<8)|((第2バイト&$FF)<<16) return #deffunc SendMidiMsg2 int メッセージデータ送る midiOutShortMsg hMidiOut, メッセージデータ送る return #deffunc midiVolume int チャンネルナンバー(0〜15), int ボリューム(0〜127) SendMidiMsg $B0|チャンネルナンバー(0〜15), $07, ボリューム(0〜127) return #global _midi_prep ; MIDI デバイスを使う準備
waveと全く異なるため数値をどうあてはめればいいのか全然わからないです
ご教授のほど、どうかよろしくお願い致します



ONION software Copyright 1997-2023(c) All rights reserved.