takeyohのおぼえがき

気になったこと、試したことの記録です。

luaで音を制御

今回、オービスなどを見つけるレーダー探知機アプリをluaで作成しましたが、その時調べて実装した内容の覚書です。

下記の実装はluaアプリとして作成していますが、car modで独自に実装する場合でも、lua scriptで制御するパターンであれば、同じように制御可能です。

 

変数宣言、初期化

local sounds = ui.MediaPlayer()

 

再生する音データの設定 (sounddata.mp3というファイルと仮定)

sounds:setSource('./sounddata.mp3')

 

音データの設定時にすぐ再生

sounds:setSource('./sounddata.mp3'):setAutoPlay(true)

true:すぐ再生 false:すぐ再生はしない

 

再生音量設定

sounds:setVolume(1)

1の数字部分は0(音量ゼロ)~1(音量最大)の範囲で設定

 

音再生をループさせるかどうかの設定

sounds:setLooping(true)

true:ループ再生する false:ループ再生しない

 

音を再生

sounds:play()

 

音を停止

sounds:pause():setCurrentTime(0)

次playで再生すると最初から再生される。

 

音を一時停止

sounds:pause()

次playで再生すると止めた続きから再生される。

 

音をミュート(音は消えるけど、再生は続く?)

sounds:setMuted(true)

true:ミュートON false:ミュートOFF

 

これ以外にステータスをチェックするファンクションもあります。

音が再生中かどうか

sounds:playing()

戻り値がtrue →再生中 戻り値がfalse→停止中


あとは、リプレイとかで再生速度が変わった時の音再生スピードをリンクさせるかどうか?も選べるのかな・・・。(試してないのでわからないですが)
sounds:linkToSimulationSpeed(true)
true: リンクさせる  false:リンクさせない

ほかにもいろいろファンクションたくさんありますが、すべては検証できていません。
音だけでなく、動画も同じ制御になるようです。

あとはこれを組み合わせて制御します。

「最初に変数の宣言・初期化をしたら、音源sounddata.mp3を設定し、ボリュームは最大、ループありで再生」であれば、
スクリプト冒頭で、

local sounds = ui.MediaPlayer()

sounds:setSource('./sounddata.mp3')

と書いて、function update(dt)内で、音を鳴らすタイミング部分に

sounds:setVolume(1)

sounds:setLooping(true)

sounds:play()

と書けば再生が始まるし、音を止めたいタイミング部分では

sounds:ended()

または

sounds:pause()

で音が止まります。

 

これらを使って作ったレーダー探知機アプリはこちら。

youtu.be

説明文にアプリのダウンロードURLも書いてありますので、興味のある方はダウンロードしてスクリプトを実際見ていただくのが早いかと思います。

 

/* -----codeの行番号----- */