1944919
Tonyu BBS
[再読み込み] [ホームページ] [使いかた] [ワード検索] [管理用]

おなまえ

Eメール
題  名  
コメント(http(s)://などのURLが含まれていると投稿できないことがあります)
添付プログラム
※プログラムに関する質問は、そのプログラムを添付して送ると対応が早くできます
添付方法...
削除キー (自分の記事を削除時に使用。英数字で8文字以内)
文字色
firefoxでの表示について 投稿者 : 少佐(softbank126021029082.bbtec.net)
- 2019/05/03(Fri) 20:11 No.13884
 


Download:13884.zip 13884.zip 3回続けての質問で恐縮です。

Tonyuそのものへの質問ではないのですが
Tonyu2で作成したゲームを出力し、
「HTML出力」したファイルについて(添付)
Firefoxでうまく表示する方法はございますでしょうか。

ChromeとSafariでは問題なく表示されるのですが
Firefoxでは(動きますが)非常に小さく表示され、
iframeで埋め込んだ場合においても
iframe内で極小表示されるため
これを回避する方法がわかりません。


firefoxでの表示について 投稿者 : 少佐(softbank126021029082.bbtec.net)
- 2019/05/05(Sun) 10:48 No.13885
 
本件、通常の「ランタイム作成」で出力した場合は
firefox、モバイルSafari、Android、Chromeで稼働したため、
いったん解決いたしました。
お騒がせいたしました。

前回ランタイム作成でアップロードしたものが
モバイルで稼働しないと誤認しており、
HTML出力を試していたのですが、これは
ランタイム出力した際の音源ファイルの容量が重く、
ロードに長い時間がかかっていたため
読み込めていなかったことが問題でした。
→容量を4MB程度まで抑えることで解決しました。


Re: firefoxでの表示について 投稿者 : hoge1e3(160.194.187.89)
- 2019/05/07(Tue) 18:20 No.13886
 
ご報告ありがとうございます。
こちらのバグは調査して修正したいと思います。


Re: firefoxでの表示について 投稿者 : hoge1e3(160.194.187.89)
- 2019/06/11(Tue) 10:37 No.13888
 
ご報告遅くなりましたが,この問題は最新バージョンで解決しております.

tonyu2におけるdrawdxspriteの表現方法について 投稿者 : 少佐(om126034117221.18.openmobile.ne.jp)
- 2019/03/04(Mon) 19:08 No.13876
 


tonyu1でいくつかゲームを作ったことがあり、最近になってtonyu2を使い始めた者です。

既出であれば申し訳ないのですが表題の件、tonyu2でオブジェクトにdxspriteを描かせることはできますでしょうか。

ダメージを受けた際のエフェクトや煙などをいちいち新規のオブジェクトをつくってpで表現すると処理が重くなるため、なるべくdrawdxspriteで描画する方法を採っていたのですが、使い始めた今の理解ではdrawspriteはPanelのみ使用でき、drawdxspriteはPanelにも関数がない、と認識しています。

この点について、上手い方法があれば教えていただきたく。認識違いがあればご指摘ください。

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


Re: tonyu2におけるdrawdxspriteの表現方法について 投稿者 : hoge1e3(160.194.187.89)
- 2019/03/06(Wed) 15:11 No.13878
 
ドキュメントが追い付いていて申し訳ありません.

Tonyu2のオブジェクトからもdrawDxSpriteは使用可能です.次に例を示しますのでご参考にしてください.


//スプライトの配列
sprs=[
{x:100,y:200,p:$pat_neko,f:false,zOrder:0,angle:0,alpha:200,scaleX:2,scaleY:1},
{x:50,y:250,p:$pat_neko,f:true,zOrder:0,angle:30,alpha:200,scaleX:1,scaleY:2}
];
while(true) {
    //スプライトごとに繰り返し
    for (s of sprs) {
        drawDxSprite(s.x,s.y,s.p,s.f,s.zOrder,s.angle,s.alpha,s.scaleX,s.scaleY);
        s.x++;
    }
    update();
}


Re: tonyu2におけるdrawdxspriteの表現方法について 投稿者 : hoge1e3(160.194.187.89)
- 2019/03/06(Wed) 15:12 No.13879
 
また,PanelのdrawSpriteは第4引数にオブジェクトを指定するとdrawDxSpriteと同等のパラメタが渡せます:


//スプライトの配列
sprs=[
{x:100,y:200,p:$pat_neko,f:false,zOrder:0,angle:0,alpha:200,scaleX:2,scaleY:1},
{x:50,y:250,p:$pat_neko,f:true,zOrder:0,angle:30,alpha:200,scaleX:1,scaleY:2}
];
while(true) {
    //スプライトごとに繰り返し
    for (s of sprs) {
        // 第4引数はオプション(オブジェクトをそのまま渡せる)
        $panel.drawSprite(s.x,s.y,s.p,s);
        s.x+=2;
        s.angle++;
    }
    update();
}


Re: tonyu2におけるdrawdxspriteの表現方法について 投稿者 : 少佐(om126034117221.18.openmobile.ne.jp)
- 2019/03/08(Fri) 12:52 No.13880
 
tonyu1とほぼ同じ扱いで使用できたんですね。
ご教示ありがとうございました。

サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/09(Sun) 22:10 No.13862
 


 いつもお世話になっております。瀬加井です。

 質問がございます。もし、ご存知の方がいらっしゃいましたら、お知恵をお借りできませんでしょうか。

 Tonyu System 1 において、下記の《環境》で《プログラム》を実行した場合で、サウンドを鳴らした場合は、その時点以降、FPSが大幅に低下する現象《ケース2》が見られます。

 CPUのスリープとサウンドの間に何らかの深い関連性を持たせてしまう原因が、Windows10 又は Tonyu System 1 のプログラムにあるのでしょうか。

 CPU・バッテリーのパフォーマンスは最高に、ディスプレイ・サウンドの設定はできるだけ簡略にし、Windows8互換モードでの実行です。
 なお、これらの設定をあらゆる項目に変更しても、この現象に変わりはありませんでした。

 どうぞよろしくお願いいたします。

----------------------------------------

《環境》
OS :Windows10 Home 64bit
CPU:i7-8770U 1.80Ghz(Max:4.00Ghz)

----------------------------------------

《プログラム》
extends SecretChar;

$CpuSleepTime = 1 ; // = 0;
$FrameRate    = 90;

$Options.set("sleep_time",$CpuSleepTime);
$System.setFrameRate($FrameRate,3);

$mplayer.play($se_Alarm,0,32);

while (1) {
  update();
}

----------------------------------------

《ケース1》
 CPUをスリープさせない場合は、FPSは90まで上がり、サウンドを鳴らしても、FPSは全く低下しない。

----------------------------------------

《ケース2》
 しかし、CPUをスリープさせた場合で、サウンドを鳴らしたときは、その瞬間から、CPUのスリープをやめない限りFPSが50まで低下したままとなる。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : マッキー(p1124-ipngn5701hodogaya.kanagawa.ocn.ne.jp)
- 2018/09/10(Mon) 00:59 No.13863
 
MacBookPro2017に入れたWindows10で動かしてみました。

瀬加井さんの条件と少し違いますが、以下の条件で本現象が発生しました。

[条件1]
・スリープあり
・Tonyu1以外のアプリを起動していない状態
[結果1]
FPSが65〜70になる
・サウンドの鳴らす鳴らさないに関係なく発生しました。


瀬加井さんの「サウンドを鳴らすとFPSが下がる」原因は分かりませんが、
こちらで起きた「サウンドに関係なくFPSが下がる」原因は分かりました。(←こちらの原因を以下に記載します)

多分これはWindowsのOS側の問題で、タイマー分解能が関係していると思います。
Tonyu1のスリープは、おそらくWin32APIのSleep関数というのを使っています。
Sleep関数は精度が悪く、1ミリ秒を指定してもそれ以上スリープしてしまうことがあります。
さらに、タイマー分解能の時間より短い時間を指定できません。
例えば、タイマー分解能が10ミリ秒の場合、Sleep関数で1ミリ秒を指定しても、10ミリ秒以上待たされます。

タイマー分解能はOS側の設定値で、タイマー精度を高めたいアプリ等が1ミリ秒とかに設定を変えたりしますが、
設定を変えると、全てのアプリに影響します。
例えば、以下ようにChromeでゲームを起動したり、WindowsMediaPlayerでMidiを鳴らしたりすると、タイマー分解能の設定が変えられて、
Tonyu1でスリープありでもFPSが90になりました。

[条件2]
・条件1に以下の条件を追加
・ChromeでTonyu公式サイトのトップページを表示しながらTonyu1を実行
・Chromeのウィンドウを最小化しない
・ChromeでTonyu2が実行されている状態
[結果2]
FPSは90

[条件3]
・条件1に以下の条件を追加
・WindowsMediaPlayerでMidiを演奏しながらTonyu1を実行
[結果3]
FPSは90

Windows7では多分タイマー分解能がデフォルト1ミリ秒だったので問題ありませんでしたが、
XP以前では、スリープ入れるとFPSが下がったが、MediaPlayerを起動するとFPSが上がったりした記憶があります。
Windows10ではタイマー分解能が20ミリ秒とかになったのかもしれません。(1000÷20=50FPSとなる計算)

条件2や条件3を試してみて、もし同じ結果になれば多分タイマー分解能が原因だと思います。
ただ、サウンド鳴らさないと発生しない原因は、今のところ分かりません。
今のところは、Tonyu1ではスリープ無しにするしかなさそうです。


実は私の方で、Tonyu作者様から個人的にTonyu1のソースを頂いて、Tonyu1を作成できる環境があるので、
可能ならTonyu1からタイマー分解能を1ミリ秒に変更する機能を追加するかもしれません。
それで、スリープありでもFPS90を保てるようになるかもしれません。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/10(Mon) 19:24 No.13864
 
> マッキー 様

 早速のご教示ありがとうございます!

 Windows APIのsleep関数は他のアプリケーションを作るときによく使ってるんですが、タイマーの分解能がその精度に影響していることは全く知りませんでした。

 さすがはマッキーさん、頼りになります!!

 確かに、以前、WindowsXP Pentium4 2.0Ghzの環境下で、Chromeの起動中にFPSが向上した経験があります。これが原因だったんですね。

 また、今回、Windows10 i7-8770U 1.8Ghz(Max:4.0GHz)の環境下で、Windows Media Playerを起動し、midファイルを再生しながら実行した結果([条件3]、[結果3])、おっしゃるとおり、スリープをさせてもFPSの低下がみられませんでした。おそらく、Chrome([条件2]、[結果2])でも同様の結果になるものと推測されます。なお、mp3ファイルを再生しながら実行した場合は、やはりFPSの低下が発生しました。

 このようなサウンドの再生によるFPSの低下は、wavファイル(alarm.wav、22050Hz、8bit、モノラル)だけでなく、M-Twoで作成したmzoファイルの場合も同様です。なお、他の周波数やbit数のwavファイルについては、まだ試せていません。

 サウンドを再生すると、まるで同期をとっているかのように、きれいに50FPS(ときどき49FPS)になるんです。FPSを45で固定すると、素直に45FPS(ときどき44FPS)になります。こうしてみると、サウンドカード(Realtec)が影響しているようにも感じられます。ひょっとすると、サウンドカードによるタイマーの分解能指定が低いのかもしれませんね。WindowsXPのマシンでは、このような現象は起きなかったのですが。サウンドカードやそのドライバーが異なるので、仕方のないことかもしれませんね。

 [条件3]において、スリープをしない場合、CPU使用率は30%台まで上昇、クロック周波数は3.5GHzまで上昇します。一方、スリープをする場合は、CPU使用率は10%台まで上昇で、クロック周波数は3.5Ghzまで上昇しました。わずかながら、スリープをする方がCPUへの負荷が低いように感じられました。

 このたびご教示いただいたことをきっかけに、タイマーの分解能を変えると、消費電力が増えたり、タイマーが進むことを知りました。しかし、これらのデメリットを差し引いても、タイマーの分解能を指定できることのメリットの方が大きいと感じます。

 実際には、90FPSを欲しているわけではなく、安定した60FPSを維持して画面のちらつきをできるだけ抑止することと、CPUの使用率を下げてできるだけ省エネすることを両立できたらと考えています。WindowsXPの時には、何も要さずこれを実現できていただけに、この両立ができないとなると残念でなりません。

 この解決には、ソースをお持ちであるマッキーさんのお知恵とお力とお借りしなければ、また、Hoge-Ship様のご了解を得なければ、到底不可能です。

 Tonyu Systemは、その安定性と簡易性から、極めて優れた統合開発環境だと感じています。

 公私ともにご多忙のところ誠に恐れ入りますが、もし、可能でありましたら、timeBeginPeriod関係を実装した、Tonyu System Ver.1.28を開発・公開していただけますと幸いです。

 ご検討のほど、どうぞよろしくお願いいたします。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/10(Mon) 23:13 No.13865
 
> マッキー 様

 ずっと調べているんですが、timeBeginPeriod()をサポートしようとすると、timeEndPeriod()はもちろん、timeGetDevCaps()までもサポートしなくてはいけないようですね。

 timeGetDevCaps()を使用して、FPSの低下が発生するWindows10のマシンを調べてみると、タイマー分解能の最小値は1、最大値は1000000でした。

 この範囲外の値を指定した場合は、エラーを返さないといけないかもしれませんね。最小値が1まで落ちないデバイスを持つマシンがないとも言えませんもんね。

 うーん、これは、ちょっと大変でしょうか……。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/11(Tue) 21:41 No.13866
 
> マッキー 様

 追加情報です。

[条件1]
・Tonyu Systemで44100Hz、16bit、ステレオのwavファイルを再生。
[結果1]
・22050Hz、8bit、モノラルのwavファイルを再生したときと同様、FPSが50に低下。

[条件2-1]
・Tonyu Systemではサウンドを再生せず、同時に起動しているWindows Media Playerで44100Hz、16bit、ステレオのwavファイルを再生。
[結果2-1]
・Tonyu Systemでサウンドを再生したときと同様、FPSが50に低下。

[条件2-2]
・Tonyu Systemではサウンドを再生せず、同時に起動しているWindows Media Playerの再生を停止。
[結果2-2]
・FPSが60で安定。

[条件2-3]
・Tonyu Systemではサウンドを再生せず、同時に起動しているWindows Media Playerを終了。
[結果2-3]
・FPSがわずかに上昇、64程度で安定。

 これらの結果から、サウンドボード(Realtek)のRealtek High Definition Audio関係ドライバにおけるタイマー分解能の設定が、Tonyu SystemによるCPUのスリープ時間に影響しているように感じられます。

 また、これを裏付けるかのような記事を発見しました。

ttps://jp.finalfantasyxiv.com/lodestone/character/6953908/blog/2953734

 今のところ、このように推測しておりますが、いかがでしょうか。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : マッキー(p1124-ipngn5701hodogaya.kanagawa.ocn.ne.jp)
- 2018/09/13(Thu) 01:47 No.13867
 
タイマー分解能関連は、YellowMusicPlayerやTonyuNetを作ってたときにC/C++で使ったことがあります。

おっしゃる通り、最低でもtimeBeginPeriod()、timeEndPeriod()が必要で、
最小値調べてより厳密な設定をするにはtimeGetDevCaps()も使います。


WindowsMediaPlayerの件ですが、
こちらのWindows10では、MediaPlayerでMidiを鳴らすとFPSが90になりましたが、
MediaPlayerでwavを鳴らしたときはFPSは65〜70になっていました。

この結果はおそらくですが、(MediaPlayer側の話)
wav再生は音声データを音声バッファに投げるだけで再生でき、処理タイミングは多少遅れても問題無いため、タイマー精度を上げる必要は無いので、
wav再生時、MediaPlayerはタイマー分解能をいじっていないと思われます。
Midi再生はリアルタイムでMidiのイベントを投げるので、少しの遅れで演奏のタイミングがずれてしまうので、処理タイミングは高い精度が必要で、タイマー精度を上げる必要があるので、
Midi再生時、MediaPlayerはタイマー分解能を上げていると思われます。(多分合わせて、マルチメディアタイマを使っているかもしれない。YellowMusicPlayerでも使っています)

MediaPlayerで"Midiを再生中"にしないと多分FPSが90にならないと思います。


こちらのWindows10はMacBookProにBootCampで入れた物で、サウンドドライバがRealtekではないので、確認はできません。
Realtekドライバとタイマー分解能は関係ないような気がします。(サウンドドライバに詳しくないので憶測ですが)
スリープ時間のタイマー分解能が、Realtekドライバを使っているときだけ変わるとかは考えにくい気がします。
URLの「数秒に一度、一秒間ほどフレームが飛ぶ」というのはまた別な問題な気がします。
私のWindows7のPCはRealtek入っていますが、自分が使う分には特に困ったことは無かったです。


Tonyu1ですが、私自身Delphiに詳しくないので、Tonyu1からWin32APIを直接呼ぶ方法とか分かっていません。
そこで、YellowMusicPlayerをTonyu1に導入して、YellowMusicPlayer側からtimeBeginPeriod()等を呼ぶ形にすることを思いつきました。
YellowMusicPlayer起動時(Tonyu1起動時)の間、タイマー分解能を最小値に設定するようにしようと思っています。(タイマー分解能は全アプリに影響するのでYellowMusicPlayerで設定してもTonyu1にも適用される)

YellowMusicPlayerのソースコードに、timeBeginPeriod()を使ったメモを残していたので、この方法ならすぐ実装できそうです。(timeGetDevCapsも使う実装に変えますが)
ttps://github.com/makkii-bcr/YellowMusicPlayer/blob/master/src/Main.c  (ソースかなり汚いです…)

Tonyu1次バージョンは、YellowMusicPlayerを入れて、YellowMusicPlayerでtimeBeginPeriod()を呼び出す形にしようと思います。


(Tonyu1が使っているDirectXが新しかったら、垂直同期を使えばスリープしてもFPS保てるかもしれませんが、DirectX6なので多分垂直同期は使えなそうです)


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/13(Thu) 16:32 No.13868
 
> To:マッキー 様
> CC:Hoge-Ship 様

 いつもありがとうございます。

 マッキーさんは、Cも使えるんですね! すごい! さすが! どうりでお詳しいはずです!

 こんなソースを作れるなんて、本当に尊敬します!

 ところで、前から気になっていたのですが、YellowMusicPlayerのネーミングの由来は、「マッキー」(真っ黄ー)さんから来てます?

 さて、この間、いろいろなことがわかりましたので、ご報告いたします。

 こちらで、WindowsAPIを使用したプログラムを作成し、「Sleep 1」が実際に何ミリ秒のスリープとなっているかを、様々な条件下で調査しました。その結果は、次のとおりです。

[環境1]
・Windows10 64bit i7-8770U 1.80Ghz(Max:4.00GHz)

  [条件3]
  ・通常時:Sleep 1 = 15ミリ秒 ☆

  [条件4]
  ・Player.exe 稼働時:Sleep 1 = 15ミリ秒 ☆

  [条件5]
  ・Realtek wav再生時:Sleep 1 = 15ミリ秒 ☆

  [条件6]
  ・Windows Media Player MIDI演奏時:Sleep 1 = 2ミリ秒 ★( ̄v ̄)さすが、マッキーさんの予測どおり

[環境2]
・WindowsXP 32bit Celeron 2.0GHz

  [条件1]
  ・通常時:Sleep 1 = 15ミリ秒 ☆

  [条件2]
  ・Player.exe 稼働時:Sleep 1 = 2ミリ秒 ★Σ(◎o◎)何ッ!? マジッか!!

※上記中、Player.exeとあるのは、Tonyu Systemのものです。また、実際には、MidiPlayer.exeの影響かもしれません。

 以上のことから、マッキーさんのおっしゃるとおり、Reaktekは、タイマー分解能に影響していないことがわかりました。

 また、Windows10の場合(又はXPでない場合)は、Player.exe(又はMidiPlayer.exe)を稼働させるだけでは、タイマー分解能が2ミリ秒まで低下しないことがわかりました。

 WindowsXPでは、自動的に2ミリ秒まで低下していたんですね。

 WindowsXPでは、常時Sleep 1としても、FPSの低下がほとんどなかったので、タイマー分解能を意識したことすらなく、気づきもしませんでした。

 WindowsVista、7、8、8.1ではテストできておりませんので、すべてが解決したわけではありませんが、大方の原因は、ここにあるようです。

 また、現段階では、OSのバージョンによるものではなく、32ビット・64ビットの違いによる影響とも考えられます。ただ、エミュレーションに必要なsysWOW64を通過するオーバーヘッド分が遅延を招いていると仮定しても、sysWOW64の影響は2%程度の低下しかないという報告もあり、タイマー分解能に影響するものとは思えません。

 結論として、Windows10の環境下において、XPと同様、Player.exe(又はMidiPlayer.exe)を実行するだけで、タイマー分解能を2ミリ秒まで低下させることができれば、解決する問題だったようです。

 このことから、Hoge-Ship様によるPlayer.exe(又はMidiPlayer.exe)のバージョンアップが不可能である場合は、YellowMusicPlayerのお力をお借りするよりほかに方法がないことも、また、お力をお借りすることが最善の方法でもあることがわかりました。

 ご両名様におかれましては、いかがでしょうか。

 目標は、2ミリ秒です。

 いろいろお騒がせしておりますが、以上のとおり報告いたします。どうぞよろしくお願いいたします。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/13(Thu) 21:00 No.13869
 
 追加情報です。

 私のプロジェクトでは、MIDIの再生を必要としていなかったため、MidiPlayer.exe又はMidiPlayer2.exeが起動しない設定になっていました。これは、XPのときも10のときも、ずっと同じです。

 そこで、MidiPlayer.exe又はMidiPlayer2.exeを起動させる設定に変更し、MIDIを再生させると、再生している間のみ、2ミリ秒まで低下することがわかりました。

 よって、これより、1トラック、GM/GSリセット+全休符×nのダミー(音的に空っぽ)のMIDIをループ再生させることで、この問題を解決できないか、試してみます。

 これが成功すれば、余計なお手間をかけずにすみます。結果が分かり次第、またご報告いたします。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/13(Thu) 21:27 No.13870
 
 追加情報です。

 MZOの再生とMIDIの再生を、両方同時に行うことができませんでした……。

 MZOの裏でMIDIを鳴らす。

 これだけでもクリアできるとよいのですが……。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/14(Fri) 21:27 No.13871
 
 追加情報です。

[環境1]
・Windows10 64bit i7-8770U 1.80Ghz(Max:4.00GHz)

  [条件4]
  ・Player.exe 稼働時:Sleep 1 = 【20リ秒】 ☆

 正しくは、なんと20ミリ秒でした。(FPS低下の根源)

 また、とあるWindows7のマシンでは、10ミリ秒と、中途半端に低下する現象がみられました。

 そこで、現在、次のようなexeを作成しようと考えています。

1 タイマー分解能を2又は3にする。
2 Player.exeを実行する。
3 Player.exeのハンドルを取得する。
4 Player.exeが終了するのを監視する。
5 Player.exeが終了したら、タイマー分解能を元に戻す。
6 終了する。

 いろいろ調査した結果、このような方法でタイマー分解能を低下させた方が、スリープさせないよりCPUの負担が軽く、はるかに省エネのようです。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/15(Sat) 09:04 No.13872
 
 追加情報です。

 exeができました。

 あとは、どんな環境でも同じように動作するか、確認するだけです。

 マッキーさんがご教示くださらなかったら、タイマー分解能が原因であることに気づくことはできなかったと思います。

 本当にありがとうございます。大変お騒がせしました。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : マッキー(p928124-ipngn9601hodogaya.kanagawa.ocn.ne.jp)
- 2018/09/15(Sat) 09:57 No.13873
 
Download:13873.txt 13873.txt 調査ご苦労様です。

先にYellowMusicPlayer ver2.36をアップしました。
ttps://www.tonyu.jp/project/viewProject.cgi?mainkey=667&

最新版YellowMusicPlayerをTonyu1に導入すると、FPS問題が解決します。
導入方法はダウンロードファイルのReadMe.htmlに記載しています。

YellowMusicPlayerが起動中(=Tonyu1が起動中)は、タイマーが高精度に設定されます。
(Midiを用意してMidi再生する必要はありません)
もちろん、Tonyu1を終了すると同時にYellowMusicPlayerも終了し、タイマー精度は元に戻ります。(Tonyu1が異常終了した場合もちゃんと終了します)


Midiの再生が必要ないとのことで、YellowMusicPlayerの負担を軽減する設定ファイルを用意しました。
この記事の添付ファイルの「13873.txt」を「YMPConfig.txt」に名前を変えて、Usr/files/に配置すると、
DirectMusicがOFF、ファイル読み込み頻度が1515ミリ秒という設定がYellowMusicPlayerに設定されます。

YellowMusicPlayerのデフォルト設定だと、DirectMusicがONなので、起動直後はDirectMusicの準備で少し重いのと、
デフォルト15ミリ秒毎にMidiやOggが再生されるかどうかファイルを監視するので、
Midiを再生しない場合は無駄が多いです。添付の設定ファイルを使うのをお勧めします。
(設定ファイルについては、ReadMe.htmlの「Tips・その他」→「YellowMusicPlayerの設定を変える」に載ってます)


ちなみに、YellowMusicPlayerの由来は、実はver2.05までのReadMe.htmlに記載していました。
でもむしろ、「真っ黄ー」から来ていたことにしたいですね笑


これで解決するはずです。
以下は余談みたいな話です。



そういえば、再度Windows10でスリープ1ms&FPS90で動かしてみました(YellowMusicPlayer無しの状態)、
音なしだとFPS65くらいになり、音を出した直後FPS50くらいになりました。
確かに音が関係してそうです。

10年くらい前、Windows98SEを使っていましたが、その時も実行開始から初めて音を鳴らすとそれ以降FPSが下がるという現象が発生していました。
今のPCはスペック高いのでFPS下がらないだろうと思っていましたが、スリープを入れることでTonyuがマイペースで動いてしまい、
Windows98SEの時と同じく、処理落ちしていることが分かりました。

この、音を出すと処理落ちする現象は軽くする方法があって、昔、ごま太郎さんという方が以下のTonyuの隠れメソッドを見つけて、それで軽くしていました。
$mplayer.freeAllSE();
$mplayer.init();

$mplayer.play()でwavを鳴らしたとき$mplayer内でサウンドがONみたいな状態になり、FPSが50くらいになります。
上記2つのメソッドを呼ぶと、$mplayer内でサウンドがOFFみたいな状態になり、FPSが65くらいになり再び軽くなります。
再び$mplayer.play()でwavを鳴らすと、$mplayer内でサウンドがONみたいな状態になり、FPSが50くらいになります。
ただし、このサウンドON⇔OFFの切り替えは処理が重く、毎フレーム切り替わりさせるとFPSが4になりました。

その現象を試したのが以下のソースコードです。

extends SecretChar;

$CpuSleepTime = 1 ; // = 0;
$FrameRate    = 90;

$Options.set("sleep_time",$CpuSleepTime);
$System.setFrameRate($FrameRate,3);

//$mplayer.play($se_Alarm,0,32);

while (1) {
  if (getkey(90)) $mplayer.play($se_Alarm,0,32); // Z key
  if (getkey(88)) {$mplayer.freeAllSE();$mplayer.init();} // X key
  if (getkey(67)) $mplayer.play($se_mzo); // C key
  if (getkey(86)) $mplayer.play($se_midi,1); // V key
  if (getkey(83)) $mplayer.stop(); // S key
  x += 3;
  if (x > $screenWidth) x = x % $screenWidth;
  drawSprite(x,y,3);
  update();
}

Tonyu1でwavまたはmzoを鳴らすと、若干負担がかかっているのかFPS50になりました。(mzoもwavと同様でした)
midiを鳴らすと、鳴っている間だけFPS90になりました。(これは瀬加井さんが調べたとおり、タイマー精度が上がっているみたいです)

サウンドが鳴るとFPS50に処理落ちしたのは、昔からある問題のようです。(←詳細な原因はわかりません)
PCのスペック向上により、最近は処理落ちしなくなっていましたが、
スリープを入れることによって、この問題が顕在化するようです。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : マッキー(p928124-ipngn9601hodogaya.kanagawa.ocn.ne.jp)
- 2018/09/15(Sat) 10:42 No.13874
 
こちらの投稿より53分前にexeができていたんですね!

>2 Player.exeを実行する。

ちなみに、YellowMusicPlayerはこの逆でPlayer.exeから起動してもらっています。
今まで通り、Player.exeから起動できます。

動作確認はある程度さまざまな環境でやっているので、動作については問題ないはずです(YellowMusicPlayerのReadMe.html「YellowMusicPlayerについて」に記載しています)

(若干、宣伝してみました)


しかし、瀬加井さんの作られたexeを使えば、
例えば、Player.exe等をProgramフォルダ等に入れて、exeからProgram/Player.exeを呼ぶようにして、
ファイル一覧をシンプルにすることもできていいかもしれません。Tonyu1のフルスクリーンキット(Start.exe)を入れたときみたいに。

あと、Midiを使わないのに、YellowMusicPlayerとdll合わせて400KBのファイルを入れるよりも、
タイマー分解能のexeを入れた方がシンプルでいいかもしれません。

せっかくexeを作られたということなので、YMPlayerの方は気にせず、そちらをお使いください。


こちらこそ、Windows10で今回の現象が起きることを知れてよかったです。
スリープを入れるときに今回の知識が使えます。


Re: サウンドの再生が及ぼすFPSの低下について 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/16(Sun) 15:44 No.13875
 
> マッキー 様

 本当にお世話になっております!
 YellowMusicPlayer、こんなに早くご対応いただけるなんて! 感激です!(T^T)

 今回の問題は、マッキーさんがお知恵をお借しくださらなければ、決して解決していません。

 こちらの掲示板に書き込む前、少なくとも5日くらいあれこれ試行錯誤し、打開できないPC又はOSの問題だろうと挫折しかかっておりました。

 思い切って書き込んでよかった! そして、マッキーさんがご優秀かつお優しい方でよかった! まさに「優」の字がふさわしいお方です。本当に心から感謝しております!

 ヒントをいただいた後、色々調べたり、試していく中で、だんだんなんとかできる気がしてきまして、プログラムをいじっているうちにexeの完成にたどり着くことができました。

 ただ、このexeは、Periodを設定し、復元する機能しか持ち合わせておらず、あらゆる機能を実装しておられるマッキー様のYellowMusicPlayerには、遠く及びません。

 また、このexeは、汎用性が低いため、プロジェクトを進めておられる開発者の方にとられては、YellowMusicPlayerが最善のツールであることは間違いありません。

 まさに、Tonyu Systemになくてはならないプログラムです!

 今回、お世話になったマッキーさんへの謝意を心から表するため、Version 0.41以降のReadme.txtにマッキーさんへの謝辞を、また、エンドロールのスペシャルサンクス欄にマッキーさんのお名前を記載させていただきたく存じます。

 今から、YellowMusicPlayerによる動作も確認させていただきますね!

 この度は、本当にお世話になりました。今後ともどうぞよろしくお願い申し上げます。<(_ _)>


[P.S.] >>> このexeの挙動について

 このexeでは、次のようなログを書き出すようにしてみました。だいたいこのような動きをしております。

[18/09/16 15:07:01]  Phase : 00  Process Started.
[18/09/16 15:07:01]  Phase : 00  Swaufpss Version : 1.00
[18/09/16 15:07:01]  Phase : 00  OS Version : 6
[18/09/16 15:07:01]  Phase : 00  Minimum Period : 1ms
[18/09/16 15:07:01]  Phase : 00  Current Period : About 16.56ms
[18/09/16 15:07:01]  Phase : 01  OS Version supported.
[18/09/16 15:07:01]  Phase : 02  Tonyu System found successfully.
[18/09/16 15:07:01]  Phase : 03  Set timer resolution to 2ms.
[18/09/16 15:07:03]  Phase : 04  Current Period : About 1.87ms
[18/09/16 15:07:03]  Phase : 05  Tonyu System launched.
[18/09/16 15:07:03]  Phase : 06  Detected the start of Tonyu System.
[18/09/16 15:08:36]  Phase : 07  Detected the end of Tonyu System.
[18/09/16 15:08:36]  Phase : 08  Set timer resolution to the original value.
[18/09/16 15:08:39]  Phase : 09  Current Period : About 16.87ms
[18/09/16 15:08:39]  Phase : 10  Process completed.

ランタイム版 Player.exe のアイコンについて 投稿者 : 瀬加井 勇(pl34276.ag0304.nttpc.ne.jp)
- 2018/08/29(Wed) 00:16 No.13857
 


> Hoge-Ship 様

 いつもお世話になっております。
 相変わらず、Tonyu System 1 で開発を続けております瀬加井です。

 さて、このたびお願いがあって書き込ませていただきました。

 と申しますのは、Tonyu System 1 でランタイムを作成する際、Player.exeのアイコンにマルチサイズのアイコン(.ico)を指定することができるように、Tonyu System 1 をバージョンアップしていただけないかというものです。

 現在は、.bmp と .png の32x32のみですが、Windowsのフルセット仕様とされている16x16、32x32、48x48、256x256に加え、追加できることとなっている40x40のアイコンをパックした .ico を登録したいのです。

 Player.exe のリソースに関係するものと思われますが、いかがでしょうか。

 お忙しいところ誠に恐縮ですが、可能でしたら、どうぞよろしくお願い申し上げます。


Re: ランタイム版 Player.exe のアイコンについて 投稿者 : hoge1e3(110.116070164.m-net.ne.jp)
- 2018/09/05(Wed) 09:56 No.13859
 
Download:13859.zip 13859.zip お世話になっております。
申し訳ございませんが,Tonyu1自身のバージョンアップは現状難しいため,代わりにアイコンを変更するためのアプリケーションをご紹介しております.

「Resource Hacker」というアプリケーションを利用して任意の
exeファイルのアイコンが変更できます.
本アプリケーションでPlayer.exeのアイコンをマルチアイコンに変更することができました.

参考までに,Player.exeをResource Hackerで開いたところを添付いたします.

お手数をおかけしますが,よろしくお願いいたします.


Re: ランタイム版 Player.exe のアイコンについて 投稿者 : 瀬加井 勇(pl26667.ag0304.nttpc.ne.jp)
- 2018/09/09(Sun) 10:03 No.13861
 
ご返答ありがとうございます。
ご教示くださった方法で、難なくマルチアイコンに変更するこができました。
Hoge-Ship様の作成されたexeファイルにHackすることに、少し心苦さを感じておりましたが、そこにこのアプリケーションを使用するご寛大なご容赦を下さり、心から感謝しています。
ありがとうございます。今後ともよろしくお願いいたします。

Tonyu2における編集可能テキストボックス 投稿者 : mmm(fp276e5a3a.tcga506.ap.nuro.jp)
- 2018/08/30(Thu) 17:47 No.13858
 


いつもお世話になっております。

Tonyu2ではTonyu1での$InputBox,$TextBox、あるいはwaitInput()などに相当する関数やオブジェクトは存在しないのでしょうか?
ユーザーが数値を入力できるテキストボックスを作りたいのですが・・・。
またラジオボタンなども作れないか伺いたいです。

よろしくお願いします。


Re: Tonyu2における編集可能テキストボックス 投稿者 : hoge1e3(110.116070164.m-net.ne.jp)
- 2018/09/05(Wed) 10:12 No.13860
 
お世話になっております。
現状,$InputBox等に相当するものはありませんが,promptとconfirmという命令が用意されています.

while(true) {
    a=prompt("Input a:");
    print(a);
    b=confirm("Again?");
    if (!b){
        break;
    }
}
print("END");

.
[直接移動] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] [456] [457] [458] [459] [460] [461] [462] [463] [464] [465] [466] [467] [468] [469] [470] [471] [472] [473] [474] [475] [476] [477] [478] [479] [480] [481] [482] [483] [484] [485] [486] [487] [488] [489] [490] [491] [492] [493] [494] [495] [496] [497] [498] [499] [500] [501] [502] [503] [504] [505] [506] [507] [508] [509] [510] [511] [512] [513] [514] [515] [516] [517] [518] [519] [520] [521] [522] [523] [524] [525] [526] [527] [528] [529] [530] [531] [532] [533] [534] [535] [536] [537] [538] [539] [540] [541] [542] [543] [544] [545] [546] [547] [548] [549] [550] [551] [552] [553] [554] [555] [556] [557] [558] [559] [560] [561] [562] [563] [564] [565] [566] [567] [568] [569] [570] [571] [572] [573] [574] [575] [576]
- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

- Joyful Note -