トミカ No.063 前田製作所 かにクレーン (ブリスター)
トミカ No.065 日立建機 双腕重機 アスタコ (ブリスター) |
2015年4月27日月曜日
トミカのカニクレーンとアスタコを買った
近所のスーパーにトミカが売っていて、カニクレーンとアスタコがあったので思わず買ってしまった。
2015年4月25日土曜日
忍殺アニメ第2話「マシン・オブ・ヴェンジェンス」感想
今回はなんか良く動いてましたね。あと、ものすごく凝縮されてた。
冒頭からゴア光景がわりと普通に描写されて(首の切断部にはモザイクかかってたけど)、Flashアニメ規制対策説を打ち壊した。
「戦闘描写はカッコよく動く」というルールがあるので、戦闘がメインの今回はかなり動く。
アーソンは戦闘以外でもスミスを踏みつけたり、家紋タクシー車内だったり、血を噴出しながらの捨て台詞だったりでFlashアニメじゃない描写が多かった。
クローンヤクザは面白描写担当だった。爆発で気をつけの姿勢で吹っ飛ぶ4人。首がストライクされるシーンはけっこう残虐だけど、落ちる生首は普通に描写されたね。バイオ生物なので人間扱いされていないのか。
オムラ社のクラウドバスター=サンの最期は、縄を投げつけられてから一直線にブブジマへ突っ込んでって、何がなんだかよくわからなかったね。
ナラク化は面白かった。仮面ライダーWみたいだったけど、よく考えたらナラクとフジキドは二人で一人のニンジャスレイヤーだよな。ナラクを「一人」と数えていいのかわからんが。
仮面ライダーWは"左半身(ボディサイド)は身体能力・武器を決定する翔太郎のボディメモリ、右半身(ソウルサイド)は属性・特殊能力を決定するフィリップのソウルメモリに対応した配色を持つ(Wikipediaより)"。
アニメイシヨンのナラク化も、身体を担当するフジキドが左半身、意識と能力を担当したナラクが右半身になっていた。原作も日本の特撮から影響を受けているし、アニメイシヨンも特撮のオマージュが含まれているようなので、これもその1つか。
スミス登場シーンでFlashアニメ風描写が無かったのが気になる。なんでだろう
冒頭からゴア光景がわりと普通に描写されて(首の切断部にはモザイクかかってたけど)、Flashアニメ規制対策説を打ち壊した。
「戦闘描写はカッコよく動く」というルールがあるので、戦闘がメインの今回はかなり動く。
アーソンは戦闘以外でもスミスを踏みつけたり、家紋タクシー車内だったり、血を噴出しながらの捨て台詞だったりでFlashアニメじゃない描写が多かった。
クローンヤクザは面白描写担当だった。爆発で気をつけの姿勢で吹っ飛ぶ4人。首がストライクされるシーンはけっこう残虐だけど、落ちる生首は普通に描写されたね。バイオ生物なので人間扱いされていないのか。
オムラ社のクラウドバスター=サンの最期は、縄を投げつけられてから一直線にブブジマへ突っ込んでって、何がなんだかよくわからなかったね。
ナラク化は面白かった。仮面ライダーWみたいだったけど、よく考えたらナラクとフジキドは二人で一人のニンジャスレイヤーだよな。ナラクを「一人」と数えていいのかわからんが。
仮面ライダーWは"左半身(ボディサイド)は身体能力・武器を決定する翔太郎のボディメモリ、右半身(ソウルサイド)は属性・特殊能力を決定するフィリップのソウルメモリに対応した配色を持つ(Wikipediaより)"。
アニメイシヨンのナラク化も、身体を担当するフジキドが左半身、意識と能力を担当したナラクが右半身になっていた。原作も日本の特撮から影響を受けているし、アニメイシヨンも特撮のオマージュが含まれているようなので、これもその1つか。
スミス登場シーンでFlashアニメ風描写が無かったのが気になる。なんでだろう
2015年4月23日木曜日
アニメSHOW BY ROCK!!「track03 Yes!アイドル♡宣言」感想
クリティクリスタ登場回とはいえ、メインはプラズマジカだったな。
チュチュが少し不穏。トップになる野望、そのためにはどんな手も使うと。例えそれが……?
うさぎパジャマのシアン可愛すぎる。レトリーじゃなくても盗撮したくなるよね。
レトリーが出ていこうとした時、モアがびっくりしておもいっきり母星語話してたの面白かった。
最後にウワサノペタルズが4人出てきてくれたの嬉しかった!
次回は徒然なる操り霧幻庵が登場。果たして虚無僧&達磨状態のCGはあるのか。
次回予告で、社長がどうでもいいことを長々と話し始めた時、モアが無言で離脱していったの笑った。次回も楽しみだね!
一人だけバンドをやってる理由を話していなかったチュチュが理由を話す回。チュチュがバンドを始めるきっかけになったアーティスト「グレイトフルキング」、声が「ストロベリーハート」と一緒だよね? 何か関係があるんだろうな。
チュチュが少し不穏。トップになる野望、そのためにはどんな手も使うと。例えそれが……?
不穏といえば、ストロベリーハートもシアンが強くならなければ……と途中でセリフを飲み込む。わかりやすい伏線。
うさぎパジャマのシアン可愛すぎる。レトリーじゃなくても盗撮したくなるよね。
レトリーが出ていこうとした時、モアがびっくりしておもいっきり母星語話してたの面白かった。
最後にウワサノペタルズが4人出てきてくれたの嬉しかった!
次回は徒然なる操り霧幻庵が登場。果たして虚無僧&達磨状態のCGはあるのか。
次回予告で、社長がどうでもいいことを長々と話し始めた時、モアが無言で離脱していったの笑った。次回も楽しみだね!
2015年4月21日火曜日
ニュータイプ5月号を買った。
もちろん、ニンジャスレイヤーフロムアニメイシヨンの記事を見るためです。
p116~119までの、キャラクターデザインに関する記事には、
これだけど、三話目は「ラストガール・スタンディング」なんだね。ヤモトメインの話なので、OPのヤモトのシーンみたいな作風になるのだろうか。
p116~119までの、キャラクターデザインに関する記事には、
- ダークニンジャ、ラオモト・カン
- ニンジャスレイヤー
- ヤモト・コキ
- ミュルミドン、オフェンダー、スキャッター、アースクエイク、ソニックブーム、アーソン
- クラウドバスター
- ナンシー・リー
- ユカノ
のデザイン画と、キャラデザの4人(今岩洋之、saitom、稲戸せれれ、信じろ)のインタビューが掲載されていた。
ニンジャスレイヤー フロムアニメイシヨン 第1話「ボーン・イン・レッドブラック」感想で書いたけど、このアニメイシヨンでは、ハイライトの色でキャラクターの所属や属性が表されている。
前回作ったリストに、ニュータイプ掲載分を追加すると、
- 緑:ニンジャスレイヤー
- ピンク:オフェンダー、スキャッター、ミュルミドン、アースクエイク、ソニックブーム、アーソン
- 黄色:ダークニンジャ、ラオモト
- 白(無し):フジキド、クローンヤクザ、オイラン、マッポ、ヤモト、その他一般人
- 水色:ナンシー
- オレンジ:ゲンドーソー、ユカノ
- 青緑:クラウドバスター
となる。ピンクはシックスゲイツも含めたソウカイニンジャのカラーか。クラウドバスターのみ青緑なのは、所属がオムラだからだろう。あるいは、ナラク化を引き出す程の敵であったからか?
他、キャラデザに関する感想としては、男のニンジャはオモチャっぽい感じがする。ラオモト=サンに至ってはハッピーセットのオモチャみたいだ。背中にネジ穴があったり……。ナンシー=サンにも背中の穴はあるんだね。これはfigmaとかそういうのっぽい。
そして、ザヴァ=サンの
で……先行上映会は次の話もやったんだ。あの場にいた200人はもう体験済だな。では、三話目は?俺はさっきオーディンのおじいさんから分けてもらって、見た。ワオ!と思った。当然、ニンジャってのは今のグルーヴが基本だ!だが、それだけではないんだな、皆知ってると思うけど! #njslyr
— ザ・ヴァーティゴ (@the_v_njslyr) April 16, 2015
2015年4月18日土曜日
ハイモック完成!
「HGBF 1/144 ハイモック」完成しました。継ぎ目消し、モノアイのレンズ化、一部塗装、ツヤ消しを施してある。多少詳しい製作過程はこちら。
ビームライフル |
2015年4月17日金曜日
ニンジャスレイヤー フロムアニメイシヨン 第1話「ボーン・イン・レッドブラック」感想
TLがアビ・インフェルノ・ジゴクと化していたので観る前から落ち込んでいたけれど、心配することはなかったぜ!
もちろん、「アニメ化前に想像していたアニメ版ニンジャスレイヤー」とはかけ離れていたけれど、これはこれで「ニンジャスレイヤーのアニメ版」だな、と感じた。
あの独特すぎるアニメスタイルだけど、原作小説が独特すぎるスタイルなので、その雰囲気をアニメ化したらああなるんだろうなあ、と。
140文字という制限からくる簡略化された文体がフラッシュアニメ風描写になってて、
対スキャッター戦ではコピペ戦闘描写も再現されてて、
それでいてオフェンダーを床に叩きつけたり、第1話のクライマックスとなるミュルミドン戦の戦闘描写はかっこよく動く。
原作小説を初めて読んだ時に感じた不思議な感じを追体験できるアニメだった。
重篤ニンジャヘッズが原作小説の独特な文法、コトダマを理解して作品世界にのめり込んでいったように、このアニメイシヨン独自のフォーマットを理解すれば楽しくなってくると思うんだ。
ヘッズの方々は原作小説を読み進めていくうちに、脳内に「ニンジャスレイヤー用デコーダー」みたいなのが形成されたと思う。「マルノウチ・スゴイタカイビル」や「オハギ」をシリアスワードとして認識し、「イヤーッ」「グワーッ」のコピペで激しいカラテを想像できるデコーダーだ。
アニメイシヨン用のデコーダーが構築されれば、この表現技法で十分感動できると思う。
小説版に奇妙だけど確固とした文法が存在するように、このアニメイシヨンもただ奇抜なだけでなく、ちゃんとした文法の元にこういった表現がされているのだと感じた。その文法はまだ理解できていないが……。
今回、おぼろげながら理解できた「アニメイシヨン文法」は、ハイライトの色分けだ。
小説の「古代ローマカラテ使いは即死フラグ」と同様に、「ピンクハイライトは即死フラグ」という風に楽しんだり、「黄色ハイライトは強敵だ」と登場した瞬間に認識することができるようになる……のかな。
以降、考察・感想を列挙。
翻訳作品であるということを、オープニングの上部にファンサブのように歌詞を載せることで表現してるのも面白かった。
トランスフォーマーみたいな場面転換も、原作のいわゆる「バメンテンカンホー」。
ナラクがああいう感じなのも、無印漫画のニンジャソウル表現に近いものなのかもしれない。折り鶴の「シ・ニンジャ」、ローポリゴンロッカーの「パンク・ニンジャ」みたいなものだろう。
小さいところで言えば、ミュルミドンの役に立たないUNIXが面白かった。解析にけっこうな時間がかかったのに、結局表示されたのが「スシを食べている」だけなんて。
あと、ラオモト=サンの言い放った一言が何と言っているのかわからなかったんだけど、三周目くらいでようやく「捨て置けぃ!」だとわかった。
オフェンダー=サンの残虐発言が少なかったのがちょっと不満。「それじゃあつまんねえじゃんかよ。もっと命乞いしろよ!」を聞きたかった。
逆にマッポに囲んで足蹴にされるサラリマンの酩酊演技はオーディオドラマより上手くなってた気がする。
まだ書き足りないこともあるけど、とりあえず今回はここで終わる。またあとで追記とかする。翻訳チームの発言や、その他の場所でのインタビューなどを引用しながら記事を書きたい。
次回以降も楽しみだ。マシン・オブ・ヴェンジェンスやゼロ・トレラント・サンスイをアニメイシヨンで観てみたい!
というわけで、この記事に引用を追記する形で終わらせる。
もちろん、「アニメ化前に想像していたアニメ版ニンジャスレイヤー」とはかけ離れていたけれど、これはこれで「ニンジャスレイヤーのアニメ版」だな、と感じた。
あの独特すぎるアニメスタイルだけど、原作小説が独特すぎるスタイルなので、その雰囲気をアニメ化したらああなるんだろうなあ、と。
140文字という制限からくる簡略化された文体がフラッシュアニメ風描写になってて、
対スキャッター戦ではコピペ戦闘描写も再現されてて、
それでいてオフェンダーを床に叩きつけたり、第1話のクライマックスとなるミュルミドン戦の戦闘描写はかっこよく動く。
原作小説を初めて読んだ時に感じた不思議な感じを追体験できるアニメだった。
重篤ニンジャヘッズが原作小説の独特な文法、コトダマを理解して作品世界にのめり込んでいったように、このアニメイシヨン独自のフォーマットを理解すれば楽しくなってくると思うんだ。
ヘッズの方々は原作小説を読み進めていくうちに、脳内に「ニンジャスレイヤー用デコーダー」みたいなのが形成されたと思う。「マルノウチ・スゴイタカイビル」や「オハギ」をシリアスワードとして認識し、「イヤーッ」「グワーッ」のコピペで激しいカラテを想像できるデコーダーだ。
アニメイシヨン用のデコーダーが構築されれば、この表現技法で十分感動できると思う。
小説版に奇妙だけど確固とした文法が存在するように、このアニメイシヨンもただ奇抜なだけでなく、ちゃんとした文法の元にこういった表現がされているのだと感じた。その文法はまだ理解できていないが……。
今回、おぼろげながら理解できた「アニメイシヨン文法」は、ハイライトの色分けだ。
ハイライトの色について
ハイライトの色でキャラを分類すると、- 緑:ニンジャスレイヤー
- ピンク:オフェンダー、スキャッター、ミュルミドン
- 黄色:ダークニンジャ、ラオモト
- 白(無し):フジキド、クローンヤクザ、オイラン、マッポ、ヤモト、その他一般人
- 水色:ナンシー
- オレンジ:ゲンドーソー、ユカノ
小説の「古代ローマカラテ使いは即死フラグ」と同様に、「ピンクハイライトは即死フラグ」という風に楽しんだり、「黄色ハイライトは強敵だ」と登場した瞬間に認識することができるようになる……のかな。
以降、考察・感想を列挙。
翻訳作品であるということを、オープニングの上部にファンサブのように歌詞を載せることで表現してるのも面白かった。
トランスフォーマーみたいな場面転換も、原作のいわゆる「バメンテンカンホー」。
ナラクがああいう感じなのも、無印漫画のニンジャソウル表現に近いものなのかもしれない。折り鶴の「シ・ニンジャ」、ローポリゴンロッカーの「パンク・ニンジャ」みたいなものだろう。
小さいところで言えば、ミュルミドンの役に立たないUNIXが面白かった。解析にけっこうな時間がかかったのに、結局表示されたのが「スシを食べている」だけなんて。
あと、ラオモト=サンの言い放った一言が何と言っているのかわからなかったんだけど、三周目くらいでようやく「捨て置けぃ!」だとわかった。
オフェンダー=サンの残虐発言が少なかったのがちょっと不満。「それじゃあつまんねえじゃんかよ。もっと命乞いしろよ!」を聞きたかった。
逆にマッポに囲んで足蹴にされるサラリマンの酩酊演技はオーディオドラマより上手くなってた気がする。
まだ書き足りないこともあるけど、とりあえず今回はここで終わる。またあとで追記とかする。翻訳チームの発言や、その他の場所でのインタビューなどを引用しながら記事を書きたい。
次回以降も楽しみだ。マシン・オブ・ヴェンジェンスやゼロ・トレラント・サンスイをアニメイシヨンで観てみたい!
4/18追記
翻訳チームの発言などを引用して新たに記事を書くつもりだったが、「このアニメは意図して作られたものなのか?」「なぜこのようになったのか?」という考察記事は結構出ていて、わたしがいまさら書くことでもないな、と思ったので書かない。作品そのものではない、制作事情的な部分への考察が好きではないというのもある。というわけで、この記事に引用を追記する形で終わらせる。
2015年4月15日水曜日
アニメ『SHOW BY ROCK!!』track01, 02の軽い感想
アニメ版SHOW BY ROCK!!、面白い。みんな可愛い。ミューモンのCGとか、とても良く出来ててすごく可愛い。もちろん普通のアニメのところも可愛い。思わず飛び跳ねたくなるレベルの可愛さですね。
1話は色々説明が多い回だった。世界の説明があるのが親切でいいですね……。この前までGレコとかユリ熊嵐とか観てたので、この説明台詞の多い第1話が逆に新鮮に思える。
2話も説明は多かったけど、シンガンのやりとりとか、いつもゲームのエピソードで見ているようなやりとりがアニメになってるだけでも観てて楽しかった。
社会人のロムがなかなか目立ってて面白かったですね。職歴も履歴書もない神ももうちょっと目立って欲しかったけれど。
モアの「ぴゅる~」って言う語尾は母星語由来なんだとか、MIDIシティは音楽都市国家なんだとか、ちょっとした設定も興味深い。あとシアン可愛い。
シアンが成り行き、モアは母星から観察を兼ねて、レトリーは友達作りのためにバンドをしているらしいが、チュチュはどうなんだろう。彼女だけはまともな理由なのだろうか?
背景で流れるバイガンバーVのCMとか、しにものぐるいとドロップアウト先生のステッカーとか、小ネタもあった。ピグマカロンみたいな感じでチラッとでも他のバンドのキャラも出てくれるといいな。
わたしが好きなバンドはしにものぐるい、ドーリィドルチ、ラペッジオート、忍迅雷音、ウワサノペタルズ、雫シークレットマインドです。
次回はクリティクリスタが出るんですね! 動いてるホルミーが観れるのが楽しみ。クリクリの中ではホルミーが一番好き。
では、アプリの春イベントに精を出してきます
1話は色々説明が多い回だった。世界の説明があるのが親切でいいですね……。この前までGレコとかユリ熊嵐とか観てたので、この説明台詞の多い第1話が逆に新鮮に思える。
2話も説明は多かったけど、シンガンのやりとりとか、いつもゲームのエピソードで見ているようなやりとりがアニメになってるだけでも観てて楽しかった。
社会人のロムがなかなか目立ってて面白かったですね。職歴も履歴書もない神ももうちょっと目立って欲しかったけれど。
職歴の無い神の活躍の例① |
履歴書もない神の活躍の例② |
モアの「ぴゅる~」って言う語尾は母星語由来なんだとか、MIDIシティは音楽都市国家なんだとか、ちょっとした設定も興味深い。あとシアン可愛い。
シアンが成り行き、モアは母星から観察を兼ねて、レトリーは友達作りのためにバンドをしているらしいが、チュチュはどうなんだろう。彼女だけはまともな理由なのだろうか?
背景で流れるバイガンバーVのCMとか、しにものぐるいとドロップアウト先生のステッカーとか、小ネタもあった。ピグマカロンみたいな感じでチラッとでも他のバンドのキャラも出てくれるといいな。
わたしが好きなバンドはしにものぐるい、ドーリィドルチ、ラペッジオート、忍迅雷音、ウワサノペタルズ、雫シークレットマインドです。
次回はクリティクリスタが出るんですね! 動いてるホルミーが観れるのが楽しみ。クリクリの中ではホルミーが一番好き。
では、アプリの春イベントに精を出してきます
2015年4月14日火曜日
ハイモック進捗「完成間近」
ハイモック完成間近。なかなか良く仕上がってるのでは?
本体はツヤ消しまで終わったので完成。前よりツヤ消しが上手くなったと思う。
あとはビームライフルだけ。ビームライフルも接着やヤスリがけ、大まかな塗装やスミ入れは終わっているので、あとは塗装の修正とツヤ消しだ。
後ろ。
来週からは、妄想MS「ザク偽装装甲ジム」を作り始めたい。ではまた。
2015年4月12日日曜日
audio要素のplayイベント、endedイベント、readyStateのおかしな動きに対応す るための足掻き
※この記事の筆者は趣味レベルでしかjavascriptをいじっていないので、以下にある方法は最適解ではないと思う。もっと良い方法があれば教えてほしいです。
html5のaudioを使って音声を再生する際、playイベントやendedイベントがうまく発生しなかったり、Android版ChromeにおいてreadyStateが正常に判断されないことがあって困った。
play、endedイベントのバグだが、コントローラーを使ってる時はいいのかもしれないが、別の要素のクリックイベントから.play()した場合、IE(10, 11で確認)やAndroid版Chromeで発生する。
まず、IEでは2度目の再生時にはplayイベントが発生しないらしい。また、IEやAndroid版Chromeではたまにendedイベントが発生しないことがある。endedイベントが発生しない原因はよくわからない。わたしが作っているサイトでは、ひとつのページに複数のaudioを動的に生成しているので、その弊害なのかもしれない。
とりあえずそういうバグ(ブラウザの仕様の違い?)をある程度は解消できる処置の例を以下に。
ちなみに再生直後、最初のtimeupdateイベント発生時のcurrentTimeは、IE11では0、Chromeではだいたい0.16~0.198の間、Firefoxではだいたい0.03だった。
なので、このようにイベントを設定する。
audio.addEventListener("timeupdate", function(){
if(Math.floor(this.currentTime*10)<=1 && !this.paused){
playStart(this); //再生開始時の処理
}
}, false);
jQueryを使うなら、
$("audio").bind("timeupdate", function(){
if(Math.floor(this.currentTime*10)<=1 && !this.paused){
playStart(this); //再生開始時の処理
}
});
これで再生開始判定ができる。
「Math.floor(this.currentTime*10)<=1(現在の再生位置の1/10の位が1以下か否か)」で最初のtimeupdateであるかどうかを判定している。
これだけでも一応は動くのだが、「!this.paused(一時停止中でない)」も判断している。たとえば再生終了時処理などで音声停止時に「audio.currentTime = 0(再生位置を冒頭に戻す)」をすると、その時にもtimeupdateが発生する。それを弾くためだ。
わたしの場合はこれだけでちゃんと判定できたが、ループ再生する場合などはもっと条件を加えなければならないだろう。
再生開始時の処理を
function playStart(playingAudio){
endTimer = setTimeout(
function(){
playEnd(playingAudio); //再生終了時の処理
},
playingAudio.duration * 1100
);
}
などのように設定する。
setTimeoutの時間設定はミリ秒単位、audio.durationで取得される音声再生時間は秒単位なので1000倍しないといけない。また、この処理は保険なので、endedイベントが問題なく発生すれば必要ない。よってタイマーは「再生時間*1000*1.1 ミリ秒後」に設定している。
そしてendedイベントは次のように設定する。
audio.addEventListener("ended", function(){
clearTimeout(endTimer);
playEnd(this); //再生終了時の処理
}, false);
jQueryを使うなら、
$("audio").bind("ended", function(){
clearTimeout(endTimer);
playEnd(this); //再生終了時の処理
});
clearTimeoutで保険のタイマーを解除するのを忘れずに。
そこで、読み込みが完了していない音声についてはclickイベント時にaudio.load();を行わねばならぬのだが、読み込みが完了したか否かを教えてくれるはずのaudio.readyStateが嘘をつく事がある……。
例えば、clickイベントに以下のような設定をすれば、「読み込まれていない音声は読み込んでから再生する」ことができるはずなのだ。
if(audio.readyState != 4){
audio.load();
}
audio.play();
しかしAndroid4.1.1, Chrome 28.0の環境で、読み込まれてもいないのにaudio.readyStateが「4(読み込み完了)」を返してきやがった。当然ifの中は実行されず、読み込みはされず、読み込まれていないので再生もできない。
そこで、「読み込まれていないならaudio.durationがNaNになるはずだから、isNaN(audio.duration)で判定すればいいんじゃないか?」と思ったのだが、それでもダメだった。読み込みが完了していない音声のdurationが「100」を返したのだ!
しかし、読み込まれていない音声は一律で100を返してくれるので、まだ親切だ。それで判定すれば良い。
次のように変えよう。
var adD = audio.duration;
if(isNaN(adD)||adD==100){
audio.load();
}
audio.play();
極稀に音声の長さがきっかり100秒というデータもあり得るだろうが、そんなのは無視していい例外だろう。また、もしそういうのがあったとしても、再生のたびにロードされるだけなのでそこまで問題はない。
あと、Androidデフォルトのブラウザだとさらによくわからないことになっているらしく、これでも読み込んでくれないことがある模様。今後の課題かなあ。
html5のaudioを使って音声を再生する際、playイベントやendedイベントがうまく発生しなかったり、Android版ChromeにおいてreadyStateが正常に判断されないことがあって困った。
play、endedイベントのバグだが、コントローラーを使ってる時はいいのかもしれないが、別の要素のクリックイベントから.play()した場合、IE(10, 11で確認)やAndroid版Chromeで発生する。
まず、IEでは2度目の再生時にはplayイベントが発生しないらしい。また、IEやAndroid版Chromeではたまにendedイベントが発生しないことがある。endedイベントが発生しない原因はよくわからない。わたしが作っているサイトでは、ひとつのページに複数のaudioを動的に生成しているので、その弊害なのかもしれない。
とりあえずそういうバグ(ブラウザの仕様の違い?)をある程度は解消できる処置の例を以下に。
playイベントが発生しないことがある問題
再生開始をtimeupdateで監視する。timeupdateイベントは再生位置の変更時に発生する。音声の再生位置をcurrentTimeで取得すると1/1000秒の位まで表示されるのだが、timeupdateイベントはだいたい1/4秒毎に発生するっぽい(PC版Chrome、PC版Firefox31、IE11で確認)。ちなみに再生直後、最初のtimeupdateイベント発生時のcurrentTimeは、IE11では0、Chromeではだいたい0.16~0.198の間、Firefoxではだいたい0.03だった。
なので、このようにイベントを設定する。
audio.addEventListener("timeupdate", function(){
if(Math.floor(this.currentTime*10)<=1 && !this.paused){
playStart(this); //再生開始時の処理
}
}, false);
jQueryを使うなら、
$("audio").bind("timeupdate", function(){
if(Math.floor(this.currentTime*10)<=1 && !this.paused){
playStart(this); //再生開始時の処理
}
});
これで再生開始判定ができる。
「Math.floor(this.currentTime*10)<=1(現在の再生位置の1/10の位が1以下か否か)」で最初のtimeupdateであるかどうかを判定している。
これだけでも一応は動くのだが、「!this.paused(一時停止中でない)」も判断している。たとえば再生終了時処理などで音声停止時に「audio.currentTime = 0(再生位置を冒頭に戻す)」をすると、その時にもtimeupdateが発生する。それを弾くためだ。
わたしの場合はこれだけでちゃんと判定できたが、ループ再生する場合などはもっと条件を加えなければならないだろう。
endedイベントが発生しないことがある問題
これは保険をかけておくことで解消した。とりあえずendedイベントに終了時処理を設定しておいて、再生開始時処理にもaudio.duration(+遊び)秒後に終了時処理を行うようにしておくのだ。再生開始時の処理を
function playStart(playingAudio){
endTimer = setTimeout(
function(){
playEnd(playingAudio); //再生終了時の処理
},
playingAudio.duration * 1100
);
}
などのように設定する。
setTimeoutの時間設定はミリ秒単位、audio.durationで取得される音声再生時間は秒単位なので1000倍しないといけない。また、この処理は保険なので、endedイベントが問題なく発生すれば必要ない。よってタイマーは「再生時間*1000*1.1 ミリ秒後」に設定している。
そしてendedイベントは次のように設定する。
audio.addEventListener("ended", function(){
clearTimeout(endTimer);
playEnd(this); //再生終了時の処理
}, false);
jQueryを使うなら、
$("audio").bind("ended", function(){
clearTimeout(endTimer);
playEnd(this); //再生終了時の処理
});
clearTimeoutで保険のタイマーを解除するのを忘れずに。
audio.readyStateがまともに判定されない問題
PCであればpreloadされたり、audio.play()すれば読み込みもしてくれるので問題ないのだけど、スマフォやタブレットではそうも行かない。スマフォ、タブレットではユーザーの行動を伴わなければ音声データの読み込みが行われないのだ(そのへんの挙動はこのページに詳しい)。そこで、読み込みが完了していない音声についてはclickイベント時にaudio.load();を行わねばならぬのだが、読み込みが完了したか否かを教えてくれるはずのaudio.readyStateが嘘をつく事がある……。
例えば、clickイベントに以下のような設定をすれば、「読み込まれていない音声は読み込んでから再生する」ことができるはずなのだ。
if(audio.readyState != 4){
audio.load();
}
audio.play();
しかしAndroid4.1.1, Chrome 28.0の環境で、読み込まれてもいないのにaudio.readyStateが「4(読み込み完了)」を返してきやがった。当然ifの中は実行されず、読み込みはされず、読み込まれていないので再生もできない。
そこで、「読み込まれていないならaudio.durationがNaNになるはずだから、isNaN(audio.duration)で判定すればいいんじゃないか?」と思ったのだが、それでもダメだった。読み込みが完了していない音声のdurationが「100」を返したのだ!
しかし、読み込まれていない音声は一律で100を返してくれるので、まだ親切だ。それで判定すれば良い。
次のように変えよう。
var adD = audio.duration;
if(isNaN(adD)||adD==100){
audio.load();
}
audio.play();
極稀に音声の長さがきっかり100秒というデータもあり得るだろうが、そんなのは無視していい例外だろう。また、もしそういうのがあったとしても、再生のたびにロードされるだけなのでそこまで問題はない。
あと、Androidデフォルトのブラウザだとさらによくわからないことになっているらしく、これでも読み込んでくれないことがある模様。今後の課題かなあ。
2015年4月9日木曜日
Go! プリンセスプリキュア キューティーフィギュア
パッケージを見たところ、わりと出来が良さそうだったので買った。税込み410円、全3種なので3つで計1,230円だ。
フローラの上半身とトゥインクルは普通の梱包に加え、エアキャップに包まれていた |
正面 |
左斜め前 |
右斜め前 |
後ろ |
塗りは少しはみ出ているところもあるが、価格からすると十分なクォリティだ。髪の毛のグラデーションなどもなかなか良いのではないだろうか。
フローラとマーメイドは下半身が分割されていて開封後に差し込むのだが、トゥインクルだけ組み立て済みだった。なんでだろう。
あと、ハピネスチャージのキューティーフィギュアは買っていないので分からないが、ドキドキまでは台座がクリアピンクじゃなかったっけ? この変更はコストカットの一環だろうか。
登録:
投稿 (Atom)