← PROJECTS

hanauta
to ambient

街を歩きながら口ずさむ鼻歌と、スマホで撮影した映像。
その二つの入力から、アンビエント/サウンドスケープを生成するパイプライン。

View on GitHub
TYPE Audiovisual Analysis + Synthesis
INPUT Street Video + Humming
OUTPUT Ambient Soundscape / Minimal Techno

Overview

街中を歩きながら撮影した動画と、そこに含まれる鼻歌の音声。このプロジェクトは、その二つの素材から映像の特徴量(動き・明るさ・人物配置)と音声の特徴量(音量・ピッチ・スペクトル)を解析し、サウンドスケープやミニマルテクノを自動生成する統合パイプラインです。

鼻歌は「演奏」ではなく「プロデューサーマクロ」として機能します。声の大きさ、高さ、音色がマクロ制御値(Intensity / Brightness / Space)に変換され、映像特徴量と統合されて音響パラメータを一貫して駆動します。

3層アーキテクチャ(共通解析 → アダプタ → ジャンル固有エンジン)を採用。プリセットでジャンルと出力形式を切り替え、全処理をPython + FFmpegで統一しています。

作曲AIを作らない
ジャンル感はプリセットで担保する。声で音楽の「構造」を決めるのではなく、「質感」を動かす。
直結禁止
入力値をパラメータに直接刺さない。マクロを介し、平滑化・ヒステリシス・デバウンスで安定化する。
共通解析、プリセット分岐
入力解析は全ジャンル共通。出力エンジンのみプリセットで切り替え。キャッシュでスキップ可能。
Python統一
全処理をPython + FFmpegで完結。SuperCollider/PureData等の外部プロセスは不要。pip installで動作。

Approaches

V1 — HUMVID-MT-SPEC-001

Minimal Techno Mode

ミニマルテクノ(バレアリック寄り)のテンプレートを、鼻歌と映像特徴量で制御。BPM固定、Kick/Hat/Perc/Bass/Pad/FXの各トラックをマクロで動かす。オフライン生成またはDAWへのリプレイ送出(MIDI/OSC)に対応。

BPM 120 4/4 MIDI/OSC DAW連携
V2 — SCAPE-RENDER-SPEC-001

Soundscape Mode

スタンドアロンで映像解析+音響合成を完結。5レイヤ構成(Bed/Drone/Granular/Glitch/FX)のサウンドスケープを生成し、オーバーレイ合成映像と共に出力。セクション制御(Intro/Explore/Release/Outro)による時間構造。

48kHz/24bit 5 Layers Overlay Standalone

Pipeline

Stage A

Normalize

入力動画のメタ取得、映像のCFR化(30fps)、音声の48kHzリサンプル。基準タイムラインを定義。

FFmpeg Demux Resample
Stage B

Video Low-level

30fps全フレームでbrightness、contrast、color_temp、edge_density、motion_energy、motion_highfreqを算出。連続制御に適した安定特徴量。

30fps Pixel Analysis Optical Flow
Stage C

Video Semantic

人物検出(5-10fps)、シーン分類(1Hz)、カット検出。全フレーム推論はコスト過大のため間引き+平滑化が前提。

YOLO11n (optional) Scene Classification (optional) Cut Detection
Stage D

Audio Feature

鼻歌から voice_loud、voiced、f0_hz、centroid、flatnessを抽出。声を"楽器化"せず、マクロ制御に落とし込む。

VAD F0 Estimation Spectral
Stage E

Fusion

20Hz固定のControl Stream生成。映像+音声の特徴量をマクロ値に統合。EMA平滑化(configurable tau)。イベント検出(PhraseStart/PhraseEnd/Accent/CutDetected/PersonEnter/Exit)。

20Hz EMA Smoothing Event Detection
Stage F

Soundscape Synthesis

"音楽生成"ではなく"音響合成"。5レイヤ(Bed/Drone/Granular/Glitch/FX)をControl Streamで駆動。ラウドネス整形(-15 LUFS target, -1.0 dBFS true peak)、soft clip + brick-wall limiter。

5 Layers 48kHz/24bit LUFS Normalization
Stage G

Overlay Render

映像に解析結果をオーバーレイ合成。debug版(情報多め)とclean版(展示用・情報最小限)の2モード。人物bbox、ゲージ、motion表示。

Debug / Clean Compositing
Stage H

Mux

オーバーレイ映像と生成音声をA/V同期でマルチプレクス。最終出力 final.mp4。

A/V Sync MP4 Output

Control Stream

入力から抽出された特徴量は、20Hz固定のControl Streamに統合されます。共通マクロ(Layer 2)をジャンル固有アダプタが変換し、各エンジンのパラメータを駆動します。

重要なのは「声だけで全部決めない」こと。映像の動き・明るさが入ることで、「街中を歩く」体験に紐づいた音響が生まれます。

Common Macros

Intensity
voice_loud + motion + people
Gain, density, drive
Brightness
centroid_norm + brightness
LPF cutoff, harmonic mix
Space
inv(voice_loud) + inv(motion)
Reverb/Delay send
TonalCenter
f0_hz median (voiced only)
Drone resonance / Bass root

Genre Adapters

Soundscape
GrainDensity, GlitchRate, PanBias, HumanPresence
5-layer synthesis engine
Minimal Techno
Energy, Drive, Tension, RootNote
Drums/Bass/Pad/FX engine

Section Timeline

Intro 0s
Explore 8s
Release 45s
Outro 55s
Glitch prohibited Event-driven glitch Decay

Sound Layers

01 — Bed
街の気配。持続する床。
02 — Drone
持続・共鳴。TonalCenterHz追従。
03 — Granular
粒状テクスチャ。2-40 grains/sec。
04 — Glitch
断続・破片。イベント駆動のみ。
05 — FX Return
空間。リバーブ/ディレイ/拡散。

Event Types

AUDIO

PhraseStart / PhraseEnd

voiced遷移を検出。無声→有声でPhraseStart、600ms以上の無声継続でPhraseEnd。フレーズ構造を駆動。

FUSION

Accent

Intensityの急上昇(delta > 0.3)を検出。短い粒やグリッチの発火トリガー。

VIDEO

CutDetected

cut_scoreが閾値超え(>= 0.4)。Releaseセクションでのみグリッチを許可。

VIDEO

PersonEnter / Exit

people_countの増減を検出。空間と質感の変化をトリガー。

Output Specification

Required

final.mp4
オーバーレイ合成映像 + 生成音声
audio.wav
48kHz / 24bit / Stereo
analysis/
voice_features.csv + lowlevel.csv + semantic.jsonl
stems/
bed.wav + drone.wav + granular.wav (optional)
meta.json
入力メタ、設定、seed、バージョン

Unified CLI

hanauta render \
  --input input.mp4 \
  --preset ambient_glitch_60s_v1.json \
  --outdir output/job_xxx \
  --overlay debug|clean|none \
  --stems \
  --no-cache

Acceptance Criteria

A/V Sync
60秒ぴったり、ズレなし
Glitch
Release + Event限定、常時鳴らさない
Coherence
平滑化が効き、世界観が一貫
Loudness
-15 LUFS target, -1.0 dBFS true peak

Tech Stack

Core Pipeline

Normalize
PyAV (FFmpeg binding)
Video Low-level
OpenCV (brightness, motion, edge)
Video Semantic
YOLO11n (optional) + Scene Classification (optional)
Audio Feature
torchcrepe (F0) + librosa + silero-vad
Fusion
NumPy + SciPy + pandas
Synthesis
NumPy DSP + pedalboard (Spotify)
Overlay / Mux
OpenCV + PyAV

Performance (1min video)

GPU (RTX 3060+)
~20-35s (0.3-0.6x realtime)
CPU-only (M1)
~50-90s (0.8-1.5x realtime)
Bottleneck
YOLO inference (CPU: 56ms/img)

ML Runtime

PyTorch
YOLO, torchcrepe, silero-vad shared
Cache
Content-hash based, per-stage skip

Implementation Phases

Phase 0

Common Foundation DONE

Ingest + Normalize、AudioAnalysis (VAD/F0/spectral)、Types + Preset + Cache + Pipeline DAG + CLI。95 tests。

MVP Base All Genres 95 tests
Phase 1

Soundscape Engine DONE

VideoLowLevel + VideoSemantic + Sync + Fusion + SoundscapeAdapter + 5-Layer Synthesis (Bed/Drone/Granular/Glitch/FX) + Mixer (LUFS/-1dBFS) + Overlay + Mux + Export。E2Eテストで決定性検証済み。211 tests。

First Playable E2E Verified 211 tests
Phase 2

Techno Engine + DAW Integration

TechnoAdapter (Energy/Drive/Tension/RootNote)、Drums/Bass/Pad/FX Engine、リプレイ送出 (OSC/MIDI)。

Genre Expansion DAW Integration
Phase 3

Integration + Quality

Preset切替 (CLI一本)、回帰テスト、エラーハンドリング統合 (終了コード/フォールバック)。

Production Ready Reproducibility