diff --git a/1000-hours/.vitepress/config.mts b/1000-hours/.vitepress/config.mts index 8e30011e..c080796c 100644 --- a/1000-hours/.vitepress/config.mts +++ b/1000-hours/.vitepress/config.mts @@ -95,41 +95,26 @@ export default withMermaid( collapsed: true, items: [ { - text: "1. 音素", - collapsed: true, + text: "1. 音素与音标", link: "/sounds-of-american-english/1-phonemes", - items: [ - { - text: "1.1. 字母", - link: "/sounds-of-american-english/1.1-alphabet", - }, - { - text: "1.2. 音素", - link: "/sounds-of-american-english/1.2-phonemes", - }, - { - text: "1.3. 口音", - link: "/sounds-of-american-english/1.3-accents", - }, - { - text: "1.4. 器官", - link: "/sounds-of-american-english/1.4-articulators", - }, - ], }, { - text: "2. 详解", + text: "2. 发声器官", + link: "/sounds-of-american-english/2-articulators", + }, + { + text: "3. 音素详解", collapsed: true, - link: "/sounds-of-american-english/2-details", + link: "/sounds-of-american-english/3-details", items: [ { - text: "2.1. 元音", + text: "3.1. 元音", collapsed: true, - link: "/sounds-of-american-english/2.1-vowels", + link: "/sounds-of-american-english/3.1-vowels", items: [ { - text: "2.1.1. 口型", - link: "/sounds-of-american-english/2.1.1-lips", + text: "3.1.1. ə/ɚ/ɝː", + link: "/sounds-of-american-english/3.1.1-ə", }, { text: "2.1.2. 舌位", diff --git a/1000-hours/.vitepress/theme/style.scss b/1000-hours/.vitepress/theme/style.scss index 14e11d4f..e96d4df9 100644 --- a/1000-hours/.vitepress/theme/style.scss +++ b/1000-hours/.vitepress/theme/style.scss @@ -161,6 +161,7 @@ body { p img, p video { margin: 0 auto; + align-self: center; } blockquote > p{ @@ -224,4 +225,8 @@ audio { padding-left: 1em; height: 1.8em; margin-top: -0.2em; -} \ No newline at end of file +} + +video { + width: 95%; +} diff --git a/1000-hours/public/audios/about-us-female.mp3 b/1000-hours/public/audios/about-us-female.mp3 new file mode 100644 index 00000000..967b2b08 Binary files /dev/null and b/1000-hours/public/audios/about-us-female.mp3 differ diff --git a/1000-hours/public/audios/about-us-male.mp3 b/1000-hours/public/audios/about-us-male.mp3 new file mode 100644 index 00000000..9a2e34c9 Binary files /dev/null and b/1000-hours/public/audios/about-us-male.mp3 differ diff --git a/1000-hours/public/audios/actor-us-female.mp3 b/1000-hours/public/audios/actor-us-female.mp3 new file mode 100644 index 00000000..6d294e1e Binary files /dev/null and b/1000-hours/public/audios/actor-us-female.mp3 differ diff --git a/1000-hours/public/audios/actor-us-male.mp3 b/1000-hours/public/audios/actor-us-male.mp3 new file mode 100644 index 00000000..84e2e08b Binary files /dev/null and b/1000-hours/public/audios/actor-us-male.mp3 differ diff --git a/1000-hours/public/audios/animal-us-female.mp3 b/1000-hours/public/audios/animal-us-female.mp3 new file mode 100644 index 00000000..813003c6 Binary files /dev/null and b/1000-hours/public/audios/animal-us-female.mp3 differ diff --git a/1000-hours/public/audios/animal-us-male.mp3 b/1000-hours/public/audios/animal-us-male.mp3 new file mode 100644 index 00000000..18262622 Binary files /dev/null and b/1000-hours/public/audios/animal-us-male.mp3 differ diff --git a/1000-hours/public/audios/bacon-us-female.mp3 b/1000-hours/public/audios/bacon-us-female.mp3 new file mode 100644 index 00000000..1272ef91 Binary files /dev/null and b/1000-hours/public/audios/bacon-us-female.mp3 differ diff --git a/1000-hours/public/audios/bacon-us-male.mp3 b/1000-hours/public/audios/bacon-us-male.mp3 new file mode 100644 index 00000000..74eafd38 Binary files /dev/null and b/1000-hours/public/audios/bacon-us-male.mp3 differ diff --git a/1000-hours/public/audios/banana-us-female.mp3 b/1000-hours/public/audios/banana-us-female.mp3 new file mode 100644 index 00000000..7f2d6478 Binary files /dev/null and b/1000-hours/public/audios/banana-us-female.mp3 differ diff --git a/1000-hours/public/audios/banana-us-male.mp3 b/1000-hours/public/audios/banana-us-male.mp3 new file mode 100644 index 00000000..096fbcbf Binary files /dev/null and b/1000-hours/public/audios/banana-us-male.mp3 differ diff --git a/1000-hours/public/audios/beggar-us-female.mp3 b/1000-hours/public/audios/beggar-us-female.mp3 new file mode 100644 index 00000000..c794cf8f Binary files /dev/null and b/1000-hours/public/audios/beggar-us-female.mp3 differ diff --git a/1000-hours/public/audios/beggar-us-male.mp3 b/1000-hours/public/audios/beggar-us-male.mp3 new file mode 100644 index 00000000..2c5c0e4c Binary files /dev/null and b/1000-hours/public/audios/beggar-us-male.mp3 differ diff --git a/1000-hours/public/audios/better-us-female.mp3 b/1000-hours/public/audios/better-us-female.mp3 new file mode 100644 index 00000000..76bc8c33 Binary files /dev/null and b/1000-hours/public/audios/better-us-female.mp3 differ diff --git a/1000-hours/public/audios/better-us-male.mp3 b/1000-hours/public/audios/better-us-male.mp3 new file mode 100644 index 00000000..edcf8183 Binary files /dev/null and b/1000-hours/public/audios/better-us-male.mp3 differ diff --git a/1000-hours/public/audios/bird-us-female.mp3 b/1000-hours/public/audios/bird-us-female.mp3 new file mode 100644 index 00000000..00627864 Binary files /dev/null and b/1000-hours/public/audios/bird-us-female.mp3 differ diff --git a/1000-hours/public/audios/bird-us-male.mp3 b/1000-hours/public/audios/bird-us-male.mp3 new file mode 100644 index 00000000..7bf26e39 Binary files /dev/null and b/1000-hours/public/audios/bird-us-male.mp3 differ diff --git a/1000-hours/public/audios/burglar-us-female.mp3 b/1000-hours/public/audios/burglar-us-female.mp3 new file mode 100644 index 00000000..72c19933 Binary files /dev/null and b/1000-hours/public/audios/burglar-us-female.mp3 differ diff --git a/1000-hours/public/audios/burglar-us-male.mp3 b/1000-hours/public/audios/burglar-us-male.mp3 new file mode 100644 index 00000000..85376a49 Binary files /dev/null and b/1000-hours/public/audios/burglar-us-male.mp3 differ diff --git a/1000-hours/public/audios/burn-us-female.mp3 b/1000-hours/public/audios/burn-us-female.mp3 new file mode 100644 index 00000000..178aa394 Binary files /dev/null and b/1000-hours/public/audios/burn-us-female.mp3 differ diff --git a/1000-hours/public/audios/burn-us-male.mp3 b/1000-hours/public/audios/burn-us-male.mp3 new file mode 100644 index 00000000..7aadf722 Binary files /dev/null and b/1000-hours/public/audios/burn-us-male.mp3 differ diff --git a/1000-hours/public/audios/butter-us-female.mp3 b/1000-hours/public/audios/butter-us-female.mp3 new file mode 100644 index 00000000..53aee12f Binary files /dev/null and b/1000-hours/public/audios/butter-us-female.mp3 differ diff --git a/1000-hours/public/audios/butter-us-male.mp3 b/1000-hours/public/audios/butter-us-male.mp3 new file mode 100644 index 00000000..c69a08b2 Binary files /dev/null and b/1000-hours/public/audios/butter-us-male.mp3 differ diff --git a/1000-hours/public/audios/card_us_female.mp3 b/1000-hours/public/audios/card-us-female.mp3 similarity index 100% rename from 1000-hours/public/audios/card_us_female.mp3 rename to 1000-hours/public/audios/card-us-female.mp3 diff --git a/1000-hours/public/audios/card_us_male.mp3 b/1000-hours/public/audios/card-us-male.mp3 similarity index 100% rename from 1000-hours/public/audios/card_us_male.mp3 rename to 1000-hours/public/audios/card-us-male.mp3 diff --git a/1000-hours/public/audios/circus-us-female.mp3 b/1000-hours/public/audios/circus-us-female.mp3 new file mode 100644 index 00000000..0365ddbc Binary files /dev/null and b/1000-hours/public/audios/circus-us-female.mp3 differ diff --git a/1000-hours/public/audios/circus-us-male.mp3 b/1000-hours/public/audios/circus-us-male.mp3 new file mode 100644 index 00000000..2f2c4bde Binary files /dev/null and b/1000-hours/public/audios/circus-us-male.mp3 differ diff --git a/1000-hours/public/audios/clerk-us-female.mp3 b/1000-hours/public/audios/clerk-us-female.mp3 new file mode 100644 index 00000000..fb0f429a Binary files /dev/null and b/1000-hours/public/audios/clerk-us-female.mp3 differ diff --git a/1000-hours/public/audios/clerk-us-male.mp3 b/1000-hours/public/audios/clerk-us-male.mp3 new file mode 100644 index 00000000..ca008c21 Binary files /dev/null and b/1000-hours/public/audios/clerk-us-male.mp3 differ diff --git a/1000-hours/public/audios/collar-us-female.mp3 b/1000-hours/public/audios/collar-us-female.mp3 new file mode 100644 index 00000000..8212d589 Binary files /dev/null and b/1000-hours/public/audios/collar-us-female.mp3 differ diff --git a/1000-hours/public/audios/collar-us-male.mp3 b/1000-hours/public/audios/collar-us-male.mp3 new file mode 100644 index 00000000..2c7cf533 Binary files /dev/null and b/1000-hours/public/audios/collar-us-male.mp3 differ diff --git a/1000-hours/public/audios/courageous-us-female.mp3 b/1000-hours/public/audios/courageous-us-female.mp3 new file mode 100644 index 00000000..9276825c Binary files /dev/null and b/1000-hours/public/audios/courageous-us-female.mp3 differ diff --git a/1000-hours/public/audios/courageous-us-male.mp3 b/1000-hours/public/audios/courageous-us-male.mp3 new file mode 100644 index 00000000..c58c8b20 Binary files /dev/null and b/1000-hours/public/audios/courageous-us-male.mp3 differ diff --git a/1000-hours/public/audios/culture-us-female.mp3 b/1000-hours/public/audios/culture-us-female.mp3 new file mode 100644 index 00000000..30f34cbc Binary files /dev/null and b/1000-hours/public/audios/culture-us-female.mp3 differ diff --git a/1000-hours/public/audios/culture-us-male.mp3 b/1000-hours/public/audios/culture-us-male.mp3 new file mode 100644 index 00000000..6dd0dbb9 Binary files /dev/null and b/1000-hours/public/audios/culture-us-male.mp3 differ diff --git a/1000-hours/public/audios/doctor-us-female.mp3 b/1000-hours/public/audios/doctor-us-female.mp3 new file mode 100644 index 00000000..efcf4351 Binary files /dev/null and b/1000-hours/public/audios/doctor-us-female.mp3 differ diff --git a/1000-hours/public/audios/doctor-us-male.mp3 b/1000-hours/public/audios/doctor-us-male.mp3 new file mode 100644 index 00000000..58c853eb Binary files /dev/null and b/1000-hours/public/audios/doctor-us-male.mp3 differ diff --git a/1000-hours/public/audios/door-us-female.mp3 b/1000-hours/public/audios/door-us-female.mp3 new file mode 100644 index 00000000..bffa2db9 Binary files /dev/null and b/1000-hours/public/audios/door-us-female.mp3 differ diff --git a/1000-hours/public/audios/door-us-male.mp3 b/1000-hours/public/audios/door-us-male.mp3 new file mode 100644 index 00000000..6a15d2e5 Binary files /dev/null and b/1000-hours/public/audios/door-us-male.mp3 differ diff --git a/1000-hours/public/audios/earn-us-female.mp3 b/1000-hours/public/audios/earn-us-female.mp3 new file mode 100644 index 00000000..fd694106 Binary files /dev/null and b/1000-hours/public/audios/earn-us-female.mp3 differ diff --git a/1000-hours/public/audios/earn-us-male.mp3 b/1000-hours/public/audios/earn-us-male.mp3 new file mode 100644 index 00000000..97b0b705 Binary files /dev/null and b/1000-hours/public/audios/earn-us-male.mp3 differ diff --git a/1000-hours/public/audios/earth-us-female.mp3 b/1000-hours/public/audios/earth-us-female.mp3 new file mode 100644 index 00000000..56e8de05 Binary files /dev/null and b/1000-hours/public/audios/earth-us-female.mp3 differ diff --git a/1000-hours/public/audios/earth-us-male.mp3 b/1000-hours/public/audios/earth-us-male.mp3 new file mode 100644 index 00000000..2ac45df6 Binary files /dev/null and b/1000-hours/public/audios/earth-us-male.mp3 differ diff --git a/1000-hours/public/audios/editor-us-female.mp3 b/1000-hours/public/audios/editor-us-female.mp3 new file mode 100644 index 00000000..ecaa834f Binary files /dev/null and b/1000-hours/public/audios/editor-us-female.mp3 differ diff --git a/1000-hours/public/audios/editor-us-male.mp3 b/1000-hours/public/audios/editor-us-male.mp3 new file mode 100644 index 00000000..89541cc5 Binary files /dev/null and b/1000-hours/public/audios/editor-us-male.mp3 differ diff --git a/1000-hours/public/audios/famous-us-female.mp3 b/1000-hours/public/audios/famous-us-female.mp3 new file mode 100644 index 00000000..7f1cd70a Binary files /dev/null and b/1000-hours/public/audios/famous-us-female.mp3 differ diff --git a/1000-hours/public/audios/famous-us-male.mp3 b/1000-hours/public/audios/famous-us-male.mp3 new file mode 100644 index 00000000..f93a0287 Binary files /dev/null and b/1000-hours/public/audios/famous-us-male.mp3 differ diff --git a/1000-hours/public/audios/figure-us-female.mp3 b/1000-hours/public/audios/figure-us-female.mp3 new file mode 100644 index 00000000..ec67a67d Binary files /dev/null and b/1000-hours/public/audios/figure-us-female.mp3 differ diff --git a/1000-hours/public/audios/figure-us-male.mp3 b/1000-hours/public/audios/figure-us-male.mp3 new file mode 100644 index 00000000..4bca864b Binary files /dev/null and b/1000-hours/public/audios/figure-us-male.mp3 differ diff --git a/1000-hours/public/audios/first-us-female.mp3 b/1000-hours/public/audios/first-us-female.mp3 new file mode 100644 index 00000000..18268bd9 Binary files /dev/null and b/1000-hours/public/audios/first-us-female.mp3 differ diff --git a/1000-hours/public/audios/first-us-male.mp3 b/1000-hours/public/audios/first-us-male.mp3 new file mode 100644 index 00000000..a18c6aaf Binary files /dev/null and b/1000-hours/public/audios/first-us-male.mp3 differ diff --git a/1000-hours/public/audios/focurs-us.mp3 b/1000-hours/public/audios/focurs-us.mp3 new file mode 100644 index 00000000..ef35c738 Binary files /dev/null and b/1000-hours/public/audios/focurs-us.mp3 differ diff --git a/1000-hours/public/audios/focus-us-female.mp3 b/1000-hours/public/audios/focus-us-female.mp3 new file mode 100644 index 00000000..939dedf5 Binary files /dev/null and b/1000-hours/public/audios/focus-us-female.mp3 differ diff --git a/1000-hours/public/audios/focus-us-male.mp3 b/1000-hours/public/audios/focus-us-male.mp3 new file mode 100644 index 00000000..7f2e9cea Binary files /dev/null and b/1000-hours/public/audios/focus-us-male.mp3 differ diff --git a/1000-hours/public/audios/heard-us-female.mp3 b/1000-hours/public/audios/heard-us-female.mp3 new file mode 100644 index 00000000..16df1b1a Binary files /dev/null and b/1000-hours/public/audios/heard-us-female.mp3 differ diff --git a/1000-hours/public/audios/heard-us-male.mp3 b/1000-hours/public/audios/heard-us-male.mp3 new file mode 100644 index 00000000..1055766d Binary files /dev/null and b/1000-hours/public/audios/heard-us-male.mp3 differ diff --git a/1000-hours/public/audios/hello_us_female.mp3 b/1000-hours/public/audios/hello_us_female.mp3 new file mode 100644 index 00000000..e69de29b diff --git a/1000-hours/public/audios/her-us-female.mp3 b/1000-hours/public/audios/her-us-female.mp3 new file mode 100644 index 00000000..922ac721 Binary files /dev/null and b/1000-hours/public/audios/her-us-female.mp3 differ diff --git a/1000-hours/public/audios/her-us-male.mp3 b/1000-hours/public/audios/her-us-male.mp3 new file mode 100644 index 00000000..29e84f58 Binary files /dev/null and b/1000-hours/public/audios/her-us-male.mp3 differ diff --git a/1000-hours/public/audios/humorous-us-female.mp3 b/1000-hours/public/audios/humorous-us-female.mp3 new file mode 100644 index 00000000..bcab73fa Binary files /dev/null and b/1000-hours/public/audios/humorous-us-female.mp3 differ diff --git a/1000-hours/public/audios/humorous-us-male.mp3 b/1000-hours/public/audios/humorous-us-male.mp3 new file mode 100644 index 00000000..37be141a Binary files /dev/null and b/1000-hours/public/audios/humorous-us-male.mp3 differ diff --git a/1000-hours/public/audios/individual-us-female.mp3 b/1000-hours/public/audios/individual-us-female.mp3 new file mode 100644 index 00000000..63d14c1b Binary files /dev/null and b/1000-hours/public/audios/individual-us-female.mp3 differ diff --git a/1000-hours/public/audios/individual-us-male.mp3 b/1000-hours/public/audios/individual-us-male.mp3 new file mode 100644 index 00000000..0a1b1b02 Binary files /dev/null and b/1000-hours/public/audios/individual-us-male.mp3 differ diff --git a/1000-hours/public/audios/lesson-us-female.mp3 b/1000-hours/public/audios/lesson-us-female.mp3 new file mode 100644 index 00000000..e74d4c06 Binary files /dev/null and b/1000-hours/public/audios/lesson-us-female.mp3 differ diff --git a/1000-hours/public/audios/lesson-us-male.mp3 b/1000-hours/public/audios/lesson-us-male.mp3 new file mode 100644 index 00000000..1d597d19 Binary files /dev/null and b/1000-hours/public/audios/lesson-us-male.mp3 differ diff --git a/1000-hours/public/audios/mark-us-female.mp3 b/1000-hours/public/audios/mark-us-female.mp3 new file mode 100644 index 00000000..aec1322c Binary files /dev/null and b/1000-hours/public/audios/mark-us-female.mp3 differ diff --git a/1000-hours/public/audios/mark-us-male.mp3 b/1000-hours/public/audios/mark-us-male.mp3 new file mode 100644 index 00000000..06c0115b Binary files /dev/null and b/1000-hours/public/audios/mark-us-male.mp3 differ diff --git a/1000-hours/public/audios/medium-us-female.mp3 b/1000-hours/public/audios/medium-us-female.mp3 new file mode 100644 index 00000000..6c2aa46e Binary files /dev/null and b/1000-hours/public/audios/medium-us-female.mp3 differ diff --git a/1000-hours/public/audios/medium-us-male.mp3 b/1000-hours/public/audios/medium-us-male.mp3 new file mode 100644 index 00000000..820a58c5 Binary files /dev/null and b/1000-hours/public/audios/medium-us-male.mp3 differ diff --git a/1000-hours/public/audios/nurse-us-female.mp3 b/1000-hours/public/audios/nurse-us-female.mp3 new file mode 100644 index 00000000..51990b0f Binary files /dev/null and b/1000-hours/public/audios/nurse-us-female.mp3 differ diff --git a/1000-hours/public/audios/nurse-us-male.mp3 b/1000-hours/public/audios/nurse-us-male.mp3 new file mode 100644 index 00000000..4154c109 Binary files /dev/null and b/1000-hours/public/audios/nurse-us-male.mp3 differ diff --git a/1000-hours/public/audios/open-us-female.mp3 b/1000-hours/public/audios/open-us-female.mp3 new file mode 100644 index 00000000..e64a1eff Binary files /dev/null and b/1000-hours/public/audios/open-us-female.mp3 differ diff --git a/1000-hours/public/audios/open-us-male.mp3 b/1000-hours/public/audios/open-us-male.mp3 new file mode 100644 index 00000000..3b3fffbd Binary files /dev/null and b/1000-hours/public/audios/open-us-male.mp3 differ diff --git a/1000-hours/public/audios/pilot-us-female.mp3 b/1000-hours/public/audios/pilot-us-female.mp3 new file mode 100644 index 00000000..d1c4298a Binary files /dev/null and b/1000-hours/public/audios/pilot-us-female.mp3 differ diff --git a/1000-hours/public/audios/pilot-us-male.mp3 b/1000-hours/public/audios/pilot-us-male.mp3 new file mode 100644 index 00000000..bbd541c0 Binary files /dev/null and b/1000-hours/public/audios/pilot-us-male.mp3 differ diff --git a/1000-hours/public/audios/poor_us_female.mp3 b/1000-hours/public/audios/poor-us-female.mp3 similarity index 100% rename from 1000-hours/public/audios/poor_us_female.mp3 rename to 1000-hours/public/audios/poor-us-female.mp3 diff --git a/1000-hours/public/audios/poor_us_male.mp3 b/1000-hours/public/audios/poor-us-male.mp3 similarity index 100% rename from 1000-hours/public/audios/poor_us_male.mp3 rename to 1000-hours/public/audios/poor-us-male.mp3 diff --git a/1000-hours/public/audios/president-us-female.mp3 b/1000-hours/public/audios/president-us-female.mp3 new file mode 100644 index 00000000..1f41ebfc Binary files /dev/null and b/1000-hours/public/audios/president-us-female.mp3 differ diff --git a/1000-hours/public/audios/president-us-male.mp3 b/1000-hours/public/audios/president-us-male.mp3 new file mode 100644 index 00000000..0a77e936 Binary files /dev/null and b/1000-hours/public/audios/president-us-male.mp3 differ diff --git a/1000-hours/public/audios/pressure-us-female.mp3 b/1000-hours/public/audios/pressure-us-female.mp3 new file mode 100644 index 00000000..9a188d7e Binary files /dev/null and b/1000-hours/public/audios/pressure-us-female.mp3 differ diff --git a/1000-hours/public/audios/pressure-us-male.mp3 b/1000-hours/public/audios/pressure-us-male.mp3 new file mode 100644 index 00000000..dccf06fc Binary files /dev/null and b/1000-hours/public/audios/pressure-us-male.mp3 differ diff --git a/1000-hours/public/audios/problem-us-female.mp3 b/1000-hours/public/audios/problem-us-female.mp3 new file mode 100644 index 00000000..0c041869 Binary files /dev/null and b/1000-hours/public/audios/problem-us-female.mp3 differ diff --git a/1000-hours/public/audios/problem-us-male.mp3 b/1000-hours/public/audios/problem-us-male.mp3 new file mode 100644 index 00000000..742024c2 Binary files /dev/null and b/1000-hours/public/audios/problem-us-male.mp3 differ diff --git a/1000-hours/public/audios/pupil-us-female.mp3 b/1000-hours/public/audios/pupil-us-female.mp3 new file mode 100644 index 00000000..3b4648dc Binary files /dev/null and b/1000-hours/public/audios/pupil-us-female.mp3 differ diff --git a/1000-hours/public/audios/pupil-us-male.mp3 b/1000-hours/public/audios/pupil-us-male.mp3 new file mode 100644 index 00000000..524f3983 Binary files /dev/null and b/1000-hours/public/audios/pupil-us-male.mp3 differ diff --git a/1000-hours/public/audios/short-us-female.mp3 b/1000-hours/public/audios/short-us-female.mp3 new file mode 100644 index 00000000..9545c1c8 Binary files /dev/null and b/1000-hours/public/audios/short-us-female.mp3 differ diff --git a/1000-hours/public/audios/short-us-male.mp3 b/1000-hours/public/audios/short-us-male.mp3 new file mode 100644 index 00000000..e4224046 Binary files /dev/null and b/1000-hours/public/audios/short-us-male.mp3 differ diff --git a/1000-hours/public/audios/sofa-us-female.mp3 b/1000-hours/public/audios/sofa-us-female.mp3 new file mode 100644 index 00000000..351f7389 Binary files /dev/null and b/1000-hours/public/audios/sofa-us-female.mp3 differ diff --git a/1000-hours/public/audios/sofa-us-male.mp3 b/1000-hours/public/audios/sofa-us-male.mp3 new file mode 100644 index 00000000..c3fafd88 Binary files /dev/null and b/1000-hours/public/audios/sofa-us-male.mp3 differ diff --git a/1000-hours/public/audios/stir-us-female.mp3 b/1000-hours/public/audios/stir-us-female.mp3 new file mode 100644 index 00000000..fe1cf9f3 Binary files /dev/null and b/1000-hours/public/audios/stir-us-female.mp3 differ diff --git a/1000-hours/public/audios/stir-us-male.mp3 b/1000-hours/public/audios/stir-us-male.mp3 new file mode 100644 index 00000000..177c4543 Binary files /dev/null and b/1000-hours/public/audios/stir-us-male.mp3 differ diff --git a/1000-hours/public/audios/support-us-female.mp3 b/1000-hours/public/audios/support-us-female.mp3 new file mode 100644 index 00000000..a353b32a Binary files /dev/null and b/1000-hours/public/audios/support-us-female.mp3 differ diff --git a/1000-hours/public/audios/support-us-male.mp3 b/1000-hours/public/audios/support-us-male.mp3 new file mode 100644 index 00000000..4f2e3f29 Binary files /dev/null and b/1000-hours/public/audios/support-us-male.mp3 differ diff --git a/1000-hours/public/audios/synthesis-us-female.mp3 b/1000-hours/public/audios/synthesis-us-female.mp3 new file mode 100644 index 00000000..c80205d5 Binary files /dev/null and b/1000-hours/public/audios/synthesis-us-female.mp3 differ diff --git a/1000-hours/public/audios/synthesis-us-male.mp3 b/1000-hours/public/audios/synthesis-us-male.mp3 new file mode 100644 index 00000000..878c2ec5 Binary files /dev/null and b/1000-hours/public/audios/synthesis-us-male.mp3 differ diff --git a/1000-hours/public/audios/teacher-us-female.mp3 b/1000-hours/public/audios/teacher-us-female.mp3 new file mode 100644 index 00000000..dd3a37b8 Binary files /dev/null and b/1000-hours/public/audios/teacher-us-female.mp3 differ diff --git a/1000-hours/public/audios/teacher-us-male.mp3 b/1000-hours/public/audios/teacher-us-male.mp3 new file mode 100644 index 00000000..0b03472d Binary files /dev/null and b/1000-hours/public/audios/teacher-us-male.mp3 differ diff --git a/1000-hours/public/audios/term-us-female.mp3 b/1000-hours/public/audios/term-us-female.mp3 new file mode 100644 index 00000000..a70edefb Binary files /dev/null and b/1000-hours/public/audios/term-us-female.mp3 differ diff --git a/1000-hours/public/audios/term-us-male.mp3 b/1000-hours/public/audios/term-us-male.mp3 new file mode 100644 index 00000000..cc0bfcf7 Binary files /dev/null and b/1000-hours/public/audios/term-us-male.mp3 differ diff --git a/1000-hours/public/audios/turn-us-female.mp3 b/1000-hours/public/audios/turn-us-female.mp3 new file mode 100644 index 00000000..448b5a9a Binary files /dev/null and b/1000-hours/public/audios/turn-us-female.mp3 differ diff --git a/1000-hours/public/audios/turn-us-male.mp3 b/1000-hours/public/audios/turn-us-male.mp3 new file mode 100644 index 00000000..4b05a0f5 Binary files /dev/null and b/1000-hours/public/audios/turn-us-male.mp3 differ diff --git a/1000-hours/public/audios/word-us-female.mp3 b/1000-hours/public/audios/word-us-female.mp3 new file mode 100644 index 00000000..7f4932ae Binary files /dev/null and b/1000-hours/public/audios/word-us-female.mp3 differ diff --git a/1000-hours/public/audios/word-us-male.mp3 b/1000-hours/public/audios/word-us-male.mp3 new file mode 100644 index 00000000..5d922c91 Binary files /dev/null and b/1000-hours/public/audios/word-us-male.mp3 differ diff --git a/1000-hours/public/audios/world-us-female.mp3 b/1000-hours/public/audios/world-us-female.mp3 new file mode 100644 index 00000000..5f08eb29 Binary files /dev/null and b/1000-hours/public/audios/world-us-female.mp3 differ diff --git a/1000-hours/public/audios/world-us-male.mp3 b/1000-hours/public/audios/world-us-male.mp3 new file mode 100644 index 00000000..98941cd2 Binary files /dev/null and b/1000-hours/public/audios/world-us-male.mp3 differ diff --git a/1000-hours/public/audios/worse-us-female.mp3 b/1000-hours/public/audios/worse-us-female.mp3 new file mode 100644 index 00000000..f29f9c99 Binary files /dev/null and b/1000-hours/public/audios/worse-us-female.mp3 differ diff --git a/1000-hours/public/audios/worse-us-male.mp3 b/1000-hours/public/audios/worse-us-male.mp3 new file mode 100644 index 00000000..97409126 Binary files /dev/null and b/1000-hours/public/audios/worse-us-male.mp3 differ diff --git a/1000-hours/public/audios/your-us-female.mp3 b/1000-hours/public/audios/your-us-female.mp3 new file mode 100644 index 00000000..3ab2b94f Binary files /dev/null and b/1000-hours/public/audios/your-us-female.mp3 differ diff --git a/1000-hours/public/audios/your-us-male.mp3 b/1000-hours/public/audios/your-us-male.mp3 new file mode 100644 index 00000000..6a3f583c Binary files /dev/null and b/1000-hours/public/audios/your-us-male.mp3 differ diff --git a/1000-hours/public/jupyter-notebooks/edge-tts-valcab-pronounciation.ipynb b/1000-hours/public/jupyter-notebooks/edge-tts-valcab-pronounciation.ipynb index 949c4c14..bb509edd 100644 --- a/1000-hours/public/jupyter-notebooks/edge-tts-valcab-pronounciation.ipynb +++ b/1000-hours/public/jupyter-notebooks/edge-tts-valcab-pronounciation.ipynb @@ -41,110 +41,375 @@ } ], "source": [ - "%pip install edge-tts\n", - "%pip install pygame" + "%pip install edge-tts" + ] + }, + { + "cell_type": "markdown", + "id": "2df59a42", + "metadata": {}, + "source": [ + "# English Voices\n", + "\n", + "* voice = \"en-US-GuyNeural\" (Male)\n", + "* voice = \"en-US-AnaNeural\" (Female)\n", + "* voice = \"en-US-AndrewNeural\" (Male)\n", + "* voice = \"en-US-AriaNeural\" (Female)\n", + "* voice = \"en-US-AvaNeural\" (Female)\n", + "* voice = \"en-US-BrianNeural\" (Male)\n", + "* voice = \"en-US-ChristopherNeural\" (Male)\n", + "* voice = \"en-US-EmmaNeural\" (Female)\n", + "* voice = \"en-US-EricNeural\" (Male)\n", + "* voice = \"en-US-GuyNeural\" (Male)\n", + "* voice = \"en-US-JennyNeural\" (Female)\n", + "* voice = \"en-US-MichelleNeural\" (Female)\n", + "* voice = \"en-US-RogerNeural\" (Male)\n", + "* voice = \"en-US-SteffanNeural\" (Male)\n", + "* voice = \"en-GB-LibbyNeural\" (Female)\n", + "* voice = \"en-GB-MaisieNeural\" (Female)\n", + "* voice = \"en-GB-RyanNeural\" (Male)\n", + "* voice = \"en-GB-SoniaNeural\" (Female)\n", + "* voice = \"en-GB-ThomasNeural\" (Male)\n", + "* voice = \"en-AU-NatashaNeural\" (Female)\n", + "* voice = \"en-AU-WilliamNeural\" (Male)\n", + "* voice = \"en-CA-ClaraNeural\" (Female)\n", + "* voice = \"en-CA-LiamNeural\" (Male)" ] }, { "cell_type": "code", "execution_count": 2, - "id": "9aad6634-e833-4ec4-b285-84e051329712", + "id": "71d35cd9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "pygame 2.5.2 (SDL 2.28.3, Python 3.12.1)\n", - "Hello from the pygame community. https://www.pygame.org/contribute.html\n", - "Files created!\n" + "['en-US-GuyNeural', 'en-US-AriaNeural']\n", + "card\n", + "../audios/card_us_male.mp3 exists, overwriting...\n", + "../audios/card_us_male.mp3 created\n", + "../audios/card_us_female.mp3 exists, overwriting...\n", + "../audios/card_us_female.mp3 created\n", + " mark\n", + "../audios/mark_us_male.mp3 created\n", + "../audios/mark_us_female.mp3 created\n", + " door\n", + "../audios/door_us_male.mp3 created\n", + "../audios/door_us_female.mp3 created\n", + "short\n", + "../audios/short_us_male.mp3 created\n", + "../audios/short_us_female.mp3 created\n", + "poor\n", + "../audios/poor_us_male.mp3 exists, overwriting...\n", + "../audios/poor_us_male.mp3 created\n", + "../audios/poor_us_female.mp3 exists, overwriting...\n", + "../audios/poor_us_female.mp3 created\n", + "your\n", + "../audios/your_us_male.mp3 created\n", + "../audios/your_us_female.mp3 created\n", + "focus\n", + "../audios/focus_us_male.mp3 created\n", + "../audios/focus_us_female.mp3 created\n", + "individual\n", + "../audios/individual_us_male.mp3 created\n", + "../audios/individual_us_female.mp3 created\n", + "\n", + "about\n", + "../audios/about_us_male.mp3 exists, overwriting...\n", + "../audios/about_us_male.mp3 created\n", + "../audios/about_us_female.mp3 exists, overwriting...\n", + "../audios/about_us_female.mp3 created\n", + "\n", + "banana\n", + "../audios/banana_us_male.mp3 created\n", + "../audios/banana_us_female.mp3 created\n", + "\n", + "sofa\n", + "../audios/sofa_us_male.mp3 created\n", + "../audios/sofa_us_female.mp3 created\n", + "\n", + "open\n", + "../audios/open_us_male.mp3 created\n", + "../audios/open_us_female.mp3 created\n", + "\n", + "problem\n", + "../audios/problem_us_male.mp3 created\n", + "../audios/problem_us_female.mp3 created\n", + "\n", + "synthesis\n", + "../audios/synthesis_us_male.mp3 created\n", + "../audios/synthesis_us_female.mp3 created\n", + "\n", + "animal\n", + "../audios/animal_us_male.mp3 created\n", + "../audios/animal_us_female.mp3 created\n", + "\n", + "president\n", + "../audios/president_us_male.mp3 created\n", + "../audios/president_us_female.mp3 created\n", + "\n", + "pupil\n", + "../audios/pupil_us_male.mp3 created\n", + "../audios/pupil_us_female.mp3 created\n", + "\n", + "bacon\n", + "../audios/bacon_us_male.mp3 created\n", + "../audios/bacon_us_female.mp3 created\n", + "\n", + "lesson\n", + "../audios/lesson_us_male.mp3 created\n", + "../audios/lesson_us_female.mp3 created\n", + "\n", + "pilot\n", + "../audios/pilot_us_male.mp3 created\n", + "../audios/pilot_us_female.mp3 created\n", + "\n", + "circus\n", + "../audios/circus_us_male.mp3 created\n", + "../audios/circus_us_female.mp3 created\n", + "\n", + "medium\n", + "../audios/medium_us_male.mp3 created\n", + "../audios/medium_us_female.mp3 created\n", + "\n", + "support\n", + "../audios/support_us_male.mp3 created\n", + "../audios/support_us_female.mp3 created\n", + "\n", + "courageous\n", + "../audios/courageous_us_male.mp3 created\n", + "../audios/courageous_us_female.mp3 created\n", + "\n", + "famous\n", + "../audios/famous_us_male.mp3 created\n", + "../audios/famous_us_female.mp3 created\n", + "\n", + "humorous\n", + "../audios/humorous_us_male.mp3 created\n", + "../audios/humorous_us_female.mp3 created\n", + "\n", + "better\n", + "../audios/better_us_male.mp3 created\n", + "../audios/better_us_female.mp3 created\n", + "\n", + "butter\n", + "../audios/butter_us_male.mp3 created\n", + "../audios/butter_us_female.mp3 created\n", + "\n", + "teacher\n", + "../audios/teacher_us_male.mp3 created\n", + "../audios/teacher_us_female.mp3 created\n", + "\n", + "actor\n", + "../audios/actor_us_male.mp3 created\n", + "../audios/actor_us_female.mp3 created\n", + "\n", + "doctor\n", + "../audios/doctor_us_male.mp3 created\n", + "../audios/doctor_us_female.mp3 created\n", + "\n", + "editor\n", + "../audios/editor_us_male.mp3 created\n", + "../audios/editor_us_female.mp3 created\n", + "\n", + "beggar\n", + "../audios/beggar_us_male.mp3 created\n", + "../audios/beggar_us_female.mp3 created\n", + "\n", + "burglar\n", + "../audios/burglar_us_male.mp3 created\n", + "../audios/burglar_us_female.mp3 created\n", + "\n", + "collar\n", + "../audios/collar_us_male.mp3 created\n", + "../audios/collar_us_female.mp3 created\n", + "\n", + "culture\n", + "../audios/culture_us_male.mp3 created\n", + "../audios/culture_us_female.mp3 created\n", + "\n", + "figure\n", + "../audios/figure_us_male.mp3 created\n", + "../audios/figure_us_female.mp3 created\n", + "\n", + "pressure\n", + "../audios/pressure_us_male.mp3 created\n", + "../audios/pressure_us_female.mp3 created\n", + "\n", + "her\n", + "../audios/her_us_male.mp3 created\n", + "../audios/her_us_female.mp3 created\n", + "\n", + "term\n", + "../audios/term_us_male.mp3 created\n", + "../audios/term_us_female.mp3 created\n", + "\n", + "clerk\n", + "../audios/clerk_us_male.mp3 created\n", + "../audios/clerk_us_female.mp3 created\n", + "\n", + "earn\n", + "../audios/earn_us_male.mp3 created\n", + "../audios/earn_us_female.mp3 created\n", + "\n", + "earth\n", + "../audios/earth_us_male.mp3 created\n", + "../audios/earth_us_female.mp3 created\n", + "\n", + "heard\n", + "../audios/heard_us_male.mp3 created\n", + "../audios/heard_us_female.mp3 created\n", + "\n", + "bird\n", + "../audios/bird_us_male.mp3 created\n", + "../audios/bird_us_female.mp3 created\n", + "\n", + "first\n", + "../audios/first_us_male.mp3 created\n", + "../audios/first_us_female.mp3 created\n", + "\n", + "stir\n", + "../audios/stir_us_male.mp3 created\n", + "../audios/stir_us_female.mp3 created\n", + "\n", + "burn\n", + "../audios/burn_us_male.mp3 created\n", + "../audios/burn_us_female.mp3 created\n", + "\n", + "nurse\n", + "../audios/nurse_us_male.mp3 created\n", + "../audios/nurse_us_female.mp3 created\n", + "\n", + "turn\n", + "../audios/turn_us_male.mp3 created\n", + "../audios/turn_us_female.mp3 created\n", + "\n", + "word\n", + "../audios/word_us_male.mp3 created\n", + "../audios/word_us_female.mp3 created\n", + "\n", + "world\n", + "../audios/world_us_male.mp3 exists, overwriting...\n", + "../audios/world_us_male.mp3 created\n", + "../audios/world_us_female.mp3 exists, overwriting...\n", + "../audios/world_us_female.mp3 created\n", + "\n", + "worse\n", + "../audios/worse_us_male.mp3 created\n", + "../audios/worse_us_female.mp3 created\n", + "\n" + ] + }, + { + "ename": "error", + "evalue": "music_mpg123: corrupt mp3 file (bad tags.)", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31merror\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[2], line 92\u001b[0m\n\u001b[1;32m 90\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m i, voice \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28menumerate\u001b[39m(voices):\n\u001b[1;32m 91\u001b[0m filename \u001b[38;5;241m=\u001b[39m \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m../audios/\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mword\u001b[38;5;241m.\u001b[39mstrip()\u001b[38;5;241m.\u001b[39mlower()\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mregions[i]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m_\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mgenders[i]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m.mp3\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[0;32m---> 92\u001b[0m \u001b[38;5;28;01mawait\u001b[39;00m generate_edge_tts_audio(word\u001b[38;5;241m.\u001b[39mstrip()\u001b[38;5;241m.\u001b[39mlower(), filename, voice\u001b[38;5;241m=\u001b[39mvoice, verbose\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, overwrite\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m, play\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n", + "Cell \u001b[0;32mIn[2], line 21\u001b[0m, in \u001b[0;36mgenerate_edge_tts_audio\u001b[0;34m(text, file_name, voice, style, verbose, play, overwrite)\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m play:\n\u001b[1;32m 20\u001b[0m pygame\u001b[38;5;241m.\u001b[39mmixer\u001b[38;5;241m.\u001b[39minit()\n\u001b[0;32m---> 21\u001b[0m \u001b[43mpygame\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmixer\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmusic\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mfile_name\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 22\u001b[0m pygame\u001b[38;5;241m.\u001b[39mmixer\u001b[38;5;241m.\u001b[39mmusic\u001b[38;5;241m.\u001b[39mplay()\n\u001b[1;32m 23\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m verbose:\n", + "\u001b[0;31merror\u001b[0m: music_mpg123: corrupt mp3 file (bad tags.)" ] } ], "source": [ - "import asyncio\n", "import edge_tts\n", + "import os\n", "import pygame\n", + "import time\n", "\n", - "TEXT = \"\"\"\n", - "cup, father, head, hat, above, mother, bird, sheep, ship, horse, blue, foot, day, eye, boy, nose, mouth, ear, hair, pure, fire, hour\n", + "async def generate_edge_tts_audio(text, file_name, voice='en-US-GuyNeural', style='newscast-formal', verbose=False, play=False, overwrite=False):\n", + " communicate = edge_tts.Communicate(text, voice)\n", + " # whether file exists?\n", + " if os.path.exists(file_name):\n", + " if overwrite:\n", + " if verbose:\n", + " print(f'{file_name} exists, overwriting...')\n", + " else:\n", + " if verbose:\n", + " print(f'{file_name} exists, skipping...')\n", + " return\n", + " \n", + " await communicate.save(file_name)\n", + " if play:\n", + " pygame.mixer.init()\n", + " pygame.mixer.music.load(file_name)\n", + " pygame.mixer.music.play()\n", + " if verbose:\n", + " print(f'{file_name} created')\n", + " \n", + " time.sleep(1.5)\n", + "\n", + "\n", + "\n", + "voices = [\"en-US-GuyNeural\", \"en-US-AriaNeural\", \"en-GB-RyanNeural\", \"en-GB-LibbyNeural\"]\n", + "regions = ['us', 'us', 'uk', 'uk']\n", + "genders = ['male', 'female', 'male', 'female']\n", + "\n", + "only_us = True\n", + "if only_us:\n", + " voices = voices[:2]\n", + " print(voices)\n", + "\n", + "words = \"\"\"\n", + "card, mark, door,short,poor,your,focus,individual,\n", + "about,\n", + "banana,\n", + "sofa,\n", + "open,\n", + "problem,\n", + "synthesis,\n", + "animal,\n", + "president,\n", + "pupil,\n", + "bacon,\n", + "lesson,\n", + "pilot,\n", + "circus,\n", + "medium,\n", + "support,\n", + "courageous,\n", + "famous,\n", + "humorous,\n", + "better,\n", + "butter,\n", + "teacher,\n", + "actor,\n", + "doctor,\n", + "editor,\n", + "beggar,\n", + "burglar,\n", + "collar,\n", + "culture,\n", + "figure,\n", + "pressure,\n", + "her,\n", + "term,\n", + "clerk,\n", + "earn,\n", + "earth,\n", + "heard,\n", + "bird,\n", + "first,\n", + "stir,\n", + "burn,\n", + "nurse,\n", + "turn,\n", + "word,\n", + "world,\n", + "worse,\n", "\"\"\"\n", "\n", - "Wordlist = TEXT.split(\",\")\n", - "\n", - "for w in Wordlist:\n", - " for VOICE in ['en-US-GuyNeural', 'en-GB-RyanNeural']:\n", - " # for VOICE in ['en-US-GuyNeural']:\n", - " w = w.strip()\n", - " OUTPUT_FILE = f\"{w.replace(' ', '-').replace('?', '')}-{VOICE[3:5].replace('GB', 'UK').lower()}.mp3\"\n", - " communicate = edge_tts.Communicate(w, VOICE)\n", - " await communicate.save(OUTPUT_FILE) \n", - "\n", - "print(\"Files created!\") " - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "id": "1e54069c-db63-45ba-86e8-726730b19255", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Files created!\n" - ] - } - ], - "source": [ - "import asyncio\n", - "import edge_tts\n", - "import pygame\n", - "\n", - "TEXT = \"happy\"\n", - "Wordlist = TEXT.split(\",\")\n", - "\n", - "for w in Wordlist:\n", - " for VOICE in ['zh-CN-YunxiNeural', 'zh-CN-XiaoxiaoNeural']:\n", - " w = w.strip()\n", - " OUTPUT_FILE = f\"{w}-{VOICE.replace('YunxiNeural', 'male').replace('XiaoxiaoNeural', 'female').lower()}.mp3\"\n", - " communicate = edge_tts.Communicate(w, VOICE)\n", - " await communicate.save(OUTPUT_FILE) \n", - "\n", - "print(\"Files created!\") " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "09d5ab47-5807-4ded-a8b9-45277831d425", - "metadata": {}, - "outputs": [], - "source": [ - "# VOICE = \"en-US-GuyNeural\" # Male\n", - "# VOICE = \"en-US-AnaNeural\" # Female\n", - "# VOICE = \"en-US-AndrewNeural\" # Male\n", - "# VOICE = \"en-US-AriaNeural\" # Female\n", - "# VOICE = \"en-US-AvaNeural\" # Female\n", - "# VOICE = \"en-US-BrianNeural\" # Male\n", - "# VOICE = \"en-US-ChristopherNeural\" # Male\n", - "# VOICE = \"en-US-EmmaNeural\" # Female\n", - "# VOICE = \"en-US-EricNeural\" # Male\n", - "# VOICE = \"en-US-GuyNeural\" # Male\n", - "# VOICE = \"en-US-JennyNeural\" # Female\n", - "# VOICE = \"en-US-MichelleNeural\" # Female\n", - "# VOICE = \"en-US-RogerNeural\" # Male\n", - "# VOICE = \"en-US-SteffanNeural\" # Male\n", - "# VOICE = \"en-GB-LibbyNeural\" # Female\n", - "# VOICE = \"en-GB-MaisieNeural\" # Female\n", - "# VOICE = \"en-GB-RyanNeural\" # Male\n", - "# VOICE = \"en-GB-SoniaNeural\" # Female\n", - "# VOICE = \"en-GB-ThomasNeural\" # Male\n", - "# VOICE = \"en-AU-NatashaNeural\" # Female\n", - "# VOICE = \"en-AU-WilliamNeural\" # Male\n", - "# VOICE = \"en-CA-ClaraNeural\" # Female\n", - "# VOICE = \"en-CA-LiamNeural\" # Male\n" + "for word in words.strip().split(','):\n", + " print(word)\n", + " for i, voice in enumerate(voices):\n", + " w = word.strip().lower()\n", + " if len(w) > 0:\n", + " filename = f'../audios/{w}-{regions[i]}-{genders[i]}.mp3'\n", + " await generate_edge_tts_audio(w, filename, voice=voice, verbose=True, overwrite=True, play=True)\n" ] }, { @@ -375,7 +640,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.1" + "version": "3.12.2" } }, "nbformat": 4, diff --git a/1000-hours/public/videos/literally.mp4 b/1000-hours/public/videos/literally.mp4 index 86b89aab..b9ddcecd 100644 Binary files a/1000-hours/public/videos/literally.mp4 and b/1000-hours/public/videos/literally.mp4 differ diff --git a/1000-hours/public/videos/worker.mp4 b/1000-hours/public/videos/worker.mp4 new file mode 100644 index 00000000..cdcf725c Binary files /dev/null and b/1000-hours/public/videos/worker.mp4 differ diff --git a/1000-hours/sounds-of-american-english/1-phonemes.md b/1000-hours/sounds-of-american-english/1-phonemes.md index 3199a085..8421cb4e 100644 --- a/1000-hours/sounds-of-american-english/1-phonemes.md +++ b/1000-hours/sounds-of-american-english/1-phonemes.md @@ -1,4 +1,4 @@ -# 音素与音标 +# 1. 音素与音标 在自然语音中,不可继续分割的组成部分被称为**音素**(*phonemes*)。英语的音素分为**元音**(*vowels*)和**辅音**(*consonants*)。**音标**(*phonetics*)是用来标记音素的符号系统 —— 每个音素都由一个独特的音标符号标记。 @@ -17,13 +17,15 @@ > 《剑桥英语发声词典》官方音标指南(Pronunciation symbols): > > https://dictionary.cambridge.org/help/phonetics.html -## 元音 +虽然我们的教程着重讲解的是 “**美式英语**” 语音,但,为了教学方便,也同时罗列了 “英式英语” 的音素和音标。 + +## 1.1. 元音 - - + + @@ -196,13 +198,18 @@
BritishAmericanBritish (24)American (26)
D.J.
-## 辅音 +> [!Note] +> +> [《剑桥英语发声词典》的官方音标指南](https://dictionary.cambridge.org/help/phonetics.html)里除了 ɚɝː 之外,其它元音的美式英语儿化音都没有罗列,比如, +ɑːrɔːrerɪrʊraɪraʊr。 + +## 1.2. 辅音 - - + + @@ -375,14 +382,18 @@
BritishAmericanBritish (26)American (27)
D.J.
-## 外来音素 +> [!Note] +> +> [《剑桥英语发声词典》的官方音标指南](https://dictionary.cambridge.org/help/phonetics.html)里没有罗列 trdr。 + +## 1.3. 外来音素 | 音素/音标 | 例词 | | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | ɒ̃ | croiss**ant** ˈkwɑ.sɒ̃ŋ | | x | lo**ch** lɒx | -## 其他符号 +## 1.4. 其他符号 | 符号 | 例词 | | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -390,7 +401,7 @@ | ˈ | surprise sɚˈpraɪz, sə- | | ˌ | retell ˌriːˈtel | -## 自定义补充符号 +## 1.5. 自定义补充符号 | 符号 | 含义 | | ----------------------------------- | ------------------------------------------------------------ | @@ -406,3 +417,7 @@ [^1]: 现在几乎所有词典都声称自己采用国际音标(IPA),但它们无一例外,都是国际音标的一个 “**自定义子集**”。 [^2]: 音标的语音文件来自剑桥官方网站;例词的语音文件部分使用 [Microsoft Edge TTS](https://github.com/rany2/edge-tts) 生成,声音角色选择分别是:*en-GB-ThomasNeural*,*en-GB-MaisieNeural*,*en-US-RogerNeural*,和 *en-US-JennyNeural* + + diff --git a/1000-hours/sounds-of-american-english/2-articulators.md b/1000-hours/sounds-of-american-english/2-articulators.md new file mode 100644 index 00000000..8c936e41 --- /dev/null +++ b/1000-hours/sounds-of-american-english/2-articulators.md @@ -0,0 +1,51 @@ +# 发声器官 + +尽管说着不同的语言,人类的大脑构造和发声器官(articulators)构造却都是一样的。也正因为如此,所有的人类幼崽都具备习得地球上任何一种语言,甚至同时习得多种语言的潜能 —— 这其实还真是一个颇有些惊人却又常常被忽视甚至轻视的事实。 + +**说话**对大脑来说是一项异常复杂的活动,它大约总计需要协调差不多 100 块左右的肌肉配合着呼吸才能发出一个音素的声音[^1],从而形成我们说出来的词汇和句子。 + + + +> Brain signals precisely coordinate nearly 100 muscles to move the lips, jaw, tongue, and larynx, shaping our breath into sounds that form our words and sentences. + +再详细一点,我们说话的时候动用的器官实际上很多,包括但不限于:下巴(*lower jaw*)、嘴唇(*lips*)、牙齿(*teeth*)、龈脊(*alveolar ridge*)、舌尖(*tongue tip*)、舌背(*tongue roof*)、舌尾(*back of tongue*)、软腭(*soft palate*)、咽(*pharynx*)、喉(*larynx*)、声带(*vocal cords*)等等。 + +![Speech Tract (zh-CN)](/images/articulators-cn.svg) + +另外一个重要的方面是呼吸(*breathe*)—— 也就是说,肺也可以算作是发声器官 —— 呼吸不仅影响声音,也影响节奏;因为换气的必要,自然语流中总是存在停顿(*pause*)。 + +以下的 X 光视频展示了一个歌手在演唱歌曲时发声器官的活动情况[^2]: + + + +某种意义上,“说话” 其实是 “**低配版唱歌**”,相对要求低一些…… 以下是朗读一些单词的时候发声器官活动情况的 3D 展示[^3]: + + + +“说外语”,本质上来看,就是 “**以另一种方式说话**” —— 也就是说,那么多的器官要协调在一起做之前可能完全不熟悉的动作,难度可想而知。 + +即便是让单一器官做不一样的动作也并非易事。 + +比如,你可以试试舌头。练一下就知道了,有意识地控制舌头是相当困难的。虽然我们的舌头事实上很灵活,几乎可以与我们的手相媲美,可问题在于,它处于一个我们用眼睛观察不到的部位 —— 如果没看过 X 光视频或者 3D 展示,我们可能都不知道自己的舌头究竟是怎样的形状 —— 学也好练也罢,相对于手多出了一整个维度的困难。 + +另外,说辅音的时候,舌尖的起始位置也很重要。同样一个基础音素,在不同的语言里,舌尖的起始位置有细微的差别 —— 量化来看,可能只不过是几毫米的距离差别,但重新定位却相当耗时费力。以下展示的是英文中舌尖最常用的 4 个位置: + +![articulator-tongue-tip-positions](/images/articulator-tongue-tip-positions.svg) + +以下表格中舌尖起始位置和辅音的对应会在随后的章节中进一步讲解: + +| Positions of tongue tip | Consonants | +| :---------------------: | :---------------------------------------------- | +| ① | θ, ð | +| ② | s, z | +| ③ | t, d, l, ʃ, ʒ, , , tr, dr | +| ④ | r | + + +[^1]: https://www.youtube.com/watch?v=YHFx6O5x5Hw +[^2]: https://www.youtube.com/watch?v=2N5q85G3ydk +[^3]: https://www.youtube.com/watch?v=wYwk07QM4rc —— 这是 [Speech Graphics](https://www.speech-graphics.com) 为 [Saundz app](https://soundz.pro/)([iOS](https://apps.apple.com/us/app/soundz/id6448163324)/Android 已无可用链接)开发的视频展示片段。 + +再比如,控制唇形也很难,虽然嘴唇通过照镜子是可以看到的。有两个元音,被称作 “圆元音”(*round vowels*)—— ɔu,需要把嘴唇略微缩作圆形,并且 u 还得嘴唇略微凸出…… 这好像并不难,可想要真正熟练,并且永远不出错,就没那么简单了。 + +![vowels-mouth-ɔ-u](/images/vowels-mouth-ɔ-u.svg) diff --git a/1000-hours/sounds-of-american-english/3-details.md b/1000-hours/sounds-of-american-english/3-details.md new file mode 100644 index 00000000..f8bf61d3 --- /dev/null +++ b/1000-hours/sounds-of-american-english/3-details.md @@ -0,0 +1,17 @@ +# 3. 音素详解 + +理论上来讲,把每个音素读准本身其实并不难;更何况每种语言都一样,从音素的数量上来看并不是很多,比如英语,总计就那么 50 个左右而已…… + +> 本教程中罗列基本音标数量为: +> * 英式英语(总计 50 个) +> * 元音 24 个 +> * 辅音 26 个 +> * 美式英语(总计 53 个) +> * 元音 26 个 +> * 辅音 27 个 + +主要的难点来自于两个方面。 + +首先是在连贯的自然语音中,几乎每个音素都有这样那样的变化。于是,我们只能通过 “**反复**”,反复阅读材料,反复练习,反复自我纠正,并且还要对种种细节谙熟于心,最终能将那些起初看起来极为繁杂的知识点逐一突破而后熟练且连贯地使用。 + +更大的困难来自于我们的大脑机制。随着年龄的增加,大脑会过滤母语中用不到的声音,以便提高语音识别的效率 —— 也恰恰是这一点造成了绝大多数成年人学外语的最大障碍。有些声音我们听不到、听不清楚,有些声音听到了却无法分辨,有些声音被我们自己在不知不觉中替换成了另外的样子…… 然而,这并不是什么无解的困境,因为我们的大脑 “**可塑性**” 极强 —— 并且还是 “终身可塑性极强”。核心关键在于,练习的时候要做到 “注意力集中”,不仅如此,还要做到 “**长时间注意力集中**”,只有这样才能突破。 diff --git a/1000-hours/sounds-of-american-english/3.1-vowels.md b/1000-hours/sounds-of-american-english/3.1-vowels.md new file mode 100644 index 00000000..98bad229 --- /dev/null +++ b/1000-hours/sounds-of-american-english/3.1-vowels.md @@ -0,0 +1,32 @@ +# 3.1 元音(Vowels) + +英文总计 **6** 个基础元音,分别是 ɑɪueɔə、 —— 这 6 个短元音就好像是 “根” 一样。所有元音要么是它们略有变化的长短版本,即,长元音(美式英语有半长元音);要么是它们的组合版本,即,双元音或者三元音。 + +| 基础元音 | 短元音 | 半长元音 | 长元音 | 儿化音 | 组合音 | +| -------- | ------ | -------- | ------ | ------ | ------------------------------------- | +| ɑ | ʌ | | ɑː | ɑːr | , , aʊə/aʊr | +| i | ɪ | i | | ɪr | , , ɔɪ, ɪə/ɪr, aɪə/aɪr | +| u | ʊ | u | | ʊr | ʊə/ʊr, , əʊ/oʊ, aʊə/aʊr | +| e | e | æ | | er | eəer, ʊə/ʊr, aɪə/aɪr, aʊə/aʊr | +| ɔ | ɒ | | ɔː | ɔːr | ɔɪ | +| ə | ə | | ɜː | ɚ/ɝː | aʊəaʊr, ɪə/ɪr, aɪə/aɪr, ʊə/ʊr, eə/er | + +元音发声时,气流从肺部通过声门冲击**声带**,使其均匀**振动**,而后通过起着共鸣器作用的口腔,无阻力地呼出。 + +生成不同元音的主要器官之一是**嘴唇**,这也是婴幼儿在学说话时所能观察到的唯一发声器官。张嘴的另外一个器官是**下巴**,下巴拉开,口型变大。 + +以下是 **6** 个基础元音发声时的**口型**(嘴唇构成的形状): + +![Vowels mouth shape](/images/vowels-mouth-shape.svg) + +当然,除了口型之外,影响元音发声的器官还有**舌面**的位置、**软腭**的动作 —— 影响口腔内气流共振的空间 —— 不过,由于人类语言的相通属性,人们在这些基础元音的发声上基本都没有任何困难。 + +说英文的时候,需要格外注意的是元音的**长短**。英文**音节**的发声总体上倾向于比其它语言更长,因为 20 多个元音中只有 6 个是**短**的,与之相对的,还有将近 3 倍的数量是相对更**长**的元音(半长元音、长元音、儿化音、双元音、三元音)。这是一个相当显著的差异 —— 尤其在与亚洲语言相比的时候尤为明显,因为在大多数亚洲语言中元音(可能被称为韵母、母音)总是等长的,没有长短之分。 + +很多语音教程使用 “舌位图” 作为讲解元音的工具[^1]…… + +![tongue-positions-of-vowels](/images/tongue-positions-of-vowels.svg) + +虽然从语音学的角度来看,舌身位置很重要 —— 因为舌身的位置决定口腔内气流共振空间的大小,进而可以配合不同的唇形发出不同的元音 —— 但是, “控制舌身位置” 对绝大多数人来说并不现实 —— 你试试就知道了。所以,在我们的教程里,并使用这种舌位图作为讲解工具。 + +[^1]: Figure adapted from *FUNDAMENTALS OF PHONETICS: A practical guide for students* (5th Edition), by Larry H. Small, 2019. Page 55 \ No newline at end of file diff --git a/1000-hours/sounds-of-american-english/3.1.1-ə.md b/1000-hours/sounds-of-american-english/3.1.1-ə.md new file mode 100644 index 00000000..cf38ded8 --- /dev/null +++ b/1000-hours/sounds-of-american-english/3.1.1-ə.md @@ -0,0 +1,141 @@ +# 3.1.1. ə/ɚ/ɝː + +ə 这个基础元音,在英语中最为普遍。在美式英语中,也相对特殊,因为它的长短两个版本都常常带着儿化音,所以值得第一个详细讲解。 + +## 3.1.1.1. 示例 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BritishAmerican
D.J.例词(Example)IPA例词(Example)
əabout əˈbaʊtəabout əˈbaʊt
ɚworker ˈwɝː.kɚ
ɜːworker ˈwɜː.kəɝːworker ˈwɝː.kɚ
+ +## 3.1.1.2 央元音 ə + +在美式英语中,ə 有个专门的名称,叫做 “央元音”(*schwa*)。 + +> 在连贯的自然语音中,很多非重音音节的元音,都有被简化成 ə 的倾向,尤其是 ɪ。比如,*individual*, ˌɪndəˈvɪdʒuəl,实际上会被读作 ˌɪndəˈvɪdʒəʷəl —— u 也变成了 ə,而后 uə 之间有个加音 ʷ…… 事实上,现在已经有很多词典干脆直接标注成了后者。 + +在非重音音节上的 ə 是不可能带有儿化音的 —— 这一点要格外注意。很多人会矫枉过正,任何时候都把 ə 读成 ɚ…… 比如,有些人可能会把 *focus* ˈfoʊkəs 错读成 ˈfoʊkɚs。 + +## 3.1.1.3 儿化音 + +短元音 ɚ 和长元音 ɝː 这两个儿化音,有两种发声方式,一种是凭直觉卷起舌尖(无论是前卷还是后卷,都被称作 *Retroflex R*),这也是绝大多数初学者发这个音的唯一选择。 + +由于这个音发声时的舌头动作是别人看不见的,所以,人们在学这个发音的时候,无法猜到第二种方式(被称作 *Bunched R*):舌尾部分抬起来,略微后缩,使舌的两侧接触到后牙。舌尾的中心部分较低,空气通过这个凹槽产生声音。 + +![articulator-tongue-tip-ɚ](/images/articulator-tongue-tip-ɚ.svg) + +以下是另外一个角度的图示[^1]: + +![retroflex-bunched-r](/images/retroflex-bunched-r.svg) + +以下的视频更为直观,*worker* ˈwɝː.kɚˈwɜː.kə 这个词的长短两个版本的儿化音都是用 *Bunched R* 读出来的[^2]: + + + +事实上,其他的儿化音也都可以用这种方式发声。不妨用这种方式重新试试 *card* kɑːrd, *mark* mɑːrk;再试试 *door* dɔːr, *short* ʃɔːrt, *poor* pʊr, *your* jʊr…… 试过之后,再进行比较,你会发现更多的时候,第二种方式比第一种方式更方便。 + +在美式英语中,绝大多数人都使用第二种方式(*Bunched R*)发出儿化音。即便是使用第一种方式(*Retroflex R*),舌尖无论是前卷还是后卷,都一样,绝不会贴到龈脊上。 + +另外,辅音 ʃ/ʒtʃ/dʒ 在发音的时候,舌尾也是同样的位置。 + +## 3.1.1.4 拼写 + +### ə + +* **a** + * about əˈbaʊt + * banana bəˈnæn.ə + * sofa ˈsoʊ.fə +* **e** + * open ˈoʊ.pən + * problem ˈprɑː.bləm + * synthesis ˈsɪn.θə.sɪs +* **i** + * animal ˈæn.ɪ.məl + * president ˈprez.ɪ.dənt + * pupil ˈpjuː.pəl +* **o** + * bacon ˈbeɪ.kən + * lesson ˈles.ən + * pilot ˈpaɪ.lət +* **u** + * circus ˈsɝː.kəs + * medium ˈmiː.di.əm + * support səˈpɔːrt +* **ou** + * courageous kəˈreɪ.dʒəs + * famous ˈfeɪ.məs + * humorous ˈhjuː.mə.rəs + +### ɚ + +* **er** + * better ˈbet̬.ɚ + * butter ˈbʌt̬.ɚ + * teacher ˈtiː.tʃɚ +* **or** + * actor ˈæk.tɚ + * doctor ˈdɑːk.tɚ + * editor ˈed.ɪ.t̬ɚ +* **ar** + * beggar ˈbeɡ.ɚ + * burglar ˈbɝː.ɡlɚ + * collar ˈkɑː.lɚ +* **ure** + * culture ˈkʌl.tʃɚ + * figure ˈfɪɡ.jɚ + * pressure ˈpreʃ.ɚ + +### ɝː + +* **er** + * her hɝː + * term tɝːm + * clerk klɝːk +* **ear** + * earn ɝːn + * earth ɝːθ + * heard hɝːd +* **ir** + * bird bɝːd + * first ˈfɝːst + * stir stɝː +* **ur** + * burn bɝːn + * nurse nɝːs + * turn tɝːn +* **or** + * word wɝːd + * world wɝːld + * worse wɝːs + +[^1]: 该图示来自 https://globalspeechtherapy.com/how-to-teach-the-r-sound/ +[^2]: 这个视频片段,截取自一个收费软件 [The Phonetics 3D](http://www.thephonetics.com/),只有 [iOS](https://apps.apple.com/us/app/the-phonetics-3d/id841485989) 版本。 \ No newline at end of file