commit 7f053d2b272f6d4450865f1b369057d4c04a27a2 Author: Timmy Date: Mon Apr 20 18:07:31 2026 +0800 Initial commit: English Wonder World 給 Jay 的小朋友英文學習網頁,包含 Units 1-4、端午節特輯、 數字單元。含 Gemini TTS 預錄音檔與 LINE Seed 字型。 diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..7677944 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,312 @@ +# Design System Inspired by Claude (Anthropic) + +## 1. Visual Theme & Atmosphere + +Claude's interface is a literary salon reimagined as a product page — warm, unhurried, and quietly intellectual. The entire experience is built on a parchment-toned canvas (`#f5f4ed`) that deliberately evokes the feeling of high-quality paper rather than a digital surface. Where most AI product pages lean into cold, futuristic aesthetics, Claude's design radiates human warmth, as if the AI itself has good taste in interior design. + +The signature move is the custom Anthropic Serif typeface — a medium-weight serif with generous proportions that gives every headline the gravitas of a book title. Combined with organic, hand-drawn-feeling illustrations in terracotta (`#c96442`), black, and muted green, the visual language says "thoughtful companion" rather than "powerful tool." The serif headlines breathe at tight-but-comfortable line-heights (1.10–1.30), creating a cadence that feels more like reading an essay than scanning a product page. + +What makes Claude's design truly distinctive is its warm neutral palette. Every gray has a yellow-brown undertone (`#5e5d59`, `#87867f`, `#4d4c48`) — there are no cool blue-grays anywhere. Borders are cream-tinted (`#f0eee6`, `#e8e6dc`), shadows use warm transparent blacks, and even the darkest surfaces (`#141413`, `#30302e`) carry a barely perceptible olive warmth. This chromatic consistency creates a space that feels lived-in and trustworthy. + +**Key Characteristics:** +- Warm parchment canvas (`#f5f4ed`) evoking premium paper, not screens +- Custom Anthropic type family: Serif for headlines, Sans for UI, Mono for code +- Terracotta brand accent (`#c96442`) — warm, earthy, deliberately un-tech +- Exclusively warm-toned neutrals — every gray has a yellow-brown undertone +- Organic, editorial illustrations replacing typical tech iconography +- Ring-based shadow system (`0px 0px 0px 1px`) creating border-like depth without visible borders +- Magazine-like pacing with generous section spacing and serif-driven hierarchy + +## 2. Color Palette & Roles + +### Primary +- **Anthropic Near Black** (`#141413`): The primary text color and dark-theme surface — not pure black but a warm, almost olive-tinted dark that's gentler on the eyes. The warmest "black" in any major tech brand. +- **Terracotta Brand** (`#c96442`): The core brand color — a burnt orange-brown used for primary CTA buttons, brand moments, and the signature accent. Deliberately earthy and un-tech. +- **Coral Accent** (`#d97757`): A lighter, warmer variant of the brand color used for text accents, links on dark surfaces, and secondary emphasis. + +### Secondary & Accent +- **Error Crimson** (`#b53333`): A deep, warm red for error states — serious without being alarming. +- **Focus Blue** (`#3898ec`): Standard blue for input focus rings — the only cool color in the entire system, used purely for accessibility. + +### Surface & Background +- **Parchment** (`#f5f4ed`): The primary page background — a warm cream with a yellow-green tint that feels like aged paper. The emotional foundation of the entire design. +- **Ivory** (`#faf9f5`): The lightest surface — used for cards and elevated containers on the Parchment background. Barely distinguishable but creates subtle layering. +- **Pure White** (`#ffffff`): Reserved for specific button surfaces and maximum-contrast elements. +- **Warm Sand** (`#e8e6dc`): Button backgrounds and prominent interactive surfaces — a noticeably warm light gray. +- **Dark Surface** (`#30302e`): Dark-theme containers, nav borders, and elevated dark elements — warm charcoal. +- **Deep Dark** (`#141413`): Dark-theme page background and primary dark surface. + +### Neutrals & Text +- **Charcoal Warm** (`#4d4c48`): Button text on light warm surfaces — the go-to dark-on-light text. +- **Olive Gray** (`#5e5d59`): Secondary body text — a distinctly warm medium-dark gray. +- **Stone Gray** (`#87867f`): Tertiary text, footnotes, and de-emphasized metadata. +- **Dark Warm** (`#3d3d3a`): Dark text links and emphasized secondary text. +- **Warm Silver** (`#b0aea5`): Text on dark surfaces — a warm, parchment-tinted light gray. + +### Semantic & Accent +- **Border Cream** (`#f0eee6`): Standard light-theme border — barely visible warm cream, creating the gentlest possible containment. +- **Border Warm** (`#e8e6dc`): Prominent borders, section dividers, and emphasized containment on light surfaces. +- **Border Dark** (`#30302e`): Standard border on dark surfaces — maintains the warm tone. +- **Ring Warm** (`#d1cfc5`): Shadow ring color for button hover/focus states. +- **Ring Subtle** (`#dedc01`): Secondary ring variant for lighter interactive surfaces. +- **Ring Deep** (`#c2c0b6`): Deeper ring for active/pressed states. + +### Gradient System +- Claude's design is **gradient-free** in the traditional sense. Depth and visual richness come from the interplay of warm surface tones, organic illustrations, and light/dark section alternation. The warm palette itself creates a "gradient" effect as the eye moves through cream → sand → stone → charcoal → black sections. + +## 3. Typography Rules + +### Font Family +- **Headline**: `Anthropic Serif`, with fallback: `Georgia` +- **Body / UI**: `Anthropic Sans`, with fallback: `Arial` +- **Code**: `Anthropic Mono`, with fallback: `Arial` + +*Note: These are custom typefaces. For external implementations, Georgia serves as the serif substitute and system-ui/Inter as the sans substitute.* + +### Hierarchy + +| Role | Font | Size | Weight | Line Height | Letter Spacing | Notes | +|------|------|------|--------|-------------|----------------|-------| +| Display / Hero | Anthropic Serif | 64px (4rem) | 500 | 1.10 (tight) | normal | Maximum impact, book-title presence | +| Section Heading | Anthropic Serif | 52px (3.25rem) | 500 | 1.20 (tight) | normal | Feature section anchors | +| Sub-heading Large | Anthropic Serif | 36–36.8px (~2.3rem) | 500 | 1.30 | normal | Secondary section markers | +| Sub-heading | Anthropic Serif | 32px (2rem) | 500 | 1.10 (tight) | normal | Card titles, feature names | +| Sub-heading Small | Anthropic Serif | 25–25.6px (~1.6rem) | 500 | 1.20 | normal | Smaller section titles | +| Feature Title | Anthropic Serif | 20.8px (1.3rem) | 500 | 1.20 | normal | Small feature headings | +| Body Serif | Anthropic Serif | 17px (1.06rem) | 400 | 1.60 (relaxed) | normal | Serif body text (editorial passages) | +| Body Large | Anthropic Sans | 20px (1.25rem) | 400 | 1.60 (relaxed) | normal | Intro paragraphs | +| Body / Nav | Anthropic Sans | 17px (1.06rem) | 400–500 | 1.00–1.60 | normal | Navigation links, UI text | +| Body Standard | Anthropic Sans | 16px (1rem) | 400–500 | 1.25–1.60 | normal | Standard body, button text | +| Body Small | Anthropic Sans | 15px (0.94rem) | 400–500 | 1.00–1.60 | normal | Compact body text | +| Caption | Anthropic Sans | 14px (0.88rem) | 400 | 1.43 | normal | Metadata, descriptions | +| Label | Anthropic Sans | 12px (0.75rem) | 400–500 | 1.25–1.60 | 0.12px | Badges, small labels | +| Overline | Anthropic Sans | 10px (0.63rem) | 400 | 1.60 | 0.5px | Uppercase overline labels | +| Micro | Anthropic Sans | 9.6px (0.6rem) | 400 | 1.60 | 0.096px | Smallest text | +| Code | Anthropic Mono | 15px (0.94rem) | 400 | 1.60 | -0.32px | Inline code, terminal | + +### Principles +- **Serif for authority, sans for utility**: Anthropic Serif carries all headline content with medium weight (500), giving every heading the gravitas of a published title. Anthropic Sans handles all functional UI text — buttons, labels, navigation — with quiet efficiency. +- **Single weight for serifs**: All Anthropic Serif headings use weight 500 — no bold, no light. This creates a consistent "voice" across all headline sizes, as if the same author wrote every heading. +- **Relaxed body line-height**: Most body text uses 1.60 line-height — significantly more generous than typical tech sites (1.4–1.5). This creates a reading experience closer to a book than a dashboard. +- **Tight-but-not-compressed headings**: Line-heights of 1.10–1.30 for headings are tight but never claustrophobic. The serif letterforms need breathing room that sans-serif fonts don't. +- **Micro letter-spacing on labels**: Small sans text (12px and below) uses deliberate letter-spacing (0.12px–0.5px) to maintain readability at tiny sizes. + +## 4. Component Stylings + +### Buttons + +**Warm Sand (Secondary)** +- Background: Warm Sand (`#e8e6dc`) +- Text: Charcoal Warm (`#4d4c48`) +- Padding: 0px 12px 0px 8px (asymmetric — icon-first layout) +- Radius: comfortably rounded (8px) +- Shadow: ring-based (`#e8e6dc 0px 0px 0px 0px, #d1cfc5 0px 0px 0px 1px`) +- The workhorse button — warm, unassuming, clearly interactive + +**White Surface** +- Background: Pure White (`#ffffff`) +- Text: Anthropic Near Black (`#141413`) +- Padding: 8px 16px 8px 12px +- Radius: generously rounded (12px) +- Hover: shifts to secondary background color +- Clean, elevated button for light surfaces + +**Dark Charcoal** +- Background: Dark Surface (`#30302e`) +- Text: Ivory (`#faf9f5`) +- Padding: 0px 12px 0px 8px +- Radius: comfortably rounded (8px) +- Shadow: ring-based (`#30302e 0px 0px 0px 0px, ring 0px 0px 0px 1px`) +- The inverted variant for dark-on-light emphasis + +**Brand Terracotta** +- Background: Terracotta Brand (`#c96442`) +- Text: Ivory (`#faf9f5`) +- Radius: 8–12px +- Shadow: ring-based (`#c96442 0px 0px 0px 0px, #c96442 0px 0px 0px 1px`) +- The primary CTA — the only button with chromatic color + +**Dark Primary** +- Background: Anthropic Near Black (`#141413`) +- Text: Warm Silver (`#b0aea5`) +- Padding: 9.6px 16.8px +- Radius: generously rounded (12px) +- Border: thin solid Dark Surface (`1px solid #30302e`) +- Used on dark theme surfaces + +### Cards & Containers +- Background: Ivory (`#faf9f5`) or Pure White (`#ffffff`) on light surfaces; Dark Surface (`#30302e`) on dark +- Border: thin solid Border Cream (`1px solid #f0eee6`) on light; `1px solid #30302e` on dark +- Radius: comfortably rounded (8px) for standard cards; generously rounded (16px) for featured; very rounded (32px) for hero containers and embedded media +- Shadow: whisper-soft (`rgba(0,0,0,0.05) 0px 4px 24px`) for elevated content +- Ring shadow: `0px 0px 0px 1px` patterns for interactive card states +- Section borders: `1px 0px 0px` (top-only) for list item separators + +### Inputs & Forms +- Text: Anthropic Near Black (`#141413`) +- Padding: 1.6px 12px (very compact vertical) +- Border: standard warm borders +- Focus: ring with Focus Blue (`#3898ec`) border-color — the only cool color moment +- Radius: generously rounded (12px) + +### Navigation +- Sticky top nav with warm background +- Logo: Claude wordmark in Anthropic Near Black +- Links: mix of Near Black (`#141413`), Olive Gray (`#5e5d59`), and Dark Warm (`#3d3d3a`) +- Nav border: `1px solid #30302e` (dark) or `1px solid #f0eee6` (light) +- CTA: Terracotta Brand button or White Surface button +- Hover: text shifts to foreground-primary, no decoration + +### Image Treatment +- Product screenshots showing the Claude chat interface +- Generous border-radius on media (16–32px) +- Embedded video players with rounded corners +- Dark UI screenshots provide contrast against warm light canvas +- Organic, hand-drawn illustrations for conceptual sections + +### Distinctive Components + +**Model Comparison Cards** +- Opus 4.5, Sonnet 4.5, Haiku 4.5 presented in a clean card grid +- Each model gets a bordered card with name, description, and capability badges +- Border Warm (`#e8e6dc`) separation between items + +**Organic Illustrations** +- Hand-drawn-feeling vector illustrations in terracotta, black, and muted green +- Abstract, conceptual rather than literal product diagrams +- The primary visual personality — no other AI company uses this style + +**Dark/Light Section Alternation** +- The page alternates between Parchment light and Near Black dark sections +- Creates a reading rhythm like chapters in a book +- Each section feels like a distinct environment + +## 5. Layout Principles + +### Spacing System +- Base unit: 8px +- Scale: 3px, 4px, 6px, 8px, 10px, 12px, 16px, 20px, 24px, 30px +- Button padding: asymmetric (0px 12px 0px 8px) or balanced (8px 16px) +- Card internal padding: approximately 24–32px +- Section vertical spacing: generous (estimated 80–120px between major sections) + +### Grid & Container +- Max container width: approximately 1200px, centered +- Hero: centered with editorial layout +- Feature sections: single-column or 2–3 column card grids +- Model comparison: clean 3-column grid +- Full-width dark sections breaking the container for emphasis + +### Whitespace Philosophy +- **Editorial pacing**: Each section breathes like a magazine spread — generous top/bottom margins create natural reading pauses. +- **Serif-driven rhythm**: The serif headings establish a literary cadence that demands more whitespace than sans-serif designs. +- **Content island approach**: Sections alternate between light and dark environments, creating distinct "rooms" for each message. + +### Border Radius Scale +- Sharp (4px): Minimal inline elements +- Subtly rounded (6–7.5px): Small buttons, secondary interactive elements +- Comfortably rounded (8–8.5px): Standard buttons, cards, containers +- Generously rounded (12px): Primary buttons, input fields, nav elements +- Very rounded (16px): Featured containers, video players, tab lists +- Highly rounded (24px): Tag-like elements, highlighted containers +- Maximum rounded (32px): Hero containers, embedded media, large cards + +## 6. Depth & Elevation + +| Level | Treatment | Use | +|-------|-----------|-----| +| Flat (Level 0) | No shadow, no border | Parchment background, inline text | +| Contained (Level 1) | `1px solid #f0eee6` (light) or `1px solid #30302e` (dark) | Standard cards, sections | +| Ring (Level 2) | `0px 0px 0px 1px` ring shadows using warm grays | Interactive cards, buttons, hover states | +| Whisper (Level 3) | `rgba(0,0,0,0.05) 0px 4px 24px` | Elevated feature cards, product screenshots | +| Inset (Level 4) | `inset 0px 0px 0px 1px` at 15% opacity | Active/pressed button states | + +**Shadow Philosophy**: Claude communicates depth through **warm-toned ring shadows** rather than traditional drop shadows. The signature `0px 0px 0px 1px` pattern creates a border-like halo that's softer than an actual border — it's a shadow pretending to be a border, or a border that's technically a shadow. When drop shadows do appear, they're extremely soft (0.05 opacity, 24px blur) — barely visible lifts that suggest floating rather than casting. + +### Decorative Depth +- **Light/Dark alternation**: The most dramatic depth effect comes from alternating between Parchment (`#f5f4ed`) and Near Black (`#141413`) sections — entire sections shift elevation by changing the ambient light level. +- **Warm ring halos**: Button and card interactions use ring shadows that match the warm palette — never cool-toned or generic gray. + +## 7. Do's and Don'ts + +### Do +- Use Parchment (`#f5f4ed`) as the primary light background — the warm cream tone IS the Claude personality +- Use Anthropic Serif at weight 500 for all headlines — the single-weight consistency is intentional +- Use Terracotta Brand (`#c96442`) only for primary CTAs and the highest-signal brand moments +- Keep all neutrals warm-toned — every gray should have a yellow-brown undertone +- Use ring shadows (`0px 0px 0px 1px`) for interactive element states instead of drop shadows +- Maintain the editorial serif/sans hierarchy — serif for content headlines, sans for UI +- Use generous body line-height (1.60) for a literary reading experience +- Alternate between light and dark sections to create chapter-like page rhythm +- Apply generous border-radius (12–32px) for a soft, approachable feel + +### Don't +- Don't use cool blue-grays anywhere — the palette is exclusively warm-toned +- Don't use bold (700+) weight on Anthropic Serif — weight 500 is the ceiling for serifs +- Don't introduce saturated colors beyond Terracotta — the palette is deliberately muted +- Don't use sharp corners (< 6px radius) on buttons or cards — softness is core to the identity +- Don't apply heavy drop shadows — depth comes from ring shadows and background color shifts +- Don't use pure white (`#ffffff`) as a page background — Parchment (`#f5f4ed`) or Ivory (`#faf9f5`) are always warmer +- Don't use geometric/tech-style illustrations — Claude's illustrations are organic and hand-drawn-feeling +- Don't reduce body line-height below 1.40 — the generous spacing supports the editorial personality +- Don't use monospace fonts for non-code content — Anthropic Mono is strictly for code +- Don't mix in sans-serif for headlines — the serif/sans split is the typographic identity + +## 8. Responsive Behavior + +### Breakpoints +| Name | Width | Key Changes | +|------|-------|-------------| +| Small Mobile | <479px | Minimum layout, stacked everything, compact typography | +| Mobile | 479–640px | Single column, hamburger nav, reduced heading sizes | +| Large Mobile | 640–767px | Slightly wider content area | +| Tablet | 768–991px | 2-column grids begin, condensed nav | +| Desktop | 992px+ | Full multi-column layout, expanded nav, maximum hero typography (64px) | + +### Touch Targets +- Buttons use generous padding (8–16px vertical minimum) +- Navigation links adequately spaced for thumb navigation +- Card surfaces serve as large touch targets +- Minimum recommended: 44x44px + +### Collapsing Strategy +- **Navigation**: Full horizontal nav collapses to hamburger on mobile +- **Feature sections**: Multi-column → stacked single column +- **Hero text**: 64px → 36px → ~25px progressive scaling +- **Model cards**: 3-column → stacked vertical +- **Section padding**: Reduces proportionally but maintains editorial rhythm +- **Illustrations**: Scale proportionally, maintain aspect ratios + +### Image Behavior +- Product screenshots scale proportionally within rounded containers +- Illustrations maintain quality at all sizes +- Video embeds maintain 16:9 aspect ratio with rounded corners +- No art direction changes between breakpoints + +## 9. Agent Prompt Guide + +### Quick Color Reference +- Brand CTA: "Terracotta Brand (#c96442)" +- Page Background: "Parchment (#f5f4ed)" +- Card Surface: "Ivory (#faf9f5)" +- Primary Text: "Anthropic Near Black (#141413)" +- Secondary Text: "Olive Gray (#5e5d59)" +- Tertiary Text: "Stone Gray (#87867f)" +- Borders (light): "Border Cream (#f0eee6)" +- Dark Surface: "Dark Surface (#30302e)" + +### Example Component Prompts +- "Create a hero section on Parchment (#f5f4ed) with a headline at 64px Anthropic Serif weight 500, line-height 1.10. Use Anthropic Near Black (#141413) text. Add a subtitle in Olive Gray (#5e5d59) at 20px Anthropic Sans with 1.60 line-height. Place a Terracotta Brand (#c96442) CTA button with Ivory text, 12px radius." +- "Design a feature card on Ivory (#faf9f5) with a 1px solid Border Cream (#f0eee6) border and comfortably rounded corners (8px). Title in Anthropic Serif at 25px weight 500, description in Olive Gray (#5e5d59) at 16px Anthropic Sans. Add a whisper shadow (rgba(0,0,0,0.05) 0px 4px 24px)." +- "Build a dark section on Anthropic Near Black (#141413) with Ivory (#faf9f5) headline text in Anthropic Serif at 52px weight 500. Use Warm Silver (#b0aea5) for body text. Borders in Dark Surface (#30302e)." +- "Create a button in Warm Sand (#e8e6dc) with Charcoal Warm (#4d4c48) text, 8px radius, and a ring shadow (0px 0px 0px 1px #d1cfc5). Padding: 0px 12px 0px 8px." +- "Design a model comparison grid with three cards on Ivory surfaces. Each card gets a Border Warm (#e8e6dc) top border, model name in Anthropic Serif at 25px, and description in Olive Gray at 15px Anthropic Sans." + +### Iteration Guide +1. Focus on ONE component at a time +2. Reference specific color names — "use Olive Gray (#5e5d59)" not "make it gray" +3. Always specify warm-toned variants — no cool grays +4. Describe serif vs sans usage explicitly — "Anthropic Serif for the heading, Anthropic Sans for the label" +5. For shadows, use "ring shadow (0px 0px 0px 1px)" or "whisper shadow" — never generic "drop shadow" +6. Specify the warm background — "on Parchment (#f5f4ed)" or "on Near Black (#141413)" +7. Keep illustrations organic and conceptual — describe "hand-drawn-feeling" style diff --git a/audio/009e058c883c683e.mp3 b/audio/009e058c883c683e.mp3 new file mode 100644 index 0000000..dc5d62d Binary files /dev/null and b/audio/009e058c883c683e.mp3 differ diff --git a/audio/01b2d05a72ec7053.mp3 b/audio/01b2d05a72ec7053.mp3 new file mode 100644 index 0000000..bbad7f6 Binary files /dev/null and b/audio/01b2d05a72ec7053.mp3 differ diff --git a/audio/0293e8985a3bfd2b.mp3 b/audio/0293e8985a3bfd2b.mp3 new file mode 100644 index 0000000..2392da5 Binary files /dev/null and b/audio/0293e8985a3bfd2b.mp3 differ diff --git a/audio/0428d021a98d2f4b.mp3 b/audio/0428d021a98d2f4b.mp3 new file mode 100644 index 0000000..d648ed7 Binary files /dev/null and b/audio/0428d021a98d2f4b.mp3 differ diff --git a/audio/07c68ab504452912.mp3 b/audio/07c68ab504452912.mp3 new file mode 100644 index 0000000..5e8111f Binary files /dev/null and b/audio/07c68ab504452912.mp3 differ diff --git a/audio/07ef879175424a11.mp3 b/audio/07ef879175424a11.mp3 new file mode 100644 index 0000000..6f2ff1e Binary files /dev/null and b/audio/07ef879175424a11.mp3 differ diff --git a/audio/094530549b5e2046.mp3 b/audio/094530549b5e2046.mp3 new file mode 100644 index 0000000..6393da2 Binary files /dev/null and b/audio/094530549b5e2046.mp3 differ diff --git a/audio/109965e9605c037f.mp3 b/audio/109965e9605c037f.mp3 new file mode 100644 index 0000000..022fe59 Binary files /dev/null and b/audio/109965e9605c037f.mp3 differ diff --git a/audio/122604decb5a6e39.mp3 b/audio/122604decb5a6e39.mp3 new file mode 100644 index 0000000..c0aaf7c Binary files /dev/null and b/audio/122604decb5a6e39.mp3 differ diff --git a/audio/1247eb8f560d72ae.mp3 b/audio/1247eb8f560d72ae.mp3 new file mode 100644 index 0000000..06a1c8e Binary files /dev/null and b/audio/1247eb8f560d72ae.mp3 differ diff --git a/audio/14697ec8f4ca3eb1.mp3 b/audio/14697ec8f4ca3eb1.mp3 new file mode 100644 index 0000000..28f0c24 Binary files /dev/null and b/audio/14697ec8f4ca3eb1.mp3 differ diff --git a/audio/16eea8aa42022566.mp3 b/audio/16eea8aa42022566.mp3 new file mode 100644 index 0000000..650cd79 Binary files /dev/null and b/audio/16eea8aa42022566.mp3 differ diff --git a/audio/1769e230f7885e91.mp3 b/audio/1769e230f7885e91.mp3 new file mode 100644 index 0000000..46c9c6d Binary files /dev/null and b/audio/1769e230f7885e91.mp3 differ diff --git a/audio/18694317c612ca30.mp3 b/audio/18694317c612ca30.mp3 new file mode 100644 index 0000000..20284b8 Binary files /dev/null and b/audio/18694317c612ca30.mp3 differ diff --git a/audio/1935d7b6e1cdaa0c.mp3 b/audio/1935d7b6e1cdaa0c.mp3 new file mode 100644 index 0000000..132d288 Binary files /dev/null and b/audio/1935d7b6e1cdaa0c.mp3 differ diff --git a/audio/1a81eb24a7c9f504.mp3 b/audio/1a81eb24a7c9f504.mp3 new file mode 100644 index 0000000..230298b Binary files /dev/null and b/audio/1a81eb24a7c9f504.mp3 differ diff --git a/audio/1ba81bbe84f76132.mp3 b/audio/1ba81bbe84f76132.mp3 new file mode 100644 index 0000000..106a479 Binary files /dev/null and b/audio/1ba81bbe84f76132.mp3 differ diff --git a/audio/1c8da50640c9af44.mp3 b/audio/1c8da50640c9af44.mp3 new file mode 100644 index 0000000..607266c Binary files /dev/null and b/audio/1c8da50640c9af44.mp3 differ diff --git a/audio/1ffd1c6c4d3ff7fd.mp3 b/audio/1ffd1c6c4d3ff7fd.mp3 new file mode 100644 index 0000000..8cae640 Binary files /dev/null and b/audio/1ffd1c6c4d3ff7fd.mp3 differ diff --git a/audio/20bba73970dd8ca3.mp3 b/audio/20bba73970dd8ca3.mp3 new file mode 100644 index 0000000..2542e75 Binary files /dev/null and b/audio/20bba73970dd8ca3.mp3 differ diff --git a/audio/20cec707d894b09b.mp3 b/audio/20cec707d894b09b.mp3 new file mode 100644 index 0000000..00f6993 Binary files /dev/null and b/audio/20cec707d894b09b.mp3 differ diff --git a/audio/21536ceec5659550.mp3 b/audio/21536ceec5659550.mp3 new file mode 100644 index 0000000..fd048fa Binary files /dev/null and b/audio/21536ceec5659550.mp3 differ diff --git a/audio/227f38db8f9408a5.mp3 b/audio/227f38db8f9408a5.mp3 new file mode 100644 index 0000000..3c02b6f Binary files /dev/null and b/audio/227f38db8f9408a5.mp3 differ diff --git a/audio/263d00820f9f5e0a.mp3 b/audio/263d00820f9f5e0a.mp3 new file mode 100644 index 0000000..161f405 Binary files /dev/null and b/audio/263d00820f9f5e0a.mp3 differ diff --git a/audio/283a95a8e304972b.mp3 b/audio/283a95a8e304972b.mp3 new file mode 100644 index 0000000..c6623f4 Binary files /dev/null and b/audio/283a95a8e304972b.mp3 differ diff --git a/audio/293ebcde28cece9f.mp3 b/audio/293ebcde28cece9f.mp3 new file mode 100644 index 0000000..2f52e5d Binary files /dev/null and b/audio/293ebcde28cece9f.mp3 differ diff --git a/audio/2f56c0ac09ef740a.mp3 b/audio/2f56c0ac09ef740a.mp3 new file mode 100644 index 0000000..1c11917 Binary files /dev/null and b/audio/2f56c0ac09ef740a.mp3 differ diff --git a/audio/301577ef5982bf18.mp3 b/audio/301577ef5982bf18.mp3 new file mode 100644 index 0000000..3598842 Binary files /dev/null and b/audio/301577ef5982bf18.mp3 differ diff --git a/audio/30e5e3683641a364.mp3 b/audio/30e5e3683641a364.mp3 new file mode 100644 index 0000000..c349724 Binary files /dev/null and b/audio/30e5e3683641a364.mp3 differ diff --git a/audio/32c8bbff09c35626.mp3 b/audio/32c8bbff09c35626.mp3 new file mode 100644 index 0000000..aaa0a34 Binary files /dev/null and b/audio/32c8bbff09c35626.mp3 differ diff --git a/audio/336913762b695f24.mp3 b/audio/336913762b695f24.mp3 new file mode 100644 index 0000000..5514dc8 Binary files /dev/null and b/audio/336913762b695f24.mp3 differ diff --git a/audio/33754244c02265dc.mp3 b/audio/33754244c02265dc.mp3 new file mode 100644 index 0000000..a41e7d2 Binary files /dev/null and b/audio/33754244c02265dc.mp3 differ diff --git a/audio/374eb07bde7699c2.mp3 b/audio/374eb07bde7699c2.mp3 new file mode 100644 index 0000000..f0c39cf Binary files /dev/null and b/audio/374eb07bde7699c2.mp3 differ diff --git a/audio/37f4f9757b9d2bd7.mp3 b/audio/37f4f9757b9d2bd7.mp3 new file mode 100644 index 0000000..fc4a36c Binary files /dev/null and b/audio/37f4f9757b9d2bd7.mp3 differ diff --git a/audio/387f1fe4b7f07681.mp3 b/audio/387f1fe4b7f07681.mp3 new file mode 100644 index 0000000..b9ed414 Binary files /dev/null and b/audio/387f1fe4b7f07681.mp3 differ diff --git a/audio/38994793f8424aed.mp3 b/audio/38994793f8424aed.mp3 new file mode 100644 index 0000000..0649fd8 Binary files /dev/null and b/audio/38994793f8424aed.mp3 differ diff --git a/audio/3a7195d99bee6bb1.mp3 b/audio/3a7195d99bee6bb1.mp3 new file mode 100644 index 0000000..ce3de98 Binary files /dev/null and b/audio/3a7195d99bee6bb1.mp3 differ diff --git a/audio/3b79e38c69b431d2.mp3 b/audio/3b79e38c69b431d2.mp3 new file mode 100644 index 0000000..bbf7356 Binary files /dev/null and b/audio/3b79e38c69b431d2.mp3 differ diff --git a/audio/3c49d9cc3c0c8342.mp3 b/audio/3c49d9cc3c0c8342.mp3 new file mode 100644 index 0000000..5294bf9 Binary files /dev/null and b/audio/3c49d9cc3c0c8342.mp3 differ diff --git a/audio/3dad81ac13cea291.mp3 b/audio/3dad81ac13cea291.mp3 new file mode 100644 index 0000000..cdbaaf3 Binary files /dev/null and b/audio/3dad81ac13cea291.mp3 differ diff --git a/audio/3de671b893ac12c4.mp3 b/audio/3de671b893ac12c4.mp3 new file mode 100644 index 0000000..bc706ce Binary files /dev/null and b/audio/3de671b893ac12c4.mp3 differ diff --git a/audio/3e8adeced13f7afe.mp3 b/audio/3e8adeced13f7afe.mp3 new file mode 100644 index 0000000..703f868 Binary files /dev/null and b/audio/3e8adeced13f7afe.mp3 differ diff --git a/audio/41395562122d87a5.mp3 b/audio/41395562122d87a5.mp3 new file mode 100644 index 0000000..5319747 Binary files /dev/null and b/audio/41395562122d87a5.mp3 differ diff --git a/audio/41587c36b1411241.mp3 b/audio/41587c36b1411241.mp3 new file mode 100644 index 0000000..98c8720 Binary files /dev/null and b/audio/41587c36b1411241.mp3 differ diff --git a/audio/423a01882709dfb9.mp3 b/audio/423a01882709dfb9.mp3 new file mode 100644 index 0000000..9c0f80d Binary files /dev/null and b/audio/423a01882709dfb9.mp3 differ diff --git a/audio/42ab908b1b619cbf.mp3 b/audio/42ab908b1b619cbf.mp3 new file mode 100644 index 0000000..d4fd992 Binary files /dev/null and b/audio/42ab908b1b619cbf.mp3 differ diff --git a/audio/4537b5ca3d2528c5.mp3 b/audio/4537b5ca3d2528c5.mp3 new file mode 100644 index 0000000..5bdeea8 Binary files /dev/null and b/audio/4537b5ca3d2528c5.mp3 differ diff --git a/audio/45e01d11f2c84103.mp3 b/audio/45e01d11f2c84103.mp3 new file mode 100644 index 0000000..8eb6c3e Binary files /dev/null and b/audio/45e01d11f2c84103.mp3 differ diff --git a/audio/465f05f7fdf88a0b.mp3 b/audio/465f05f7fdf88a0b.mp3 new file mode 100644 index 0000000..90d802d Binary files /dev/null and b/audio/465f05f7fdf88a0b.mp3 differ diff --git a/audio/481902ec14eaf3fc.mp3 b/audio/481902ec14eaf3fc.mp3 new file mode 100644 index 0000000..776ee8e Binary files /dev/null and b/audio/481902ec14eaf3fc.mp3 differ diff --git a/audio/4bbf2ddc38798e41.mp3 b/audio/4bbf2ddc38798e41.mp3 new file mode 100644 index 0000000..5e045bc Binary files /dev/null and b/audio/4bbf2ddc38798e41.mp3 differ diff --git a/audio/4e4592a9786751ee.mp3 b/audio/4e4592a9786751ee.mp3 new file mode 100644 index 0000000..f241512 Binary files /dev/null and b/audio/4e4592a9786751ee.mp3 differ diff --git a/audio/4e936b7b67e7dd3b.mp3 b/audio/4e936b7b67e7dd3b.mp3 new file mode 100644 index 0000000..b975191 Binary files /dev/null and b/audio/4e936b7b67e7dd3b.mp3 differ diff --git a/audio/510c2bd72f0a0d40.mp3 b/audio/510c2bd72f0a0d40.mp3 new file mode 100644 index 0000000..c83ae24 Binary files /dev/null and b/audio/510c2bd72f0a0d40.mp3 differ diff --git a/audio/5116e40694ac48f6.mp3 b/audio/5116e40694ac48f6.mp3 new file mode 100644 index 0000000..9ffac31 Binary files /dev/null and b/audio/5116e40694ac48f6.mp3 differ diff --git a/audio/5197115b79e0d0c8.mp3 b/audio/5197115b79e0d0c8.mp3 new file mode 100644 index 0000000..517ad3b Binary files /dev/null and b/audio/5197115b79e0d0c8.mp3 differ diff --git a/audio/5205c2d6018bcae2.mp3 b/audio/5205c2d6018bcae2.mp3 new file mode 100644 index 0000000..18b8cb5 Binary files /dev/null and b/audio/5205c2d6018bcae2.mp3 differ diff --git a/audio/528cef87d0bfb947.mp3 b/audio/528cef87d0bfb947.mp3 new file mode 100644 index 0000000..37844e9 Binary files /dev/null and b/audio/528cef87d0bfb947.mp3 differ diff --git a/audio/5880e1042b9d7873.mp3 b/audio/5880e1042b9d7873.mp3 new file mode 100644 index 0000000..caaa829 Binary files /dev/null and b/audio/5880e1042b9d7873.mp3 differ diff --git a/audio/58c41625bda3c37c.mp3 b/audio/58c41625bda3c37c.mp3 new file mode 100644 index 0000000..8f0a27b Binary files /dev/null and b/audio/58c41625bda3c37c.mp3 differ diff --git a/audio/5ae2ce0ea93c078e.mp3 b/audio/5ae2ce0ea93c078e.mp3 new file mode 100644 index 0000000..1b19d10 Binary files /dev/null and b/audio/5ae2ce0ea93c078e.mp3 differ diff --git a/audio/5fd3331aeb247ae5.mp3 b/audio/5fd3331aeb247ae5.mp3 new file mode 100644 index 0000000..66a31d8 Binary files /dev/null and b/audio/5fd3331aeb247ae5.mp3 differ diff --git a/audio/6315b2c6331aba5b.mp3 b/audio/6315b2c6331aba5b.mp3 new file mode 100644 index 0000000..7dbdc6b Binary files /dev/null and b/audio/6315b2c6331aba5b.mp3 differ diff --git a/audio/64875fcccaac069f.mp3 b/audio/64875fcccaac069f.mp3 new file mode 100644 index 0000000..f09446e Binary files /dev/null and b/audio/64875fcccaac069f.mp3 differ diff --git a/audio/665ab0d4dfbe309f.mp3 b/audio/665ab0d4dfbe309f.mp3 new file mode 100644 index 0000000..62e7446 Binary files /dev/null and b/audio/665ab0d4dfbe309f.mp3 differ diff --git a/audio/6814a21e90f4f5d5.mp3 b/audio/6814a21e90f4f5d5.mp3 new file mode 100644 index 0000000..89486ed Binary files /dev/null and b/audio/6814a21e90f4f5d5.mp3 differ diff --git a/audio/68c5009fea72bb21.mp3 b/audio/68c5009fea72bb21.mp3 new file mode 100644 index 0000000..bba78bc Binary files /dev/null and b/audio/68c5009fea72bb21.mp3 differ diff --git a/audio/68f229bae1eb15ca.mp3 b/audio/68f229bae1eb15ca.mp3 new file mode 100644 index 0000000..a41cfd9 Binary files /dev/null and b/audio/68f229bae1eb15ca.mp3 differ diff --git a/audio/6d5a45920a15adea.mp3 b/audio/6d5a45920a15adea.mp3 new file mode 100644 index 0000000..5d957fb Binary files /dev/null and b/audio/6d5a45920a15adea.mp3 differ diff --git a/audio/6f2b83563239e866.mp3 b/audio/6f2b83563239e866.mp3 new file mode 100644 index 0000000..17f483e Binary files /dev/null and b/audio/6f2b83563239e866.mp3 differ diff --git a/audio/7035473434cf5c2d.mp3 b/audio/7035473434cf5c2d.mp3 new file mode 100644 index 0000000..164b0c6 Binary files /dev/null and b/audio/7035473434cf5c2d.mp3 differ diff --git a/audio/711ccf1cd34d2af7.mp3 b/audio/711ccf1cd34d2af7.mp3 new file mode 100644 index 0000000..a3c8e8a Binary files /dev/null and b/audio/711ccf1cd34d2af7.mp3 differ diff --git a/audio/72bfb05496f96364.mp3 b/audio/72bfb05496f96364.mp3 new file mode 100644 index 0000000..b3fc4d7 Binary files /dev/null and b/audio/72bfb05496f96364.mp3 differ diff --git a/audio/72cc28d98c5d0afe.mp3 b/audio/72cc28d98c5d0afe.mp3 new file mode 100644 index 0000000..517373b Binary files /dev/null and b/audio/72cc28d98c5d0afe.mp3 differ diff --git a/audio/730a3016b0a8c854.mp3 b/audio/730a3016b0a8c854.mp3 new file mode 100644 index 0000000..e6bedbc Binary files /dev/null and b/audio/730a3016b0a8c854.mp3 differ diff --git a/audio/73a827f8eb9fce11.mp3 b/audio/73a827f8eb9fce11.mp3 new file mode 100644 index 0000000..5dd87a3 Binary files /dev/null and b/audio/73a827f8eb9fce11.mp3 differ diff --git a/audio/7430ad5fd0e1c26d.mp3 b/audio/7430ad5fd0e1c26d.mp3 new file mode 100644 index 0000000..8d8e08d Binary files /dev/null and b/audio/7430ad5fd0e1c26d.mp3 differ diff --git a/audio/75646a6fc510567c.mp3 b/audio/75646a6fc510567c.mp3 new file mode 100644 index 0000000..e66cebd Binary files /dev/null and b/audio/75646a6fc510567c.mp3 differ diff --git a/audio/7694bd623818f1da.mp3 b/audio/7694bd623818f1da.mp3 new file mode 100644 index 0000000..990199f Binary files /dev/null and b/audio/7694bd623818f1da.mp3 differ diff --git a/audio/77edabf877031a8a.mp3 b/audio/77edabf877031a8a.mp3 new file mode 100644 index 0000000..370549f Binary files /dev/null and b/audio/77edabf877031a8a.mp3 differ diff --git a/audio/7c16c8188e25f3f7.mp3 b/audio/7c16c8188e25f3f7.mp3 new file mode 100644 index 0000000..57bbf99 Binary files /dev/null and b/audio/7c16c8188e25f3f7.mp3 differ diff --git a/audio/8503ede3ea63ea36.mp3 b/audio/8503ede3ea63ea36.mp3 new file mode 100644 index 0000000..57c2b2e Binary files /dev/null and b/audio/8503ede3ea63ea36.mp3 differ diff --git a/audio/85822aed5399a029.mp3 b/audio/85822aed5399a029.mp3 new file mode 100644 index 0000000..d3e68ce Binary files /dev/null and b/audio/85822aed5399a029.mp3 differ diff --git a/audio/86af9b69fa776bfe.mp3 b/audio/86af9b69fa776bfe.mp3 new file mode 100644 index 0000000..0ddbe86 Binary files /dev/null and b/audio/86af9b69fa776bfe.mp3 differ diff --git a/audio/87d17825792d2d34.mp3 b/audio/87d17825792d2d34.mp3 new file mode 100644 index 0000000..cc6d3e0 Binary files /dev/null and b/audio/87d17825792d2d34.mp3 differ diff --git a/audio/8971fa48ff5eae13.mp3 b/audio/8971fa48ff5eae13.mp3 new file mode 100644 index 0000000..906b3a5 Binary files /dev/null and b/audio/8971fa48ff5eae13.mp3 differ diff --git a/audio/8ed5a0c6478afeec.mp3 b/audio/8ed5a0c6478afeec.mp3 new file mode 100644 index 0000000..7790d0e Binary files /dev/null and b/audio/8ed5a0c6478afeec.mp3 differ diff --git a/audio/9065ad3e77007250.mp3 b/audio/9065ad3e77007250.mp3 new file mode 100644 index 0000000..f0933a1 Binary files /dev/null and b/audio/9065ad3e77007250.mp3 differ diff --git a/audio/91f372917a5cd5c2.mp3 b/audio/91f372917a5cd5c2.mp3 new file mode 100644 index 0000000..9bb07a9 Binary files /dev/null and b/audio/91f372917a5cd5c2.mp3 differ diff --git a/audio/94a489ff7302e83f.mp3 b/audio/94a489ff7302e83f.mp3 new file mode 100644 index 0000000..84561c9 Binary files /dev/null and b/audio/94a489ff7302e83f.mp3 differ diff --git a/audio/95841a6c360267d7.mp3 b/audio/95841a6c360267d7.mp3 new file mode 100644 index 0000000..5bed76d Binary files /dev/null and b/audio/95841a6c360267d7.mp3 differ diff --git a/audio/982260bca2fdf299.mp3 b/audio/982260bca2fdf299.mp3 new file mode 100644 index 0000000..75833d8 Binary files /dev/null and b/audio/982260bca2fdf299.mp3 differ diff --git a/audio/99d1c5c12094beb9.mp3 b/audio/99d1c5c12094beb9.mp3 new file mode 100644 index 0000000..b32b084 Binary files /dev/null and b/audio/99d1c5c12094beb9.mp3 differ diff --git a/audio/9b4b57569bd7d47e.mp3 b/audio/9b4b57569bd7d47e.mp3 new file mode 100644 index 0000000..50889a2 Binary files /dev/null and b/audio/9b4b57569bd7d47e.mp3 differ diff --git a/audio/a3c9bc91cf942483.mp3 b/audio/a3c9bc91cf942483.mp3 new file mode 100644 index 0000000..6230e3c Binary files /dev/null and b/audio/a3c9bc91cf942483.mp3 differ diff --git a/audio/a43e32771a10edb6.mp3 b/audio/a43e32771a10edb6.mp3 new file mode 100644 index 0000000..c2ababe Binary files /dev/null and b/audio/a43e32771a10edb6.mp3 differ diff --git a/audio/a5ca4ad831aeca6c.mp3 b/audio/a5ca4ad831aeca6c.mp3 new file mode 100644 index 0000000..6d43b04 Binary files /dev/null and b/audio/a5ca4ad831aeca6c.mp3 differ diff --git a/audio/a81fecb038e81e53.mp3 b/audio/a81fecb038e81e53.mp3 new file mode 100644 index 0000000..b7e233f Binary files /dev/null and b/audio/a81fecb038e81e53.mp3 differ diff --git a/audio/aaf66724cadd0cb8.mp3 b/audio/aaf66724cadd0cb8.mp3 new file mode 100644 index 0000000..d594170 Binary files /dev/null and b/audio/aaf66724cadd0cb8.mp3 differ diff --git a/audio/ab02fbd46884526c.mp3 b/audio/ab02fbd46884526c.mp3 new file mode 100644 index 0000000..e193394 Binary files /dev/null and b/audio/ab02fbd46884526c.mp3 differ diff --git a/audio/ab29856cf238ead7.mp3 b/audio/ab29856cf238ead7.mp3 new file mode 100644 index 0000000..79595b7 Binary files /dev/null and b/audio/ab29856cf238ead7.mp3 differ diff --git a/audio/b0d407f5eeacafa2.mp3 b/audio/b0d407f5eeacafa2.mp3 new file mode 100644 index 0000000..37a54f8 Binary files /dev/null and b/audio/b0d407f5eeacafa2.mp3 differ diff --git a/audio/b0f7f128338b504e.mp3 b/audio/b0f7f128338b504e.mp3 new file mode 100644 index 0000000..ac72011 Binary files /dev/null and b/audio/b0f7f128338b504e.mp3 differ diff --git a/audio/b4b7c63a529ae422.mp3 b/audio/b4b7c63a529ae422.mp3 new file mode 100644 index 0000000..141ce64 Binary files /dev/null and b/audio/b4b7c63a529ae422.mp3 differ diff --git a/audio/b802f384302cb24f.mp3 b/audio/b802f384302cb24f.mp3 new file mode 100644 index 0000000..fb8667f Binary files /dev/null and b/audio/b802f384302cb24f.mp3 differ diff --git a/audio/b8406673f1de382c.mp3 b/audio/b8406673f1de382c.mp3 new file mode 100644 index 0000000..33da04d Binary files /dev/null and b/audio/b8406673f1de382c.mp3 differ diff --git a/audio/bb0c0c867fdca2a3.mp3 b/audio/bb0c0c867fdca2a3.mp3 new file mode 100644 index 0000000..67169d7 Binary files /dev/null and b/audio/bb0c0c867fdca2a3.mp3 differ diff --git a/audio/bbae0c8ed80a16b3.mp3 b/audio/bbae0c8ed80a16b3.mp3 new file mode 100644 index 0000000..3b07bf4 Binary files /dev/null and b/audio/bbae0c8ed80a16b3.mp3 differ diff --git a/audio/bcef7a0462580829.mp3 b/audio/bcef7a0462580829.mp3 new file mode 100644 index 0000000..0575f1d Binary files /dev/null and b/audio/bcef7a0462580829.mp3 differ diff --git a/audio/bea8d47c2ee5e7d3.mp3 b/audio/bea8d47c2ee5e7d3.mp3 new file mode 100644 index 0000000..7aa2d76 Binary files /dev/null and b/audio/bea8d47c2ee5e7d3.mp3 differ diff --git a/audio/c0ca3f6bae52f63b.mp3 b/audio/c0ca3f6bae52f63b.mp3 new file mode 100644 index 0000000..855ce55 Binary files /dev/null and b/audio/c0ca3f6bae52f63b.mp3 differ diff --git a/audio/c2543fff3bfa6f14.mp3 b/audio/c2543fff3bfa6f14.mp3 new file mode 100644 index 0000000..ca443a7 Binary files /dev/null and b/audio/c2543fff3bfa6f14.mp3 differ diff --git a/audio/c2c1a1062d882a63.mp3 b/audio/c2c1a1062d882a63.mp3 new file mode 100644 index 0000000..1376031 Binary files /dev/null and b/audio/c2c1a1062d882a63.mp3 differ diff --git a/audio/c67153ac60da624e.mp3 b/audio/c67153ac60da624e.mp3 new file mode 100644 index 0000000..5d5ec3b Binary files /dev/null and b/audio/c67153ac60da624e.mp3 differ diff --git a/audio/cb5c22e9c2ad20e0.mp3 b/audio/cb5c22e9c2ad20e0.mp3 new file mode 100644 index 0000000..b7afada Binary files /dev/null and b/audio/cb5c22e9c2ad20e0.mp3 differ diff --git a/audio/ce0172efd0e3786a.mp3 b/audio/ce0172efd0e3786a.mp3 new file mode 100644 index 0000000..b7c5a97 Binary files /dev/null and b/audio/ce0172efd0e3786a.mp3 differ diff --git a/audio/cf5dbf0ec57dff5d.mp3 b/audio/cf5dbf0ec57dff5d.mp3 new file mode 100644 index 0000000..d51111a Binary files /dev/null and b/audio/cf5dbf0ec57dff5d.mp3 differ diff --git a/audio/d28c2f73db5892c8.mp3 b/audio/d28c2f73db5892c8.mp3 new file mode 100644 index 0000000..b87e162 Binary files /dev/null and b/audio/d28c2f73db5892c8.mp3 differ diff --git a/audio/d405ae53a444adcf.mp3 b/audio/d405ae53a444adcf.mp3 new file mode 100644 index 0000000..a4d3791 Binary files /dev/null and b/audio/d405ae53a444adcf.mp3 differ diff --git a/audio/d54d7f7866fbd3ee.mp3 b/audio/d54d7f7866fbd3ee.mp3 new file mode 100644 index 0000000..0c09dbc Binary files /dev/null and b/audio/d54d7f7866fbd3ee.mp3 differ diff --git a/audio/d6c800fa0d657389.mp3 b/audio/d6c800fa0d657389.mp3 new file mode 100644 index 0000000..d204218 Binary files /dev/null and b/audio/d6c800fa0d657389.mp3 differ diff --git a/audio/e0d094cc9166b621.mp3 b/audio/e0d094cc9166b621.mp3 new file mode 100644 index 0000000..3aa9650 Binary files /dev/null and b/audio/e0d094cc9166b621.mp3 differ diff --git a/audio/e20851469d59cf6d.mp3 b/audio/e20851469d59cf6d.mp3 new file mode 100644 index 0000000..caf6f70 Binary files /dev/null and b/audio/e20851469d59cf6d.mp3 differ diff --git a/audio/e42bdbd2b5feeb0a.mp3 b/audio/e42bdbd2b5feeb0a.mp3 new file mode 100644 index 0000000..7636aee Binary files /dev/null and b/audio/e42bdbd2b5feeb0a.mp3 differ diff --git a/audio/e58d15ad759f1104.mp3 b/audio/e58d15ad759f1104.mp3 new file mode 100644 index 0000000..787c03d Binary files /dev/null and b/audio/e58d15ad759f1104.mp3 differ diff --git a/audio/e6ef6bba395884a2.mp3 b/audio/e6ef6bba395884a2.mp3 new file mode 100644 index 0000000..c543afc Binary files /dev/null and b/audio/e6ef6bba395884a2.mp3 differ diff --git a/audio/eac923ffd38e75dc.mp3 b/audio/eac923ffd38e75dc.mp3 new file mode 100644 index 0000000..16ef38f Binary files /dev/null and b/audio/eac923ffd38e75dc.mp3 differ diff --git a/audio/eeb35d331bddcddf.mp3 b/audio/eeb35d331bddcddf.mp3 new file mode 100644 index 0000000..d14ea65 Binary files /dev/null and b/audio/eeb35d331bddcddf.mp3 differ diff --git a/audio/f014c75b18ef7599.mp3 b/audio/f014c75b18ef7599.mp3 new file mode 100644 index 0000000..b6931c7 Binary files /dev/null and b/audio/f014c75b18ef7599.mp3 differ diff --git a/audio/f1218e3a24f5864a.mp3 b/audio/f1218e3a24f5864a.mp3 new file mode 100644 index 0000000..eb5854e Binary files /dev/null and b/audio/f1218e3a24f5864a.mp3 differ diff --git a/audio/f3a0b6bec624f7d4.mp3 b/audio/f3a0b6bec624f7d4.mp3 new file mode 100644 index 0000000..4cea243 Binary files /dev/null and b/audio/f3a0b6bec624f7d4.mp3 differ diff --git a/audio/f5a61a6683146f34.mp3 b/audio/f5a61a6683146f34.mp3 new file mode 100644 index 0000000..cfd830f Binary files /dev/null and b/audio/f5a61a6683146f34.mp3 differ diff --git a/audio/f69d3b47de4420bf.mp3 b/audio/f69d3b47de4420bf.mp3 new file mode 100644 index 0000000..f849299 Binary files /dev/null and b/audio/f69d3b47de4420bf.mp3 differ diff --git a/audio/f6be6ca910984ef0.mp3 b/audio/f6be6ca910984ef0.mp3 new file mode 100644 index 0000000..1fc3c73 Binary files /dev/null and b/audio/f6be6ca910984ef0.mp3 differ diff --git a/audio/f8cf43aa3cd3e2b5.mp3 b/audio/f8cf43aa3cd3e2b5.mp3 new file mode 100644 index 0000000..2757826 Binary files /dev/null and b/audio/f8cf43aa3cd3e2b5.mp3 differ diff --git a/audio/f9bef9c232cea359.mp3 b/audio/f9bef9c232cea359.mp3 new file mode 100644 index 0000000..c33f9ee Binary files /dev/null and b/audio/f9bef9c232cea359.mp3 differ diff --git a/audio/faa5d68302694fc7.mp3 b/audio/faa5d68302694fc7.mp3 new file mode 100644 index 0000000..7b797c2 Binary files /dev/null and b/audio/faa5d68302694fc7.mp3 differ diff --git a/audio/fb2d3956689f3623.mp3 b/audio/fb2d3956689f3623.mp3 new file mode 100644 index 0000000..6f95f64 Binary files /dev/null and b/audio/fb2d3956689f3623.mp3 differ diff --git a/audio/fd3575d2ba5cf0d7.mp3 b/audio/fd3575d2ba5cf0d7.mp3 new file mode 100644 index 0000000..30bc9ca Binary files /dev/null and b/audio/fd3575d2ba5cf0d7.mp3 differ diff --git a/audio/fe123c379617afc0.mp3 b/audio/fe123c379617afc0.mp3 new file mode 100644 index 0000000..edee2b7 Binary files /dev/null and b/audio/fe123c379617afc0.mp3 differ diff --git a/audio/manifest.js b/audio/manifest.js new file mode 100644 index 0000000..19e66d3 --- /dev/null +++ b/audio/manifest.js @@ -0,0 +1 @@ +window.__audioManifest = {"Amy!": "6315b2c6331aba5b.mp3", "Amy, where are you?": "bea8d47c2ee5e7d3.mp3", "I'm here. I'm in the bedroom.": "07c68ab504452912.mp3", "This is for you, Jello.": "b0d407f5eeacafa2.mp3", "Wow! Thank you. It's a dollhouse!": "465f05f7fdf88a0b.mp3", "Cool!": "33754244c02265dc.mp3", "That's my father.": "86af9b69fa776bfe.mp3", "He's in the kitchen.": "f014c75b18ef7599.mp3", "Where is my mother?": "730a3016b0a8c854.mp3", "She's in the dining room.": "20bba73970dd8ca3.mp3", "Look! My sister is in the living room.": "e58d15ad759f1104.mp3", "Where is the bathroom?": "f69d3b47de4420bf.mp3", "Over there.": "423a01882709dfb9.mp3", "Uh, I need to use the bathroom.": "18694317c612ca30.mp3", "bathroom": "72bfb05496f96364.mp3", "bedroom": "009e058c883c683e.mp3", "kitchen": "2f56c0ac09ef740a.mp3", "dining room": "e20851469d59cf6d.mp3", "living room": "122604decb5a6e39.mp3", "I'm in the bedroom.": "9065ad3e77007250.mp3", "Where's Kevin?": "c0ca3f6bae52f63b.mp3", "He's in the dining room.": "42ab908b1b619cbf.mp3", "Where's Mom?": "e0d094cc9166b621.mp3", "She's in the living room.": "41587c36b1411241.mp3", "This is for you.": "95841a6c360267d7.mp3", "three": "b802f384302cb24f.mp3", "teeth": "a81fecb038e81e53.mp3", "mouth": "87d17825792d2d34.mp3", "this": "c2543fff3bfa6f14.mp3", "father": "32c8bbff09c35626.mp3", "mother": "5116e40694ac48f6.mp3", "Hi, Mom. I miss you so much.": "d54d7f7866fbd3ee.mp3", "Me too.": "ab29856cf238ead7.mp3", "Hi, Mrs. Blue.": "a43e32771a10edb6.mp3", "Hi, Amy. What are you doing?": "d28c2f73db5892c8.mp3", "I'm eating an apple.": "91f372917a5cd5c2.mp3", "Is that Grandma?": "5197115b79e0d0c8.mp3", "Yes. She's running.": "0293e8985a3bfd2b.mp3", "Hi, Boka. Look! I can run very fast.": "72cc28d98c5d0afe.mp3", "Wow! That's great!": "4537b5ca3d2528c5.mp3", "What's Grandpa doing?": "7035473434cf5c2d.mp3", "He's writing.": "b4b7c63a529ae422.mp3", "Yay! I'm done.": "7430ad5fd0e1c26d.mp3", "Dinner is ready.": "a5ca4ad831aeca6c.mp3", "It's dinner time. Bye, Mom!": "e6ef6bba395884a2.mp3", "Dinner! Oh, no!": "293ebcde28cece9f.mp3", "cooking": "c2c1a1062d882a63.mp3", "eating": "301577ef5982bf18.mp3", "reading": "227f38db8f9408a5.mp3", "sleeping": "f1218e3a24f5864a.mp3", "writing": "1935d7b6e1cdaa0c.mp3", "running": "3c49d9cc3c0c8342.mp3", "What are you doing?": "99d1c5c12094beb9.mp3", "I'm reading.": "982260bca2fdf299.mp3", "What's he doing?": "5fd3331aeb247ae5.mp3", "He's sleeping.": "aaf66724cadd0cb8.mp3", "What's she doing?": "58c41625bda3c37c.mp3", "She's eating.": "374eb07bde7699c2.mp3", "I'm done.": "3b79e38c69b431d2.mp3", "sing": "f9bef9c232cea359.mp3", "king": "481902ec14eaf3fc.mp3", "song": "eac923ffd38e75dc.mp3", "sink": "6f2b83563239e866.mp3", "pink": "b0f7f128338b504e.mp3", "rink": "b8406673f1de382c.mp3", "All set and ready to go!": "d6c800fa0d657389.mp3", "Dad, I'm hungry. Let's have lunch.": "41395562122d87a5.mp3", "Good idea!": "30e5e3683641a364.mp3", "Here we are.": "ce0172efd0e3786a.mp3", "Thank you, Mr. Lee.": "1a81eb24a7c9f504.mp3", "Hurry up!": "cb5c22e9c2ad20e0.mp3", "What do you want for lunch?": "a3c9bc91cf942483.mp3", "Mmm, let me see. I want a hamburger.": "283a95a8e304972b.mp3", "What do you want?": "9b4b57569bd7d47e.mp3", "I want a hot dog.": "3dad81ac13cea291.mp3", "I want a hamburger and some juice. How about you, Boka?": "ab02fbd46884526c.mp3", "Mmm, I want two hot dogs, three hamburgers, and some ice cream.": "14697ec8f4ca3eb1.mp3", "Uh-oh! Where's my wallet?": "336913762b695f24.mp3", "hamburger": "0428d021a98d2f4b.mp3", "hot dog": "fe123c379617afc0.mp3", "juice": "07ef879175424a11.mp3", "milk": "cf5dbf0ec57dff5d.mp3", "water": "6d5a45920a15adea.mp3", "ice cream": "7c16c8188e25f3f7.mp3", "I want two hamburgers.": "85822aed5399a029.mp3", "I want some juice.": "f8cf43aa3cd3e2b5.mp3", "How about you?": "38994793f8424aed.mp3", "white": "528cef87d0bfb947.mp3", "wheel": "3a7195d99bee6bb1.mp3", "whale": "1769e230f7885e91.mp3", "photo": "eeb35d331bddcddf.mp3", "phone": "f6be6ca910984ef0.mp3", "dolphin": "4bbf2ddc38798e41.mp3", "Hello, monkeys!": "01b2d05a72ec7053.mp3", "I like monkeys. They are cute!": "68c5009fea72bb21.mp3", "Have fun!": "8503ede3ea63ea36.mp3", "Do you like zebras?": "75646a6fc510567c.mp3", "Yes, I do.": "7694bd623818f1da.mp3", "I like bears. Do you like bears?": "37f4f9757b9d2bd7.mp3", "No, I don't. They are big.": "d405ae53a444adcf.mp3", "Wow! What's that?": "8971fa48ff5eae13.mp3", "It's a tiger.": "8ed5a0c6478afeec.mp3", "I don't like bears.": "c67153ac60da624e.mp3", "I don't like tigers.": "711ccf1cd34d2af7.mp3", "A bear! Help!": "1c8da50640c9af44.mp3", "A tiger! Run!": "f5a61a6683146f34.mp3", "bears": "77edabf877031a8a.mp3", "lions": "16eea8aa42022566.mp3", "monkeys": "5880e1042b9d7873.mp3", "tigers": "263d00820f9f5e0a.mp3", "zebras": "665ab0d4dfbe309f.mp3", "Do you like bears?": "94a489ff7302e83f.mp3", "No, I don't. I like tigers.": "e42bdbd2b5feeb0a.mp3", "Help!": "3e8adeced13f7afe.mp3", "shirt": "faa5d68302694fc7.mp3", "fish": "64875fcccaac069f.mp3", "wash": "6814a21e90f4f5d5.mp3", "chips": "1247eb8f560d72ae.mp3", "cheese": "bcef7a0462580829.mp3", "lunch": "094530549b5e2046.mp3", "What are those?": "fb2d3956689f3623.mp3", "They are sachets.": "68f229bae1eb15ca.mp3", "We wear sachets on the Dragon Boat Festival.": "f3a0b6bec624f7d4.mp3", "It's a dragon boat race.": "4e936b7b67e7dd3b.mp3", "Go! Go! Go!": "bbae0c8ed80a16b3.mp3", "It's twelve o'clock.": "45e01d11f2c84103.mp3", "Time to stand an egg.": "1ffd1c6c4d3ff7fd.mp3", "Nice!": "21536ceec5659550.mp3", "What are these?": "5205c2d6018bcae2.mp3", "They are rice dumplings.": "109965e9605c037f.mp3", "Wait!": "73a827f8eb9fce11.mp3", "sachet": "510c2bd72f0a0d40.mp3", "dragon boat race": "3de671b893ac12c4.mp3", "rice dumpling": "5ae2ce0ea93c078e.mp3", "stand an egg": "1ba81bbe84f76132.mp3", "sixty": "387f1fe4b7f07681.mp3", "seventy": "bb0c0c867fdca2a3.mp3", "eighty": "20cec707d894b09b.mp3", "ninety": "fd3575d2ba5cf0d7.mp3", "one hundred": "4e4592a9786751ee.mp3"}; diff --git a/audio/manifest.json b/audio/manifest.json new file mode 100644 index 0000000..85c5366 --- /dev/null +++ b/audio/manifest.json @@ -0,0 +1,142 @@ +{ + "Amy!": "6315b2c6331aba5b.mp3", + "Amy, where are you?": "bea8d47c2ee5e7d3.mp3", + "I'm here. I'm in the bedroom.": "07c68ab504452912.mp3", + "This is for you, Jello.": "b0d407f5eeacafa2.mp3", + "Wow! Thank you. It's a dollhouse!": "465f05f7fdf88a0b.mp3", + "Cool!": "33754244c02265dc.mp3", + "That's my father.": "86af9b69fa776bfe.mp3", + "He's in the kitchen.": "f014c75b18ef7599.mp3", + "Where is my mother?": "730a3016b0a8c854.mp3", + "She's in the dining room.": "20bba73970dd8ca3.mp3", + "Look! My sister is in the living room.": "e58d15ad759f1104.mp3", + "Where is the bathroom?": "f69d3b47de4420bf.mp3", + "Over there.": "423a01882709dfb9.mp3", + "Uh, I need to use the bathroom.": "18694317c612ca30.mp3", + "bathroom": "72bfb05496f96364.mp3", + "bedroom": "009e058c883c683e.mp3", + "kitchen": "2f56c0ac09ef740a.mp3", + "dining room": "e20851469d59cf6d.mp3", + "living room": "122604decb5a6e39.mp3", + "I'm in the bedroom.": "9065ad3e77007250.mp3", + "Where's Kevin?": "c0ca3f6bae52f63b.mp3", + "He's in the dining room.": "42ab908b1b619cbf.mp3", + "Where's Mom?": "e0d094cc9166b621.mp3", + "She's in the living room.": "41587c36b1411241.mp3", + "This is for you.": "95841a6c360267d7.mp3", + "three": "b802f384302cb24f.mp3", + "teeth": "a81fecb038e81e53.mp3", + "mouth": "87d17825792d2d34.mp3", + "this": "c2543fff3bfa6f14.mp3", + "father": "32c8bbff09c35626.mp3", + "mother": "5116e40694ac48f6.mp3", + "Hi, Mom. I miss you so much.": "d54d7f7866fbd3ee.mp3", + "Me too.": "ab29856cf238ead7.mp3", + "Hi, Mrs. Blue.": "a43e32771a10edb6.mp3", + "Hi, Amy. What are you doing?": "d28c2f73db5892c8.mp3", + "I'm eating an apple.": "91f372917a5cd5c2.mp3", + "Is that Grandma?": "5197115b79e0d0c8.mp3", + "Yes. She's running.": "0293e8985a3bfd2b.mp3", + "Hi, Boka. Look! I can run very fast.": "72cc28d98c5d0afe.mp3", + "Wow! That's great!": "4537b5ca3d2528c5.mp3", + "What's Grandpa doing?": "7035473434cf5c2d.mp3", + "He's writing.": "b4b7c63a529ae422.mp3", + "Yay! I'm done.": "7430ad5fd0e1c26d.mp3", + "Dinner is ready.": "a5ca4ad831aeca6c.mp3", + "It's dinner time. Bye, Mom!": "e6ef6bba395884a2.mp3", + "Dinner! Oh, no!": "293ebcde28cece9f.mp3", + "cooking": "c2c1a1062d882a63.mp3", + "eating": "301577ef5982bf18.mp3", + "reading": "227f38db8f9408a5.mp3", + "sleeping": "f1218e3a24f5864a.mp3", + "writing": "1935d7b6e1cdaa0c.mp3", + "running": "3c49d9cc3c0c8342.mp3", + "What are you doing?": "99d1c5c12094beb9.mp3", + "I'm reading.": "982260bca2fdf299.mp3", + "What's he doing?": "5fd3331aeb247ae5.mp3", + "He's sleeping.": "aaf66724cadd0cb8.mp3", + "What's she doing?": "58c41625bda3c37c.mp3", + "She's eating.": "374eb07bde7699c2.mp3", + "I'm done.": "3b79e38c69b431d2.mp3", + "sing": "f9bef9c232cea359.mp3", + "king": "481902ec14eaf3fc.mp3", + "song": "eac923ffd38e75dc.mp3", + "sink": "6f2b83563239e866.mp3", + "pink": "b0f7f128338b504e.mp3", + "rink": "b8406673f1de382c.mp3", + "All set and ready to go!": "d6c800fa0d657389.mp3", + "Dad, I'm hungry. Let's have lunch.": "41395562122d87a5.mp3", + "Good idea!": "30e5e3683641a364.mp3", + "Here we are.": "ce0172efd0e3786a.mp3", + "Thank you, Mr. Lee.": "1a81eb24a7c9f504.mp3", + "Hurry up!": "cb5c22e9c2ad20e0.mp3", + "What do you want for lunch?": "a3c9bc91cf942483.mp3", + "Mmm, let me see. I want a hamburger.": "283a95a8e304972b.mp3", + "What do you want?": "9b4b57569bd7d47e.mp3", + "I want a hot dog.": "3dad81ac13cea291.mp3", + "I want a hamburger and some juice. How about you, Boka?": "ab02fbd46884526c.mp3", + "Mmm, I want two hot dogs, three hamburgers, and some ice cream.": "14697ec8f4ca3eb1.mp3", + "Uh-oh! Where's my wallet?": "336913762b695f24.mp3", + "hamburger": "0428d021a98d2f4b.mp3", + "hot dog": "fe123c379617afc0.mp3", + "juice": "07ef879175424a11.mp3", + "milk": "cf5dbf0ec57dff5d.mp3", + "water": "6d5a45920a15adea.mp3", + "ice cream": "7c16c8188e25f3f7.mp3", + "I want two hamburgers.": "85822aed5399a029.mp3", + "I want some juice.": "f8cf43aa3cd3e2b5.mp3", + "How about you?": "38994793f8424aed.mp3", + "white": "528cef87d0bfb947.mp3", + "wheel": "3a7195d99bee6bb1.mp3", + "whale": "1769e230f7885e91.mp3", + "photo": "eeb35d331bddcddf.mp3", + "phone": "f6be6ca910984ef0.mp3", + "dolphin": "4bbf2ddc38798e41.mp3", + "Hello, monkeys!": "01b2d05a72ec7053.mp3", + "I like monkeys. They are cute!": "68c5009fea72bb21.mp3", + "Have fun!": "8503ede3ea63ea36.mp3", + "Do you like zebras?": "75646a6fc510567c.mp3", + "Yes, I do.": "7694bd623818f1da.mp3", + "I like bears. Do you like bears?": "37f4f9757b9d2bd7.mp3", + "No, I don't. They are big.": "d405ae53a444adcf.mp3", + "Wow! What's that?": "8971fa48ff5eae13.mp3", + "It's a tiger.": "8ed5a0c6478afeec.mp3", + "I don't like bears.": "c67153ac60da624e.mp3", + "I don't like tigers.": "711ccf1cd34d2af7.mp3", + "A bear! Help!": "1c8da50640c9af44.mp3", + "A tiger! Run!": "f5a61a6683146f34.mp3", + "bears": "77edabf877031a8a.mp3", + "lions": "16eea8aa42022566.mp3", + "monkeys": "5880e1042b9d7873.mp3", + "tigers": "263d00820f9f5e0a.mp3", + "zebras": "665ab0d4dfbe309f.mp3", + "Do you like bears?": "94a489ff7302e83f.mp3", + "No, I don't. I like tigers.": "e42bdbd2b5feeb0a.mp3", + "Help!": "3e8adeced13f7afe.mp3", + "shirt": "faa5d68302694fc7.mp3", + "fish": "64875fcccaac069f.mp3", + "wash": "6814a21e90f4f5d5.mp3", + "chips": "1247eb8f560d72ae.mp3", + "cheese": "bcef7a0462580829.mp3", + "lunch": "094530549b5e2046.mp3", + "What are those?": "fb2d3956689f3623.mp3", + "They are sachets.": "68f229bae1eb15ca.mp3", + "We wear sachets on the Dragon Boat Festival.": "f3a0b6bec624f7d4.mp3", + "It's a dragon boat race.": "4e936b7b67e7dd3b.mp3", + "Go! Go! Go!": "bbae0c8ed80a16b3.mp3", + "It's twelve o'clock.": "45e01d11f2c84103.mp3", + "Time to stand an egg.": "1ffd1c6c4d3ff7fd.mp3", + "Nice!": "21536ceec5659550.mp3", + "What are these?": "5205c2d6018bcae2.mp3", + "They are rice dumplings.": "109965e9605c037f.mp3", + "Wait!": "73a827f8eb9fce11.mp3", + "sachet": "510c2bd72f0a0d40.mp3", + "dragon boat race": "3de671b893ac12c4.mp3", + "rice dumpling": "5ae2ce0ea93c078e.mp3", + "stand an egg": "1ba81bbe84f76132.mp3", + "sixty": "387f1fe4b7f07681.mp3", + "seventy": "bb0c0c867fdca2a3.mp3", + "eighty": "20cec707d894b09b.mp3", + "ninety": "fd3575d2ba5cf0d7.mp3", + "one hundred": "4e4592a9786751ee.mp3" +} \ No newline at end of file diff --git a/english_units.html b/english_units.html new file mode 100644 index 0000000..7caa85c --- /dev/null +++ b/english_units.html @@ -0,0 +1,2956 @@ + + + + + +Wonder World — Unit 1 & 2 + + + + + + + + + + +
+ + + + + + + + + + + + +
+
寫給我家的小讀者
+

Wonder World

+

這不是課本,是我陪你讀的筆記。
慢慢念沒關係,念錯也沒關係,一起把字詞變成聲音就好。

+
+ Unit 1 · 家裡 + Unit 2 · 大家在做什麼 + 故事 · 單字 · 發音 +
+
+
+ + +
+
+ + + + + + +
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+ +
+

選一種方式練習 Unit 1 的單字,慢慢來,答錯也沒關係。

+
+ + + + +
+
+ +
+
+
1 / 5
+
+ 0 + 0 +
+ +
+
+
+ +
+
+
+
+
+
+
+ + +
+
+
+ +
點下去就會念給你聽喔~
+ +
+
+
§ 01
+
Story· 故事
+
十四句話,
全都發生在 Amy 家裡
+
+
+
+ +
+
+
§ 02
+
Pronunciation Tips· 怎麼唸
+
這幾個字容易卡住,
點下去聽念法
+
+
+
+ +
+
+
§ 03
+
Vocabulary· 單字
+
五個房間的名字,
記起來就能帶路了
+
+
+
+ +
+
+
§ 04
+
Sentences· 句型
+
「誰在哪裡?」
的問答模式
+
+
+
+ +
+
+
§ 05
+
Daily English· 生活會話
+
兩句很常用的
小話,收下
+
+
+
+ +
+
+
§ 06
+
Phonics· 自然發音
+
兩種 th ——
舌頭位置不一樣喔
+
+
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+ +
+

選一種方式練習 Unit 2 的單字,慢慢來,答錯也沒關係。

+
+ + + + +
+
+ +
+
+
1 / 6
+
+ 0 + 0 +
+ +
+
+
+ +
+
+
+
+
+
+
+ + +
+
+
+ +
點下去就會念給你聽喔~
+ +
+
+
§ 01
+
Story· 故事
+
視訊的時候,
奶奶在跑步 🏃
+
+
+
+ +
+
+
§ 02
+
Pronunciation Tips· 怎麼唸
+
-ing 動作詞,
先把尾巴的鼻音學好
+
+
+
+ +
+
+
§ 03
+
Vocabulary· 單字
+
六個 -ing 動作,
念起來有節奏
+
+
+
+ +
+
+
§ 04
+
Sentences· 句型
+
「在做什麼?」
的萬用問句
+
+
+
+ +
+
+
§ 05
+
Daily English· 生活會話
+
兩句簡單的,
脫口就能講
+
+
+
+ +
+
+
§ 06
+
Phonics· 自然發音
+
ng 和 nk ——
嘴巴合起來念
+
+
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+
+

選一種方式練習 Unit 3 的單字,慢慢來,答錯也沒關係。

+
+ + + + +
+
+
+
+
1 / 6
+
+ 0 + 0 +
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+ +
錢包別忘了帶~
+ +
+
+
§ 01
+
Story· 故事
+
和 Boka 一起去
吃午餐 🍔
+
+
+
+ +
+
+
§ 02
+
Pronunciation Tips· 怎麼唸
+
點餐前,
先把食物名字念清楚
+
+
+
+ +
+
+
§ 03
+
Vocabulary· 單字
+
六樣常吃的
食物和飲料
+
+
+
+ +
+
+
§ 04
+
Sentences· 句型
+
「你想吃什麼?」
點餐句型
+
+
+
+ +
+
+
§ 05
+
Daily English· 生活會話
+
讚美和反問,
超級實用
+
+
+
+ +
+
+
§ 06
+
Phonics· 自然發音
+
wh 和 ph,
都念 /f/ 或 /w/ 喔
+
+
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+
+

選一種方式練習 Unit 4 的單字,慢慢來,答錯也沒關係。

+
+ + + + +
+
+
+
+
1 / 5
+
+ 0 + 0 +
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+ +
看到老虎就快跑~
+ +
+
+
§ 01
+
Story· 故事
+
去動物園的
一天,驚險
+
+
+
+ +
+
+
§ 02
+
Pronunciation Tips· 怎麼唸
+
動物名字,
有些字藏了小陷阱
+
+
+
+ +
+
+
§ 03
+
Vocabulary· 單字
+
五種動物,
都是複數 -s
+
+
+
+ +
+
+
§ 04
+
Sentences· 句型
+
「你喜歡 _ 嗎?」
肯定和否定
+
+
+
+ +
+
+
§ 05
+
Daily English· 生活會話
+
開心玩,
遇到危險叫救命
+
+
+
+ +
+
+
§ 06
+
Phonics· 自然發音
+
sh 和 ch,
舌頭位置不同
+
+
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+
+

選一種方式練習端午節的單字,慢慢來,答錯也沒關係。

+
+ + + + +
+
+
+
+
1 / 4
+
+ 0 + 0 +
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+ +
端午節那天可以立蛋喔~
+ +
+
+
§ 01
+
Story· 故事
+
端午節的
小日常
+
+
+
+ +
+
+
§ 02
+
Pronunciation Tips· 怎麼唸
+
端午節特別的
幾個字,跟著念
+
+
+
+ +
+
+
§ 03
+
Vocabulary· 單字
+
四個端午節
專屬的詞
+
+
+
+ +
+ + +
+ +
+
+
§ Quiz
+
Word Quiz· 單字測驗
+
+
+

選一種方式練習數字的英文念法,慢慢來。

+
+ + + + +
+
+
+
+
1 / 5
+
+ 0 + 0 +
+ +
+
+
+
+
+
+
+
+
+
+ + +
+
+
+ +
一百以內,都能念了~
+ +
+
+
§ 01
+
Numbers· 六十到一百
+
五個大數字,
點一下聽念法
+
+
+
+ +
+ +
+ + + + + + + diff --git a/fonts/LINESeedTW_OTF_Bd.woff2 b/fonts/LINESeedTW_OTF_Bd.woff2 new file mode 100755 index 0000000..aa1d83e Binary files /dev/null and b/fonts/LINESeedTW_OTF_Bd.woff2 differ diff --git a/fonts/LINESeedTW_OTF_Eb.woff2 b/fonts/LINESeedTW_OTF_Eb.woff2 new file mode 100755 index 0000000..bb00a79 Binary files /dev/null and b/fonts/LINESeedTW_OTF_Eb.woff2 differ diff --git a/fonts/LINESeedTW_OTF_Rg.woff2 b/fonts/LINESeedTW_OTF_Rg.woff2 new file mode 100755 index 0000000..3adc799 Binary files /dev/null and b/fonts/LINESeedTW_OTF_Rg.woff2 differ diff --git a/fonts/LINESeedTW_OTF_Th.woff2 b/fonts/LINESeedTW_OTF_Th.woff2 new file mode 100755 index 0000000..0137cb9 Binary files /dev/null and b/fonts/LINESeedTW_OTF_Th.woff2 differ diff --git a/generate_audio.py b/generate_audio.py new file mode 100644 index 0000000..53fd87d --- /dev/null +++ b/generate_audio.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python3 +""" +generate_audio.py — 用 OpenAI TTS 把 english_units.html 裡所有英文句子跑成 mp3。 + +用法: + export OPENAI_API_KEY=你的key + python3 generate_audio.py [--force] [--voice shimmer] [--speed 0.9] + +不需要任何套件(純 Python 標準函式庫),不需要 ffmpeg(OpenAI 直接回 mp3)。 + +聲音:alloy / ash / ballad / coral / echo / fable / nova / onyx / sage / shimmer / verse +模型:gpt-4o-mini-tts(預設,支援 instructions)/ tts-1-hd / tts-1 +""" +import argparse +import hashlib +import json +import os +import re +import sys +import time +import urllib.error +import urllib.request +from pathlib import Path + +ROOT = Path(__file__).resolve().parent +HTML = ROOT / "english_units.html" +AUDIO_DIR = ROOT / "audio" +OPENAI_TTS_URL = "https://api.openai.com/v1/audio/speech" + +INSTRUCTIONS = ( + "Speak in a warm, playful, encouraging tone like a cheerful older sister reading a " + "picture book to a young child. Clear American English, slightly slower than normal, " + "full of warmth and excitement. Sound friendly and approachable, not stiff. " + "Pronounce every word clearly." +) + + +def extract_texts(html_text: str): + pattern = re.compile(r'en:\s*"((?:[^"\\]|\\.)*)"') + clean, seen = [], set() + for m in pattern.findall(html_text): + t = m.replace('\\"', '"').replace("\\'", "'") + t = re.sub(r'<[^>]+>', '', t).strip() + if t and t not in seen: + seen.add(t) + clean.append(t) + return clean + + +def hash_text(text: str) -> str: + return hashlib.sha1(text.encode('utf-8')).hexdigest()[:16] + + +def tts(api_key: str, text: str, voice: str, model: str, + fmt: str = 'mp3', speed: float = 0.9) -> bytes: + payload = { + "model": model, + "input": text, + "voice": voice, + "response_format": fmt, + "speed": speed, + } + if model.startswith("gpt-4o"): + payload["instructions"] = INSTRUCTIONS + req = urllib.request.Request( + OPENAI_TTS_URL, + data=json.dumps(payload).encode('utf-8'), + headers={ + "Authorization": f"Bearer {api_key}", + "Content-Type": "application/json", + }, + ) + with urllib.request.urlopen(req, timeout=90) as r: + return r.read() + + +def main(): + ap = argparse.ArgumentParser() + ap.add_argument('--force', action='store_true', help='重新產生已存在的檔案') + ap.add_argument('--voice', default='nova', + help='alloy/ash/ballad/coral/echo/fable/nova/onyx/sage/shimmer/verse') + ap.add_argument('--speed', type=float, default=0.92, + help='0.25–4.0,<1 變慢(預設 0.92)') + ap.add_argument('--model', default='gpt-4o-mini-tts', + choices=['gpt-4o-mini-tts', 'tts-1-hd', 'tts-1']) + ap.add_argument('--format', default='mp3', + choices=['mp3', 'opus', 'aac', 'flac', 'wav', 'pcm']) + ap.add_argument('--sleep', type=float, default=0.2) + args = ap.parse_args() + + api_key = os.getenv('OPENAI_API_KEY') + if not api_key: + print('需要 OPENAI_API_KEY', file=sys.stderr) + print(' 去 https://platform.openai.com/api-keys 拿', file=sys.stderr) + sys.exit(1) + + AUDIO_DIR.mkdir(exist_ok=True) + texts = extract_texts(HTML.read_text(encoding='utf-8')) + print(f'找到 {len(texts)} 句不重複英文') + print(f'模型 {args.model} 聲音 {args.voice} 速度 {args.speed}x 格式 {args.format}') + print() + + manifest = {} + made = skipped = failed = 0 + + for i, text in enumerate(texts, 1): + h = hash_text(text) + out = AUDIO_DIR / f'{h}.{args.format}' + label = text if len(text) <= 55 else text[:52] + '...' + + if out.exists() and not args.force: + manifest[text] = out.name + skipped += 1 + print(f'[{i:3}/{len(texts)}] skip {label}') + continue + + print(f'[{i:3}/{len(texts)}] gen {label}') + try: + audio = tts(api_key, text, args.voice, args.model, args.format, args.speed) + out.write_bytes(audio) + manifest[text] = out.name + made += 1 + except urllib.error.HTTPError as e: + failed += 1 + body = e.read().decode('utf-8', errors='ignore')[:240] + print(f' HTTP {e.code}: {body}') + except Exception as e: + failed += 1 + print(f' FAIL: {e}') + + time.sleep(args.sleep) + + (AUDIO_DIR / 'manifest.json').write_text( + json.dumps(manifest, ensure_ascii=False, indent=2), encoding='utf-8') + (AUDIO_DIR / 'manifest.js').write_text( + 'window.__audioManifest = ' + json.dumps(manifest, ensure_ascii=False) + ';\n', + encoding='utf-8', + ) + + print() + print(f'完成:新產生 {made}、跳過 {skipped}、失敗 {failed}') + print(f'檔案在 {AUDIO_DIR}/') + + +if __name__ == '__main__': + main()