週刊ひろば③|2026/2/11~2/17号
①ひろばニュース|『みかんのオーディオビジュアライザー』が追加されました!


『ひろば』ページに『みかんのオーディオビジュアライザー』が設置されました!

ここでは、5種類の波形から好きなものを選んで、BPMと同期させたり背景画像を入れたりして本格的にオーディオビジュアライザーの編集をこなすことができますわ!

特に、ブラウザひとつで波形生成から録画ファイルの書き出しも一瞬で仕上がるのが長所で、無料で手軽な編集をしたい人にはぴったりだな。

音源ファイルを読み込むだけで波形が自動生成されるワンステップ!みんなも、ぜひお試しあれ♪
②ひろばログ|みかんの部屋で『ひみつ日記』を発見!


みなさま!先日、みかんさんがお部屋にこんな日記を持ちこんでいましたの!!

これは一体何でしょうか?!みかんさんにインタビューしてみましたわ!
『みかん』氏へインタビュー!

あ!それねそれね!うーん、実はみかんもよくわかんないの!なんだろう?

….え?分からない?みかんさんのものではないのですか?

うん!見たんだけどね、全部空欄なの!だけど、ページに使った後っぽいボロボロな跡があるし…ひろばの隅っこで拾ったんだけどなんだろうなあって!

…?ていうより、その付箋は一体…?

うーん…てか、やっぱ見ても見ても分かんないし、せっかくなら、いろはにあげる!それじゃ、みかんはおんがく作ってくる!じゃあね〜!

え、ええ、こちらこそ、インタビューありがとうございました…
今回の戦績

読者のみなさん…これを解読お願いします!…っていうか!絶対これ、組んだのことはさんとかじゃないですか?!
1月15日、1月01日、9月9日、1月14日、1月01日、1月16日、4月5日

今回はここまででしたが、今後も引き続きみかんさんからのこの『ひみつ日記』の情報の動向を調査するつもりです!
今週の企画|ことはのプログラムログ『みかんのオーディオビジュアライザー』裏話

このプログラムの『こだわりポイント』、つまり最適化にこだわったところがある。ブラウザアプリを作成する際には参考になるはずだ。
/* ———————————————————
A. 事前準備:主要な変数の定義(グローバルまたは上位スコープ)
——————————————————— */
let vCanvas = document.getElementById(‘mainCanvas’); // 画面に見えているキャンバス
let vCtx = vCanvas.getContext(‘2d’);
let recordCanvas = null; // 録画用の「隠しキャンバス」
let recordCtx = null;
let bgImage = new Image(); // ユーザーがアップロードした背景画像
let rect = { w: 0, h: 0 }; // プレビュー画面上での画像の表示サイズを格納する用
/* ———————————————————
B. 核心ロジック:① 録画用キャンバスの初期化
——————————————————— */
function setupRecordCanvas() {
// 画像の「生のサイズ(naturalWidth/Height)」でキャンバスを作成
recordCanvas = document.createElement(‘canvas’);
recordCanvas.width = bgImage.naturalWidth; // 例: 3840
recordCanvas.height = bgImage.naturalHeight; // 例: 2160
recordCtx = recordCanvas.getContext(‘2d’);
}
/* ———————————————————
C. 核心ロジック:② スケール(倍率)の計算
——————————————————— */
function getRecordScale() {
// 「本物の横幅」を「画面上の見かけの横幅」で割る
// rect.w は画面内でリサイズされた後の画像の幅
if (bgImage.width > 0 && rect.w > 0) {
return recordCanvas.width / rect.w;
}
return 1.0;
}
/* ———————————————————
D. 核心ロジック:③ 描画関数(すべての数値を scale で補正)
——————————————————— */
function renderFrame(ctx, cw, ch, scale = 1) {
// ユーザー設定値を取得し、すべてに scale を掛ける
const w = parseFloat(document.getElementById(‘widthInput’).value) * scale;
const h = parseFloat(document.getElementById(‘heightInput’).value) * scale;
// 座標のオフセット(中心からのズレ)もスケールさせる
const offsetX = parseFloat(document.getElementById(‘offXInput’).value) * scale;
const offsetY = parseFloat(document.getElementById(‘offYInput’).value) * scale;
// — ここで ctx に対して描画を行う —
// 例: ctx.fillRect(cw/2 + offsetX, ch/2 + offsetY, w, h);
//以下略…(この後、波形ごとの描画の条件分岐が続く)
}

まず、ロジック①では「naturalWidth」を使用することでCSS上でのキャンバスサイズに設定することで画像ファイルそのものの解像度をそのまま利用するため、解像度が維持されるんだ。

そして、ロジック②ではプレビュー画面での解像度の低さを4K録画で補うために倍率をかけている。あえてプレビュー画面では画質を下げることで素早くプレビューができるようにしている。

最後に、③でconst wとconst hでプレビュー時の解像度の(スマホなら300pxなどとデバイスごとに導き出している)数値に読み込んだ画像の解像度との差である倍率をかけている。

例えば、横「1920px」×縦「1080px」のパソコン画面でのプレビュー画面、そして画像が横「2000px」×縦「2000px」だった場合、この横(const w)を基準として、録画時でだけ2000/1920(約1.04)倍をかければ録画後もその画像の画質が維持できるんだ。
『みかんのオーディオビジュアライザー』はこちら!
→https://mikanmusicsquare.com/mikan-audio-visualizer/
来週の企画|『みかんのおんがくメモ』をやります!

来週の企画!みかんがおんがくを作ってるときのエモさ爆発のメモをお見せしちゃいます!ぜひ読みに来てほしいな♪
折込チラシ|イチオシのフリーBGM!『ユニバース』
ソング情報|
ループ:◎
BPM:133
時間:1分26秒
キー:F#
ジャンル:おしゃれ、みらい
楽器:シンセサイザー、オルゴール
気分:わくわく

みんなからいいねも多かった宇宙系のフリーBGMです!
キラキラしたオルゴールと近未来なシンセがみかんも大好きなポイントです!
DLページはこちら!→https://mikanmusicsquare.com/universe/
ひろばのなかましょうかい



キャラクターたちの詳しい自己紹介はこちら!→https://mikanmusicsquare.com/square/


