2021年06月24日

ウェブブラウザで動く講演タイマー

ウェブブラウザ上で動作する学会タイマー(口頭発表の時間を測ってベルを鳴らすアプリ)を作りました。・・・それ、もう既にあるよね?と言うなかれ。近年のブラウザの新機能を盛り込んで、フルスクリーン表示やスリープ禁止機能などを付けました。

スクリーンショット 2021-06-26 15.30.34.jpg

その学会タイマーは、こちらhttps://shiura.com/timer/から使用できます(日本語版はこちらhttps://shiura.com/timer/jp)。ネット環境のないところで使用するには https://shiura.com/timer/timer.zipからファイル一式をダウンロードしてください。説明書(日英)はこちら

学会タイマーにはスマホアプリも多くありますが、手軽に使えて評判の高いのは丸田氏の Time Keeperかと思います。機能や画面がシンプルで、使いやすく見やすいのも人気の秘訣かと思います。しかし登場から既に10年、前回アップデートからも5年ほど経っており、その間にブラウザの方も進化しているようなので、この機会に、以下のような自分の欲しい機能を付け加えたバージョンを作りました。

  • フルスクリーンモード 画面のボタンを押すと、ウィンドウ枠などがまったくない全画面表示ができます。
  • スリープ禁止(wakeLock) パソコンやスマホ・タブレットの設定に関わらず、画面が暗くなったり消えたりしません。
  • 説明文の切り替え ベルが鳴る間の4つの時間帯、それぞれに異なる文を設定でき、「講演中」「質疑応答」「時間切れ」などの状態表示ができます。
  • バーグラフ表示 時間の経過がひと目でわかります。バーの色を変えて状態が直感的にわかるようにもしました。
  • 直感的な時間設定 「この欄に入れるのは、開始時点からの時間なのか、それとも前回のベルからの時間なのか?」など、迷ったことはありませんか。時間を入力するとバーが伸縮して時間の比率が見えるようにしました。

丸田氏のプログラムでいいなと思った部分、例えば現在の設定を URL に変換してブックマーク保存できるところなどは参考にさせてもらいました(ただしプログラムはすべて1から作っています)。

compatibility.jpg


ただ、いくらか制限があります。フルスクリーンモード (Fullscreen API) とスリープ禁止 (Screen Wake Lock API) は機種やブラウザによって対応状況が違い、一部の環境では動作しません。特に iPhone (iOS) や iPad (iPad OS) では Apple のポリシーによるものか、Google Chrome にフルスクリーンモードが許可されておらず、またバッテリーに影響があると思われる Wake Lock API は safari にも実装されていないようです。ですが、OS の「設定」で「自動ロック」を「なし」に設定した上で、 safari で全画面表示で使えば問題ありません。(2023.3.28 Safari 16.4 から Wake Lock API が実装され、スリープ抑止が働くようになりました。上の表も更新しました。)

手持ちの環境で出来るだけ動作確認しましたが、不具合や要望があればぜひお寄せください。
posted by しんさく at 23:34| Comment(9) | TrackBack(0) | 電子モノ

2021年01月02日

理想のニアフィールドリスニングを目指して

この年末年始はずっと、スピーカーをああでもない、こうでもないとやっていました。ですのでまだ、たいして経験は踏んでいませんが,その中で1つの方向性が見えてきました。それはフルレンジユニット+密閉形スピーカー+イコライジングの組み合わせによるコンパクトで素直な音作りです。

DSC_5457.JPG


現在のテーマは、いわゆるニアフィールドリスニングというのでしょうか。パソコンの画面の脇、机の上に置けるような小型のスピーカーで、小音量だけど聴き疲れせず、かついろんなジャンルの音楽が楽しめるスピーカーです。(なおリビングルームには学生時代から30年ほどメンテしながら使っているヤマハ AST-1 のシステムを置いてあり、満足しているので置き換える予定はありません)。上の写真は撮影用なので大机にノートPC本体を置いていますが、自分の部屋では27インチぐらいのPC用モニタを4人がけの食卓机に置いています。ですので普通の仕事机よりは幅も奥行きも大きいですが,それでもスピーカーは手を伸ばしたら届くぐらいの距離に置くことになり、画面の邪魔にならないようにしようとするとそんなに大きいものは置けません。このガラス玉スピーカー(内容積 約1.5L)より大きいものは遠慮したいところ。しかしそうすると、良い音の再生には大きな壁があります。それは低音。低音を出すにはどうしても大きなエンクロージャ容積が必要と言われていますが、それは物理的に無理です。また小音量では聴覚特性(等ラウドネス曲線)から低音はさらに感じられにくくなってしまいます。さてどうしようか、というわけです。

説明.jpg


結論から言うと、ニアフィールドリスニングには密閉形のスピーカーがいいという結論になりました。バスレフ型は図のようにエンクロージャにパイプ(バスレフダクト)がついており、その中の空気が(進行波として音波を放出するのではなく)一体でピストンのように動くことで音を増幅します(参考)。スピーカー内部の空気がバネの役割をし、それとダクト中の空気の質量が共振を起こすことで低音を増幅します。たったこれだけの空気でなぜ低周波の共振を起こすのかというと、ダクトの直径はスピーカーよりも遥かに小さいからです。つまり、ダクト中の空気はコーン紙の振動よりもずっと大きく(速く)動き、また、ダクト中の空気が発生させる圧力は(パスカルの原理により)大きなコーン紙を押すときに増幅されます。ちょうど右図のように、テコの原理が働いているようなもので、ダクト中の空気は実際の質量よりもはるかに大きな重りとして働きます。これによりスピーカーのコーン紙の共振周波数よりも低い周波数で共振を起こさせます。またこの共振により位相が反転され、スピーカーのコーン紙が下がるときには空気も同時に下がることで音が打ち消し合うことを防いでいます。

50.jpg


なるほど、低音が増強されるのだからこれを使えばいいじゃないか、というのが普通の考え方のようですし、実際、現在販売されている多くのスピーカーはバスレフ型です。しかしこれが小さいスピーカーではどうも良くない。スピーカーが小型化すると共振周波数が上がるので、バスレフダクトの共振周波数もそれに合わせて高くしなければなりません。そうすると、その共振周波数より下の周波数は密閉形よりもむしろ急激に減衰してしまい、机の上に置けるサイズのスピーカーではコントラバスの低音が聞こえなくなってしまいます。またバスレフ型では共振現象を使うので、低音を強く増幅させようとすると音が弾み過ぎてしまい締まりのない音になってしまう。無理をした小型スピーカーではとくに顕著で、ブーミーな低音がして安っぽいことこの上ありません。アンプの出力インピーダンスを低くして制動をかければいいという意見もありますが、ヘルムホルツ共鳴部分には制動が働きませんので無意味です。上のグラフはボイスコイルの直流抵抗が0で出力インピーダンスも0、つまり完全な制動が働き、入力の通りにコーンが振動している場合の気柱の共鳴と出力の関係を表しています(ヘルムホルツ共鳴によるゲインが約6dBになる状況です)。入力(青線)は最初にもっとも振幅が大きく、次第に減衰する波形ですが、それに対し気柱の振動は加振により遅れてピーク値をとります。このようにどうしても制御が働かない領域が生じます。結果、大きなスピーカーや良質なヘッドホン(私はオーディオテクニカの名機、ATH-A900を使っています)で再生するような、スッキリしたキレイな低音は小型のバスレフでは望めないようです。

おい、リビングに置いているという AST-1 もバスレフ型じゃないか。という指摘があるかもしれません。しかしこのスピーカーは専用のアンプで駆動・制御されます。スピーカーそのものの設計は、コーン紙の共振周波数に対してバスレフダクトの共振周波数をずっと下に離し、その間の谷になる領域をイコライザーで稼いでいるようです。そして、それでも出しにくい30-50Hzあたりの重低音領域を専用アンプの負性抵抗とバスレフで鳴らすように作られています。このように専用の設計とチューニングを行えばバスレフがよい可能性がありますが、簡単ではありません。バスレフ型に単純な低域増強を組み合わせると、負荷が小さくなる共振周波数より下の領域でスピーカーの動きが過大になります(しかし肝心の低音は打ち消し合って消えてしまう)。大型スピーカーならそもそも低音が出やすいので、低域の限界をバスレフで少しだけ伸ばすのは良い考えですが、それではカバーできない領域が小型スピーカーでは大きく、バスレフだけでは焼け石に水、というわけです。

スクリーンショット 2021-01-02 18.32.14.jpg


しかし密閉型でも低音は出にくいではないか、という指摘があるわけですが、そこで登場するのがイコライザーです。密閉形は低音の低減がなだらかな上、大入力でも歪みにくいという特徴があります。そもそもニアフィールドリスニング用なのでスピーカーの耐入力よりもずっと小さい出力で使っており、増強による悪影響はありません。グライコがなくても、PC等から再生する場合、再生ソフトに付属しているグラフィックイコライザーで低音を増強することができます。上のグラフは手持ちのマイク(未キャリブレーション)で、また特に反響対策をしていない普通の部屋で計測したので絶対的な周波数特性とはかなりズレがあるはずですが、比較のために掲載しました。グラフの絶対的な形状でなく、赤と緑の線のずれを確認したものです。赤線がガラス玉スピーカーそのままの特性で、それに対し緑線は下で示す方法で低音を増強したものです。あまり極端に増幅すると不自然になる可能性があるので、聴き疲れしない程度にとどめていますが、200Hz以下から徐々に低音が増強され、60Hzあたりまで十分な強さで聞こえるようにできました。実際に音楽を聞いても、クラシック曲でコントラバスのソロパートがあるような曲でもちゃんと楽しめるようになります(低音が強そうに思えるロック等のドラム音の低音には高音も含まれているので、意外とごまかしが効きますが、クラシックはそうはいきません)。これより下の領域はそもそも聴覚特性的に、小音量ではほとんど聞こえないため問題ないと思います。

eq.jpg


低音の増強はイコライザーでやればいいのですが、Mac の場合、音楽再生ソフトにはイコライザがついているものの、OS 側には備えがありません(サードパーティ製のソフトでできるようですが)。また再生機やスピーカーを切り替えたときなどに問題がないようにと考えると、アナログ回路部分に組み込むほうが何かと便利です。そこで単純なRC回路でローパスフィルタを作成しました。右はこちらの回路シミュレータで周波数特性を計算した結果で、コンデンサ側にも抵抗をはさむことで、低域の増強率を制限しています。この回路の場合、フィルタの最大ゲインが (R1+R2)/R2 になります(この回路の場合 15.8dB)。また低音の増強が始まる周波数はC1とR2で決まり、グラフ下側の屈曲点付近の、3dBの増強が得られる周波数は 1 / (2π C1 R2) で計算できます(この回路では80Hzです)。なおグラフの最大の傾きは 6dB/OCT(周波数が倍になるごとに6dB)で固定です。このような特性を持つので、ゲインとカットオフ周波数をそれぞれ調整できるよう、抵抗器部分はすべて可変抵抗(それぞれ 5KΩと2KΩ)で作成しました。音質的にはセラミックコンデンサはあまり良くないと言われますが、この回路はヘッドホン出力とアンプの間にはさむので電圧が低く、実測でも最大で0.1V程度なのと、回路構成的にコンデンサ両端の電圧が高くなるときは通過電流が小さくなり、出力への影響が小さくなりますので問題ありません(それでも気になる人はフィルムコンデンサで作ってください)。

このような考え方・方針は(とてもメジャーとは言えませんが)独自ということもなく、例えばこちらのブログでも同様に、バスレフ型の弊害と、密閉+イコライジングのメリットが様々な側面から検討・検証されています。またRC回路を用いたイコライジングはこちらで提案されており、参考になりました。他にも、小型スピーカー・小音量では、という条件は付きますが、密閉形+イコライジングのメリットを主張するブログ等を見かけます。さらにフルレンジユニットを使うことで、定位感が高くすっきりした、満足行く聴き心地が得られました。
posted by しんさく at 23:26| Comment(0) | TrackBack(0) | 電子モノ

2020年11月06日

今度はカレンダーです

また変なものを作りました。ここのところは時計でしたが、今度は万年カレンダーで、よく受付とかに置いてありがちな、今日の日付と曜日を表示するだけのものです。ただし、ただ表示するだけではありません。月と日を合わせると、1年間(3月1日から翌年の2月末日までの間)、正しい曜日を自動的に表示してくれるというものです。



この動画にあるように、月と曜日、日付の10の位と1の位の4つのドラムが連動しています。どのドラムが入力用(操作用)ということはなく、どれでも自由に、どちら向きにでも、また何回転でも回せ、どのように操作しても曜日と日時の関係が正しく保たれます。

2.jpg

ミソは、内部に仕込まれた3組の遊星歯車にあります。遊星歯車は3つの回転角度を連動させることができるので、2箇所の角度を足した結果を出力することが出来ます。そのときに必ずギア比がかかって減速・加速してしまうのですが、3つ同じギアを使うことで、月と日付の3つのドラムから曜日のドラムへのギア比を、すべて2倍(+2または-2倍)に揃えています。

1.jpg

ちょうど2倍のギア比とすることで、1つの曜日に対して他のドラム上では2箇所ずつを割り当てることが出来ます。月は12種類、日付の1の桁は10種類あるので、それらをうまく配置することで曜日の計算ができます。ギア比が整数なので月・日付のドラムを1回転させると曜日のドラムはちょうど2回転し、もとの状態に戻ります。これによって各ドラムを何回転させてもよい,という性質が生まれます。

3.jpg

日付の配置の説明です。前述のように日付の1の位は10種類で、それをそのまま並べ、空いた部分には、同じ曜日に対応するもう一方の数値を設定しておきます。また10の位は4種類しかありませんので8箇所しか埋まらず、残った6箇所は混乱を避けるために x を表示しています。

4.jpg

月の配置です。例えば3月のように31日ある月は、その翌月の曜日が7で割った余りである3日だけずれます。この性質を用い,3月の次の4月は3だけずれた位置に配置します。2月はうるう年に日数が変わるので、3月を起点にして配置していくと、うまい具合に重複なく収まります。

動画で説明しているように、特定の曜日の日付を順番に調べることも出来ます。1年に一度(順に1日ずつ進めて使うときは3月1日に)、曜日合わせの必要があるので、曜日のドラムはずらすことができるようにもなっています。1年の間であれば任意の日付で曜日合わせして問題ありません。

three-2.JPG

久々に光造形タイプの3Dプリンタを動かして、40%に縮小したものも作ってみました。これをちゃんと動くように調整するのは大変でしたが、なかなかハイクオリティに出来上がったと思います。

今回のカレンダーの動作原理は、いろいろと考えを巡らすうちに思いついたものですが、過去に同様のアイディアがあったかどうかはわかりません。ネットで検索する限りでは同様の例は見つかりませんでしたが、ともあれ、操作が簡単で機能的なだけではなく、形としてもよくまとまった、お気に入りのデザインの小物ができました。

データは Thingiverseからダウンロードできます。

タグ:3Dプリンタ
posted by しんさく at 22:14| Comment(0) | TrackBack(0) | 電子モノ