smalruby icon indicating copy to clipboard operation
smalruby copied to clipboard

Add play_until_done method.

Open sada opened this issue 7 years ago • 0 comments

play_until_done メソッドを追加しました。

鳴らした後で待つようにしていますが、それはScratchの「終わるまで()の音を鳴らす」ブロックの動作の以下を参考にしました。

https://jp.scratch-wiki.info/wiki/%E7%B5%82%E3%82%8F%E3%82%8B%E3%81%BE%E3%81%A7_()%E3%81%AE%E9%9F%B3%E3%82%92%E9%B3%B4%E3%82%89%E3%81%99(%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF)

終わるまで () の音を鳴らす ブロック(音ブロック/ スタックブロック)は、指定した音声を再生し、再生が終了するまで、スクリプトの実行を停止するブロックである。

口頭にて高尾さんに相談しましたが、DXRubyに再生中なのかを取得するメソッドがなかったので、DXRubySDLが読み込まれていない場合はNotImplementedError例外を発生させるようにしています。 DXRuby::Sound に再生中なのかを知るメソッドがありませんが、 Ayame/Ruby にはreadme.txtによるとありましたが、このメソッド以外も修正する必要があるので、こちらは使用していません。

https://github.com/mirichi/dxruby-doc/wiki

Ayame#playing? -> true/false 再生中の場合にtrueを返します。 一時停止中もtrueになります。

DXRubyのSoundクラスに再生中かを返すメソッドがないのを確認したのは、以下のドキュメントです。 http://mirichi.github.io/dxruby-doc/api/Sound.html

SDLの再生中なのかを取得するのは、以下のメソッドを使用しました。

https://www.kmc.gr.jp/~ohai/rubysdl_doc.html#label-347

SDL::Mixer.play?(channel) 指定したchannelが現在演奏していればtrueを、していなければ falseを返す。

SDL::Mixer.playMusic? SDL::Mixer.play_music? 音楽が演奏されていればtrue、していなければfalseを返す。

sada avatar Jan 17 '18 03:01 sada