Archive for the ‘Linux’ Category

(技術的な詳細を書くのは大変だし、セキュリティ面の心配もあるので簡略化した)

僕はPC(Linux)とスマフォ(Android)でカレンダーを共有している(Googleなどは使わず、自分のサーバで実現している)のだが、ずっと、些細だけどムカつく「アラーム重複問題」に悩まされて来た。その現象を以下に書く。

  1. カレンダーの予定の通知時刻になると、LinuxのLightningとAndroidのカレンダーアプリ(DigiCal)から、同時または順次アラームが出る(省電力機能のためか、Androidは少し遅れることが多い)。
  2. 部屋に居る場合、Lightningのアラームを先に停め、遅れて出たAndroidのを停める。
  3. これで終わりならいいのだが、1分くらいすると、Androidのアラームが再び出る。 → イラっとする。

まったく鬱陶しいこの問題を、なかなか解決出来ずに居た。

まあ、部屋に居なければ問題は起こらないし、Androidのアラームを無視して停めなければいいのだが、今は勤めていないので部屋に居ることが多いし、性格上、アラームを停めないとLEDが点滅し続ける※のを見過ごす訳にはいかないw

※カレンダーアプリによっては、通知時刻からある程度時間が経つとアラームやLEDが自動で(勝手に)消えるものもあるが、それだと予定に気付かずに過ごしてしまう可能性があるので、消えないものを選んで使っている。

今まで何度も試したり調べたりしたのだが、その原因が昨日ようやく分かった。一言で書けば、LightningとAndroidのカレンダーアプリ・同期プログラムの相性だ。そして、どのプログラムも他に換えることができない。Lightningは僕にしてみれば最低レベルで使えるLinuxのカレンダーアプリで、それよりまともなものを探したがない。一方、Androidのアプリも同期プログラムも他にいいものがない。それでもいろいろ試したのだが、使い勝手、機能、性能、消費電力や通信データ量などが「許せる」もので問題が解決するものはなかった。

そういう訳で、昨日は随分試行錯誤したものの、結局、「解決不能」という結論になってしまった。

以下に、昨日の調査の結果推定した問題の起こる流れと、(その流れを前提として)問題を解決するために試したことを書く。

問題の起こる流れ

  1. 予定の通知の時刻になる。
  2. Lightningがアラームを出す。
  3. 僕がアラームを停める。
  4. Lightningは、なぜか、その予定をサーバに更新する(書き込む)。: おそらく、「アラームを停めた」という状態を保存するためだろう。
  5. DigiCalがアラームを出す。
  6. 僕がアラームを停める。
  7. DigiCalとカレンダー同期プログラムは、なぜか、サーバに更新を問い合わせる。: おそらく、省電力機能のために同期間隔が設定より長くなっていて、「起きたついでに」するのだろう。
  8. カレンダー同期プログラムは、サーバにLightningが更新した予定(アラームを停めたもの)があるので、それを取得する。
  9. 更新された予定がDigiCalに伝わり、予定の通知の時刻を少し過ぎているだけなので、DigiCalは(再度)アラームを出す。: 通知の時刻を大幅に過ぎている場合は出ないはず。

試したこと

  • Lightningが更新する処理に割り込んで、更新したように見せかけて、実は(サーバ内の情報を)更新しないようにした。 → Lightningは、更新後、御丁寧にも再度その予定を取得して確認し、更新されていないことに気付くのか(パニックになるのか)、アラームを停めてもダイアログが消えない。: 失敗
  • 同じく、Lightningが更新する処理に割り込んで、サーバ内の情報を更新する時に、Lightningが使いそうな部分だけ変更する(残りは元のままにする)ようにしてみた。 → Androidのカレンダー同期プログラムは、更新内容に関わらず書き込まれただけで変更されたとみなすようで、やっぱり、DigiCalはアラームを出す。: 失敗
  • 同じく、中身を何も変更せずに更新しても、上記の理由で駄目だった。: 失敗

LightningもDigiCalとカレンダー同期プログラムも、押し付けがましい余計なお世話をしてくれるので手こずっている(しかも、そういうのを解除できる設定などない)。もっとテキトーでいいのだがw

他には、Lightningがサーバへの書き込み後に行なう、本当に書き込まれたかの確認の処理に割り込んで、アラーム停止後はLightningが期待するように見せ掛けるようにし※、実際にはサーバには書き込まないようにすることが考えられるが、結局、カレンダーサーバの処理の一部を作るようなもので、大変だし、いつまで動くか分からない(いずれかの要素の動作が変わったら、駄目になる可能性が高い)など馬鹿らしいので、止めた。あとは、サーバのプログラムを改造することも考えられるが、上と同様の理由で止めた。

※今朝はこの処理の準備として、Lightningとサーバ間の通信パケットを見て、Lightningはアラーム停止後にどんな処理をしている(どんな情報を取得している)のか詳しく調べようかとも思ったのだが、勝算はないし面倒なので止めた。

まあ、気にしないのが一番なんだろうな。それができれば苦労しないんだがw

 

(10/7 13:20 わずかに修正)

  •   1
  •   0

先日買ったUSBオーディオインタフェース Focusrite Scarlett Solo (以下Scarlett)のファームウェアは、制御アプリ(Focusrite Control、以下FC)で自動確認・ダウンロードしている訳ではなく、ユーザが適宜webサイトを見て更新に気付いたら、自分でFCをダウンロード・インストールする必要があり、それを実行すれば通知が出ることが分かった。また、更新されたファームウェアはFCのインストール時に展開されることも分かった。

自分でwebサイトを見て更新をチェックするのは面倒だし(絶対に忘れる)、僕は基本的にWindowsを使っていないから、FCを動かすこと自体が面倒だ。とはいえ、ファームウェアはそれほど頻繁に変わらないだろうし、問題に気付いた時にチェックする程度で充分だろう。そもそも、僕はScarlettをたまにしか使わないw それでもおもしろそうだったので、自動で更新チェックとダウンロードができるようにしてみた。

もちろんFocusriteのサイトにAPIがある訳でもないので、いつもながらの古色蒼然としたスクレーピングなどを駆使して更新をチェックすることにした。以下に手順を示す(いつもと同様、こういうニッチなことに需要があるとは思えないので、概要とか概念(、そしてLinuxがいかに便利かw)の紹介に留めた)。

  1. Focusriteのダウンロードページ(製品ごとにURLが違うので、指定しやすい)をダウンロードする。
    • Scarlett Solo(3G)の例: https://customer.focusrite.com/support/downloads?brand=Focusrite&product_by_type=1365&download_type=software
  2. ダウンロードしたページ(HTML)を解析してFCのバージョンを調べる。
    • FCバージョンの記載例: <h3>Focusrite Control Windows - 3.4.0</h3> : 太字がFCのバージョン
  3. あらかじめ保存しておいた現在のFCバージョンと異なっていたら、あるいは、現在のFCバージョンが保存されていなかったら、FCをダウンロードする。ダウンロードURLは上記ページ中にある。
    • FCのダウンロードURLの記載例: href="/sites/customer/files/downloads/Focusrite%20Control-3.4.0.exe"
  4. ダウンロードしたFCを展開し、中のデバイス記述ファイル(XML)を取得する。
    • FCのインストーラーは(今のところ、)Inno Setupというプログラムで作られているので、Linuxでは(実際にインストールしなくても、)innoextractというプログラムで中身を展開できる。
    • デバイス記述ファイル名の例: app/Server/Resources/Devices/Scarlett Solo (3rd Gen).xml
  5. デバイス記述ファイルを解析して、ファームウェア(以下、FW)のバージョンを調べる。
    • FWバージョンの記載例: <segment name="App_Upgrade" nickname="App" version="1552" file="SctG3_Solo.bin" encrypted="true"> : 太字がFWのバージョン
  6. あらかじめ保存しておいた現在のFWバージョンと異なっていたら、あるいは、現在のFWバージョンが保存されていなかったら、FWが更新されていると通知する。
  7. FCとFWのバージョンが変わっていたら、どこかに保存する。

ページのURL、スクレーピング、HTMLの解析、インストーラーの展開、ファイル名の決め打ち、XMLの解析など、多くの点でひ弱(Focusrite側の変更に弱い)ではあるが、他に方法がないので仕方ない。まあ、変更が頻繁でない限りは便利だろう。今は動作確認中だが、問題なかったら、4日に1回程度チェックするようにcrontabに設定しようと思っている。

なお、もしFWが更新されていた場合には、(試行錯誤の挙句ノートPCにインストールした)本物のWindowsにFCをインストールし、それにScarlettを接続してFWを更新しようと思っている。

  •   0
  •   0

僕にしては珍しく、衝動買いをした。今買う必要は全くなかったのだが、まあ、クソ(が社長の)会社に入ってしまって速攻で辞めたストレスの解消や、気分転換のためということにしておこうw

発端・製品選び

先日書いたように、マイクでの録音時の雑音(テープのヒスノイズのような感じ)の多さにがっかりして、雑音の小さいマイクアンプが欲しくなった。また、録音の音量も大きくしたかった。それで、最初は(マイク用)電源内蔵のマイクアンプを探していたのだが、どうも、電源・マイクアンプ内蔵のUSBオーディオインタフェースのほうが使い勝手が良さそうだし、製品の種類が多くて良さそうな気がした。それで、以下の候補から選んだ(概ね、上から下の順に価格が高く、仕様・性能も良い)。また、調べた限りでは、どれもLinuxで使えるとのことだった(ただし、正式対応のものはほとんどない。が、いわゆる「クラス・コンプライアント」をうたうものは大丈夫なようだ。一体、どんなデバイスクラスなのかは不明だがw)。

  • Behringer UMC22
  • ZOOM U-22
  • TASCAM US-1x2-CU
  • Focusrite Scarlett Solo (3rd Gen)

一番重要なのは雑音が小さい(かつ性質がいい)ことだったので、(先日DEQ2496の雑な作りを見てがっかりしたこともあって、)Behringerは安くて手軽だけど落とした。ZOOMは問い合わせ対応が今ひとつだった(具体的には書かないが、ITリテラシーが昭和時代のように低かった。それ以外に、「クラス・コンプライアント」と書いてあるからUSBの対応クラスを聞いたのに答えないって、クソだいかがなものかと思う)ので、落とした。残ったTASCAMとFocusriteは、仕様・性能ではほぼ同等だったが、使い勝手がポイントになった。

TASCAMは、実際に使う状況を考慮せずに作ったふしがあるので落とした。というのは、マニュアルには「マイクの抜き差し時は電源をoffにするように」などとあるが、電源スイッチはなく、USBバスパワーなので、抜き差し時にUSBコネクタを抜く必要がある。それがそもそも面倒だし、コネクタは背面にあるから更に面倒だと思った(でも、今気付いたが、PC側のコネクタを抜く手もある)。それにしても、PCからUSBを抜くのは いろいろな問題が起こるので、論外だ。

TEACの技術者はいつもPCを使っているだろうに、そういうことに気付かないのだろうか? 不思議だ。それに、これは家電やPCじゃなくて楽器系の製品なんだから、多少手荒に扱ってもいいように作らなかったらいけないだろう。ステージやスタジオでは、電源を入れたままマイクのコネクタを抜き差しすることだってありそうではないか(いくら気を付けたって、忘れることはあるだろう)。その時に、音量を落とすように気を付けるのは当たり前だとしても、電源を切れ(しかも、「切らないと壊れる」と脅す)ってのはどうかと思う。

その時、コンデンサマイクは電源(ファントム電源)がなければ音が出ないので、本体の電源を切る代わりに、(音量を最小にして)ファントム電源を切るという次善の策もあるのだが、TASCAMはファントム電源のスイッチも背面にあるので、簡単には切れないと来ている。まったく最高の作りだw

その点、Focusriteは楽器系の常識に沿っているようだった。最初は、(本体色の)赤は目立って嫌だとか使いにくそうだとか誤操作しやすそうだと思ったのだが、上のようなことを考えると理に適っている。マニュアルを見ても、「マイクの抜き差し時は電源をoffにするように」なんてことは書いてない。ゲイン(入力ボリューム)を絞るとかファントム電源を切るようにとか、常識的なことだったように思う。そして、ファントム電源のスイッチが前面にあるので、簡単にon/offできるのはポイントが高い(最初は誤って操作しそうだと思ったが、これでいいと思う)。

実際には、そうやってFocusriteを使ったら壊れるかも知れない。逆に、TASCAMは壊れないかも知れない。でも、逃げの姿勢の会社は嫌いだ。壊れないように作ったんだったら、そう言えばいいのだ。

(大変長くなったがw、)そういう訳で、Focusrite Scarlett Solo(以下、Scarlett)を買うことにし、一番安かったサウンドハウスに注文した。約1.3万円(税込み)だった。実は、ポイント還元を含めれば同様な価格になるヨドバシと迷ったのだが、サウンドハウスには3年保証が付いているのでそっちにした。それが(例によって)思わぬ苦労をもたらしたw

受け取りに一苦労

注文した翌日に届くはずだったが、朝8時頃から夜9時頃まで(トイレすら気を遣ってw、)丸一日待ち続けたのに、不在票すら届かなかった。S川のwebに騙された。朝、「配達に出た」という表示が出たら、普通は午前中には来ると思うが、S川はそうではないらしい。ただ、配達日時を指定した訳ではないから、自分で勝手に期待していた訳で、怒りようがない※。次の日に「届きそうで届かないんですが・・・」と妙な連絡をしたら、荷物が多過ぎて配達できなかったらしい。なかなか大変そうだ・・・ ただ、忙しいドライバーの方には悪いけど、次回からはなるべくそこを使う店は避けたい。あるいは、日時指定するか、指定できない時は(webなど見ずに)待たない(再配達を依頼する)かだ。

※電話受付の方が品のいいおばさん(昔、みのもんたの番組に出ていた女性アナウンサー(この方?)のイメージ)のように落ち着いていて、偉そうとかつっけんどんでなくて好印象なのと、それでいて声や話し方が妙に(若い頃の)戸川純的な不思議な雰囲気だったので、怒る気が起こらなかった。一度会ってみたい気がしたw

ようやく受け取ったあとに開梱したら、海外メーカーの製品にしては珍しく梱包が丁寧だったので感心した。製品の箱が、それとぴったりのサイズの段ボール箱の中に入っていたのだ。最初は、その素っ気ない段ボールが箱なのかと思ったら、中から本物の箱が出て来て驚いたw

動作確認

早速動作確認したら全く問題なかった。Linuxでもちゃんと認識でき、マイク・ライン入力の録音や再生ができた。雑音の質は従来(マイクアンプ= AT-MA2)より良かった。従来あった、電源系(50Hzの倍音)の雑音はなかった(マイクなしでケーブルを接続した場合を除く)。雑音のグラフは、従来と同様右上がり(高域が多い)だった。根拠は忘れたが、それが自然だと思う(DEQ2496はやっぱりおかしい)。また、スピーカーの再生特性を比較したところ、超低域以外は一致した。AT-MA2は超低域の特性が悪いようで、40Hzで約4dB低かった。

PCのスリープ対応も問題なかった。よく、スリープしたら(抜き差ししないと)使えなくなるという情けないデバイスがあるが、そんなことはない。電源off/on時の雑音は、残念ながらわずかにある。JACK(Linuxのサウンド系の一つ)には通常の出力デバイス指定(例: "hw:USB")かalsa_outコマンドで対応できた。ただし、当然ながら、USBを抜くと、再度挿しても使えなくなってしまい、JACKの再起動が要る。

なお、Scarlettは本来はLinuxはサポート対象外で、WindowsかMac用のソフト(Focusrite Control)で初期設定やユーザー登録をする必要があるのだが、マニュアルに書いてあるとおり、(最初に)電源を入れた直後に48Vボタンを5秒押し続ければ、初期設定のフェーズをパスして通常動作モードになる。そうしないと、USBで繋げた時に、毎回Scarlett内のストレージ(ガイドが入っている)がマウントされてしまう。

それを読み飛ばして、「いつもストレージがマウントされてしまって鬱陶しい」などと文句を書いた外人が居た。注文後にそれを読んで心配になったのだが、ちゃんとマニュアルに書いてあった。外人にありがちな間抜けさ(しかも偉そう: でも、僕はそれでいいと思う)だと思ったw

制御ソフトを動かすのにも一苦労・・・

それから、興味があって試してみたのだが、Windows用のFocusrite ControlはどうしてもWindowsでないと動かない(VirtualBoxでもWineでも駄目)ようなので、ファーム更新は難しそうだ※。まあ、更新が必要な時は、どこかにWindowsが起動するPCがあるだろうから、それを使えばいい。あ、ネットカフェとかでもいいのかも知れないな。

※もちろんそれ以外の機能もあるが、主にミキシングなどのようで、僕の使うSoloは2チャネルしかないから、(そういう機能に対応しているとも思えず、)手でボリュームやスイッチを動かせば充分だから問題なさそうだ。サンプリング周波数などの設定についても、Scarlettを使うソフトですればいいようだ。

(9/16 18:29) その後、調べていたら、ALSAがサウンドデバイス(この場合はScarlett)を使っているためにFocusrite Controlが動かない可能性があることを知って試したが(参考01, 参考02, 参考03)、サウンドデバイスのモジュール(この場合はsnd_usb_audio)の依存関係が多岐に渡っていてアンロードできないせいか、駄目だった。だから、もし最初の推論が正しくても、Linuxのサウンドを完全に無効にして起動させないと無理そうだから、余り手軽でなく、一時的に本物のWindowsを使った方がいい気がする。

(9/17 20:16) いろいろ試したのだが、USB HDDにWindowsをインストールするというようなうまい手はことごとく失敗し、結局、ノートPCのHDDを交換して(交換が簡単なのと、このノートを使う機会はほとんどないので、大きな問題ではない)Windowsをインストールして、ようやくFocusrite Controlが動いた。インストール以外にWindowsの更新にかなり時間が掛かって、ほとんど丸一日費やした。

ようやく、Focusrite Controlが動いた。

Scarlettを接続してFocusrite Controlを起動したら、早速ファーム更新の通知が出た。買ったばかりで出るのは、頻繁に更新があるのか、(製造後の最初の更新で、)もうほとんどないのかは分からないが、ちょっと気になるので、Focusrite Controlに繋げる以外でファームの更新時期を知る方法がないか質問した(多分、無理だとは思う)。

(9/18 10:27) 回答がないので更に調べたら、どうも、ファームウェアは(Focusriteのサイトではなく)Focusrite Controlアプリの中に入っていて、それとScarlettのバージョンが異なっている場合に通知・更新するような感じだ。というのは、WindowsでFocusrite Controlを動かした時の外部サイトへのアクセスを(Wiresharkで)キャプチャしても出てこないし、Focusrite Controlアプリのディレクトリにファームウェアのファイル(Server/Resources/Firmware/SctG3_Solo.bin)があり、別のファイル(Devices/Scarlett Solo (3rd Gen).xml)にファームのバージョン番号が書かれていたからだ。

だから、Scarlettのファームを更新する際は、各自が新しいファームの入ったFocusrite Controlを(Focusriteのサイトから)ダウンロードして更新して、それを実行して行うのではないかと想像している。実際、Scarlettを使う場所で必ずしもNWが使える訳ではないだろうから、この方法の方が確実だ。

ということは、新しいファームの有無を知るには、Focusrite Controlの更新を調べれば良さそうだ。なかなかいい感じだ。

(9/18 14:28) メーカーから回答があり、想像通り、ファームはFocusrite Controlと一緒になっているとのことだった。

(9/19 14:13) 数日ごとにFocusrite Controlのダウンロードページをチェックして、バージョンが更新されていたらダウンロードするスクリプトを作った。これにて一件落着だろうか。

買った意味・価値があったか?

残念ながら、一番の目的だった録音時の雑音は消えなかった(音量が大きくなったせいか、却って増えた感じだ)。対象の音量が小さくてダイナミックレンジが小さくなっているせいか、マイクがいい(高域の感度が良過ぎる)のか悪い(雑音が多い)のかは分からない。音量が小さい(= 感度が悪い)のもマイクの仕様なので、結局は安いマイクだったから仕方ないということかも知れない。まあ、演奏を録る予定は全くないので、これ以上雑音が増えたりしなければ問題ない。そして、マイクには寿命があるようなので(そろそろなのだろうか?)、次を買う時には良く調べよう。もしいいマイクを買えば、雑音を減らすことが期待できそうだ(是非期待したい!w)。

雑音は駄目だったものの、Scarlettを買ったことで、以下のようなメリットがあった。

  • 大きな音量で録れる。: マイクゲインを最大にすると、従来より7dB(2倍強)くらい大きくなる。
    • ただし、ゲインを大きくすると雑音が急激に増えるので、注意が必要だ。僕の使い方では、通常は4時の位置(最大の少し手前)が良さそうだ。
  • 雑音の質がいい: 上述のとおり、電源雑音(50Hz系)がとても少ない。
    • 下の写真のように、従来構成はAC電源が近いために雑音が増えている可能性は高いが、ScarlettはUSBだからAC電源が不要なので、その点では有利だ。
  • 超低域の特性がいい(おそらくフラット。AT-MA2は超低域が低目だった)。
  • コンパクト(面積比: 約1/6, 体積比: 約1/12?)、接続が楽(マイクとUSBケーブルの2本だけでいい)。

こんなにコンパクトになった! (段ボール箱: 従来(マイク電源+マイクアンプ+ACアダプタx2+ケーブル)、赤い箱: Scarlett)

DACとして使ってみる

ちょっと思い付いてしまってw、Scarlettで再生する(DACとして使う)ことも試した。Scarlettの音は、一番最初は若干薄目に感じ、それから低音が強目に聞こえた(矛盾している気がする・・・)ものの、しばらく再生していたら、従来より音がよりリアルな印象になった。が、こっちの方が音がいいとかエージングとかそういうことは全然なくて、全部気のせいだと思うw

それでも、折角買ったことだし、サウンドカードの代わりにメインのDACとして使えるか試してみたのだが、USB接続のために、以下のようなさまざまな問題があったので、残念ながら、常用の再生デバイスにするのは保留した。そもそも、再生音質に(大きな)違いはないし、使い勝手が特にいい訳でもないので、無理に使う必要はないのだ。

  • スリープ中にも電源が入っている(本体が暖かい・・・)のが気に入らない。
    • 常時onでは寿命が短くなる気がする。
    • でも、PCだって電源が常時入っている箇所があるが、それはいいのか?
  • → USBハブの機能を使って、USBデバイスごとに(正確には、ハブのポートごとに)電源をon/offすることができることが分かった(参考1, 参考2)。
    • ただし、on/offできるかはハブの仕様に依存する(普通の安いハブではまずできない)。
    • PC(マザーボード・チップセット)内蔵のハブは可能なことが多そうだ(僕のPC内蔵のハブではできることが分かった)。
      • だから、上記参考ページでは対応ハブが要るように書いてあるが、デスクトップPCを使うなら買わなくても済むことが多そうだ: これは知らない人が多いかも)。
  • → スリープ時に電源を切ると、復帰後にJACKの再起動が要る。また、電源をoff/on時に(小さな)雑音が出る。
  • ScarlettのUSBを抜いて挿した場合もJACKの再起動が要る。
  • ScarlettのJACK対応にalsa_outを使うと、JACKアプリ起動時や接続・切断時などに雑音が出る。

問題は多いのだが、今のサウンドカードが壊れた時やPCを換えた時に、(上記の問題に対処すれば)ScarlettをDACとして使えることが分かったのはいいことだ。Scarlettを使うことにすれば、次のPCではPCIeスロットやサウンドカードが不要になるから、コンパクト化が可能だ(ただし、HDDは要るので、ものすごく小さくはならない)。そして、今気付いたが、サウンドカードが不要だから、(そのドライバも不要になり、)USBが使えさえすれば音が入出力できるので、CPUがx86でなくてもいい可能性が出てくる(ただ、他の要素で制限はありそうだ)。

思わぬ失敗が発覚

Scarlettで試しに測定していたら、過去の思わぬ誤りに気付いた。測定ソフト(REW)の設定をミスしたようで、8月以降に測定したデータの低域(100Hz以下)がカットされていたのだ。Scarlettと過去の測定結果の低域が大きく違っていたので気付いた。全く気を抜いていたのか、グラフを見ても気付かなかったのがイタい。今思えば、測定時、低音が出ているのに入力のメーターが振れていなかったのが、ちょっと変だとは思った。。。誤りの影響が大きい投稿を再測定して訂正した。

それにしても、低域がカットされる仕組み・原因は全く謎だ。一体どこにそんなフィルタがあるのか? それ以外にも、Linuxのサウンド関係(JACK, ALSA, PulseAudio, REW, Audacity, etc.)は謎が多く、ちょっとヘマをすると音がおかしくなってしまう。。。 まあ、(更に)真面目に調べれば分かるのかも知れないが、とにかく複雑なので、そこまではやっていない。

(9/16 11:58) その後ちょっと調べてみたら、低域がカットされる原因が分かった。測定ソフト(REW)の設定ミスではなく、PulseAudioの"LFE Remixing"という機能(フィルタでサブウーハー用の低音を抽出するらしい。PulseAudio 7.0のリリースノートの"LFE channel synthesis with low-pass filtering"の項を参照のこと)を有効にしていると、PulseAudioの入力から低域がカットされるようだ。たまたまREWの入力をLFE Remixingの対象になるもの("default [default]")にしたために問題が発現したようだ。そのクロスオーバー周波数は120Hzで、今回の現象に合っている。どうしてLFE Remixingが出力でなく入力にも効くのかは不明だが※、止めたら問題が起こらなくなった。詳しくは別に書きたい(書くかも知れない)が、とりあえず、以下に対処方法を書く。

  1. PulseAudioの設定を修正し、LFE Remixingを無効にする。
    • /etc/pulse/daemon.confに以下の行を追加する。
      • enable-lfe-remixing = no
    • もし、"enable-lfe-remixing = yes"の行があったら、削除するか無効にすること。
  2. PulseAudioサーバを再起動する。
    • pulseaudio --kill → 勝手にPulseAudioサーバが起動するはず。
    • 起動しない場合は、pulseaudio --startを実行すること。
  3. JACKを再起動する。: 手順は各自異なるので、省略する。

※想像だが、PulseAudioはマルチチャネルで動いていて、出力する時には単一チャネルをメインスピーカー用とサブウーハー用などに分けるのと同様に、入力が単一チャネルの場合には、メインチャネル用とサブウーハーチャネル用に分けるのではないだろうか? そうだとすれば、PulseAudioを単一チャネルで動くように設定すれば根本的に解決しそうだが、なかなか面倒そうだ・・・ (というか、Linuxでマルチチャネルで使ってる人なんて居るの??)

低域がカットされる問題に対処できた: 対処後(PulseAudioのenable-lfe-remixing= no): 青(JACKで直結), 緑(アナログ接続); 対処前(enable-lfe-remixing= yes): 赤(JACKで直結)

まとめ

普通に使うならまあ問題なかったし、買った意味もあったが、例によって僕の凝りのためにちょっと四苦八苦した(それもおもしろかったがw)。しかも、それで本末転倒になり掛けた。でも、気付かなかった問題に気付いたり、新しい技術(ちょっと大げさだ)を知ったり、将来のPCの選択肢が広がる可能性が見付かったりと、副次的なメリットは多かった。そもそも、おもしろかったから良しとするw

 

PS. あと、「増税前なら少し安そうだ」と思いもした(「駆け込み」)が、後で考えたら、値段が1万円ちょっとだと、増税分はたった240円程度と、ほとんど誤差だったw 皆さんも、車とかでない限りw、スーパーなどで買い溜めしても全然ペイしないので、よく考えましょうw

PS2. 参考2の著者は、2番目の会社の時に名前を見たことがある人で、時々、「あの(威勢の良さそうだった)あんちゃんは、今どうしてるのかなあ」と思っていた。それが思わぬことで再開(?)できて、なかなか不思議だった。さすがに今は、それほど強烈なことをしてないようだ。でも、やっていることは、昔から趣味的なのは変わらないw そして僕は、ああいう乗りの人がずっと好きでないwww

なんで名前をGNUもどきにするかねえ・・・ いくら好きだって、「それじゃ単なるフォロワーでしょ」と思う。

  •   0
  •   0

Linuxには純正のEvernoteアプリがないので、web版かNixNote2などの他者製アプリを使うしかない。他者製アプリは純正に比べればどれも今ひとつなのだが、いろいろ試して一番まともだったNixNote2を使っている。NixNote2自体の完成度が低いうえに、使い方の情報が余りないので、諦め・試行錯誤しつつ使っているのだが、たまに、それまで無理と思っていたことができることに気付いて驚く。ここではそういうものを紹介する。なお、対象のバージョンは2.1.4(現時点での最新版)である。

複数アカウント・ウインドウでの同時起動

NixNote2は複数のEvernoteのアカウントを切り替えて使うことができるが、(切り替えでなく)同時に使いたい。調べてみたところ、起動時のオプション(--configDirや--userDataDir)を指定すれば、別々の設定で起動できることが分かった。それを使えば、複数アカウント(例: 個人用と仕事用)のNixNote2を同時に起動することができる。ただし、アカウントごとに別のウインドウになる。

2つ目のアカウントで起動する例:

nixnote2 start --configDir=$HOME/work/Nixnote2 \
--userDataDir=$HOME/work/Nixnote2/data &

※2つ目のアカウントを完全に独立にしたいので、設定とデータのディレクトリ(上では$HOME/work/Nixnote2)を新しく作った。

2つのアカウントでNixnote2を同時起動した例

※純正アプリは複数アカウントの同時使用や同時起動はできなさそうなので、これはNixNote2の数少ない優位点なのかも知れない。

ノートをタブ・別ウインドウで開く。

タブで: (メニューバーの)メニューにないので気付かないが、ノート一覧でノートを右クリックして"Open Note In New Tab"を選択すればいい。

別ウインドウで: これもメニューにない。ノート一覧でノートを右クリックして「ノートを開く」を選択すればいい。右クリックメニュー(の翻訳)が分かりにくい。

※こういう機能はヘルプなどに書いてあるのかも知れないが、読んでもがっかりしそうだし、まさかできるとは思っていないので、気付きにくい。

[2019/9/13 19:34: 同期がうまくできなくなる可能性があることが分かったので、この項は無効にする] DBのwalファイルを小さく・サイズ制限する。

NixNote2はEvernoteのデータをSQLiteのDBとしてローカルに格納している。そのDBのwalファイル(書き込んだデータの一時保存用)が肥大化する(しかも、いつになったら本来のDBに書かれるか不明)ので、適宜DBに反映し、サイズを制限(、あるいは0に)したいと思った。というのは、walファイル自体は問題ではないのだが、本来のDBに反映される時期が不明なのが気持ち悪いし(NoxNote2がちゃんと処理していないせい?)、ファイルサイズが無制限に大きくなるのは気に入らないし、定期バックアップ時の更新データ量が増える気がするので、定期的に本来のDBへの反映を行い、更に、サイズを小さくすることで、定期バックアップ時の更新データ量を減らそうと思ったのだ。調べたら、SQLiteのコマンドでできることが分かった。

walファイルの中身をDBに書き込み、サイズを10MBに制限する例:

wcp_max_size=10485760; cd $HOME/.nixnote/db-1 && \
sqlite3 nixnote.db "pragma journal_size_limit=$wcp_max_size; \
pragma wal_checkpoint"

僕は、上記のような処理を定期的に(数時間に1回)実行している。

なお、walファイルのサイズが0でなくても、一時保存データは全部DBに反映されているようだ。サイズを0にすると、ファイルに追記するために、(SQLiteの)処理が遅くなるとのことである(おそらく、この用途では全く問題ないだろう)。逆に0にしなければ、walの先頭から再利用(上書き)されるようだ。

話は少し変わるが、SQLiteのDB(nixnote.db)にアクセスすれば、ローカルに格納されたノートに直接アクセスすることができる。例えば、間違ってノート名を変更してしまって、元のノート名が分からなくなってしまった時、あらかじめバックアップしていたDBを開いて、元のノート名を調べて復活することができた。この時、問題のノートのLID(ノートのID?)でバックアップのDBからそのノートを探した。有料会員だと履歴があるから、こういう時も安心なのだろう・・・

ちなみに、僕は、この「気付いたらノート名が変わっていた問題」などへの対処(予防)のため、Nixnote2のDBを、ある程度は履歴が残る定期バックアップの対象にすることにした。その時に、最初に書いたwalファイルのサイズが大きくて気になったので、小さくしようとした。

※いずれもNixNote2との競合が心配なので、自己責任で行うこと。SQLite自体は排他制御しているので問題ないが、NixNote2の内部処理がこのような外部での変更を許容するかは分からない。

ノートが編集不可になることの回避・復活

NixNote2のノートが突然編集不可になる(なっている)ことがある。それは、概ね、画像とテキストを一度にペーストしたためである(その時は問題ないのだが、次に開くと編集不可になっていて呆然とする)。なので、そういう操作をしないようにすれば(画像とテキストを別々にペーストする)回避できる。

また、もし編集不可になってしまったら、以下の手順で復活できる。

  1. 一時的に編集可能にする。: ツール → "Disable editing"を2回程度(編集可能な状態になるまで)実行する。
  2. 画像とテキストを一度にペーストしてしまった部分を(見当を付けて)削除またはカットし、どこか(ワープロなど)にペーストする。
  3. 画像とテキストを別々に再度挿入またはペーストする。

※おそらく、ノートのソース(HTML)を見れば、何が問題か(おそらく、ノートのタグ構造がNixNote2が理解できなくなっているのではないか)分かり、うまい復活手順も分かるだろうが、まだできていない。そもそも、NixNote2が悪いので、何とかして欲しい! (今までにさまざまな諦めをしていて、指摘しても対応してくれるか分からないので、していない)

メモリリークへの対処

NixNote2を使い続けると(特に、ノートのエクスポートを行うと)、メモリ使用量が数倍に増大する。これを減らす方法はなさそうなので、定期的(あるいは、エクスポート後)に再起動するしかない。

  •   0
  •   0

先月の中頃から、Linuxのウイルススキャンプログラムclamscanが、なぜか途中で強制終了させられてしまう現象が起こった。原因を調べると、メモリが足りなくなったようだ。それで、暫定的にスワップ領域(Windowsでの「仮想メモリ」)を増やしたら動くようになった。ただ、それまでは問題なく動いていたのに、突然駄目になってしまったのが不思議だった。

更に調べてみると、問題が起こり出す前辺りに、(モジュール更新を反映するため)OSが再起動されていたことが分かった。そして、メモリ使用量のグラフを見ると、その頃から妙な感じになっていた。

過去1か月()を見ると、再起動した("Week 24"の辺り)後からスワップ使用量(赤, "swap")が周期的に増減している。また、過去1年()を見ると、去年の11月中旬頃にメモリ使用量(特にスワップ使用量)が減ったものの、再起動した(図中右端辺り)後から大幅に増えてしまった。

いろいろ調べてもメモリ使用量が減った原因は分からなかったが、スワップ使用量が増減する理由は分かった。clamscan(ClamAV)に関連するサーバプログラムclamdが大量のメモリ(300MB以上)を使用するためだった。問題が起こるのは(メモリがふんだんにある)自宅のPCではなくブログサーバで、メモリ量が1GBしかないため、300MBでもかなり効くのだ。そのために、clamdと同じくらいメモリを食うclamscanがメモリ不足で強制終了させられていたのだろう。

スワップ使用量の増減が起こる流れは、以下のようである。

  1. 毎日、ClamAVのプログラムfreshclamがウイルス定義ファイルを更新する。
  2. 定義ファイルの更新後、clamdにそれが伝えられるようで、clamdは新しい定義ファイルを読み込むようだ。
  3. その時、それまでスワップアウト(実メモリからディスクに追い出されること)されていたclamd(の確保したメモリ)が実メモリに戻される。すると、スワップ使用量が減り、実メモリ使用量(例: 図一番下の緑の層, "apps")が増える。
  4. しばらく(6時間程度)すると、clamdは何もしない(動かない)せいか、スワップアウトされてスワップ使用量が増え、実メモリ使用量が減る。

上記処理(特に3と4)の繰り返しが定期的なスワップ使用量(赤)の増減になっていたようだ。

諸悪の根源はclamdだったのだが、これは本当に必要なのか調べてみると、そうでもなさそうだった。インストールする時は、検索して出て来たページで入れるように書いてあったので、良く考えずに入れた。その理由は、clamdはWindowsのアンチウイルスソフトのリアルタイムスキャンを行うものだと思い込んでいたためなのだが、本来はそうではなく、外部から指定されたファイルをスキャンするものだった。今調べたら、設定によってリアルタイムスキャン(On-Access Scanning)が可能なのだが、今まではその設定をしていなかったので、全く使うことなく、無駄に動かしていた訳だ。間抜けにも程があるw 確かに、今までリアルタイムスキャンの警告が出たことがないし(今考えれば、サーバだから画面がないのにどうやって警告を出すのか不明だ)、不正なファイルだとしてブロックされたこともない(まあ、これが起こったら大変なことなのだが)。

という訳で、他の方も、clamdを入れて起動しているだけではリアルタイムスキャンは行われず、(おそらく)メモリを無駄遣いしているだけなので、注意しましょう。

そもそも、(言っちゃ悪いが)今までClamAVは全くあてにしてなくて、clamscanで気休め程度に(昔ながらの)定期的なスキャンをしていただけなので、全く使われないclamdは不要だという結論になり、停めた。仮にリアルタイムスキャンをするとしても、このサーバではメモリ量が足りないから無理だし、性能への影響も出そうだから止めておく。

clamdを停止前後のメモリ使用状況 (過去1日)

効果はてきめんで、clamdを停めた("Sun 18:00"と"Mon 00:00"の間)ら、スワップ使用量(赤)が500MBくらい減って100MB程度になった。今までいかに無駄なメモリを使っていた(正確には死蔵していた)ことか。。。 要は、メモリの断舎離をしたようなものだ。ただ、「死蔵」と書いたとおり、このメモリは使われていなかった(クローゼット中にあるだけで全然着ない服のようなもの)ので、実メモリの使用状況はほとんど変わっていない。例えば、アプリのメモリ使用量(図一番下の緑の層, "apps")は停止前後でほとんど同じである。

なお、図で定期的(12時間ごと)に上部の緑線("committed")が鋭く立ち、そのあとで下部の紫の層("cache")が減っているっているのは、クラウドストレージへの定期バックアップ処理のために一時的に使用メモリ量が増え、そのためにそれまで溜まっていたキャッシュが解放されるためと思われる。

結局、題に書いたように、無意味なものを省くことはできたが、無意味だっただけあって、それによって変化は起こらなかった。せいぜい、最初の問題の、clamscanがちゃんと動くようになった程度だ(clamscanにしたって、実行する意味があるのか良く考える必要があるが、今回は棚上げにする)。でもまあ、プログラムの中にはCPUを使いまくってシステムを重くするものがあるから、これはたちがいい方なので良しとするw

ということは、死蔵されたものを捨てても何も変化は起こらないということなのだろうか? 確かに、物理的には(目に見える)変化はないが、精神的(「気分」)には変化があるだろう。そもそも、断舎離とは、物(減らし)を心に作用させて、(物質でなく)精神を改善するものなのだろうから、それでいいのだろう。知らんけどw

なお、デスクトップPCも同じ状況で、無駄にclamdが動いていたが、メモリがふんだんにある(32GB)ため300MB程度は誤差のようなもので(ブラウザがかなり多くのメモリを食う)、停めても本当に何も変化がなかった。チャンチャンw

 

(20:30 わずかに補足; 7/3 6:15 少し加筆・補足)

  •   0
  •   1

昨日の午後、プログラミングがうまく行かない時だったか、突然、なぜかクラウドストレージ(Backblaze B2)への自動バックアップに失敗したというメールが来た。Linuxでは、定期処理(cron)で何かエラーが出るとメールが来るのだ。そのうちに、同じ処理をしているこのブログサーバからも来た。

その内容は認証エラーなのだが、それまで何も問題なく動いていて、ソフトや設定を変えた訳でもなく、ログを見ても皆目見当がつかず、サーバダウンでもなく、検索しても特に出て来ず、(リトライを失敗するたびに)エラーメールが連続して来たので、ちょっと泣きたくなった(というか、何もかもを破壊したくなったw)。

それでも更に検索してみると、B2のAPIにバージョンがあるようで、バックアップに使っているプログラムは古いバージョンを使っているようなので、その古いAPIが廃止とか変更になったのかと想像した。

それで、Backblazeに問い合わせる他に、バックアッププログラム(duplicacy)のフォーラムにも、上述のことを含めて問い合わせた。ただ、日本だと時差があるので、すぐに回答は来ないし、そもそもまともな回答が来るのかすら怪しい。Backblazeは、以前出した問い合わせにちゃんと回答して来たから、待てば回答は来るだろうが、APIの変更だとしたら、対処してくれるかは怪しいものだ。そして、duplicacyもどうだか分からなかった。ソフト開発者は、ちゃんと対応する人も居るが、うやむやにするとか無視するとか突っぱねる人も多い。だから、がっかりしたりイライラするのが嫌で、近頃は滅多に出さず、我慢したり自分で何とかすることが多い。ただ、今回は、バックアップはかなり重要なので、駄目元で出した。

とりあえず、試行錯誤して回避策が分かって急ぐ必要がなくなったから、この件はあてにせずに気長に待つことにして、その日は寝たw

起きてメールを見たら、驚いた。まず、duplicacyのフォーラムでは同じ問題を見付けた人が素早く修正してくれ(メールを見たら、投稿してから2時間以内だったようだ)、正式版も更新され(修正が投稿された2時間後)、Backblazeからもサーバの修正をしたというメールが来ていた。もう、120点あげたいくらいだ。

たまにはこういうこともあるものだ。だから、諦めずにサポート依頼を出すのも、無意味なばかりではないものだ。

 

ここまででやめとけば「いい話」で終わるのに、いつものように毒付くとw、四季のある美しい国のほとんどの会社とか、デザインは美しい(自称)、アホ不思議なくらい信心深いユーザの多い会社とか、始めるのは早いけどやたらに飽きっぽくてすぐに梯子を外す、巨大な検索会社の連中に爪の垢でも飲ませたいと、今思った。

  •   0
  •   0

Spotifyの再生履歴記録・検索システム(仮)が大分できて来た。まだまだやりたいことは多いし、修正・改良すべき点も多いが、一段落した感じだ。

見た目が前回とほとんど変わらないのが残念だがw、7割くらいはできた気がする。それにしても、いつものことだが、体感で半分を超えると、ぐっと進みが遅くなる。できあがるにつれて、完成度を高めるために作業量が増えるうえに、動き出して使ってみると新しいアイデアが出てくるので、更に作る量が増え、そのために修正や動作確認をする時間も雪だるま式に増えて、逃げ水のようにゴールが遠くなる。

前回からいろいろやったのだが、見た目のインパクトが大きいものは、ボタン一発でSpotifyの再生履歴が出せるようになったことだろうか。前回は再生中の曲だけだったのを、(DBのコマンドを駆使して)指定した数の過去に再生した曲を取れるようにした。もちろんSpotifyアプリでも出るが、自分で作ったので随分使いやすい。例えば、評価やコメントをあとから手軽に書けるようになった。他には、webなので、タイトルなどをコピーできるのは誰にでも便利な気がする(もちろん、web版Spotifyでもできるが)。

あとは「できたてのほやほや」(でまだ満足に動かないw)のアルバム表示機能も便利だ。検索結果や再生履歴に表示されている曲のアルバム名をクリックすると、そのアルバムの曲が全部表示される(書くと当たり前の機能ではあるな・・・)。他に、Spotifyのアルバムやトラックへのリンクも表示するようにしたので、日記やブログで参照するのも楽になりそうだ(ミニプレーヤーでは簡単だが、アプリだとメニューを数段階移動しないと取れない)。

逆に、苦労して作ったけど意外に使っていないのは再生機能だ。これはアプリで充分だ。でも、そのうち検索機能(これが一番の目的なのだ)が充実したら使うかも知れない。

そして、今日の夕方くらいから、聴きながらコメントや評価を付けたり過去の感想を転記したりして、実際に使っている。自画自賛だが、なかなか便利だ。最初はそれらはDB管理アプリ(DB browser)で入力・修正していたのだが、段々使う機会が減って来た。

残件で大きいのは、ミニプレーヤーとの連携(履歴や評価のアイコンを出す、手軽に履歴を付ける、コメントを書くなど)だ。それから検索のプリセットの作成(今は検索条件にSQLの一部を打ち込んでいるのを、いくつかのパターンから選べるようにする)だ。

作っていて思い付いたのは、Spotifyのリコメンドでない、「自分のリコメンド」(履歴と評価をもとに、自分の好きな曲だけを選んで掛ける)を再生できるとおもしろそうだ。そこまでは行かなくても、意味があるかは別として、このシステムに自分のプレイリストが作れる。将来、別のプレーヤー(gmusicbrowser)とも連携できたら、プレーヤーをまたいで再生できるようになるからおもしろそうだ。

もう一つのアイデアは、嫌いな曲が掛かったら即座に自動で飛ばす機能だ。これはすごく便利そうだw ただ、たまに気まぐれで聴きたい時もあるだろうから、ある程度の猶予時間が要りそうだ。

ちなみに、このシステムを作ろうとしたのは、Spotifyをより便利にしたいこともあるが、自分の再生履歴や感想を記録するためでもある。だから、Spotifyに特化したものやべったり依存するものを作ろうとしている訳ではない。仮に将来、Spotify以外のサービスに乗り換えたとしても、記録した情報は使いまわせるようなデータ構造にしている。ただ、そのサービスにSpotifyのようなAPIがないと、再生した曲の自動記録はできないので、そこが結構重要だ。更に、配信サービスを止めたとしても、いいと思った曲の記録は残っているから、買うなどすれば聴くことができる(DBにはそれぞれの曲のISRCを記録しているので、何らかの形で配布されていれば、その演奏が聴けるはずだ)。

なお、最初に少し心配していたDBのサイズだが、文字しか入れていないので当然ではあるが、とても小さい。今までの約2週間で940曲くらい記録したが、DBファイルのサイズは320KB程度なので、1曲あたり300バイト前後だ。ずっとこのペースで行くとすれば、1年では2.5万曲くらいになり、サイズは7MB程度で済みそうだ。なお、定期的にバックアップや"vacuum"というコンパクト化の処理も行うようにした。

 

PS. 作っていて思ったが、Googleなどのサーバには、こんな感じで、各ユーザのいろいろな履歴がまさに山のように記録されていて、すごいAIがあれば(きっとあるんだろう)何でも分かってしまいそうだ。技術的にはおもしろいけど、僕はなるべく"Let me out"させてもらいたいw

でも、それとは関係ないけど、Googleの画面作り(配色・配置)は嫌いじゃないw このシステムのwebページの雰囲気が似ているのは、そのせい(好みの近さ)かも知れない。特に似せているつもりはないが。そして、ダークモードは大嫌いだw

  •   1
  •   0

あれから寝食を忘れてw作っていて、web(検索画面)が大分いい感じになって来た。何をどう良くしたのか、思い出したり調べて書くのも面倒だが、僕的には随分良くなった気がするw 例えば、評価を色の濃さで出す(図中の♥マーク)とか、平均「完奏率」(最後まで聞いたか)※を棒グラフで出すとか、前の投稿に書いたが、再生をwebでなくSpotifyプレーヤーでできるようにしたとか、トラック情報を開閉できるようにした辺りだ。まだまだやることは多いが、それなりの形にはなって来た。

※「「完奏率」(最後まで聞いたか)」は少し誤解しやすいので補足すると、1曲を最後まで聴いたら1、途中で止めたり飛ばしたら0なのではなく、止めたり飛ばした時点までの再生時間の曲の長さに対する割合が1回の完奏率になる。例えば、半分まで聴いたら0.5である。その合計を再生回数で割ったものが平均完奏率である。

プログラミングしていると時間がすぐ過ぎるし、おやつはもちろん食事も面倒になるから、ダイエットになるうえにお金も掛からないおから、いいことづくめだね。ってなんか、シャレにならないけど、そんなことはないよw これからの人は、みんなプログラミングするみたいだから、メタボになる心配はなさそうだね。頑張ってね!(爆)

(5/19 20:58) その後もいろいろ改良していたが、見た目は劇的には変わっていない。Spotifyは、どうしてか、クラシック音楽の作曲者をアーティストに入れてしまうので、ミニプレーヤーでしているのと同様に削除するようにしたことと、「現在再生中の曲」をボタン一発で出せるようになった(の中央上部の"Now playing")のと、評価をスライダーで設定する(図の右下)UIができたくらいだ。もちろん、普段はスライダーは出ていないし、評価を変えたらアイコンも色も変わるよ!w (→ デモ動画)。HTML5のおかげで、こういうの(inputのrangeというのを使った)が手軽に(とはいえ、何度も書くが、HTMLだのJavaScriptは苦手なのでそれなりに苦労したがw)できるようになってありがたい。

今は、コメント欄もトラック情報や評価と同様にアイコン(ボタン)を押すと開いて入力できるようにしようとしているのだが、UIの概形ができたところで力尽きているw 不思議なことに、余り考えずに「これだとどうなるかな」とテキトーに作ったら、「こうなったらいいね」っていう感じに入力欄が開いたので、何かの奇跡かと驚いた。 ← イマココ(ってやつ)w

 

体験談的なことを書くと、SQLはなかなか馬鹿にできない。なんというか、僕から見れば「しょうもないもの」だったのだが、ちゃんと完結していて、(苦労して)使いこなすとかなりいろいろな検索や処理ができることが分かった。DBの基本のトランザクション※も便利だ(普通にプログラムを作るのでは実現が面倒なことが、1行でできたりする)。どういう経緯で今の状態に至ったのかは知らないが、最初からこういうのを考えて作ったのならすごいことだ。ただ、今使っているSQLiteはとっつき安いのはすごくいいものの、他に比べて若干機能が少ないので、凝ったことをしようとすると手間が増えるのが残念だ。

※トランザクションの例: 「DB中の、名前がAのデータの要素bの値が10より小さかったら+1して書き込む」が1行でできる。しかも、この1行(SQL)の処理は不可分なので、複数プロセス間での競合が起こらない。あるプロセスが読み出して+1して書き込む前に他のプロセスが+1して書き込んでしまうなんてことがない。

あと、以前も書いた気がするが、PHPとJavaScriptとHTMLを同じファイルに書くので、ちょっと見てもなんだか分からないし、それぞれ文法が違うからいつも間違うし、その部分がいつ実行されるのかを誤解するし、文字列を囲むレベルが増え過ぎて囲むのに使える文字がなくなったりして、かなり厄介だ。一番不便なのは、JavaScriptからPHPの機能が呼べない(あるいは、戻れない)ことだ。よく考えれば当たり前(実際には、PHPからJavaScriptを呼ぶことだってできない)なのだが、そこが何とかできると楽になると思う・・・ だから、サーバ側も全部JavaScriptで書く例が増えているのかも知れない(ここはよく分からない)。

(5/20 22:09) コメントのUIも何とかなった。(→ デモ動画) 昨日から何も変わってないように見えるが、見た目を変えてないから当然だw あとはやっつけ仕事で作った下回りの処理(DBへのアクセス)などをちゃんとしたい。

コメント設定機能も動き出した。

 

それから、SQLiteへのネット経由でのアクセスは、rqliteというもので可能なようなことが分かった。その他に、socatとsqlite3コマンドを使って自分で実現することも考えられた。後者は全く面倒で安定性に欠けるから論外だが、前者は何となく筋が良さそうだった。が、他にも同様に「自分」に通信する必要があるもの(例: Spotifyでの再生)があるので、ひとまず保留にした。

 

(5/17 21:00 完奏率について補足; 5/19 20:58 現状を追記; 5/20 22:09 現状を追記)

  •   0
  •   0

先日から始めた、Spotifyで聴いた曲を自動で記録し、検索結果と一緒に表示する仕組み(一言で何と言うのか、まだ迷っている)のプロトタイプが動き出した。画面(web)は以下のような感じだ。プロトタイプなので、トップは太古の「ホームページ」wのように、余りにもシンプルだ。検索結果は少し(結構)凝って、(力技でw)それなりにした(まだ細かい問題は多い)。

もちろん、主目的の再生履歴が出るようにした。再生した日時(自動で記録される)はもちろん(今は最初の日時のみ)、評価(今はDBに手入力する)が♥(好き)や✘(嫌い)で出るし、コメントも出る(これも今は手入力)。そして、ジャケット画像やアルバムや曲のリンクを押すと、ちゃんと再生できる(今はまだSpotifyのwebプレーヤーに飛ぶだけ → Spotifyのプレーヤーアプリで再生できるようになった → デモ動画)。

全体的な構成の概要は以下のとおりである。

Spotifyプレーヤーミニプレーヤー・リモコン
 ↑                         制御                |
 |                                               ↓
 |        再生曲情報の自動記録 ← (再生曲情報ファイル)
 |再生         ↑↓
 |指示   DB (SQLite)
 |          ↓再生履歴
検索画面(web)  ⇔  Spotifyサイト
                     検索(API)

検索条件の指定方法は模索中だ。今は、Spotifyの条件(これが結構使えない・・・)と再生履歴の条件を別にしている。後者は、なんとSQLの条件式を入れるようにしている(画面上部の"History search"の欄を参照)。今はこの方がいろいろ試せるからいいのだが、将来的には「再生したことがない」/「−ある」といった、プリセットのようなものを選択できるようにしたい(画面中の式は「再生したことがあるアルバム中のトラック」の例)。

RDBのSQLにはなかなか苦労したが、大分使えるようになった。慣れれば便利な感じだ。でも、泥沼のように奥が深いようだw それ以外にも山ほど考え・試行錯誤・工夫・苦労した話があるし、「とりあえず」や"TODO"も山ほどあるwので、あとで書きたい。まずは作るだ。

その後、大分改良できた。検索結果が多い場合に画面がとんでもないことになるので、どうしたらいいものか考え、(良く見るが)開閉ボタンでアルバム中のトラック情報を表示・非表示できるようにした。アルバム情報の下の"♪"を押すとトラック情報一覧が出て、再度押すと消える。(→ デモ動画)

やる前は、大の苦手なJavaScriptを使うのが嫌なので、何とか別の方法がないか考えていたのだが、なかなかなくてJavaScriptでやらざるを得なくなった。もちろん、(僕の技術で)できるのか分からなかったが、その前に検索ページからSpotifyプレーヤーで曲を再生するために使った方法(なかなかトリッキーなので、あとで書きたい)がヒントになったので、意外に容易に「それなり」にできた。

こういうのは、世の中に出回っているいろいろなライブラリを使えば簡単なのだとは思うが、そもそも、何が一番使いやすいのかも分からず、選んで使うのに慣れるまでが大変な(気がする)ので、自分で「適当に」作った。きっと、どこかに落とし穴があるに違いないw (5/15 17:32)

 

(23:51 システム構成を追記; 5/15 10:40 Spotifyプレーヤーでの再生のデモ動画を追加; 5/15 17:32 トラック情報表示の件を追記)

  •   0
  •   0

先日、母がモーツァルトの曲を聴いてみたい※というので、CD-Rに焼いた。手持ちのは仕舞ってあるだけなので、最初は実物を貸そうと思っていたのだが、手荒に扱われると嫌だし、母にしたって気軽に扱える方が良さそうだからとバックアップした。

※「聴いてみたい」と言ったって、音楽の話題になった時に、僕が「CDがいっぱいあるから貸そうか」と言ったからで、あとで帰省したら、送った時の袋に入ったまま放置されているのを見てがっかりするような気がするので、(送料だサイズだで)結構苦労して梱包している時に「僕は何を無駄なことをしているんだ」と思った。が、万に一つでも聴かれる可能性も捨てきれない。が、例え聴かれたとしても、感想は例によって「すごいね。良く指が動くね。楽譜見ないで良く弾けるね」程度なので、やっぱり労には合わないだろう。とはいえ、それでも聴いてもらうのは悪いことではない。もしかしたら、母がモーツァルトの良さに目覚める可能性も0ではないから・・・

ちなみに、モーツァルトや(どうしてか、)日本人の有名なピアニストの話題が発端だったので、以下の曲の入っているアルバムにした。予想では、アイネ・クライネが(一番ポピュラーなので、)一番受ける気がしている。僕としては、もちろんK. 488を推すのだがw

    • 内田: ピアノ・ソナタ集 (K. 333, 545など) (1984-1986)
    • ポリーニ: ピアノ協奏曲 第23番 (K. 488) (1976)
    • ベーム: アイネ・クライネ・ナハトムジーク (1977)

一応、焼いたものが(ちゃんと「普通のCD」になっているか不安があるので)再生できることを確認しようとしたのだが、いざとなると、なかなかいいプレーヤーがない(そもそも、「今、PCでCDを再生する人なんて居るのかっ?」てくらいだw)。CDプレーヤーなんて随分昔から持ってないし、手持ちのラジカセではCDは再生できないし、Linuxに標準で入っていたSMPlayerはバッファリング中は再生が停まるから曲間が余計に開くし、MediaPlayerは動画専用のようだし、(全く問題ないだろうと思っていた)VLCはなぜか音が途切れることがある。参照用とか予備で入れているClementineは、いつもながらイマイチだった(もう消そうかな)。そして、いつも使っているgmusicbrowserではCDは再生できない。

前回別件で焼いた時は、MPlayerとカーナビのオーディオで試した覚えがあるが、さすがに車は面倒だ。そこで、検索していくつかのアプリを試してみた。以下にその一覧と評価(CD再生に関してのみ)を書く。

  • △ DeaDbeef: 開始する時に頭が飛ぶことあり。
  • △ Audacious: UI・操作が若干煩雑。
  • △- Quod Libet: UIがイマイチ。ジャンプが簡単にできない。
  • × Aqualung: 2ウインドウで煩雑。UIがイマイチで使いにくい。CDが高速で回転してうるさい。
  • △- Banshee: 古い(2011)。ジャンプがイマイチ。
  • × Rhythmbox: 大掛かり。CDがCDDBに見つからないと、いちいちメッセージを出して鬱陶しい。再生が手軽でない(いちいちキューに追加する必要あり)。
  • × Exaile, JuK, Kaffeine, Amarok, Musique: 駄目・論外 (まともに動かない・すごく使いにくいなど)

結局、AudaciousかDeaDbeefが良さそうなので、Audaciousで確認し、その二つを残した。でも、次はいつ使うことか? (万が一、母が「別の曲も聴きたい」と言って来たら喜んで焼くが、まずないだろうな・・・ ただ、文中に2回出て来た「1万分の1」を合わせると、確か1億分の1だから、宝くじに当たるようなものだw)

  •   0
  •   0