Hugoのresources.GetRemoteが動かなくて困ってたのを解決した話

  • POSTS
Hugoでリンクカード表示をしたかったのにエラーでハマった HugoのShortcodesでブログカードリンクを作る こういう記事を見てやってみたかった。 ローカルでは表示できたのにNetlifyでビルドに失敗する。なぜ… このページにヒントがあった Hugoにnetlify.toml追加 Hugo+Netlifyの環境にnetlify.tomlを設置した ローカルとNetlifyのHugoのバージョンを揃えよう! ローカル環境のHugoとNetlifyビルド時のHugoのバージョンが揃っていないと、片方でビルドできてももう片方ではできないということが起こるらしい。 今回は最近追加されたらしいgetremoteという機能を使ったので、Netlifyのバージョンでは使えなかった模様。netlify.tomlというファイルでローカル環境のバージョンと同じものを明示的に指定することでビルド時のエラーが解決した。 こんな感じにした netlify.toml [build] publish = "public" command = "hugo --gc --minify" [context.production.environment] HUGO_VERSION = "0.111.3" HUGO_ENV = "production" HUGO_ENABLEGITINFO = "true" [context.split1] command = "hugo --gc --minify --enableGitInfo" [context.split1.environment] HUGO_VERSION = "0.111.3" HUGO_ENV = "production" [context.deploy-preview] command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL" [context.deploy-preview.environment] HUGO_VERSION = "0.111.3" [context.branch-deploy] command = "hugo --gc --minify -b $DEPLOY_PRIME_URL" [context.branch-deploy.environment] HUGO_VERSION = "0.111.3" [context.

ConnectedBalls

  • POSTS
このコードは、iOSアプリケーションで球体のシミュレーションを描画するためのSwiftUIビューを定義しています。具体的には、ランダムに配置された複数の球体を、重力の影響を受けながら運動させ、衝突検出を行い、最も近い球体に線を引くように設計されています。 このコードは、Ball構造体を使用して球体の状態を表し、CoreMotionフレームワークを使用してデバイスの加速度を監視し、加速度に応じて球体の運動を変更するようになっています。 また、Canvasビューを使用して球体の描画を行い、UIKitのタイマーを使用して定期的に球体の位置を更新しています。さらに、衝突検出には、距離と速度を計算するためのベクトル演算を使用しています。 このコードは、iOSアプリケーションの開発者が、球体の物理シミュレーションを実装するための役立つサンプルとして活用できます。 import SwiftUI import CoreMotion struct Ball { var position: CGPoint var velocity: CGVector var acceleration: CGVector var mass: CGFloat } extension CGVector { func normalized() -> CGVector { let magnitude = sqrt(dx * dx + dy * dy) return CGVector(dx: dx / magnitude, dy: dy / magnitude) } func dot(_ other: CGVector) -> CGFloat { return dx * other.dx + dy * other.dy } } func * (left: CGVector, right: CGFloat) -> CGVector { return CGVector(dx: left.

Swiftオーディオレベルメーター

  • POSTS
このコードは、iOSアプリの画面上に音声レベルメーターを表示するためのSwiftUIビューを定義しています。 具体的には、AVFoundationフレームワークを使用して、デバイスのマイクからの入力を取得し、その音声レベルを取得しています。その後、音声レベルを示すProgressBarビューを表示しています。 AudioRecorderクラスは、AVAudioEngineをセットアップして入力ノードに接続し、音声レベルを取得するためにAVAudioPCMBufferを使用してバッファにインストールされたタップを開始します。 ContentViewビューは、audioRecorderオブジェクトを保持し、音声レベルを表示するためにテキストビューを使用し、音声レベルの値に基づいてProgressBarビューを更新しています。 このコードは、iOSアプリの開発者が、音声入力を使用してオーディオレベルを監視するための役立つサンプルとして利用できます。 import SwiftUI import AVFoundation import Combine let minValue: Float = 0.00 let maxValue: Float = 0.005 struct ProgressBar: View { var value: Float var body: some View { GeometryReader { geometry in let clampedValue = min(max(value, minValue), maxValue) let normalizedValue = (clampedValue - minValue) / (maxValue - minValue) ZStack(alignment: .leading) { Rectangle() .frame(width: geometry.size.width, height: geometry.size.height) .opacity(0.3) Rectangle() .frame(width: geometry.size.width * CGFloat(normalizedValue), height: geometry.size.height) .

AudioファイルをMidiに変換する

  • POSTS
オーディオファイルを分離する 色々なパートが入っている音楽データをMIDIに変換したい。 オーディオファイルをパート毎に分離することでMIDI化する時の精度が上がる。 オーディオファイルを高精度に分解する手法が今は色々ある。 Demucs Music Source Separation GitHub - facebookresearch/demucs: Code for the paper Hybrid Spectrogram and Waveform Source Separation Code for the paper Hybrid Spectrogram and Waveform Source Separation - GitHub - facebookresearch/demucs: Code for the paper Hybrid Spectrogram and Waveform Source Separation Mac用のGUI版もある Releases · CarlGao4/Demucs-Gui A GUI and CUDA memory optimizing project based on demucs - CarlGao4/Demucs-Gui ダウンロードミラーはこちら Demucsは音楽のドラム、ベース、ボーカルを分離することができるモデルです。最新版のHybrid Transformer Demucs(v4)は、Transformersを使用してスペクトログラム/波形の両方の分離に対応し、SDRが9.20 dBに達しました。このモデルは、MUSDB HQデータセット+800曲の追加のトレーニングデータセットでトレーニングされています。Hybrid Transformer Demucsを使用するには、コマンドで- n htdemucs_ftを使用する必要があります。6つの音源モデルも提供されていますが、ピアノソースの品質が悪いことが報告されています。

Delaunay三角形分割

  • POSTS
Delaunay三角形分割アルゴリズム このプログラムは、Delaunay三角形分割アルゴリズムを使用して線を引いています。このアルゴリズムは、与えられた点の集合を三角形の集合に分割するもので、三角形の外接円に対する空洞の最大化を行います。このアルゴリズムは、三角形網の形成に役立ちます。プログラムは、指定された点を動かすことで、時間が経つにつれて三角形網がどのように変化するかを示しています。また、描画には Processing 言語が使用されています。 ドロネー図 - Wikipedia import megamu.mesh.*; final int NUM_POINTS = 200; float[][] points = new float[NUM_POINTS][2]; float[][] velocities = new float[NUM_POINTS][2]; Delaunay delaunay; // 設定定数 final color BG_COLOR = color(0, 76, 96); final color DOT_COLOR = color(0, 176, 196, 255); final color LINE_COLOR = color(0, 176, 196, 255); final float DOT_SIZE = 12; final float LINE_WIDTH = 1; final float DOT_SPEED_MIN = -1; final float DOT_SPEED_MAX = 1; void setup() { //fullScreen(); size(700,300); smooth(); initPoints(); } void draw() { background(BG_COLOR); updatePoints(); drawTriangles(); drawDots(); } // 初期化関数 void initPoints() { for (int i = 0; i < NUM_POINTS; i++) { points[i][0] = random(width); points[i][1] = random(height); velocities[i][0] = random(DOT_SPEED_MIN, DOT_SPEED_MAX); velocities[i][1] = random(DOT_SPEED_MIN, DOT_SPEED_MAX); } delaunay = new Delaunay(points); } // ポイント更新関数 void updatePoints() { for (int i = 0; i < NUM_POINTS; i++) { points[i][0] += velocities[i][0]; points[i][1] += velocities[i][1]; if (points[i][0] < 0 || points[i][0] > width) { velocities[i][0] *= -1; } if (points[i][1] < 0 || points[i][1] > height) { velocities[i][1] *= -1; } } delaunay = new Delaunay(points); } // 三角形描画関数 void drawTriangles() { stroke(LINE_COLOR); strokeWeight(LINE_WIDTH); int[][] links = delaunay.

Processing Lissajous

  • POSTS
ステレオオーディオからリサジュー図形を描画する ステレオオーディオから音声信号を取得します。 取得した信号を左右のチャンネルに分離します。 左右のチャンネルの信号に対して、異なる周波数の正弦波を加えます。このとき、周波数の比率は、描画するリサジュー図形の形状を決定します。 加えた正弦波の波形を、x軸に左チャンネルの波形、y軸に右チャンネルの波形をとり、2次元平面上にプロットします。 プロットした点を順番につなぎ、リサジュー図形を描画します。 以上が、ステレオオーディオからリサジュー図形を描画する方法の簡単な手順です。これらの手順を実行することで、ステレオオーディオから美しいリサジュー図形を描画することができます。 リサジュー図形 - Wikipedia import processing.sound.*; Waveform monitorWave; final int SAMPLES = 2048; final float MIN_STD = 16.0; final int X_FACTOR = 20; final int Y_FACTOR = 20; int lineWeight = 1; color lineColor = color(0, 224, 255); color backgroundColor = color(0,63,73); void setup() { size(720, 300); //fullScreen(); frameRate(120); background(backgroundColor); strokeWeight(lineWeight); stroke(lineColor); initializeAudio(); } void initializeAudio() { AudioIn audioInput = new AudioIn(this, 0); audioInput.start(); monitorWave = new Waveform(this, SAMPLES); monitorWave.