SVX日記
2020-04-10(Fri) mp3のタグに画像を組み込みたくてなんとかする
先日「ネット上がバカの見本市のようになっていて不快だ」と書いたが、恐ろしいことに未だ続いている。
なぜニュースサイトは、芸人やキャスターや野党の党員など、頭の悪い連中の無責任な持論を記事にするのだろうか。クソの役にも立たないばかりか、同程度に頭の悪い輩が扇動されるではないか。もはやヘッドラインが目に入ることすら辟易しているが、頭の悪い発言をした芸人やキャスターや野党の党員などの名前は覚えておくからな。
結局、伝染病なんて、誰のせいでもないんだから、政府を含め、誰を責めても何の解決にもならないことくらい、何故わからないかね。発言が取り上げられるような立場なら、せめて皆を勇気づけたり、和ませる発言をしてほしいもんだ。頭の悪い素人のオマエラの考えた無責任な方策なんて、決して採用されることなんてないのだから。
などといいつつ、先日、いつものカラオケ屋に練習に向かったところ「今日は早く閉めることになったので1時間半までです」と言われたばかりか「明日から長期休業に入ります」などという最後通告を受けてしまった。ガーン……コロナの影響が遂にここまで……長らく週2のペースで練習してきて、一度丸1週間空けたら喉がナマったくらいだったのに、長期休業なんて想像もつかないぞ。まぁ、店を閉める側のダメージこそ想像もつかない大きさなのんだろうけれど。ひとりカラオケ以外はバッチリ三密だからねぇ……。
ラスト1時間半のつもりで、ブッ通しで17曲。最近、グッとピッチの精度を向上しつつ、無理に出していたhi-A#の制御率も上がりつつ、シャウトの声色も鮮やかさを増しつつ、なにせすべてにおいて登り調子なのになぁ。まぁ、別の店を探すか……県外も視野に入れつつ。
で、頭の方はプログラミングだ。ちょっと前に突然、mp3ファイルにアルバムのジャケットイメージを組み込みたくなってタマらなくなってしまったのだ。mp3ファイルへのタグ付けといえば、ずっと前にツールを自作しているのだが、そいつを機能拡張する形がいいだろう。久々にコードを見直したら、自ら直接にmp3バイナリを書き出すコードになっていて驚いた。なかなかやるな、過去のオレ。ネット上にあったID3v2.3タグの仕様書を見つつ、APICタグで画像を組み込んだり、APICタグから画像を抽出したりするコードを書く。できた。PSPに転送して動作を確認。成功。
PSPも悪くないが、スマホを持ち歩かない自分が、もうちょっと軽く音楽を持ち歩けないかと、アレコレmp3プレイヤを物色していたところ、イイ感じのアイテムが見つかり、ポチったものが届いた。いわゆる中華プレイヤ。RUIZUのX52。これだ。
ところが、立派なカラー液晶を搭載しているのに、ジャケットイメージが出ない。それはアリエナイだろう……せっかくタグ付けツールを自作したのに……いや、でも、PSPだと出てるんだよなぁ。市販のジャケットイメージ付きのダウンロードmp3ファイルはどうか、と、Amazonで購入したギャラクティックストームのmp3をそのまま転送してみたところ……出るぞ!? なんだこれ? 何が条件だ?
微妙なタグの仕様をアレコレしても変化なし。そこで、ギャラクティックストームのジャケットイメージを抽出して、別のmp3に組み込んだところ……出る!画像形式か! ……てなわけで、オチは「progressiveなjpeg形式には対応していない」なのでした。gimpでprogressive形式を落としてやるとバッチリ……ところが、こんどはヘタな縮小処理が気になりだした。えーい、ドットバイドットで表示できるように事前処理してやんよ。
「64x64」と当たりをつけ、格子模様のmp3を転送してみたがモアレた。モアレの様子を見つつ、あれこれ試行錯誤したら「76x68」であることが判明。なんと中途半端な。結局、progressive形式の落としついでに、convertで変換するのがベストな方法のようだ。アスペクト比を保ちつつ、黒縁を足す処理を入れたら、以下のコマンドになった。
$ convert -resize 76x68 -unsharp 12x6+0.5+0 -quality 95 -extent 76x68 -gravity center -background black jacket0.jpg jacket.jpg
これでバッチリだ。パッケージを置いておく。
情報を探し回りロシアまで訪れて、さんざん試行錯誤したところ、ffmpeg-amvというツールで変換でき、再生することに成功した。しかし、変換ツールの使い方の問題なのか、画質がワルプルギスの夜である。
$ ffmpeg -i madoka01-01-13.mp4 -vcodec msmpeg4v2 -s 128x72 -acodec wmav2 madoka01-01-13.wmv
$ ffmpeg-amv -i madoka01-01-13.wmv -f amv -s 128x72 -r 15 -ac 1 -ar 22050 madoka01-01-13.amv
2020-04-16(Thu) ウェブカムを再生する
2年チョイ前、ロードスターへのアオリ対策として「リアに付けるドラレコ気取りダミーカメラ」を手配した。その実体は、アリエクで見つけた「安い割に見た目がハデなウェブカメラ」である。たったの686円だ。ダミーにしても別に惜しくもない値段である。
しばらく、そのままの形でロードスターのエアロボードの上にくっつけていたのだが、垂れているUSBケーブルが邪魔なので、ある時、思い切って数cm残して切断してしまった。今後、ウェブカメラとして使うことはないだろう、という判断だった。
しかし、このコロナのご時世である。友人と、いま流行りの「リモート呑み会」でもやろうかという話になったところで、マトモなウェブカメラを持っていないことに気づいた。ノートPCの上にはあるのだが、デスクトップ環境でやりたいのだ。ところが、買おうにも、みな同じことを考えているから、値段が高騰してしまっている。
とはいえ数cmは残っているので、ピンヘッダでコネクタを作ってしまおう。実に久々にハンダゴテを温めるなぁ。しかしなんだこれ。カメラ側からはケーブルが6本も出ている。4本はUSBとしても、残りの青と黄はなんだ?
青はLEDにつながっているようだ。+5Vを与えると白色光で撮影対象物をかなり強く照らしてくれる。黄は不明だが、この2本はUSBコネクタに配線する場所がないわけで、その意図は不明である。んが、もっと不明なのは、カメラ正面右の銀のボタン。スチル撮影用っぽいアイコンが刻まれているが、中を開けると、ボタンの裏にあるのは何も配線されていないタクトスイッチである。わは。中華品質というか、なんというか。
ついでなので完全にバラし、鏡筒とレンズの接着を直したり、レンズを磨いたりしつつ、ケーブルをハンダ付け、USBデバイスとして再生してやる。コイツ、映るぞッ!! ちなみに、このカメラのレンズ部分はマニュアルフォーカスとなっており、鏡筒をヒネることでフォーカス位置を調整できる。値段の割に鮮明で発色も悪くない。どうも、マイクも生きているようである。ちょっとノイズが多すぎて使う気にはならないが。
ついでなので、LEDを光らせるケーブルを作ってやる。実にバラック的だが、まぁ、十分に役に立つ。しかし、LEDの光は強すぎるので、自分の顔を映すのであれば、なんらかのデフューザを付与してやらないとキビしいが。
というわけで、ディスプレイの右上に取りつけてやる。Zoomを立ち上げるが、十分に実用的な画像品質が得られた。ちょっと工房のゴチャゴチャした背景まで映りすぎるので、背後にブツ撮り様の灰色の布を垂らしてやったら、思った以上にイイ感じである。
2020-04-21(Tue) PulseAudioでBGM付きリモート呑み会に
リモートお茶会も、リモート呑み会も楽しく実行できたのだが、ひとつだけ物足りなかったことが、BGMを流せないことだった。Zoomにはサウンドの共有機能があるのだが、音声がブツブツと切れてしまう症状が、どちらの会でも出てしまい、音楽として楽しむことができないレベルであった。
まぁ、別にBGMが必須というわけではないのだが、以前、アニソンのサビのメドレー動画を肴に酒を呑んだのが意外と楽しかったのだよな。それに、BGMは基本的に流しっぱなしにするので、会話の流れで「おっ。この曲さぁ…」みたいに会話が弾む材料になるのも期待できる。無理矢理やるなら、実際に部屋に曲を流し、マイクから入力するという方法もあろうが、やはりそれでは音質の低下は激しいであろう。
しかし、よく考えれば、Linuxのデスクトップ環境では、ずいぶん前からPulseAudioというソフトウェアミキサが標準となっている。そいつを使えば、Zoomに渡す前のマイク音声にBGMをミキシングすることくらい、できそうなもんだ。しかし、そもそも自分はPCのサウンド機構に非常に疎い。ひとつ、これを機にガッツリと勉強してみるか。
まず、ウチのメインマシンであるノートパソコンの起動時の状態を図示すると、以下のようになる。ThinkPadA285をドッキングステーションに載せ、デスクトップ化した状態だ。
この状態だと2系統のサウンド入出力ハードウェアが存在することが読み取れる。ひとつは上側のドッキングステーションの機構だ。出入口はステレオ出力+マイク入力の4極の3.5mmジャックである。「ドック output monitor」というのが気になるが、それを無視すれば、非常に単純明快である。
もうひとつが下側のノートPC本体の機構だ。出入口は同じくステレオ出力+マイク入力の4極の3.5mmジャックであるが、そこに挿入していない場合、ビルトインのスピーカと、ビルトインのマイクが有効になるのだ。やはり「本体output monitor」を無視すれば、非常によくある構図である。
このように2系統のサウンドが存在していても、通常はどこか1箇所から入出力すればいいわけで、そのためにデフォルト入力と、デフォルト出力というものが設定できる。必ずしも、どちらかの系統に統一する必要はないが、現状、入出力とも本体側に設定してあり、ふたつの★はそれを示している。
$ pacmd list-sources | grep -E "index:|name:|description"
index: 0
name: <alsa_output.usb-Generic_ThinkPad_Dock_USB_Audio-00.analog-stereo.monitor>
device.description = "Monitor of ThinkPad Dock USB Audio アナログステレオ"
index: 1
name: <alsa_input.usb-Generic_ThinkPad_Dock_USB_Audio-00.analog-stereo>
device.description = "ThinkPad Dock USB Audio アナログステレオ"
index: 2
name: <alsa_output.pci-0000_04_00.6.analog-stereo.monitor>
device.description = "Monitor of Family 17h (Models 10h-1fh) HD Audio Controller アナログステレオ"
* index: 3
name: <alsa_input.pci-0000_04_00.6.analog-stereo>
device.description = "Family 17h (Models 10h-1fh) HD Audio Controller アナログステレオ"
$ pacmd list-sinks | grep -E "index:|name:|description"
index: 0
name: <alsa_output.usb-Generic_ThinkPad_Dock_USB_Audio-00.analog-stereo>
device.description = "ThinkPad Dock USB Audio アナログステレオ"
* index: 1
name: <alsa_output.pci-0000_04_00.6.analog-stereo>
device.description = "Family 17h (Models 10h-1fh) HD Audio Controller アナログステレオ"
一般にウェブカメラを接続するのが常であり、それには音声入力用のマイクも備わっている場合が多いが、通常はそれでなく、ヘッドセットを使うことだろう。今回は、本体のジャックにヘッドセットをつないだ想定である。リモート会議ソフトウェアによってはソフト側で、入出力ポートを選ぶこともできるだろうが、通常はデフォルト入力と、デフォルト出力が選択され、その両方を同時に使うことになる。自分の発言はヘッドセットのマイクを通じてネットの向こうの相手へ、相手の発言はネットからヘッドセットを通じて耳へ、というわけである。
さて、問題はここからなのだが、それに先立って、普段、歌の練習に使っているPCMレコーダ「DR-05X」をUSB接続してみる。先代の「DR-05」との違いのひとつが、この「PCとつなぐとサウンドデバイスになる」という点なのであった。一体、どんな時に使うのかと思っていたのだが、こういう時に使うのである。で、接続すると以下のようになる。
その上で何をしたいかというと、自分の発言にメディアプレーヤの出力するBGMを混ぜ、ネットの向こうの相手へ送りたいわけだ。シンプルに考えると、図のようになるわけだが、このようなことはできない。ではどうするか。ヌルデバイスの登場である。
pacmd load-module module-null-sink sink_name=null.music
今回は、BGMを流すのに使うということで「null.music」という名前を付けたが、ヌルデバイスがどんなものかというと、出力側の「null.music」に出力した音声が、入力側の「null.music.monitor」から出てくるので、それを入力に利用できる、というものである。そう。先ほどから気になっていた「xxxx.monitor」というのは、いずれも対応する出力先のデバイスに出力した音声を入力に利用できる、モニタデバイスというものなのだ。つまり、YouTubeを再生しながら、その音声をデジタル録音したりすることに使えるわけだ。
しかし、それを使うためには、もうひとつ重要な概念がある。ループバックだ。ループバックとは、入力を出力に結びつけるものだ。ヌルデバイスには、出力がないので、ループバックで入力を別の出力に結びつける以外の使いみちはない。そして、結びつける際、ひとつの入力を複数の出力に結びつけてもいいし、複数の入力をひとつの出力に結びつけてもいい、というルールがある。そうだ、これだ、欲しかったのは。
そして、一気に状況は加速する。さらに「null.mic_music」というヌルデバイスを追加し、ループバックでマイクの入力とメディアプレーヤの入力を、同じヌルデバイスに結びつけてやる。その上で、そのヌルデバイスのモニタデバイスの出力をリモート会議ソフトウェアに送ってやるのだ。つまり、以下のようになる。
# 「null.music」「null.mic_music」というヌルデバイスを追加する
pacmd load-module module-null-sink sink_name=null.music sink_properties=device.description='Null_Music_Output'
pacmd load-module module-null-sink sink_name=null.mic_music sink_properties=device.description='Null_Mic_Music_Output'
# sourceとsinkの名前を知るために一覧を出力
pacmd list-sources | grep -E "index:|name:|description"
pacmd list-sinks | grep -E "index:|name:|description"
# PCMレコーダからの音声とメディアプレーヤからのBGMを「null.mic_music」にミキシング
pacmd load-module module-loopback source=alsa_input.usb-TEAC_Corporation_TASCAM_DR_Series-00.analog-stereo sink=null.mic_music
pacmd load-module module-loopback source=null.music.monitor sink=null.mic_music
# メディアプレーヤの出力は「null.music」へ、Zoomへの入力は「null.mic_music.monitor」から
pacmd set-default-sink null.music
pacmd set-default-source null.mic_music.monitor
最後はオマケだが、相手が聴いている音がどんなものなのかを、モニタできるようにもしてみる。そしてそれは、通常Zoomで使うヘッドホンではなく、別のヘッドホンから出力させる。最終的には、以下のようになる。
pacmd load-module module-loopback source=null.music.monitor sink=alsa_output.usb-TEAC_Corporation_TASCAM_DR_Series-00.analog-stereo
pacmd load-module module-loopback source=null.mic_music.monitor sink=alsa_output.usb-Generic_ThinkPad_Dock_USB_Audio-00.analog-stereo
2020-04-26(Sun) HiB到達は突然でもなく
喉の声帯の引っ張りも、腹筋の呼気の押し出しも、毎度「アホか、これ以上デキるか」と思うのに、次の機会には、同じ高さが少しラクに、そしてその先まで届くようになっている。3時間が長く感じなくなってきたし、息切れも減ってきたし、喉のダメージも感じなくなってきた。これは、完全にボディビルダのノリなのではないのか(知らんけど)。
ちなみに、ミックスボイスというのは未だよくわからないので、HiBは地声で出している。しかし、シャウトでも、裏声でも、音程を狙って出せるようになってきているので、教わればミックスボイスもすぐに出せそうな気がしている。
2020-04-28(Tue) 目の付けどころがシャープなマスク
自分は、ここんとこ全日テレワークだし、人ごみに出かける機会もない。人の逆を張って意地でもマスクしない、というつもりも、ないわけでもないのだが、そもそもマスクをする必要が薄い。なので、どうして人がそうもマスクが欲しがるのか、まったく理解できない。
自分は昔、根っからのシャープ信者だったので、シャープのロゴを見るだけで心が踊ってしまうのである。いやーん、ほしー、ほしー。でも、とてもじゃないけど買えない。おい、コラ、オマエラ。これほど長くシャープを信奉している信者のオイラを優先しやがれ! オマエは今まで買ったシャープ製品の数を覚えているのか? 買わせてくれたら、中身のマスクは1枚を残して欲しいやつにやるから!
2020-04-30(Thu) テイクアウトに乗りまくれ!!
自粛、自粛と、あらゆる店を潰しにかかっている政府を無視し、可能な範囲で遊んでいるオイラである。今日も、カラオケ屋で喉の筋肉を鍛えまくってきた。いつもの店が閉まっているので、新たに発掘した店に行っているのだが、そこは2時間以上歌うなら、フリータイムのが安くなってしまう価格設定のせいで、練習時間に際限がなくなるという恐ろしい店である。仕方なく3時間程度で自粛している。
ちなみにこの店、家族以外はふたりまでしか同室不可、という制限を設けつつ営業している。なんでも一律に営業自粛を迫り、挙げ句の果に店名を晒し上げるなどして、知事は頭の悪さを自慢するのではなく、そういう工夫を求めるべきではないのか。パチンコなんて、台をひとつ空ける程度で、十分に危険度を下げられるように思える。入場前に記名させ、追跡できるようにすれば、実際に感染が起きるのかどうかも把握できる。今後、自粛を長く続けたいなら、そういうデータは必要ではないのかね。
どうも政府は、自粛したいという世論の言いなりになっているだけのように感じる。どこの店だって、ひと月の固定費は、百万オーダのはず。数十万とかの協力金って、ガキの使いかよ。最大限の対策をしつつ営業を続けることこそ、正しい経営者ではないのか。この騒ぎで、気に入っていたホテルも、近所の温泉もツブれてしまった。なんなんだよ。
というわけで、自分はせめて少しでもお気に入りの店の売上に貢献すべく、テイクアウトの利用を増やしている。協力金の名目で生活費を増額し、カミさんの家事の負担を下げつつ、ちょい高級焼肉店の弁当、近所にできたばかりの家系ラーメン屋、そして、今日はちょっと遠いが猛烈にウマいハンバーガを食わすアメリカンダイナーである。持って帰ると間違いなく豚のエサになってしまうので、すぐ近所の公園で食す。ところが、思った以上に景色のいい展望台があり、コロナに感謝したくなるくらい、素敵なピクニックになった。どれもウマすぎて、健康被害が気になるくらいだ。
しかし、アホな芸能人のツイートで人間の器の小ささが次々と明らかになるものだな。バカ発見器とはよく言ったものだ。なかなかの名言は「10万円を辞退するなどという宣言や書き込みをするな」だ。オマエ、別に金に困ってないだろ。それなのに、自分が10万円欲しくて、人の辞退が眩しく見えるって、どんだけケツの穴が小さいんだよ。たかが10万円じゃねぇか。「手を挙げるだけでもらえる」に文句つけてるヤツもいる。必要ないやつは受け取らない。それで十分によい方法じゃないか。