0
0

More than 1 year has passed since last update.

Kiiteで単曲ループ再生 【ブックマークレット】

Last updated at Posted at 2022-11-13

はじめに

こんにちは!

Qiita記事投稿をさぼってた人です()

今回は、最近はまっているKiiteで実装されていない、単曲ループ再生の方法を紹介します!

結論

javascript:(function() { if (musicPlayer.loop) { musicPlayer.next = function () { var a = this.current + 1 < this.playlist.length ? this.current + 1 : 0; this.loop ? 0 === a && this.shuffled && this.options.playlistOptions.shuffleOnLoop && this.playlist.length > 1 ? this.shuffle(!0, !0) : this.play(a) : a > 0 && this.play(a) }; alert('ループを解除しました。'); musicPlayer.loop = false; } else { musicPlayer.next = function() { musicPlayer.play(musicPlayer.current) }; alert(`${musicPlayer.currentMedia.title}をループします。`); musicPlayer.loop = true; } }());

これをコピー、ブックマークに追加するだけです!

詳細説明

まず、ブックマークマネージャーを開きます。
ctrl + shift + O で開けることが多い)

image.png
右上の点三つを押します。

image.png
でてきたポップアップの[新しいブックマークを追加]をクリック

image.png
「名前」 にわかりやすい名前('KiiteLoop'とか)を入力し、
下の 「URL」 に、上の「javascript:」から始まるコードを貼り付けます。

技術的な話

Qiitaなので、少し技術的な話を...

これは、ブックマークレットと呼ばれる技術です。

ブックマークレット とは、ユーザーがウェブブラウザのブックマークなどから起動し、なんらかの処理を行う簡易的なプログラムのことである。携帯電話のウェブブラウザで足りない機能を補ったり、ウェブアプリケーションの処理を起動する為に使われることが多い。 ウィキペディア

ブックマークに追加した

javascript:

から始まるコードを実行してくれる技術
という認識でも問題はないと思います。

では、少し実験してみましょう。

ブックマークレットでalert

まずは、alertしてみましょう。

javascript:alert("Hello from Bookmarklet")

上で紹介した登録方法に沿って行うと、このような表示が出てくると思います。
image.png

このように。ブックマークレットを使うことで、超簡単にjsを実行できるようになります!

コードの解説

では、紹介したコードの解説をしていきましょう。

before
javascript:(function() { if (musicPlayer.loop) { musicPlayer.next = function () { var a = this.current + 1 < this.playlist.length ? this.current + 1 : 0; this.loop ? 0 === a && this.shuffled && this.options.playlistOptions.shuffleOnLoop && this.playlist.length > 1 ? this.shuffle(!0, !0) : this.play(a) : a > 0 && this.play(a) }; alert('ループを解除しました。'); musicPlayer.loop = false; } else { musicPlayer.next = function() { musicPlayer.play(musicPlayer.current) }; alert(`${musicPlayer.currentMedia.title}をループします。`); musicPlayer.loop = true; } }());

わかりにくいので、きれいにしましょう。

after
javascript:
(function() {
  if (musicPlayer.loop) {
    musicPlayer.next = function () {
      var a = this.current + 1 < this.playlist.length ? this.current + 1 : 0;
      this.loop ? 0 === a && this.shuffled && this.options.playlistOptions.shuffleOnLoop && this.playlist.length > 1 ? this.shuffle(!0, !0) : this.play(a) : a > 0 && this.play(a)
    };
    alert('ループを解除しました。');
    musicPlayer.loop = false;
  } else {
    musicPlayer.next = function() {
      musicPlayer.play(musicPlayer.current)
    };
    alert(`${musicPlayer.currentMedia.title}をループします。`);
    musicPlayer.loop = true;
  }
}());

これで、見やすくなりましたね。
順を追って説明していきます。

即時関数

ブックマークレットで複数行のコードを使いたかったので、即時関数と呼ばれるものを使いました。
構文は、

即時関数
(function() {
  // 実行したいコード
}());

です。

これにより、関数に名前を付けない状態ですぐに実行されます。
後ろについてる () は引数を入れる場所です。
つまり、

引数付き 即時関数
(function(x, y) {
  // 実行したいコード
}(1, 2));

こういうことができます。

musicPlayer

Kiiteには、musicPlayerというものがあります。
これにアクセスすることで、再生中の曲などのKiiteの情報を取得できます。

.loop

そのなかに、 .loop というものが用意されています。
これは、何も仕事をしていません。
これのt/fをいじっても何も反応しません。
なので、musicPlayerの条件分岐に有効活用させてもらいました。

ループをするコードを実行したら、この変数を true にし、
解除したら false にしています。

.next

ここには、次再生する曲を決める、このようなコードが記述されていました。

これは、簡単に言うと、次の曲のプレイリスト番号用意し、再生するものです。

musicPlayer.next = function () {
  var a = this.current + 1 < this.playlist.length ? this.current + 1 : 0;
  this.loop ? 0 === a && this.shuffled && this.options.playlistOptions.shuffleOnLoop && this.playlist.length > 1 ? this.shuffle(!0, !0) : this.play(a) : a > 0 && this.play(a)
};

ここに、現在再生している曲の番号を与えるようにすると、同じ曲が再生されるようになります。

musicPlayer.next = function() {
  musicPlayer.play(musicPlayer.current)
};

.currentMedia

これは、再生中の楽曲の情報が格納されています。
ここでは、この中の title を取得しました。
これで、ループする楽曲をポップアップでお知らせできるようになりました。

最後に

今年もアドベントカレンダーのくそアプリ選手権に出場します!!!
最近手に入れた機械学習を活用して面白いものを用意しています!

どうぞ、よろしくお願いします!!!!!!!!

では ノシ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0