2014/12/24(水) [n年前の日記]
#1 [dxruby] DXRubyとAyameとイントロとループとスレッド
DXRuby は 60FPS でメインループが回っているけど、それより速い周期でループを回す部分を作って、そこでBGMの切り替えをしたら、自然に繋がってるように聞こえないかなと思えてきたので、Ruby の Thread とやらを使って試してみたりして。
_bgmloop2.rb
試してはみたものの、違いが分からない…。元の ogg の作りがマズいのだろうか。
別スレッド内で Ayame.update を呼んじゃってるけど、これってアリなのかな…。勝手な想像では、おそらく Ayame.update が音の再生開始等の処理も担っていて、となるとメインループ内に Ayame.update を置いておくと再生開始タイミングも 60fps になってしまって意味が無いのではないか、と思って別スレッド内に置いてガンガン呼びまくるようにしてみたのだけど。ちなみにこの状態でも、フェードアウト等の秒数指定は、指定通りに動いてるように聞こえた。
ていうか、メインループ内でBGMを切り替えるやり方も、切り替え時にビミョーにずれてるとは気付かれないのではないか、てな気分になってきたり。何度も聞いてるうちに、よくわからなくなってきた…。
_bgmloop2.rb
require 'dxruby' require_relative 'ayame' if true bgm_intro = Ayame.new('test58intro.ogg') bgm_loop = Ayame.new('test58loop.ogg') bgm_intro_time = 6.888 else bgm_intro = Ayame.new('test59intro.ogg') bgm_loop = Ayame.new('test59loop.ogg') bgm_intro_time = 13.714 end bgm_intro.predecode bgm_loop.predecode intro_time = 0 bgm_step = 0 # BGM処理用スレッド t = Thread.new do loop do case bgm_step when 0 # イントロ再生開始の指示待ち nil when 1 # イントロ再生開始 bgm_intro.play(1, 0) intro_time = Time.now.to_f bgm_step = 2 when 2 # イントロ再生終了待ち if intro_time + bgm_intro_time < Time.now.to_f # loop BGM 再生開始 bgm_loop.play(0, 0) bgm_step = 3 end when 3 # loop BGM再生中 nil when 4 # loop BGM停止 bgm_loop.stop(1) bgm_step = 0 when 5 break end Ayame.update sleep(0.001) end bgm_intro.stop bgm_intro.dispose bgm_loop.stop bgm_loop.dispose end fnt = Font.new(24) Window.loop do break if Input.keyPush?(K_ESCAPE) if Input.keyPush?(K_Z) if bgm_step <= 0 # BGMを再生していないので、イントロ再生開始 bgm_step = 1 elsif bgm_step == 3 # loop BGM 再生中なので停止する bgm_step = 4 end end if bgm_step >= 0 msg = [ "z : start intro", " intro play start", " intro playing", "z : stop loop bgm", " loop BGM stop" ] Window.drawFont(8, 8, msg[bgm_step], fnt) end end bgm_step = 5 t.join
試してはみたものの、違いが分からない…。元の ogg の作りがマズいのだろうか。
別スレッド内で Ayame.update を呼んじゃってるけど、これってアリなのかな…。勝手な想像では、おそらく Ayame.update が音の再生開始等の処理も担っていて、となるとメインループ内に Ayame.update を置いておくと再生開始タイミングも 60fps になってしまって意味が無いのではないか、と思って別スレッド内に置いてガンガン呼びまくるようにしてみたのだけど。ちなみにこの状態でも、フェードアウト等の秒数指定は、指定通りに動いてるように聞こえた。
ていうか、メインループ内でBGMを切り替えるやり方も、切り替え時にビミョーにずれてるとは気付かれないのではないか、てな気分になってきたり。何度も聞いてるうちに、よくわからなくなってきた…。
◎ sleepの精度が分からない。 :
Ruby で Thread を使って sleep(秒数) でループを回すソレは、環境によってどうなるか不明という話もあるそうで。
Ruby の sleep() は小数点以下も指定できるので、ミリ秒(ms)単位でもsleepできるように思えるけれど、OSによってsleepできる精度? 分解能? が違ってるそうで。Windows NT の場合、sleep が 10ms の精度?だから、それより小さい値を指定しても意味が無い、という話も見かけた。 しかし、XP、Vista、7、8 とWindowsのバージョンが上がった際に、そのあたり何の変更も無かったのかな、改善されてたりしないのかな、という疑問も。
調べてみたら、Windows の場合、時間を測る仕様は3種類ほどあるらしく。
_QueryPerformanceCounterを実時間計測には使えない - 音宮志久の日々の考え
マルチメディアタイマーとやらを使えば 1ms 単位で測定できるらしいから、もし、Windows版の Ruby がそのあたりを使ってたら、昔と違って 1ms の精度で sleep できたりするのかも、と素人考えで思ったりもしたけど、そのへんの実装に何か変化があったのかどうかも分からない状態で。
ひとまず上のソースで、sleep(0.001) を sleep(0.0005) にしてみたら、CPU使用率が急激に上昇したので、指定値が何かしらの形で反映されてる、ような気もする。
Ruby の sleep() は小数点以下も指定できるので、ミリ秒(ms)単位でもsleepできるように思えるけれど、OSによってsleepできる精度? 分解能? が違ってるそうで。Windows NT の場合、sleep が 10ms の精度?だから、それより小さい値を指定しても意味が無い、という話も見かけた。 しかし、XP、Vista、7、8 とWindowsのバージョンが上がった際に、そのあたり何の変更も無かったのかな、改善されてたりしないのかな、という疑問も。
調べてみたら、Windows の場合、時間を測る仕様は3種類ほどあるらしく。
_QueryPerformanceCounterを実時間計測には使えない - 音宮志久の日々の考え
マルチメディアタイマーとやらを使えば 1ms 単位で測定できるらしいから、もし、Windows版の Ruby がそのあたりを使ってたら、昔と違って 1ms の精度で sleep できたりするのかも、と素人考えで思ったりもしたけど、そのへんの実装に何か変化があったのかどうかも分からない状態で。
ひとまず上のソースで、sleep(0.001) を sleep(0.0005) にしてみたら、CPU使用率が急激に上昇したので、指定値が何かしらの形で反映されてる、ような気もする。
◎ 曲データの作り方でも誤魔化せそう。 :
例えばだけど、イントロ部分の最後で、
- シンバル? クラッシュライド? を「バシャーン(シャンシャンシャン…)」と鳴らしてる上にループ部分を載せてみたり
- ドラムだけ叩いて「ダダダダダッ、ダンッ…(シーン)…」と意図的に無音部分を作ったり
- Glitch でテンポを崩したり
[ ツッコむ ]
#2 [nitijyou] 自転車で買い物に
蛍光灯が1本切れたのでケーズデンキまで。ついでにダイソーとリオンドールに。
20Wタイプの蛍光灯を買ってきたけど、帰宅後、家族から予備があると知らされて、ギャフン。
先日購入したコンデジ、Canon PowerShot A3300IS を入れるケースをケーズデンキで物色したけれど。値段が 1,280円とか、一番安いモノでも980円とかで悩んでしまったり。中古のデジカメだから、既に傷だらけなわけで。そこまで払うのもなあ…。ということで、ダイソーでそれっぽいケースを購入して済ませようと。金属のファスナーがついてるケースだからよろしくないのだけど。傷をつけない・増やさないことを考えたら、金属のファスナーはマズいのではないかなあ。でもまあ、100円だから…。
リオンドールでガムや夜食等を購入。
20Wタイプの蛍光灯を買ってきたけど、帰宅後、家族から予備があると知らされて、ギャフン。
先日購入したコンデジ、Canon PowerShot A3300IS を入れるケースをケーズデンキで物色したけれど。値段が 1,280円とか、一番安いモノでも980円とかで悩んでしまったり。中古のデジカメだから、既に傷だらけなわけで。そこまで払うのもなあ…。ということで、ダイソーでそれっぽいケースを購入して済ませようと。金属のファスナーがついてるケースだからよろしくないのだけど。傷をつけない・増やさないことを考えたら、金属のファスナーはマズいのではないかなあ。でもまあ、100円だから…。
リオンドールでガムや夜食等を購入。
[ ツッコむ ]
#3 [zatta] 「ピーピー音」は警告音にならない話
ウチの親父さんは歳をとって聴力が衰えてしまい、人の会話は聞き取れるのだけど、高い周波数の音は聞き取れない状態でして。なもんだから、家電等が発する「ピーピー音」は、周波数の問題で聞こえないのであります。
日本のメーカがコストダウンで努力して、結果、ピーピー音で知らせる仕様に落ち着いて、そういう家電等が普及してるのが現状だろうけど。これからはお年寄りがもっと増えるわけですよ。つまり、ウチの親父さんのように、「ピーピー音」が聞こえない方も増えてくるのは間違いないわけですよ。だから、この仕様で延々作り続けてたらマズいよなと。警告音のつもりで鳴らしても、そもそも音が聞こえないのでは、ソレって警告音にならないわけで。
だからと言って、「どうせ聞こえないなら削ってしまえ」「更なるコストダウンが期待できるわい」てなわけにもいかない。目を離していても機器の状態が変わったことを伝えるためには、音を発するのが手っ取り早いわけでして。
さて、どうすればいいのだろう?
- 電気ポットのお湯が沸いた時の「ピーピー音」も。
- 電気炊飯器で御飯が炊けた時の「ピーピー音」も。
- 風呂が沸いた時の「ピーピー音」も。
- ファンヒーターの灯油が切れた時の「ピーピー音」も。
- 冷蔵庫の扉が開けっ放しの時の「ピーピー音」も。
- ガスコンロの火がいつのまにか消えてた時の「ピーピー音」も。
日本のメーカがコストダウンで努力して、結果、ピーピー音で知らせる仕様に落ち着いて、そういう家電等が普及してるのが現状だろうけど。これからはお年寄りがもっと増えるわけですよ。つまり、ウチの親父さんのように、「ピーピー音」が聞こえない方も増えてくるのは間違いないわけですよ。だから、この仕様で延々作り続けてたらマズいよなと。警告音のつもりで鳴らしても、そもそも音が聞こえないのでは、ソレって警告音にならないわけで。
だからと言って、「どうせ聞こえないなら削ってしまえ」「更なるコストダウンが期待できるわい」てなわけにもいかない。目を離していても機器の状態が変わったことを伝えるためには、音を発するのが手っ取り早いわけでして。
さて、どうすればいいのだろう?
◎ 喋らせるのはどうか。 :
とりあえず、これからは、家電に喋らせればいいんじゃないかなあ、と夢想するのですが。
ウチの親父さんも、例えば Panasonic製のFAX付き電話機は、フツーに使えているのです。ソイツは喋るんです。「用件が○件あります」「FAX用紙を入れてください」「送信ボタンを押してください」 ―― 人の声の周波数だから、「ピーピー音」が聞こえない親父さんでもモーマンタイ(無問題)。
とは言え。喋らせるとなると色々問題は出てくるだろうなと。
喋ること自体は、問題無く実現できそうではあるけど。随分昔から ―― 自分が学生の頃から、ADPCMで波形を圧縮して持ってROM容量節約するとか電話機関係ではフツーにやってたし。今なら、 _YAMAHAが1チップで歌を歌わせちゃったり してるし。
それに、「ウチの全ての製品で必ず喋らせるのだ。それがウチの会社でもやれる社会貢献の形や」と方針さえ決めてしまえば、共通部品として大量生産できてコストダウンにも繋がるだろうし。
ただ、一番の障害は、「喋らせる必要あるの?」「ピーピー音でいいじゃん」と言い出す人達の存在、かもしれず。
まあ、別に、「ピーピー音」と同じコストで、お年寄りでも聞こえるぐらいに改善された警告音を実現できるアイデアがあるなら、それで問題無いわけで。何にせよ、これからはそのへん何かしら一工夫が必要だろうなー、と思うのでした。
ウチの親父さんも、例えば Panasonic製のFAX付き電話機は、フツーに使えているのです。ソイツは喋るんです。「用件が○件あります」「FAX用紙を入れてください」「送信ボタンを押してください」 ―― 人の声の周波数だから、「ピーピー音」が聞こえない親父さんでもモーマンタイ(無問題)。
とは言え。喋らせるとなると色々問題は出てくるだろうなと。
- 部品のコストが高くなる。
- 耐久性が不安。警告を発する家電は、どれも熱の変化が大きめだったり、若干水に濡れることもありえる機器。チップの稼働温度範囲を超えないか。スピーカのコーン紙がふやけないか。(今なら違うスピーカ種類もある?)
- せっかく機能をつけても、お年寄りが、「自分はまだ年寄りじゃない!」「だからそんな機能はどうでもいい! 要らん!」と言い出して、機能・仕様を否定しそう。
喋ること自体は、問題無く実現できそうではあるけど。随分昔から ―― 自分が学生の頃から、ADPCMで波形を圧縮して持ってROM容量節約するとか電話機関係ではフツーにやってたし。今なら、 _YAMAHAが1チップで歌を歌わせちゃったり してるし。
それに、「ウチの全ての製品で必ず喋らせるのだ。それがウチの会社でもやれる社会貢献の形や」と方針さえ決めてしまえば、共通部品として大量生産できてコストダウンにも繋がるだろうし。
ただ、一番の障害は、「喋らせる必要あるの?」「ピーピー音でいいじゃん」と言い出す人達の存在、かもしれず。
まあ、別に、「ピーピー音」と同じコストで、お年寄りでも聞こえるぐらいに改善された警告音を実現できるアイデアがあるなら、それで問題無いわけで。何にせよ、これからはそのへん何かしら一工夫が必要だろうなー、と思うのでした。
[ ツッコむ ]
#4 [anime][zatta] 子供は一種類じゃない
随分前の話なのですけど。とあるアニメーターさんが、
自分もソレを読んで、半分は同意しつつ、半分は、ソレちょっと違うよなー、と思ってしまったので、そのへんの思考をメモ。只の思考メモです。
子供ってのは、年齢によって嗜好が変わるよなと。要は、「子供」という単語で一括りにするのは無理があるよなと。
ざっくり大別しただけでも…。
戦隊シリーズを例に出すと説得力が出てくるのかな。戦隊シリーズも、「入学」「卒業」「再入学」があると言われているのです。…「入学」じゃなくて「入園」だったのかな。単語・呼称が怪しいですけど。
前述の、とあるアニメーターさんが思い浮かべたであろう子供像は、「悪ガキ時代」の子供ですわな。その時期の子供は、たしかに低俗なモノが大好き。「まいっちんぐマチコ先生」とか…例として古いか。とにかく、その時期の子供なら、ローニャのような作品は馬鹿にして見ないだろうと自分も思うわけですが。
でも、ローニャの場合、監督のお子さんがまだ小さいらしいので、そこに向けて、つまりは「良い子時代」の子供に向けて作ってる気がするわけですよ。
自分も、「あらいぐまラスカル」「ペリーヌ物語」「母をたずねて三千里」「赤毛のアン」等を見てた時期があって。今見ると退屈な作りだけど、当時は何も考えず、毎週ポケーッと見てたわけで。そういった「良い子時代」なら、ローニャは全然イケそうだよなと。
何の話だっけ。えーと。
要するに、大人が「子供」という単語を耳にした時、瞬間的に特定の子供の姿を脳裏に思い浮かべてしまいますが。実際には、その思い浮かべた子供像より、もっと幅広い、色んな子供の姿が存在しているので、そこはちょっと気をつけないといかんのかもしれんなあ、てな話かなと。
大人って物忘れが激しいから、自分が子供だった頃の事すら結構忘れちゃうもんで。一応記憶に残ってても、特定の時期の子供時代しか覚えてないから、そのイメージしか持てなくて。
なので、「自分が子供だったとしても〜」と思った時は、「ちょっと待て。その子供時代って、どの子供時代のこと?」と自分に少し問いかけてみると、少し正確に状況を把握できるのかも、などと思ったりもしましたが、それって難しいですわな。自分が通ってきた色んな子供時代をすぐに思い出すことができないからこそ大人なわけでして。なかなか難しい。
てなことを思ったのでメモ。
コレ、前にも書いたかなあ…。もうそんなことすら思い出せなくなってる自分…。
「自分が子供だったとしてもローニャは見ない」と発言してる場面を目にしまして。
「子供ってのは、もっと俗っぽいものが好きなのだ」
自分もソレを読んで、半分は同意しつつ、半分は、ソレちょっと違うよなー、と思ってしまったので、そのへんの思考をメモ。只の思考メモです。
子供ってのは、年齢によって嗜好が変わるよなと。要は、「子供」という単語で一括りにするのは無理があるよなと。
ざっくり大別しただけでも…。
- 低年齢で、わけもわからず、そのアニメを見てる「良い子時代」
- 「こんなのはガキが見るもんだ」と、急に大人ぶって馬鹿にして見なくなっちゃう「悪ガキ時代」
- 「これは一見子供向けのアニメだが実は作りとして深いのだ」「この面白さが分かるのはきっと俺だけだ。フフン」とか言いながら見てる「通気取り時代」
戦隊シリーズを例に出すと説得力が出てくるのかな。戦隊シリーズも、「入学」「卒業」「再入学」があると言われているのです。…「入学」じゃなくて「入園」だったのかな。単語・呼称が怪しいですけど。
- 幼稚園ぐらいまでは、どの子供も楽しく見てるし、玩具を欲しがったりもする。
- そのうち、「こんなの子供が見る番組だよ」と言い出して見なくなる。
- 中学生ぐらいになって、「これは結構深い脚本だぞ…」とか言いながら、一部の子供達がまた見るようになって。その人達は特撮マニアへと育っていくわけですけど。
前述の、とあるアニメーターさんが思い浮かべたであろう子供像は、「悪ガキ時代」の子供ですわな。その時期の子供は、たしかに低俗なモノが大好き。「まいっちんぐマチコ先生」とか…例として古いか。とにかく、その時期の子供なら、ローニャのような作品は馬鹿にして見ないだろうと自分も思うわけですが。
でも、ローニャの場合、監督のお子さんがまだ小さいらしいので、そこに向けて、つまりは「良い子時代」の子供に向けて作ってる気がするわけですよ。
自分も、「あらいぐまラスカル」「ペリーヌ物語」「母をたずねて三千里」「赤毛のアン」等を見てた時期があって。今見ると退屈な作りだけど、当時は何も考えず、毎週ポケーッと見てたわけで。そういった「良い子時代」なら、ローニャは全然イケそうだよなと。
何の話だっけ。えーと。
要するに、大人が「子供」という単語を耳にした時、瞬間的に特定の子供の姿を脳裏に思い浮かべてしまいますが。実際には、その思い浮かべた子供像より、もっと幅広い、色んな子供の姿が存在しているので、そこはちょっと気をつけないといかんのかもしれんなあ、てな話かなと。
大人って物忘れが激しいから、自分が子供だった頃の事すら結構忘れちゃうもんで。一応記憶に残ってても、特定の時期の子供時代しか覚えてないから、そのイメージしか持てなくて。
なので、「自分が子供だったとしても〜」と思った時は、「ちょっと待て。その子供時代って、どの子供時代のこと?」と自分に少し問いかけてみると、少し正確に状況を把握できるのかも、などと思ったりもしましたが、それって難しいですわな。自分が通ってきた色んな子供時代をすぐに思い出すことができないからこそ大人なわけでして。なかなか難しい。
てなことを思ったのでメモ。
コレ、前にも書いたかなあ…。もうそんなことすら思い出せなくなってる自分…。
[ ツッコむ ]
以上、1 日分です。