|
|
|
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
| |
|
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段階ならこんな感じでは?
| |
|
2008/7/5(Sat) 00:23:51|NO.17150
ご返答ありがとうございます、解決しました
あと追加の質問ですみません、midiのvolumeも変更したかったので
waveと書かれている所を全てmidiに書きかえてみたのですが動作しませんでした
数値の所かと思いmidioutsetvolumeで検索して調べたのですが、よくわかりませんでした
どうすれば変更できるようになるのでしょうか?
(midiは普通に再生できます、midi出力デバイスのボリュームコントロールは別なんでしょうか?)
|
|
2008/7/5(Sat) 00:35:20|NO.17151
|
|
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と全く異なるため数値をどうあてはめればいいのか全然わからないです
ご教授のほど、どうかよろしくお願い致します
|
|