メインコンテンツへスキップ

Hugoで楽譜を描画する(abcjs)

abcjsというABC記譜法で書いたテキストから楽譜を描画するライブラリを使って、Hugoで作成するページで楽譜を表示できるようにする。

music-abcを指定したコードブロックに対して処理するようにレンダーフックを定義する。

layouts/_default/_markup/render-codeblock-music-abc.html
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{{- $src := .Inner | safeHTML }}
{{- $uuid := md5 $src }}
<div id="{{- $uuid }}"></div>
<script>
  window.addEventListener('load', function(){
    const src = `{{ $src}}`;
    ABCJS.renderAbc("{{- $uuid }}", src, { responsive: "resize" });
  });
</script>
{{ .Page.Store.Set "hasMusicAbc" true }}

楽譜を描画するエリア(<div id="{{- $uuid }}"></div>)のIDを決め打ちにしてしまうと、ノート内に複数のコードブロックを書けないのでMD5ハッシュを生成し、IDとして使用した。

layouts/partials/head.html
1
2
3
  {{ if .Page.Store.Get "hasMusicAbc" }}
  <script src="https://cdnjs.cloudflare.com/ajax/libs/abcjs/6.1.7/abcjs-basic-min.js"></script>
  {{ end }}

ヘッダにabcjsをロードする処理を追加。ページ内にmusic-abcを指定したコードブロックがある場合(hasMusicAbcがtrue)のみロードするようにした。

obsidian-plugin-abcjsに楽譜の表示例がある。

関連記事

abcjs

abcjsはABC記譜法で書いたテキストからブラウザ上で楽譜を表示できるJavascriptのライブラリ Javascript library for inserting music in the browser. | abcjs Obsidianではobsidian-plugin-abcjsというプラグインがあり、ノート内で楽譜を表示することができる。

D2 Declarative Diagramming

terrastruct/d2: D2 is a modern diagram scripting language that turns text to diagrams. テキストからダイアグラムを生成するツール。類似のツールとしてはMermaid、GraphViz、PlantUMLなどがあり、以下のサイトでこれらのツールで同じダイアグラムを書く場合の比較が可能。このサイトはD2開発元によるものらしい。 Text to diagram テキストと出力の例 # 公式サイトからの引用 # Actors hans: Hans Niemann defendants: { mc: Magnus Carlsen playmagnus: Play Magnus Group chesscom: Chess.com naka: Hikaru Nakamura mc -> playmagnus: Owns majority playmagnus <-> chesscom: Merger talks chesscom -> naka: Sponsoring } # Accusations hans -> defendants: 'sueing for $100M' # Offense defendants.naka -> hans: Accused of cheating on his stream defendants.mc -> hans: Lost then withdrew with accusations defendants.chesscom -> hans: 72 page report of cheating インストール # d2/INSTALL.md at master · terrastruct/d2 Macの場合はbrew install d2でOK

Obsidianのノートを外部公開する場合のデッドリンク問題

ページタイトル変更時の問題 # Obsidianでノート名(ファイル名)を変更した場合、そのノートに張られているリンクは自動的に修正される。このため、Obsidian単体で使っている限りは気軽にノート名を変更して問題ない。 ページの内容が変化した場合、それにあわせてノート名を変更したくなるのは自然なことで、Obsidianはそれをアプリケーションの機能として実現しているわけだ。 ただ、Obsidian PublishやQuartzなどを使って、Obsidianのノートをインターネット上で公開する際には、外部サイトからリンクを張られる可能性がある点を考慮する必要がある。 Obsidianを単体で使うときのように気軽にノート名を変更してしまうと、外部サイトからのリンクがデッドリンクになってしまうからだ。 この問題に対してScrapboxは、 ページタイトルをURLにする(ページタイトルとは別に一意なページIDを持っている) 外部からのアクセス時、ページが無くなっていた場合は、そのURLのアクセスログからページIDを探し、ページIDから移動先へリダイレクトする という方法で対応しているようだ。 wikiでページのURLをIDにすると絶対にうまくいかない - 橋本商会 本サイトでの対応 # 本サイトではこのページタイトル問題について、以下のように対応している。 ノート名(ファイル名)は半角英数字と一部の記号(- _)だけを使用する Markdownファイルとしての取り扱いを考慮 ノート名(ファイル名)は基本的に変更しない(外部公開時のパーマリンク維持のため) それでも変更したくなったらFront Matterにaliasesを書いておけば大丈夫そう これはHugoの機能。ただしまだQuartzでは試していない。 ノートのタイトルはFront Matterのtitleを使用する URLの構成要素ではなくなるので気軽に変更できる ただ、これだとファイルエクスプローラなどで視認性が落ちてしまう… ファイル名表示をtitleがあればそれを使用するプラグインがあった obsidian-front-matter-title オプションのAlias titleをONにすれば、Aliasを本来の目的で使用できなくなるものの、Wikiリンクの補完時に日本語のtitle、ファイル名のどちらでも候補を検索できるようになる 現時点では大きな問題は無さそうだが、しばらく運用して再評価したい。

フォトギャラリーサイトを立てた

いままでに撮ってきた写真をまとめたいと思いnicokaiser/hugo-theme-gallery: Gallery Theme for Hugoという、フォトギャラリー向けHugoのテーマを使ってフォトギャラリーサイトを立てた。 TAKEUCHI Hitoshi - Gallery Hugoの運用に慣れていれば使い方は簡単で、ただ写真を表示したいだけならフォルダへ写真をコピーするだけで良い。 写真に説明文を付けたい場合は、写真があるフォルダのindex.mdに書くか、Exifのタイトルを設定すればOK themes/gallery/exampleSite配下のサンプルを見れば雰囲気はわかると思う。 git pushすれば公開するGitHub Actionsを書いたので、簡単に公開できるようになったし、これからは撮りっぱなしにせず、ここへ少しずつまとめていきたい。 むかし撮った写真をあらためて眺めていると、その時の記憶がよみがえってきて楽しいですね。

iZotope RX9

iZotope RX 9 Standardは、音声修復・復元に特化したプロフェッショナル向けのオーディオ処理ソフトウェア。ノイズ除去、クリック音の修正、音声の復元など、様々な音声問題を解決するための強力なツールセットを提供している。 スタンドアロンアプリケーションとしても、DAWのプラグインとしても使用可能で、音楽制作、ポッドキャスト制作、映像制作、音声復元作業などの分野で広く活用されている。 iZotope RX 9 Standard プラグイン一覧 # プラグイン名 主な機能 用途の例 Breath Control 息継ぎ音の調整・除去 ボーカル録音の仕上げ、ナレーション品質向上、ポッドキャスト編集 Connect 他のiZotope製品との連携 Neutron、Ozone等との統合ワークフロー、プロジェクト間連携 De-click クリック音・ポップ音の除去 レコードのデジタル化、マイクの雑音除去、編集時のカットノイズ修正 De-clip クリッピング(音割れ)の修復 過入力で歪んだ録音の修正、ライブ録音の音割れ改善 De-crackle パチパチ音・ひび割れ音の除去 古いレコードの復元、テープ録音の修復、劣化した音源の改善 De-ess 歯擦音(S音)の軽減 ボーカル録音のサ行刺激音除去、ナレーション品質向上、過剰な高域成分軽減 De-hum ハム音・ブーン音の除去 電源ノイズの除去、グランドループノイズの修正、60Hz/50Hzハムの除去 De-plosive 破裂音(P音、B音)の軽減 マイク録音のポップ音除去、近接録音の改善、音声品質向上 De-reverb 不要なリバーブ・エコーの除去 部屋鳴りの軽減、録音環境の音響特性修正、ダイアログのクリアニング Guitar De-noise ギター特有ノイズの除去 エレキギター録音のハムノイズ除去、アンプノイズの軽減 Monitor リアルタイム音声モニタリング 録音中の問題検出、ライブ配信品質確認、音声レベル監視 Mouth De-click 口の音(舌打ち、唇音)の除去 ボーカリストの口音除去、ナレーター音声の改善、インタビュー音声修正 Music Rebalance 音楽要素の分離・調整 ボーカル抽出、楽器成分の分離、ステムトラック作成、ミックス調整 Spectral De-noise スペクトラム解析ノイズ除去 精密なノイズ除去、特定周波数の問題修正、高度な音質改善 Spectral Editor スペクトラム表示編集環境 視覚的音声編集、周波数ドメイン修正、精密な音声加工 Voice De-noise 音声に特化したノイズ除去 ボーカル録音のクリーニング、電話音声の改善、ナレーション音質向上

コンプレッサーのパラメータ

コンプレッサーは音声の音量差(ダイナミックレンジ)を縮める。大きな音を小さくし、全体的に音量を均一にすることで、聞きやすい音声に仕上げることができる。 パラメータの説明と設定の目安 # パラメータ 説明 設定の目安 スレッショルド (Threshold) コンプレッサーが働き始める音量のレベル 音源のピークレベルを見て、それがどの程度圧縮されるか望むかに応じて設定する。一般的には、ピークレベルより少し下の値から始め、必要に応じて調整する レシオ (Ratio) スレッショルドを超えた音量がどの程度圧縮されるかの比率 軽い圧縮には2:1から4:1、より強い圧縮には5:1以上を試す。音圧を上げたい場合は、4:1から始めるのが一般的だが、過度に圧縮しすぎないよう注意が必要 アタック (Attack) コンプレッサーが完全に作動するまでの時間 瞬時に反応させたい場合は短いアタックタイム(例:0.1msから10ms)、トランジェントを保持したい場合は長めに設定(例:30msから100ms)。ドラムなどのパンチ感を保ちたい場合は、アタックを遅めに設定 リリース (Release) コンプレッサーが作動を停止して通常のレベルに戻るまでの時間 自然なサウンドにするためには、リリースタイムを長めに設定(例:100msから1s)。リリースタイムが短すぎると不自然なポンピング効果が生じることがある ニー (Knee) スレッショルド周辺でのコンプレッサーの作動の滑らかさを調整。ハードニーは即座に圧縮を開始し、ソフトニーは徐々に圧縮を開始 より自然な圧縮を求める場合はソフトニーを、より明確な圧縮効果を求める場合はハードニーを選択 パラメータ間の関係性 # スレッショルドとレシオは、どれだけの圧縮をかけるかを決定する。スレッショルドを下げるとより多くの信号が圧縮され、レシオを上げるとその圧縮が強くなる アタックとリリースは、圧縮のタイミングとサウンドの自然さをコントロールする。アタックを遅くするとトランジェントが保持され、リリースを調整することでサウンドの自然な流れを保つことができる ニーは、スレッショルド周辺での圧縮の開始の滑らかさを決定する。ソフトニーはより自然な圧縮を、ハードニーはより明確な圧縮効果を提供する Podcastやナレーションの音声に適用する場合の例 # 刺す順番 # EQ→コンプレッサー→リミッター コンプレッサー # パラメータ 推奨値 設定の目安 スレッショルド (Threshold) -18dB ~ -12dB 通常の話し声がこのレベルを少し超える程度に設定 レシオ (Ratio) 3:1 ~ 6:1 3:1 = 自然な圧縮(軽め) 4:1 = 標準的な設定 6:1 = しっかりとした圧縮 アタック (Attack) 3ms ~ 10ms 早すぎる(1ms以下)= 不自然な音 遅すぎる(30ms以上)= 瞬間的な大音量を逃してしまう リリース (Release) 100ms ~ 300ms 自然なサウンドにするためには、話し方のテンポに合わせて調整 ニー (Knee) ソフトニー始 より自然な圧縮を求める場合はソフトニーを、より明確な圧縮効果を求める場合はハードニーを選択 メイクアップゲインは+3dB〜+6dB(圧縮量に応じて調整) レシオ3:1、スレッドショルド-18dBから始め、実際の音声を聞きながらパラメーターを微調整 リミッター # パラメータ 推奨値 設定の目安 Ceiling/Output Level(シーリング/出力レベル) -1dB〜0.3dB 絶対に超えてはいけない最大音量 -1dB = 安全マージンを取った設定 -0.3dB = ギリギリまで音量を稼ぎたい場合 Threshold(スレッショルド) -3dB ~ -1dB リミッターが動作を開始する音量レベル Ceiling -1dB、Threshold -2dB = 1dBの余裕 Release Time(リリースタイム) 5ms ~ 50ms リミッターが解除されるまでの時間 短い(5-10ms)= 透明感のあるリミッティング 長い(30-50ms)= よりスムーズだが音量変動が目立つ場合がある Look-ahead(ルックアヘッド) 2ms ~ 5ms 音声を先読みしてリミッティングのタイミングを最適化 ISR(Internal Sample Rate) 高い設定(多くの場合自動) リミッター内部の処理精度。より正確なピーク検出が可能に Ceiling-1dB、ThresholdをCeilingより2-3dB低く、Release10ms程度から開始 実際の音声で確認しなら調整。ゲインリダクションメーター1-3dB程度の軽いリミッティングが理想、 不自然なポンピング音がする場合はRelease Timeを長めに ピークが0dBを越えてないことを確認 EQ # 周波数帯域 周波数 例 低域(20Hz - 200Hz) 80Hz以下 不要なランブル音、エアコン音など 80Hz - 200Hz 声の厚み、温かみ 低中域(200Hz - 800Hz) 1kHz - 3kHz 声の温かみ、ボディ感 過度に強調すると[こもった」音になる 必要に応じて軽く減衰 中域(800Hz - 3kHz) 1kHz - 3kHz 声の存在感、前に出る感じ 2kHz - 3kHz 明瞭度に重要 声を前に出したい場合に軽く調整 高中域(3kHz - 8kHz) 3kHz - 6kHz 子音の明瞭度 5kHz - 8kHz 声の輝き、クリアさ 聞き取りやすさ向上のため軽く強調 高域(8kHz以上) 8kHz - 12kHz 空気感、オープンさ 12kHz以上 通常は不要(ノイズの場合が多い) 基本的な男性声用設定 # 60Hz以下: High-pass filter(不要な低域カット) 200Hz: -2dB(こもりを軽減) 1kHz: +1dB(存在感向上) 3kHz: +2dB(明瞭度向上) 6kHz: +1dB(クリアさ向上) 12kHz以上: -3dB(ノイズ軽減) 基本的な女性声用設定 # 80Hz以下: High-pass filter 300Hz: -1dB(こもりを軽減) 2kHz: +1.5dB(存在感向上) 4kHz: +2dB(明瞭度向上) 8kHz: +1dB(輝き向上) 15kHz以上: -2dB(ノイズ軽減)