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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0921
26℃HSPTVブラウザのHOMEボタン9解決


26℃

リンク

2010/9/21(Tue) 00:37:23|NO.35075

HSPプログラムコンテストのhsptv部門でmidiの音の鳴るソフトを作ったのですが
HOMEボタンを押して戻り、他の音のなるソフトを起動させると音がなりません。

本来ならonexitで閉じるときmidiOutCloseで解放するようなことをするのですが
HOMEボタンは閉じるとは違うらしく、解放されません。

HOMEボタンを押されたなど、取得できるようにできないでしょうか?



この記事に返信する


おにたま(管理人)

リンク

2010/9/21(Tue) 00:58:44|NO.35078

報告ありがとうございます。
onexitを実行するようにしたつもりですが、少し調べてみたいと思います。
HOMEボタンを押されたことを取得する方法は、今のところありません。



26℃

リンク

2010/9/21(Tue) 01:30:38|NO.35080

No.72 R_Tryの作品ではHOMEでもどるとmidiは解放されてるようなので
こちらのバグかもしれません。

// winmm.dll
#uselib "winmm.dll"
#func midiOutOpen "midiOutOpen" var, int, int, int, int
#func midiOutShortMsg "midiOutShortMsg" int, int
#func midiOutClose "midiOutClose" var
// セットアップ
midiOutOpen midi, 0, 0, 0, 0
onexit *exit

*exit
// 使用終了
midiOutClose midi
end

midiの部分はだいたい、こんな感じです。



おちゃっこ

リンク

2010/9/21(Tue) 10:26:05|NO.35081

midiをcloseする前にstopしなきゃいけないとかじゃないですかね?
midiOutCloseの説明を読んだら
エラーコードの中にまだプレイ中だから閉じられないっていう意味のエラーがありました。

見当違いだったらごめんなさい。



あり

リンク

2010/9/21(Tue) 17:08:38|NO.35085

R_TryでもMIDI開放に失敗していた時に同じ現象が
起きていましたが修正後には見た記憶がありません。
(記憶違いか遭遇していないだけかも・・・)

多分おちゃっこさんの指摘が正解でないかと思いますが
他の可能性としてあまり短いスパンで連続して同じ音を
発声させると不具合が出たりして?
(同時発音数を上回ってしまうとか)



26℃

リンク

2010/9/21(Tue) 18:07:54|NO.35086

stopは関係あるのかなあ、音が鳴り続けるわけでもないのでわかりません。

midiOutCloseの後に、戻り値をしらべるため、ダイアログでstatの値を表示させたのですが。
5 (MMSYSERR_INVALHANDLE)が返されてましたorz

他の作品では0 (MMSYSERR_NOERROR) が返されるようです(その作品もhspブラウザでHOMEボタンで戻ると音がならない)

#include "hsptv.as"を読み込み
HSPブラウザでテストすると、onexitで終了時にダイアログを表示させるようにしているのに
×ボタンを押してもダイアログがでないことも気になります。

>他の可能性としてあまり短いスパンで連続して同じ音を
>発声させると不具合が出たりして?
自分の作品では音を連続してださせてますが、No.130オニオン娘のメテオでは
単発で鳴らしてるので、違うんじゃないかと思います。



おちゃっこ

リンク

2010/9/21(Tue) 18:52:58|NO.35088

あ、midiOutCloseはvarじゃなくてintなのでは?
違うかな???



26℃

リンク

2010/9/21(Tue) 19:20:52|NO.35089

// winmm.dll
#uselib "winmm.dll"
#func midiOutOpen "midiOutOpen" int, int, int, int, int
#func midiOutShortMsg "midiOutShortMsg" int, int
#func midiOutClose "midiOutClose" int
// セットアップ
midiOutOpen varptr(midi), 0, 0, 0, 0
onexit *exit

修正したら、こうですね。



K-s

リンク

2010/9/22(Wed) 00:36:04|NO.35096

>#include "hsptv.as"を読み込み
>HSPブラウザでテストすると、onexitで終了時にダイアログを表示させるようにしているのに
>×ボタンを押してもダイアログがでないことも気になります。
少なくともテスト上では×ボタンを押してもonexit命令は効かないようです。
(テストではHOMEボタンはボタン自体が反応しないので確認できない…)
終了処理はモジュールのクリーンアップ機能で処理する方法もあります。

#include "hsptv.as" #module #deffunc save str c a = c + "で保存されたファイルです" bsave dir_cur + "/" + a + ".txt", a, strlen(a) return #deffunc exit onexit save "モジュールのクリーンアップ機能" mes "cleanup de save!" : dialog "cleanup de save!" ; この行は機能しないはず… return #global *start mes dir_cur onexit *bye stop *bye save "onexit命令" mes "onexit de save!" : dialog "onexit de save!" end
通常だとonexit命令とクリーンアップ機能の両方が効きますが、
HSPTV上だとクリーンアップの方しか効きません。
しかもクリーンアップでは機能しないはずのmesやdialogが効いてしまいます。



あり

リンク

2010/9/22(Wed) 15:16:15|NO.35104

もう解決していそうですが・・・

過去のMIDI音源を使ったHSPTV作品でも
同じ不具合は発生していないようなので
NO.35089の修正で多分解決できるのではないでしょうか?

ちなみにR_Tryの該当部分はこんな感じです。

#uselib "winmm" #func midiOutOpen "midiOutOpen" var, int, nullptr, nullptr, nullptr #func midiOutShortMsg "midiOutShortMsg" int, int #func midiOutClose "midiOutClose" int midiOutOpen midi, 0 onexit *exit stop ; ここにメインルーチン *exit midiOutClose midi end
これでMMSYSERR_NOERRORが返っています。



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