This commit is contained in:
HarakaraSite
2026-02-28 14:09:08 +09:00
parent 146b0f3dc3
commit be0f08329b
4 changed files with 1 additions and 179 deletions

2
.gitignore vendored
View File

@@ -1 +1 @@
.vscode/sftp.json .DS_Store

View File

@@ -1,35 +0,0 @@
Genre: テクノ / ハウス (Tech House)
Description: このStrudelコードは、ドラムパターン、ベースライン、そしてシンセのメロディを組み合わせたテックハウス風のトラックを生成します。Perlinイズによるフィルターとゲインのモジュレーションが、サウンドに動きと深さをもたらしています。
```javascript
setcps(136/60/4); // BPM 136に合わせてサイクルレートを設定
// メロディックなシンセパターン
// supersawとPerlinイズによるLFOでフィルターを動かし、音に揺らぎを与えています。
$:note("[- c2 - c2 - [c2|c5] - c2]") // ノートパターンを定義。ランダムなオクターブを挿入。
.sound("supersaw") // 厚みのあるsupersaw波形を使用
.lpf(perlin.range(400,800).slow(2)) // Perlinイズでローパスフィルターの周波数をモジュレーション
.lpq("[0|10]") // ローパスフィルターのレゾナンスをパターンで切り替え
.transpose("[0|0|1]") // ランダムに半音上げることでバリエーションを追加
.gain(perlin.range(0.4,0.6).slow(2)); // Perlinイズでゲインをモジュレーションし、音量に動きを与える
// ドラムパターン
// wchooseCyclesを使って、ドラムサウンドをランダムに選択・重み付けしています。
// tr606ドラムマシンを使用し、ディストーションとフィルターでキャラクターを付与。
let snd = wchooseCycles(["bd",3], ["hh?",7], ["cr",1]); // バスドラム、ハイハット、クラッシュシンバルを重み付けして選択
let snd2 = wchooseCycles(["ht",2], ["lt",1], ["sd",1]); // タムやスネアを重み付けして選択
$:stack( // 複数のドラムパターンを重ねて同時に再生
sound(snd).fast(8).decay(0.5), // ドラムサウンド1を速く再生し、短いディケイを設定
sound(snd2).fast(8) // ドラムサウンド2を速く再生
.lpf("<900 800 700>") // ローパスフィルターの周波数をパターンで変化
.lpq("0 20 30") // ローパスフィルターのレゾナンスをパターンで変化
.degradeBy(0.5) // サウンドを少し劣化させて粗さを加える
.gain(perlin.range(0.4,0.9).slow(2)) // Perlinイズでゲインをモジュレーション
).bank("tr606"); // Roland TR-606ドラムマシンサウンドバンクを使用
// ハイハットの構造的なパターン
// binaryNとirandを使って、複雑でランダムなハイハットの構造パターンを生成します。
$:sound("hh") // ハイハットサウンド
.struct(binaryN(irand(15),4)); // ランダムなバイナリ構造でパターンを生成
```

View File

@@ -1,74 +0,0 @@
#!/bin/bash
# パイプの途中でエラーが発生した場合も終了ステータスに反映させる
set -o pipefail
# スクリプトの場所 (scripts/) からプロジェクトルート (notebook/) を動的に取得
BASE_DIR=$(cd "$(dirname "$0")/.." && pwd)
OUTPUT_DIR="$BASE_DIR/explained"
SKILL_FILE="$BASE_DIR/.gemini/skills/strudel_fix_and_explain.md"
GEMINI_REF="$BASE_DIR/gemini.md"
STRUDEL_REF="$BASE_DIR/.gemini/reference.md"
# 出力先フォルダの作成
if [ ! -f "$SKILL_FILE" ]; then
echo "Error: Skill file not found at $SKILL_FILE"
exit 1
fi
mkdir -p "$OUTPUT_DIR"
# ファイルが見つからない場合にワイルドカードをそのまま展開しない設定
shopt -s nullglob
# 引数がある場合はそれを使用し、ない場合は strudel/ フォルダの全mdファイルを対象にする
if [ $# -gt 0 ]; then
files=("$@")
else
files=("$BASE_DIR/strudel"/*.md)
fi
echo "Strudel Fix & Explain Skill started..."
for file in "${files[@]}"; do
# 除外設定
[ -f "$file" ] || continue
filename=$(basename "$file")
# 特定のファイルやディレクトリを除外
[[ "$filename" =~ ^(Strudel Making Sound|Strudel Study)\.md$ ]] && continue
# 絶対パスに変換して除外ディレクトリに含まれていないかチェック
abs_path=$(realpath "$file")
[[ "$abs_path" =~ /($OUTPUT_DIR|refactoring|script)/ ]] && continue
echo "Analyzing and fixing $filename..."
# 一時ファイルに出力
tmp_file="$OUTPUT_DIR/tmp_$filename"
# ファイルを引数として直接渡すSTRUDEL_REFも必要ならここに追加
if ! gemini "$GEMINI_REF" "$STRUDEL_REF" "$SKILL_FILE" "$file" > "$tmp_file"; then
echo "Error: Gemini CLI failed to process $filename"
rm -f "$tmp_file"
continue
fi
# ファイルが空でないか確認
if [ -s "$tmp_file" ]; then
suggested_name=$(grep -m 1 "^FILENAME:" "$tmp_file" | sed 's/^FILENAME: *//g' | tr -d '\r' | xargs)
if [ -n "$suggested_name" ]; then
# FILENAME行を除去して保存
sed '/^FILENAME:/d' "$tmp_file" > "$OUTPUT_DIR/$suggested_name"
rm "$tmp_file"
echo "Done: $OUTPUT_DIR/$suggested_name"
else
mv "$tmp_file" "$OUTPUT_DIR/$filename"
echo "Done: $filename (No rename)"
fi
else
rm -f "$tmp_file"
echo "Error processing $filename"
fi
done

View File

@@ -1,69 +0,0 @@
#!/bin/bash
# パイプの途中でエラーが発生した場合も終了ステータスに反映させる
set -o pipefail
# スクリプトの場所 (scripts/) からプロジェクトルート (notebook/) を動的に取得
BASE_DIR=$(cd "$(dirname "$0")/.." && pwd)
REFACTOR_DIR="$BASE_DIR/refactoring"
SKILL_FILE="$BASE_DIR/.gemini/skills/strudel_refactor.md"
GEMINI_REF="$BASE_DIR/gemini.md"
STRUDEL_REF="$BASE_DIR/.gemini/reference.md"
# 出力先フォルダの作成
if [ ! -f "$SKILL_FILE" ]; then
echo "Error: Skill file not found at $SKILL_FILE"
exit 1
fi
mkdir -p "$REFACTOR_DIR"
# ファイルが見つからない場合にワイルドカードをそのまま展開しない設定
shopt -s nullglob
# 引数がある場合はそれを使用し、ない場合は strudel/ フォルダの全mdファイルを対象にする
if [ $# -gt 0 ]; then
files=("$@")
else
files=("$BASE_DIR/strudel"/*.md)
fi
echo "Strudel Code Analysis & Refactoring Skill started..."
for file in "${files[@]}"; do
# 除外設定
[ -f "$file" ] || continue
filename=$(basename "$file")
# 特定のファイルやディレクトリを除外
[[ "$filename" =~ ^(Strudel Making Sound|Strudel Study)\.md$ ]] && continue
[[ "$file" =~ /($REFACTOR_DIR|explained|script)/ ]] && continue
echo "Processing $filename..."
# 知識ベースとスキルファイルを組み合わせて実行
tmp_file="$REFACTOR_DIR/tmp_$filename"
( [ -f "$GEMINI_REF" ] && cat "$GEMINI_REF"; \
[ -f "$STRUDEL_REF" ] && cat "$STRUDEL_REF"; \
echo ""; cat "$SKILL_FILE"; \
echo ""; cat "$file" ) | gemini > "$tmp_file"
if [ $? -eq 0 ]; then
# 最初の数行から FILENAME: タグを検索(より柔軟な抽出)
suggested_name=$(grep -m 1 "^FILENAME:" "$tmp_file" | sed 's/^FILENAME: *//g' | tr -d '\r')
if [ -n "$suggested_name" ]; then
# FILENAME行を除去して保存 (最初の1行目にあると仮定しつつ、sedで安全に削除)
sed '/^FILENAME:/d' "$tmp_file" > "$REFACTOR_DIR/$suggested_name"
rm "$tmp_file"
echo "Successfully refactored and renamed to: $suggested_name"
else
mv "$tmp_file" "$REFACTOR_DIR/$filename"
echo "Successfully refactored: $filename (Rename tag not found)"
fi
else
rm -f "$tmp_file"
echo "Error processing $filename"
fi
done