PetitKara インストールメモ

  • balenaEtcher は管理者権限で起動した方がいいかも
  • 初回起動時、自動的にパーティションサイズを MicroSD サイズに変更してから再起動される
  • 再起動後に OS の設定画面となる。アカウントパスワードは無しにする。Wi-Fi は接続する。
  • Wi-Fi の接続は、OS の設定画面を閉じてしまった場合は、デスクトップ右上の Wi-Fi アイコンで設定できる。
  • Terminal でスクリプト実行。実行後は自動的に再起動され、PetitKara が起動する。

ラズパイ用ケース「JBM-009」の開け方・閉め方

ラズパイとその追加音源ボードを収めるためのケース「JBM-009」を購入したのだが、組み立て方のマニュアルが無かったので、ここに整理しておく。

パーツ

  • Raspberry Pi 3 Model B Plusラズパイ本体:Raspberry Pi 3 Model B+(element14 版)
  • DAC HAT JBM-001追加音源ボード:JustBoom DAC HAT JBM-001

  • DAC HAT Case JBM-009ケース:JustBoom DAC HAT Case JBM-009

ケースの開け方

  1. 開け方1右の写真の青丸部分をケースの内側方面に向かって押すと内部のかみ合わせが緩くなるので、押しながら上に向かってスライドさせるようにする。
  2. 開け方2右の写真のような感じで開く。
  3. 開け方3横から見ると右のような感じ。
  4. Openフタを外した後、側面の 2 枚のパネルを上にスライドさせて外す。

ケースの閉め方

  1. Onラズパイ本体の上に追加音源ボードを載せる(メインのコネクタで接続する)。
  2. gomケース底面に 4 つのゴム足を取り付ける。……べきなのだが、うまくゴム足がハマらない(貫通しない)ので諦めた。ちなみに、ゴム足の広い方がケースの内側だと思う。
  3. sideケースの側面パネル 2 枚を、ボード群に取り付ける。
  4. side2片側の側面パネルは上下が分かりづらいので注意する。小さな 4 つの穴が横に並んでいるほうが下。側面パネル内側にある横方向の溝と、ボード群が合うようにする。
  5. syunoケースの上方向から、ボード群+側面パネル群を、下方向にスライドさせるようにして、ケースに入れる。入れている途中はラズパイ本体のコネクタ類がケースに干渉するので、ケースを内側から外側へ押すようにして歪めて広げながら入れるしかないと思う。ケースにもコネクタにも負荷がかかるので、正直あまりケースへの出し入れはしたくない。
  6. Close1ケースのフタを閉める。当然ながら、この状態ではコネクタとケースの干渉は無い。
  7. Close2LAN 側は右の写真のような感じ。

補足

microsdケースを閉めた状態でもラズパイ本体から MicroSD カードの抜き差しができる。

microsd2ケースを裏返した状態(ケースのロゴが下の状態)で、MicroSD の表面が見える向きで挿す。

※より良いケース開け閉めの方法をご存じの方は教えてください。




ラズパイ持ちカラシステム「PetitKara」体験した

PetitKara筐体Raspberry Pi(ラズベリーパイ)で動く持ち込みカラオケシステム「PetitKara」を体験したのでまとめておく。

PetitKara の特徴をまとめると、

【メリット】
  • 荷物が軽く小さくなる
  • キビキビ動く
  • シンプルで分かりやすい UI
【デメリット】
  • H.265 が再生できない
  • 参加者がインターネット使えなくなる
  • ラズパイの敷居が高い
だと感じた。

PetitKara の概要

PetitKara接続PetitKara は、ハードウェアとしてはラズパイに DAC ボードを付加したものを使う。映像を HDMI、音声を RCA で出力する。参加者が持ってくる USB メモリを 4 本まで挿せる。(持ちカラ中は)パソコン不要。

ソフトウェアは、リクエストシステムが PetitKara で、動画再生はデフォルトのプレーヤーを使う。

参加者は、各自のスマホでブラウザベースでリクエストを行う。

PetitKara の機能

参加者がスマホから使える機能としては、主に以下のようなものがある。
  • トップ画面ログイン(名前登録)
    PetitKara トップページで自分の名前を入力してログインする。
  • 検索結果ファイル検索
    USB メモリ内の動画ファイルをファイル名で検索できる。
    スペースで複数キーワードを入れると AND 検索となる。
    フォルダー名も検索対象。
  • 検索結果詳細プレビュー
    検索した動画のプレビュー再生を行える。
  • 音声トラック選択予約
    目的の動画であると確認できたら、予約する。
    予約時に、コメント入力や、音声トラック選択(動画内に複数音声がある場合)が行える。
  • 音量調整再生コントロール
    再生中の動画の音量調整や、一時停止などが行える。
その他、リクエスト順番を手動で変更する機能などもある。

メリット 1:荷物が軽く小さくなる

ハードウェアがラズパイなので手のひらサイズ。しかも重さが驚くほど軽く、スマホより軽いかもしれない。100g~200g くらいしかないのではないか。

これにAC アダプタと RCA-RCA ケーブルというのが機材係の最小構成(HDMI ケーブルはディスプレイ側のものを使用する場合)。

ノーパソで持ちカラしようとすると A4 サイズの筐体と 1kg くらいの重量を運搬せねばならず(スティック PC という選択肢もあるが操作性に難がある)、PetitKara のコンパクトさは頭抜けている。

メリット 2:キビキビ動く

PetitKara はキビキビ動く。

まず起動が速い。体感なので測定はしていないが、ラズパイの電源を入れて 1 分もすれば利用可能になるくらいのイメージ。

検索やその他の操作もすぐに反応し、ストレス無く操作できる。今回は全部で 700 曲程度での検索だったが、内部的に SQLite を使っているということだったので、曲数が大幅に増えても検索にかかる時間はそれほど増えないのではないだろうか。

メリット 3:シンプルで分かりやすい UI

PetitKara は機能を絞り込んでいる。例えば、USB メモリを抜き差しする時はシステムの再起動が必要とか、常に USB メモリ全体を検索対象とするので一部のフォルダーを使わない設定はできないとか、思い切って割り切った仕様としている。

これにより、考え方や UI がシンプルになり、初めての人でも迷わずに使える簡単な使い勝手を実現している。

デメリット 1:H.265 が再生できない

映像コーデックに H.265(HEVC)を使っている mp4 動画を再生しようとするとシステムが止まり、再起動が必要となる。

新しい動画はかなり H.265 が増えてきているので致命的なデメリットといえるが、ラズパイの仕様上どうしようもない。現行のラズパイは 3 だが、次世代の 4 になっても H.265 がサポートされるかは不明とのこと。

デメリット 2:参加者がインターネット使えなくなる

参加者がスマホで PetitKara を使う際、まず最初にラズパイが提供する Wi-Fi に接続し、LTE を無効にする必要がある。

ラズパイが提供する Wi-Fi は持ちカラシステムのみを提供し、インターネットへの接続はできないので、Google や SNS などあらゆる情報からシャットアウトされる。

ラズパイ本体の有線 LAN を WAN につなげばインターネット接続は可能となるが、持ちカラする場所では普通それは不可能。

デメリット 3:ラズパイの敷居が高い

そもそもラズパイが一般的ではないという意味で、パソコンよりも導入の敷居が高い。

付属品も含めると家電量販店では手に入らないし、買った状態で電源を入れれば動くというものでもない。どうやってシステムを組んでいけばいいのか、パソコンに詳しい人でも知らなかったりする。「動くようになる」までの道のりが未知の領域。

まとめ

PetitKara のコンパクトさは何にも勝る魅力。この魅力が活かせる状態で使っていきたい。

具体的には、
  • 参加者が 4 人以下の小規模なオフ会(USB メモリ 4 本までのため)
  • 各自歌う曲を USB メモリに入れてきて、機材係の HDD が不要なオフ会(電源付き USB ハブを別途用意となるとコンパクトさが失われるため)
  • 古めの動画だけを使うと割り切れる場合
という状況であれば、手のひらサイズの PetitKara を見せびらかしてドヤ顔できると思う。

LINQ to SQLite で共通カラム部分をジェネリックで運用する

LINQ to SQLite を使っている中で、複数のテーブルに共通するカラム(列)がある場合、ヘルパー関数などをそれぞれのテーブルごとに手書きするのは大変だしメンテナンス性も悪い。ひとまとめにできないだろうか、というのを試行錯誤した結果、インターフェース+ジェネリックでいけることが分かったので整理しておく。

なお、LINQ to SQLite の基本的な事柄については「C# で SQLite を便利に使うサンプルコード(LINQ to SQLite)」を参照。

テーブル構造

フルーツの一覧を格納するフルーツテーブルと、肉の一覧を格納する肉テーブルがあるとする。フルーツテーブルと肉テーブルそれぞれのカラムのうち、ID と名前については両者共にカラムがあるものとする。

この場合、テーブル構造を定義するクラスは以下のようにする。

まず、共通カラム部分をインターフェースとしてまとめる。
public interface IFoodData
{
    // ID
    Int32 Id { get; set; }

    // 名前
    String Name { get; set; }
}

そのうえで、テーブル構造を定義するクラスにインターフェースを実装するようにする。例えばフルーツテーブルなら
[Table(Name = "t_fruit")]
public class TFruitData : IFoodData
{
    // --------------------------------------------------------------------
    // IFoodData 実装
    // --------------------------------------------------------------------

    // ID
    [Column(Name = "fruit_id", DbType = LinqUtils.DB_TYPE_INT32, CanBeNull = false, IsPrimaryKey = true)]
    public Int32 Id { get; set; }

    // 名前
    [Column(Name = "fruit_name", DbType = LinqUtils.DB_TYPE_STRING, CanBeNull = false)]
    public String Name { get; set; }

    // --------------------------------------------------------------------
    // TFruitData 独自項目
    // --------------------------------------------------------------------

    // 色
    [Column(Name = "fruit_color", DbType = LinqUtils.DB_TYPE_STRING, CanBeNull = true)]
    public String Color { get; set; }
}

のようにする。

共通カラムの操作

フルーツテーブルと肉テーブルに共通するカラム(ID、名前)について、操作をジェネリックでまとめることができる。例えば、名前でレコードを検索・表示する関数は以下のようになる。
private void QueryFoodByName<T>(String oKeyword) where T : class, IFoodData
{
    Console.WriteLine(LinqUtils.TableName(typeof(T)) + " 内で名前に「" + oKeyword + "」を含むレコードを検索");
    using (SQLiteConnection aConnection = CreateDatabaseConnection(DB_NAME_GENERIC))
    using (DataContext aContext = new DataContext(aConnection))
    {
        Table<T> aTableTest = aContext.GetTable<T>();
        IQueryable<T> aQueryResult =
                from x in aTableTest
                where x.Name.Contains(oKeyword)
                select x;
        Console.WriteLine("検索結果:" + aQueryResult.Count() + " 件");
        foreach (T aRecord in aQueryResult)
        {
            Console.WriteLine(aRecord.Name);
        }
    }
}

関数を呼びだす際は、
QueryFoodByName<TFruitData>("hoge");
QueryFoodByName<TMeatData>("fuga");

のようにする。

以上により、テーブル名が異なる複数のテーブルに共通するカラムの操作を、1 つのコードにまとめることができた。

継承でやってはどうか?

テーブル構造を定義するクラスを、インターフェースではなく継承で作るのはどうだろうか。

つまり、IFoodData をインターフェースではなく通常のクラスとして宣言してそれを基底クラスとし、TFruitData や TMeatData をそこから派生させる形にする。

しかし残念ながらそれはうまくいかなかった。

データベース内にテーブルを作成する段階で、「型 'TestLinqToSqlite.IFoodData' のデータ メンバー 'Int32 Id' は型 'TFruitData' のマッピングの一部ではありません。メンバーは継承階層のルートより上のメンバーですか?」というようなエラーが発生してしまう。

サンプルコード

以上をまとめたものを、サンプルコードとして公開する。

サンプルコードアプリの使い方

  • TestLinqToSqlite_Genericジェネリックの「DB 作成」ボタンをクリックすると、フルーツテーブルと肉テーブルを持つデータベースが作成される。
  • 「検索」ボタンをクリックすると、フルーツテーブルと肉テーブルそれぞれから検索が行われ、結果がコンソールに表示される。なお、検索はジェネリックを使用した 1 つのコードで行われている。
なお、サンプルコードアプリには基本操作の欄もあるが、こちらについては「C# で SQLite を便利に使うサンプルコード(LINQ to SQLite)」を参照。

参考資料

更新履歴

  • 2019/04/09 初版。






















ゆかりすたー METEOR Ver 1.50 β 公開

Meteorゆかりすたー METEOR(メテオ)の新バージョン、Ver 1.50 β を公開しました。

ゆかりすたー METEOR はニコカラ動画ファイルを整理し、「ゆかり」(持ち込みカラオケ用のブラウザリクエストツール)から検索できるようにするツールです。データベースを活用することにより、タイアップしている番組名や歌手名などの付加情報を含めて整理するので、単なるファイル名検索にとどまらない高い検索性を提供することができるようになります。

ゆかりすたー METEOR は、ニコカラりすたーおよび初代ゆかりすたーの後継ソフトとして開発しています。ニコカラりすたーは一時点でのリスト化機能のみを提供していましたが、ゆかりすたー METEOR は、ゆかりと連携した高度な検索性の提供を目的に、リアルタイムでのリスト化機能と検索用データベース構築機能を提供します。

更新内容

HTML 系リストの利便性を強化しました。上部のディレクトリーナビゲーションを改善し、また、下部には隣のリストへのリンクを付けました。さらに、ゆかり用リストには、予約一覧ページへのリンクも付けました。

ファイル一覧ウィンドウでの検索ウィンドウに関する挙動も改善しています。

その他、細かい改善をしています。今回の更新内容を含む課題対応履歴についてはこちらをご覧ください。

Windows Defender について

Windows Defender がゆかりすたー METEOR の動作に悪影響を及ぼす場合があり、エラーが発生したり、処理速度が異常に遅くなったりする例が報告されています。

ゆかりすたー METEOR を使う際は、Windows Defender を使わないことをお薦めします。

詳細についてはこちらをご覧ください。

更新・新規インストール方法

ゆかりすたー METEOR は自動更新機能を搭載しています。既にゆかりすたー METEOR をお使いの方は、ゆかりすたー METEOR を起動すると、3 日以内に更新のアナウンスが表示されます。

すぐにアップデートしたい場合は、環境設定ウィンドウのメンテナンスタブを開き、「今すぐ最新情報を確認する」ボタンをクリックすることで、アップデートを開始することができます。

Ver150to168右のようなダイアログが表示されますので、「はい。今すぐ更新します」をクリックしてください。

ゆかりすたー更新版インストール画面に案内が表示されますので、案内に従って操作をして下さい。

ゆかりすたー更新完了ほどなくして、ゆかりすたー METEOR の更新が完了します。

これから初めてゆかりすたー METEOR を使う方(新規の方)や、手動でゆかりすたー METEOR を更新したい方は、下記サイトからどうぞ。

旧作について

ニコカラりすたーおよびゆかりすたー(初代)は開発を終了しました。

今後はゆかりすたー METEOR をご利用下さい。
カウンター


カンパのお願い
Amazon でお買い物の際は、下記で検索して頂けたら幸いです。
記事検索
最新コメント
  • ライブドアブログ