Research brief for the #037 violinist (18 Oct 2026): a MakeHuman man
(default 163-bone rig, 180 cm) stands on a concert stage and plays the solo
part of a MIDI file. Fingering, left-hand and bow motion and bowing physics
exist for a floating violin (#033 / #034); this note covers the body that
holds the instrument, the arms that reach it and the motion of the whole
player. It does not repeat strings/research/01_violinist_rules.md,
02_algorithms.md (shifting data, bowing physics, score/audio → motion
papers) or 03_violin_sound.md.
Tags: [V] checked in a source fetched for this brief; [T] teaching
practice or observation, no measurement found; [calc] derived here.
Body frame: x right, y up, z forward, origin on the floor between the
heels unless stated. MakeHuman .L is the player’s left (−x).
strings/motion.js buildMotion(notes).poseAt(t) returns, per frame:
| Field | Meaning | Use in the body rig |
|---|---|---|
base, anchorU |
hand position (semitones, cm from the nut, vibrato included) | left hand frame along the neck |
thumb |
thumb position flag (cello / bass) | – (violin: thumb rule §3.3) |
vib |
vibrato offset (cm, ±0.22 at 5.6 Hz, starts 0.15 s in) | wrist / forearm oscillation §3.5 |
fingers[1..4] |
{ s, u, press, lift, held } |
fingertip IK targets (hand3d.js, #029 solver) |
bow |
{ pos (cm from the frog, 0–65), dir, lift 0–1, speed cm/s, s (float string, 0 = G … 3 = E), playing } |
bow pose → right hand frame §4 |
strings/sound/performance.js adds per-string curves at 250 Hz: bow velocity
(m/s, signed), force (N) and β (bow–bridge distance / vibrating length).
strings/violin3d.js frame (cm): x along the strings (nut 0, bridge
L = 32.8, body top x0 = 13.0, end button 48.6, scroll at −x, total ≈ 59 cm),
y = top-plate normal, z across (G at +z). bowContact(s, β) gives the contact
point; bowTilt(s) = lerp(−0.3, 0.3) rad, 34° G→E, about half the measured
65° (§4.3). hand3d.js has twoBone(A, C, l1, l2, pole), the left hand and a
bow hold carried by the bow (thumb x ≈ 0.8, index ≈ 2.9, little finger ≈ −3.6
cm from the hair’s frog end). In #033 the shoulders are fixed points in the
violin frame; in #037 the body places the violin. pianist/rig.js already
poses this skeleton, measures UPPER, FORE, clavLen at load and spreads
twist over upperarm01/02, lowerarm01/02: reuse it.
What the data say:
Suggested motion layers (amplitudes for “normal” expression; the expression slider scales them 0–2.5×) [T]:
| Layer | What moves | Amplitude | Timing |
|---|---|---|---|
| Phrase sway | pelvis + chest translate left/right, weight shifts between the feet | ±2–4 cm at the hips, ±3–6 cm at the head | one cycle per 1–2 phrases (4–8 bars); toward the right foot at phrase climaxes |
| Phrase lean | trunk pitches forward into a crescendo, back on a release | 3–8° | follows the loudness curve, leading it by 0.2–0.4 s |
| Breath | inhale before phrase starts; shoulders and scroll rise | scroll +3–8°, shoulders +1 cm | 0.3–0.6 s before the entry, exhale through the phrase |
| Cue | scroll lifts and drops on the downbeat (ensemble starts, after fermatas) | scroll 5–15° up, then down | lift one beat before, drop on the beat |
| Bow-driven trunk | chest turns left (toward the violin) and the right shoulder comes forward near the tip; turns back at the frog | 2–5° yaw | in phase with long strokes (> 1 s); none for fast strokes |
| Violin meets bow | violin yaws a few degrees toward the bow on accents and long down-bows | 2–4° | with the stroke |
| Knee bounce | knees flex on strong accents and chords | 2–5° | on the accent, 0.1 s recovery |
| Head | nods on accents, turns slightly toward the scroll in high positions | 2–6° | on beats; follows base |
Keep two rules: sway is low-pass (no component faster than ~1.5 Hz except the knee bounce), and the violin is carried by the chest, so every trunk motion moves the instrument too (§2.4).
Rig takeaways: an expression slider (§1.2 layers × 0–2.5) and an anime switch: visual bow strokes 1.5–2× longer at a lower rate in fast passages (sound unchanged), back-bends to 15–20° at climaxes, off-string bow flourishes at phrase ends, and a beat-locked “rock” style for Mine. Never exaggerate the left hand: viewers check the fingers.
Define the violin’s long axis (end button → scroll) and its lateral axis (across the top plate, G side → E side).
| Angle | Range | Default | Source |
|---|---|---|---|
| Yaw: long axis vs the player’s facing direction, to the left | 20–50° (standardised test positions); “approximately 45°+” in beginner checklists | 40° | [V, Margulies et al. 2023; IUP checklist] |
| Roll: lateral axis vs horizontal, E side down | 20–50° | 30° | [V, Margulies et al. 2023] |
| Elevation of the scroll (pitch) | scroll between breast height (“low”) and shoulder height (“high”), ≈ −15° to +10° | +3° | [V, Frontiers 2026 playing types; calc] |
Going from yaw 20° / roll 20° to 50° / 50° reduced the left upper arm’s adduction from vertical from 24.8 ± 2.7° to 18.6 ± 3.1°, left-shoulder elevation from 22.5 to 4.8 mm and protraction from 5.7 to 1.9 mm (30 students, 200 Hz mocap); low passive supination, high positions and the little finger increased these compensations [V, Margulies et al. 2023]. A second study found four playing types: scroll at shoulder or breast level, ≈ 20° or 45° to the frontal plane [V, Frontiers 2026]. Yaw 40° / roll 30° is a mid-range player; a flat, forward violin (20° / 20°) forces a raised, pulled-in left arm. The roll lets the bow arm reach the G string without lifting the elbow above the shoulder; from the audience the top plate faces up and to the player’s right.
neck01..03, head ≈ 20 / 25 / 25 / 30 %. The head may float
off the chin rest in rests and low positions and presses more on
down-shifts; nods ride on top.spine01 orientation, left
clavicle head position), plus its own small motion: breath and cue lifts,
the bow-meeting yaw (§1.2), 1–2° wobble on heavy strokes; in total ±5° yaw,
±5° pitch, ±3° roll relative to the chest [T]. Scroll travel over a phrase
is 5–15 cm, mostly from the trunk [T].fingering.js L = 375 mm, violin3d.js scale ≈ 1.14]. Same hold, with
more left-arm extension, the left elbow further right, yaw ≈ 45° [T].
Larger bow tilt (to 60° vs 45°) and higher force on the C string
[V, Schoonderwaldt 2009]; bow ≈ 70 g.For the default hold (§6.2) the hand at the nut is ≈ 45 cm forward-left of the left shoulder [calc]:
So that each string gets the same finger shape, the elbow swings right (toward the midline) 2–3 cm per string from E to G, and further right and forward 1–1.5 cm per position, reaching the midline around 7th position on the G string. G vs D string playing differs measurably in the left wrist [V, Wolf et al. 2019].
| Position | Index base | Thumb | Wrist / palm |
|---|---|---|---|
| ½–1st | touches the neck at the index MCP (first knuckle), level with the fingerboard on the E side | opposite finger 1 (or between 1 and 2), contact at the thumb’s tip joint, tip above the fingerboard edge by 0.5–1.5 cm | straight |
| 2nd–3rd | same, the hand slides as a unit | moves with the hand, still opposite 1–2 | straight; in 3rd the heel of the palm touches the rib at the neck heel |
| 4th | the palm rests against the upper rib | starts to sit in the curve of the neck heel | starts to bend forward over the body |
| 5th–7th | the hand comes over the upper bout | under the neck at the heel, then slides along the edge of the body | flexed forward 20–45° so the knuckles go over the fingerboard; the elbow is further right |
| 8th+ | over the body | only the tip under the neck heel, or off it | maximal |
hand3d.js already parks the thumb at the neck heel for high positions and
keeps the knuckles beside the fingerboard on the top-string side.
solveFinger, #029),
MCP 30–60°: more on the E string, less on the G string where the finger
reaches across. The fourth finger is flatter; it extends rather than curls.motion.js.performance.js uses 5.8 Hz, 15–35 cents.motion.js amplitude (±2.2 mm) is right.
The visible motion of the hand is larger than the fingertip’s because the
finger rolls: the knuckles move 1.5–3× as far.vib on the fingertip and add the matching wrist or elbow
oscillation: arm mode for base ≥ 5th position or the G string.Measured shifts take 0.29–0.46 s regardless of tempo; tall players initiate
up-shifts with the wrist and down-shifts with the thumb [V, Visentin et al.
2015, see 02_algorithms.md §6.1]. For the body:
motion.js uses for the
hand; on down-shifts the thumb moves first and the elbow follows [T].hand3d.js matches this.| Hold | Index contact | Pronation (forearm, at the frog) | Wrist / elbow | Look |
|---|---|---|---|---|
| Franco-Belgian | between first and second joint; fingers moderately spaced | 30–45° | medium-high wrist, elbow at the bow’s level | the default (most modern players) |
| Russian (Auer) | deeper, at or past the second joint; index pressing more | 45–60°, more toward the tip | higher elbow and wrist; flatter, longer fingers | Heifetz, Milstein |
| Galamian | between the two; fingers closer, little finger high and curved | 30–40° | the arm “level” rule (§4.3) | US conservatory standard |
Default Franco-Belgian; expose pronation offset and index depth as style.
Inclination (choosing the string) spans ≈ 65° from G to E in the instrument frame; tilt (stick toward the fingerboard) −10…45° on the violin, more at the frog and at pp; skewness ±10° [V, Schoonderwaldt 2009]. In fast patterns the crossing leads the bow change by ~15° of phase [V, Schoonderwaldt & Altenmüller 2014]. In the world the frog end drops by roll + local inclination [calc; roll 30°, ±22–32° about the A–D middle]:
| String | Bow’s frog end vs horizontal | Right elbow height (180 cm man, shoulder at 147 cm) | Upper arm abduction |
|---|---|---|---|
| G | ≈ 0–10° down | ≈ shoulder level −5 cm (≈ 140 cm) | 60–75° |
| D | ≈ 15–25° down | ≈ 133 cm | 50–60° |
| A | ≈ 30–40° down | ≈ 125 cm | 40–50° |
| E | ≈ 45–60° down | ≈ 118 cm | 30–40° |
This matches the standing abduction maxima of 47–74° on the low strings [V, Roy et al. 2026] and the “arm level” teaching: upper arm, forearm and bow roughly in one plane, the elbow at the bow’s height for each string [T]. Slow crossings move the whole arm to the new level; fast ones (arpeggios, bariolage) use wrist and fingers with the arm parked at the middle level [T].
The hand must travel on a straight line perpendicular to the strings. The arm does it by combining shoulder horizontal abduction/adduction, shoulder flexion and elbow extension, with the forearm rotating. Real paths are not perfectly straight: rounded paths and crooked bowing at the tip are normal even in renowned players, and skewness is used on purpose to move the contact point [V, Schoonderwaldt 2009, after Hodgson]; 0 ± 5° with a slight inward drift at the tip looks right. In the rig the bow is placed first and the wrist target taken from its grip, so the bow enforces the line and two-bone IK with the swivel rule (§6.3) supplies the elbow.
| Bow position | Wrist | Fingers | Forearm pronation (added to the hold’s base) | Tilt |
|---|---|---|---|---|
| frog (0–10 cm) | flexed 15–30°, slight radial deviation | most flexed, little finger carrying the bow’s weight | +0° | largest (20–45°) |
| middle (25–35 cm) | neutral | medium | +10–15° | medium (10–20°) |
| tip (55–65 cm) | neutral to extended 10° | straight, index pressing | +20–30° | small (0–10°) |
Tilt also rises at pp and falls at ff [V, Schoonderwaldt 2009]. Drive it from
performance.js force: tilt ≈ lerp(35°, 5°, force / 1.5 N) blended with the
bow-position term.
| Stroke | Where on the bow | Motion | Typical numbers |
|---|---|---|---|
| Legato / long notes | whole bow | whole arm as in §4.4 | 10–30 cm/s at mf; whole bow in 1–4 s |
| Détaché | middle or upper half | forearm + wrist, upper arm still | 20–60 cm/s; 5–20 cm per note |
| Martelé | upper half | a “bite” (force 1.5–3 N, index pressure) then a fast stroke and a stop on the string | stroke 10–25 cm, stop 50–150 ms |
| Spiccato | lower middle, near the balance point (20–35 cm from the frog) | bow dropped and lifted by wrist + forearm in a shallow arc | 6–12 Hz, lift 0.5–2 cm |
| Sautillé | balance point / middle | bow bounces by itself, wrist and fingers keep it going | 8–14 Hz, lift < 0.5 cm |
| Collé | at the frog | fingers pinch the string and lift: a finger stroke, the arm still | 1–3 cm stroke, then lift 1–2 cm |
| Ricochet | upper middle | thrown, bounces 2–6 times on one stroke | 10–15 Hz bounces |
| Bow lift / retake | – | circular path: lift, carry back to the frog, set down | lift 3–10 cm, 0.2–0.5 s |
Bow speed 5–100 cm/s, force 0.1–2 N, 3–4 N on accents [V, Schoonderwaldt
2009]. motion.js already computes strokes, lifts and retakes.
| Source | What | Size / rate | Licence / access | Use |
|---|---|---|---|---|
| MOSA (Huang et al., TASLP 2024) | 34 body/instrument markers (Qualisys, Vicon), audio, semantic labels; piano and violin | 742 performances, 23 musicians, > 30 h | CC BY 4.0 with a research-use clause; Zenodo access restricted (request) [V] | best validation source for sway, head and violin angles vs audio |
| SPD (Jin et al., SIGGRAPH / TOG 2024) | markerless, 23 views, audio; 3D body, hands, instrument and bow | 120 pieces, 3.0 h, cello and violin | HF repo tagged Apache-2.0; request form on the project page [V] | hands + bow + violin pose together: validate hand/bow frames and the violin hold |
| SPD-GEN / ELGAR (SIGGRAPH 2025) | whole-body cello motion from audio, SMPL-X, contact losses | – | form; SMPL-X licence applies [V] | method reference (hand–string and bow–string contact losses) |
| SyncViolinist (Nishizawa et al. 2024) | Vicon 120 fps, 57 body + 20 finger markers, bowing/fingering labels | 3.1 h, 61 pieces, 75 joints | e-mail request [V] | richest labelled violin mocap: bow direction ↔ arm and fingers. Their avatar hangs the violin on the neck joint aimed at the left thumb’s first joint, and the bow on the right ring finger [V] |
| VioDat / VioPose (Yoo et al. 2024) | 12-camera Vicon at 100 Hz with hand markers, video 30 fps, audio | 639 videos, 12 players of mixed skill | project page; licence not stated [V] | vibrato and left-hand micro-motion |
| TELMI (Volpe et al. 2017); QUARTET (Papiotis et al. 2016) | marker mocap of body, instrument and bow | 2.4 h violin; 0.5 h quartet | TELMI follow-up “made freely available” [V]; licences not checked | bow-arm kinematics by skill; ensemble sway |
| Kao & Su, ACM MM 2020 | audio → 3D 15-joint violinist skeleton; dataset with several violinists per piece | 11 h, 14 pieces | GitHub (one fold of preprocessed features) [V]; licence not stated | baseline for a learned sway layer |
| Audio2BodyDynamics (Shlizerman et al., CVPR 2018) | MFCC → LSTM → 2D keypoints of internet recital videos (violin and piano) | 3.6 h | CC BY-NC [V]; starter data only | historical; 2D, not usable as 3D reference |
| Human–computer duet (arXiv 2009.07816, 2020) | a virtual violinist that follows a live pianist, body motion generated from audio | – | paper | sonata-with-pianist behaviour |
The measurement papers (Schoonderwaldt, Rasamimanana, Margulies, Wolf, Roy, Turner-Stokes & Reid, Konczak, Visentin) give numbers but no downloadable data. None of the datasets can drive the rig without retargeting (marker sets, SMPL-X or 15-joint skeletons, access by request or research-only terms). Two uses are practical: (1) validation of the hold angles, elbow heights per string and sway amplitudes against MOSA or SyncViolinist (kept outside the repo like PIG and TNUA); (2) later, a learned sway layer (loudness / phrase features → pelvis, chest, head offsets) trained on MOSA, with the arms kept procedural: no dataset has bow contact as precise as our motion model.
| Landmark / segment | Value |
|---|---|
| Eye height | ≈ 168 cm (0.936 H) |
| Chin / jaw angle | ≈ 156 / 158 cm |
| Shoulder (acromion) height | ≈ 147 cm (0.818 H) |
| Suprasternal notch | ≈ 146 cm |
| Shoulder joints, apart | ≈ 36–40 cm (MakeHuman upperarm01 heads ≈ 35 cm in the scaled pianist rig) |
| Clavicle | ≈ 15 cm |
| Upper arm (shoulder–elbow) | 0.186 H = 33.5 cm; MakeHuman joints sit inside the landmarks (the pianist rig scaled to 180 cm: 26 cm upper arm, 24 cm forearm), so measure the male build |
| Forearm (elbow–wrist) | ≈ 26 cm (0.146 H) |
| Hand (wrist–middle fingertip) | ≈ 19 cm (0.108 H) |
| Hip joint height | ≈ 95 cm |
The pianist’s rig measures UPPER, FORE and clavLen from the skeleton;
do the same, and scale the violin by 1.0 (a full-size violin for a 180 cm
man).
Origin at the suprasternal notch N = (0, 146, 0); x right, y up, z forward.
performance.js), beat phase, cue/breath events (entries after ≥ 1 bar
rest), expression and style.upperleg → lowerleg → foot, knee pole ahead + 10° out, 3–8° flex plus
accent bounce.spine05…spine01 (10/15/20/25/30 % from the pelvis up), plus the constant
5–10° left turn and 2–5° left tilt.neck01..03, head); clamp rotation to 45°, bend to 25°.poseAt(t): origin at the index MCP, placed at
x = anchorU from the nut, beside the fingerboard on the E side, 0.5–1 cm
below the string plane; orientation from the neck (palm toward −z of the
violin frame, fingers across the strings), with wrist flexion from §3.3 by
base. Fingers by the existing hand3d.js solver.upperarm01.L → lowerarm01.L → wrist.L to the wrist
point implied by the hand frame; twist split 50/50 into upperarm01/02 and
lowerarm01/02; supination into lowerarm02.L + wrist.L.
Pole: a point P_L below the violin = (violin centre under the neck
heel) − 30 cm × top normal, shifted toward +x (body midline) by
2.5 cm × (3 − s) for strings E→G and by 1.2 cm × (base − 2)/2 per
position, and forward by 0.8 cm per position. Add vibrato as ±1–2° elbow
swing (arm mode) or ±5–10° wrist flex (wrist mode).bow and performance.js: contact point
C = bowContact(s, β·L); bow axis a = across the strings in the plane
given by inclination θ(s) (≈ ±32° about the D–A midpoint, i.e. 21.7° per
string) and skewness 0 ± 5°; tilt from §4.6; lift along the string-plane
normal (lift × 1.6 cm, more for retakes); position the bow so the hair
point pos lies at C. The frog end is on the E side (player’s right).upperarm01.R → lowerarm01.R → wrist.R.
Pole (swivel): the elbow lies in the arm-level plane, the plane through
the shoulder that contains the bow axis a; inside it, below the
shoulder–wrist line. Offset the elbow from that plane by −8…−12 cm (below)
at the frog, −3 cm at the middle, 0…+2 cm at the tip; add +2 cm for the
Russian hold. Pronation goes into lowerarm02.R and wrist.R.Timing details already in motion.js stay as they are (finger before bow ≤
50 ms, string crossing leading the bow change by ≈ 15° of phase, shifts on a
minimum-jerk path). Add: the elbows use the same profiles with a 50–80 ms lead
for shifts (left) and string levels (right).
With shoulders at (±19, 147, −1) cm in the floor frame, contact point C ≈ (−15, 152, 17), bow axis toward the frog side (0.77, −0.3, 0.56) normalised:
lowerarm01/02 and wrist.violin3d.js k must match the hold and the reach.