diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..569e4399b040ff895700a70486a51350ee697dfa Binary files /dev/null and b/.DS_Store differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..92ae36e685addf293e83c96257dd4236a355564a --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2021 ntt123 + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md index 884096a2dc076892784ebb486c13c4456f0eebba..3c6d41332c7fde898da2f4dfcfef1d8253fca640 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,116 @@ ---- -title: Tts -emoji: 🔥 -colorFrom: green -colorTo: pink -sdk: gradio -sdk_version: 3.18.0 -app_file: app.py -pinned: false ---- - -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +A Vietnamese TTS +================ + +Duration model + Acoustic model + HiFiGAN vocoder for vietnamese text-to-speech application. + +Online demo at https://huggingface.co/spaces/ntt123/vietTTS. + +A synthesized audio clip: [clip.wav](assets/infore/clip.wav). A colab notebook: [notebook](https://colab.research.google.com/drive/1oczrWOQOr1Y_qLdgis1twSlNZlfPVXoY?usp=sharing). + + +🔔Checkout the experimental `multi-speaker` branch (`git checkout multi-speaker`) for multi-speaker support.🔔 + +Install +------- + + +```sh +git clone https://github.com/NTT123/vietTTS.git +cd vietTTS +pip3 install -e . +``` + + +Quick start using pretrained models +---------------------------------- +```sh +bash ./scripts/quick_start.sh +``` + + +Download InfoRe dataset +----------------------- + +```sh +python ./scripts/download_aligned_infore_dataset.py +``` + +**Note**: this is a denoised and aligned version of the original dataset which is donated by the InfoRe Technology company (see [here](https://www.facebook.com/groups/j2team.community/permalink/1010834009248719/)). You can download the original dataset (**InfoRe Technology 1**) at [here](https://github.com/TensorSpeech/TensorFlowASR/blob/main/README.md#vietnamese). + +See `notebooks/denoise_infore_dataset.ipynb` for instructions on how to denoise the dataset. We use the Montreal Forced Aligner (MFA) to align transcript and speech (textgrid files). +See `notebooks/align_text_audio_infore_mfa.ipynb` for instructions on how to create textgrid files. + +Train duration model +-------------------- + +```sh +python -m vietTTS.nat.duration_trainer +``` + + +Train acoustic model +-------------------- +```sh +python -m vietTTS.nat.acoustic_trainer +``` + + + +Train HiFiGAN vocoder +------------- + +We use the original implementation from HiFiGAN authors at https://github.com/jik876/hifi-gan. Use the config file at `assets/hifigan/config.json` to train your model. + +```sh +git clone https://github.com/jik876/hifi-gan.git + +# create dataset in hifi-gan format +ln -sf `pwd`/train_data hifi-gan/data +cd hifi-gan/data +ls -1 *.TextGrid | sed -e 's/\.TextGrid$//' > files.txt +cd .. +head -n 100 data/files.txt > val_files.txt +tail -n +101 data/files.txt > train_files.txt +rm data/files.txt + +# training +python train.py \ + --config ../assets/hifigan/config.json \ + --input_wavs_dir=data \ + --input_training_file=train_files.txt \ + --input_validation_file=val_files.txt +``` + +Finetune on Ground-Truth Aligned melspectrograms: +```sh +cd /path/to/vietTTS # go to vietTTS directory +python -m vietTTS.nat.zero_silence_segments -o train_data # zero all [sil, sp, spn] segments +python -m vietTTS.nat.gta -o /path/to/hifi-gan/ft_dataset # create gta melspectrograms at hifi-gan/ft_dataset directory + +# turn on finetune +cd /path/to/hifi-gan +python train.py \ + --fine_tuning True \ + --config ../assets/hifigan/config.json \ + --input_wavs_dir=data \ + --input_training_file=train_files.txt \ + --input_validation_file=val_files.txt +``` + +Then, use the following command to convert pytorch model to haiku format: +```sh +cd .. +python -m vietTTS.hifigan.convert_torch_model_to_haiku \ + --config-file=assets/hifigan/config.json \ + --checkpoint-file=hifi-gan/cp_hifigan/g_[latest_checkpoint] +``` + +Synthesize speech +----------------- + +```sh +python -m vietTTS.synthesizer \ + --lexicon-file=train_data/lexicon.txt \ + --text="hôm qua em tới trường" \ + --output=clip.wav +``` diff --git a/Untitled.ipynb b/Untitled.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..0fddd6cba96b9a0d3a7c19435c16b265c306cef7 --- /dev/null +++ b/Untitled.ipynb @@ -0,0 +1,24 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "b036f793-1443-4341-932c-d112386937ea", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "name": "" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..a699bc5b3c2e987102ca93e0ee28d601e0a93d02 --- /dev/null +++ b/app.py @@ -0,0 +1,7 @@ +import gradio as gr + +def greet(name): + return "Hello " + name + "!!" + +iface = gr.Interface(fn=greet, inputs="text", outputs="text") +iface.launch() \ No newline at end of file diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8e62f5aee19fc196aa4e012b27cda3b39cbdcb28 Binary files /dev/null and b/assets/.DS_Store differ diff --git a/assets/hifigan/config.json b/assets/hifigan/config.json new file mode 100644 index 0000000000000000000000000000000000000000..d1993343f0d9cfb1f93b7508e0886d69604edc92 --- /dev/null +++ b/assets/hifigan/config.json @@ -0,0 +1,38 @@ +{ + "resblock": "1", + "num_gpus": 0, + "batch_size": 16, + "learning_rate": 0.0002, + "adam_b1": 0.8, + "adam_b2": 0.99, + "lr_decay": 0.999, + "seed": 1234, + + "upsample_rates": [8,8,2,2], + "upsample_kernel_sizes": [16,16,4,4], + "upsample_initial_channel": 512, + "resblock_kernel_sizes": [3,7,11], + "resblock_dilation_sizes": [[1,3,5], [1,3,5], [1,3,5]], + "resblock_initial_channel": 256, + + "segment_size": 8192, + "num_mels": 80, + "num_freq": 1025, + "n_fft": 1024, + "hop_size": 256, + "win_size": 1024, + + "sampling_rate": 16000, + + "fmin": 0, + "fmax": 8000, + "fmax_for_loss": null, + + "num_workers": 4, + + "dist_config": { + "dist_backend": "nccl", + "dist_url": "tcp://localhost:54321", + "world_size": 1 + } +} diff --git a/assets/infore/.DS_Store b/assets/infore/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 Binary files /dev/null and b/assets/infore/.DS_Store differ diff --git a/assets/infore/lexicon.txt b/assets/infore/lexicon.txt new file mode 100644 index 0000000000000000000000000000000000000000..2cc5733c77cf8ae27c29fd5723e60680b7999cb1 --- /dev/null +++ b/assets/infore/lexicon.txt @@ -0,0 +1,7893 @@ +a a +aa a a +abbey a b b e y +abbie a b b i e +abc a b c +abi a b i +ac a c +accent a c c e n t +accord a c c o r d +action a c t i o n +ada a d a +adam a d a m +adams a d a m s +adapter a d a p t e r +adaptor a d a p t o r +add a d d +adenauer a d e n a u e r +adn a d n +adolf a d o l f +ae a e +afghanistan a f g h a n i s t a n +age a g e +agenda a g e n d a +ah a h +ai a i +air a i r +aires a i r e s +airways a i r w a y s +aix a i x +ak a k +akau a k a u +akiko a k i k o +akira a k i r a +akura a k u r a +al a l +ala a l a +aladay a l a d a y +alba a l b a +album a l b u m +albums a l b u m s +ale a l e +alex a l e x +alexandra a l e x a n d r a +alexandre a l e x a n d r e +alexandrov a l e x a n d r o v +alfie a l f i e +alfredo a l f r e d o +alice a l i c e +all a l l +allen a l l e n +allianz a l l i a n z +alo a l o +aloha a l o h a +alpha a l p h a +alsop a l s o p +alternator a l t e r n a t o r +am a m +amazon a m a z o n +american a m e r i c a n +amex a m e x +amidan a m i d a n +amip a m i p +an a n +ana a n a +anaconda a n a c o n d a +anchor a n c h o r +and a n d +anderson a n d e r s o n +andre a n d r e +andrea a n d r e a +andrey a n d r e y +android a n d r o i d +andy a n d y +ang a n g +angela a n g e l a +angeles a n g e l e s +angelina a n g e l i n a +angie a n g i e +anh a n h +anna a n n a +annie a n n i e +anthony a n t h o n y +antisense a n t i s e n s e +antoine a n t o i n e +anubis a n u b i s +ao a o +aoki a o k i +aoyagi a o y a g i +apheng a p h e n g +app a p p +apple a p p l e +applications a p p l i c a t i o n s +apt a p t +arabia a r a b i a +arc a r c +arena a r e n a +argentina a r g e n t i n a +arista a r i s t a +armand a r m a n d +arsenal a r s e n a l +arthur a r t h u r +article a r t i c l e +asean a s e a n +ashley a s h l e y +asia a s i a +aspirin a s p i r i n +astro a s t r o +at a t +atm a t m +atp a t p +atsuji a t s u j i +au a u +auckland a u c k l a n d +audi a u d i +audio a u d i o +audrey a u d r e y +augustus a u g u s t u s +australia a u s t r a l i a +auto a u t o +avenue a v e n u e +avery a v e r y +awards a w a r d s +axit a x i t +aybar a y b a r +azora a z o r a +b b +ba b a +baby b a b y +bac b a c +baccarat b a c c a r a t +back b a c k +backdrop b a c k d r o p +baghdad b a g h d a d +baghdadi b a g h d a d i +bahamas b a h a m a s +bahrain b a h r a i n +bai b a i +bailini b a i l i n i +baines b a i n e s +bale b a l e +bali b a l i +ballad b a l l a d +ballet b a l l e t +baltimore b a l t i m o r e +ban b a n +bancha b a n c h a +bang b a n g +bangkok b a n g k o k +banh b a n h +banks b a n k s +bao b a o +bar b a r +barca b a r c a +barcelona b a r c e l o n a +barrack b a r r a c k +bart b a r t +base b a s e +basel b a s e l +baskerville b a s k e r v i l l e +basque b a s q u e +batista b a t i s t a +battery b a t t e r y +battle b a t t l e +bavaria b a v a r i a +bay b a y +bazan b a z a n +be b e +beach b e a c h +bear b e a r +beatles b e a t l e s +becca b e c c a +becker b e c k e r +beckham b e c k h a m +becky b e c k y +beef b e e f +beefsteak b e e f s t e a k +beer b e e r +begin b e g i n +begoro b e g o r o +beige b e i g e +belgrade b e l g r a d e +bell b e l l +bella b e l l a +bellamy b e l l a m y +ben b e n +beng b e n g +bengal b e n g a l +benitez b e n i t e z +benjamin b e n j a m i n +bentley b e n t l e y +benz b e n z +beo b e o +berle b e r l e +berlin b e r l i n +bernabeu b e r n a b e u +bernadette b e r n a d e t t e +bernd b e r n d +best b e s t +beta b e t a +beverly b e v e r l y +bi b i +bia b i a +bieber b i e b e r +big b i g +bilbo b i l b o +bill b i l l +bin b i n +bing b i n g +bingley b i n g l e y +binh b i n h +birmingham b i r m i n g h a m +bismol b i s m o l +biên b i ê n +biêng b i ê n g +biếc b i ế c +biếm b i ế m +biến b i ế n +biếng b i ế n g +biết b i ế t +biếu b i ế u +biền b i ề n +biển b i ể n +biểu b i ể u +biện b i ệ n +biệt b i ệ t +black b l a c k +blackberry b l a c k b e r r y +blade b l a d e +blair b l a i r +blue b l u e +blues b l u e s +bluetooth b l u e t o o t h +bmt b m t +bmw b m w +bo b o +boa b o a +bobby b o b b y +bodega b o d e g a +boeing b o e i n g +bollywood b o l l y w o o d +bom b o m +bon b o n +bonaparte b o n a p a r t e +bond b o n d +bong b o n g +bonus b o n u s +boong b o o n g +boots b o o t s +bordeaux b o r d e a u x +borgia b o r g i a +boris b o r i s +bose b o s e +bosnia b o s n i a +boston b o s t o n +botanical b o t a n i c a l +botton b o t t o n +boulevard b o u l e v a r d +bourbon b o u r b o n +bowling b o w l i n g +box b o x +boy b o y +bp b p +brad b r a d +braga b r a g a +brand b r a n d +brandy b r a n d y +brasil b r a s i l +brazil b r a z i l +break b r e a k +bremen b r e m e n +brest b r e s t +bridge b r i d g e +brisbane b r i s b a n e +british b r i t i s h +britney b r i t n e y +briton b r i t o n +broadway b r o a d w a y +brom b r o m +bronx b r o n x +brooklyn b r o o k l y n +brown b r o w n +browse b r o w s e +browsing b r o w s i n g +bruni b r u n i +brute b r u t e +bruyne b r u y n e +bruzon b r u z o n +bryant b r y a n t +bu b u +budapest b u d a p e s t +buenos b u e n o s +buler b u l e r +bulgaria b u l g a r i a +bullets b u l l e t s +bum b u m +bun b u n +bung b u n g +bunga b u n g a +burger b u r g e r +burke b u r k e +bus b u s +bush b u s h +butch b u t c h +buôn b u ô n +buông b u ô n g +buýt b u ý t +buốt b u ố t +buồm b u ồ m +buồn b u ồ n +buồng b u ồ n g +buổi b u ổ i +buộc b u ộ c +by b y +bye b y e +bà b à +bài b à i +bàn b à n +bàng b à n g +bành b à n h +bào b à o +bàu b à u +bày b à y +bá b á +bác b á c +bách b á c h +bái b á i +bám b á m +bán b á n +báng b á n g +bánh b á n h +báo b á o +bát b á t +báu b á u +báy b á y +bân b â n +bâng b â n g +bâu b â u +bây b â y +bã b ã +bãi b ã i +bão b ã o +bè b è +bèn b è n +bèo b è o +bé b é +bén b é n +béng b é n g +béo b é o +bép b é p +bét b é t +bê b ê +bên b ê n +bênh b ê n h +bêu b ê u +bì b ì +bìa b ì a +bìm b ì m +bình b ì n h +bìu b ì u +bí b í +bích b í c h +bính b í n h +bít b í t +bíu b í u +bò b ò +bòn b ò n +bòng b ò n g +bó b ó +bóc b ó c +bói b ó i +bón b ó n +bóng b ó n g +bóp b ó p +bót b ó t +bô b ô +bôi b ô i +bôm b ô m +bôn b ô n +bông b ô n g +bõ b õ +bõm b õ m +bõng b õ n g +bù b ù +bùa b ù a +bùi b ù i +bùn b ù n +bùng b ù n g +bú b ú +búa b ú a +búi b ú i +bún b ú n +búng b ú n g +búp b ú p +bút b ú t +băm b ă m +băn b ă n +băng b ă n g +bĩ b ĩ +bĩnh b ĩ n h +bĩu b ĩ u +bũm b ũ m +bơ b ơ +bơi b ơ i +bơm b ơ m +bơn b ơ n +bưng b ư n g +bưu b ư u +bươi b ư ơ i +bươm b ư ơ m +bươn b ư ơ n +bươu b ư ơ u +bước b ư ớ c +bướm b ư ớ m +bướng b ư ớ n g +bướu b ư ớ u +bườm b ư ờ m +bưởi b ư ở i +bạ b ạ +bạc b ạ c +bạch b ạ c h +bại b ạ i +bạn b ạ n +bạnh b ạ n h +bạo b ạ o +bạt b ạ t +bả b ả +bản b ả n +bảng b ả n g +bảnh b ả n h +bảnlà b ả n l à +bảo b ả o +bảy b ả y +bấc b ấ c +bấm b ấ m +bấn b ấ n +bấp b ấ p +bất b ấ t +bấu b ấ u +bấy b ấ y +bầm b ầ m +bần b ầ n +bầu b ầ u +bầy b ầ y +bẩm b ẩ m +bẩn b ẩ n +bẩy b ẩ y +bẫm b ẫ m +bẫy b ẫ y +bậc b ậ c +bận b ậ n +bập b ậ p +bật b ậ t +bậy b ậ y +bắc b ắ c +bắn b ắ n +bắng b ắ n g +bắp b ắ p +bắt b ắ t +bằm b ằ m +bằng b ằ n g +bẳng b ẳ n g +bẵng b ẵ n g +bặm b ặ m +bặt b ặ t +bẹ b ẹ +bẹn b ẹ n +bẹo b ẹ o +bẹp b ẹ p +bẹt b ẹ t +bẻ b ẻ +bẽ b ẽ +bẽn b ẽ n +bẽo b ẽ o +bế b ế +bến b ế n +bếp b ế p +bết b ế t +bề b ề +bền b ề n +bềnh b ề n h +bều b ề u +bể b ể +bệ b ệ +bệch b ệ c h +bện b ệ n +bệnh b ệ n h +bệt b ệ t +bệu b ệ u +bỉ b ỉ +bỉm b ỉ m +bỉnh b ỉ n h +bỉu b ỉ u +bị b ị +bịa b ị a +bịch b ị c h +bịn b ị n +bịp b ị p +bịt b ị t +bịu b ị u +bọ b ọ +bọc b ọ c +bọn b ọ n +bọng b ọ n g +bọp b ọ p +bọt b ọ t +bỏ b ỏ +bỏng b ỏ n g +bố b ố +bốc b ố c +bối b ố i +bốn b ố n +bống b ố n g +bốp b ố p +bốt b ố t +bồ b ồ +bồi b ồ i +bồn b ồ n +bồng b ồ n g +bổ b ổ +bổn b ổ n +bổng b ổ n g +bỗ b ỗ +bỗng b ỗ n g +bộ b ộ +bộc b ộ c +bội b ộ i +bộn b ộ n +bộng b ộ n g +bộp b ộ p +bột b ộ t +bới b ớ i +bớt b ớ t +bờ b ờ +bời b ờ i +bờm b ờ m +bở b ở +bởi b ở i +bỡ b ỡ +bợ b ợ +bợm b ợ m +bợn b ợ n +bụ b ụ +bụa b ụ a +bục b ụ c +bụi b ụ i +bụng b ụ n g +bụp b ụ p +bụt b ụ t +bủa b ủ a +bủm b ủ m +bủn b ủ n +bức b ứ c +bứng b ứ n g +bứt b ứ t +bừa b ừ a +bừng b ừ n g +bửa b ử a +bửu b ử u +bữa b ữ a +bự b ự +bực b ự c +c c +ca c a +cab c a b +cabanas c a b a n a s +cabin c a b i n +cache c a c h e +caesar c a e s a r +cafe c a f e +cafein c a f e i n +café c a f é +cai c a i +calamine c a l a m i n e +calcium c a l c i u m +california c a l i f o r n i a +callas c a l l a s +calo c a l o +cam c a m +cambridge c a m b r i d g e +camel c a m e l +camera c a m e r a +cameron c a m e r o n +cameroon c a m e r o o n +campuchia c a m p u c h i a +campus c a m p u s +camry c a m r y +can c a n +canada c a n a d a +canadian c a n a d i a n +cang c a n g +canh c a n h +cannes c a n n e s +canon c a n o n +cantona c a n t o n a +canxi c a n x i +canyon c a n y o n +cao c a o +cap c a p +capello c a p e l l o +cara c a r a +carabao c a r a b a o +carbin c a r b i n +card c a r d +cardiff c a r d i f f +care c a r e +carey c a r e y +cari c a r i +carl c a r l +carla c a r l a +carlee c a r l e e +caro c a r o +caroline c a r o l i n e +carone c a r o n e +carrick c a r r i c k +carrier c a r r i e r +carson c a r s o n +carter c a r t e r +casa c a s a +casette c a s e t t e +casey c a s e y +cash c a s h +casillas c a s i l l a s +casino c a s i n o +casinos c a s i n o s +casio c a s i o +cass c a s s +cassette c a s s e t t e +cassidy c a s s i d y +castellazzi c a s t e l l a z z i +cat c a t +catalan c a t a l a n +catalogue c a t a l o g u e +caterpillar c a t e r p i l l a r +catherine c a t h e r i n e +catwalk c a t w a l k +cau c a u +cavalier c a v a l i e r +cave c a v e +cavi c a v i +cay c a y +cayman c a y m a n +cc c c +cd c d +celeron c e l e r o n +cello c e l l o +cells c e l l s +celtic c e l t i c +cent c e n t +centre c e n t r e +cesare c e s a r e +cha c h a +chad c h a d +chaebol c h a e b o l +chai c h a i +challenge c h a l l e n g e +champa c h a m p a +champagne c h a m p a g n e +champions c h a m p i o n s +chan c h a n +chanda c h a n d a +chanel c h a n e l +chang c h a n g +change c h a n g e +chanh c h a n h +chao c h a o +chaplin c h a p l i n +charles c h a r l e s +charlie c h a r l i e +charlize c h a r l i z e +charlotte c h a r l o t t e +charlton c h a r l t o n +chat c h a t +chau c h a u +chavez c h a v e z +chay c h a y +che c h e +check c h e c k +cheeseburger c h e e s e b u r g e r +chelsea c h e l s e a +chem c h e m +chen c h e n +cheng c h e n g +cheo c h e o +chermarn c h e r m a r n +cheryl c h e r y l +chevy c h e v y +chi c h i +chia c h i a +chiang c h i a n g +chiangmai c h i a n g m a i +chicago c h i c a g o +children c h i l d r e n +chim c h i m +china c h i n a +chinatown c h i n a t o w n +chinh c h i n h +chiu c h i u +chiêm c h i ê m +chiên c h i ê n +chiêng c h i ê n g +chiêu c h i ê u +chiếc c h i ế c +chiếm c h i ế m +chiến c h i ế n +chiếng c h i ế n g +chiết c h i ế t +chiếu c h i ế u +chiền c h i ề n +chiều c h i ề u +chiểu c h i ể u +cho c h o +choa c h o a +choang c h o a n g +chocolate c h o c o l a t e +choi c h o i +choice c h o i c e +cholesterol c h o l e s t e r o l +chon c h o n +chong c h o n g +chopper c h o p p e r +choàng c h o à n g +choán c h o á n +choáng c h o á n g +choèn c h o è n +choạc c h o ạ c +choạng c h o ạ n g +choảng c h o ả n g +choắt c h o ắ t +christina c h r i s t i n a +christine c h r i s t i n e +chrome c h r o m e +chrysler c h r y s l e r +chrystal c h r y s t a l +chu c h u +chua c h u a +chui c h u i +chum c h u m +chun c h u n +chung c h u n g +chungcheongnam c h u n g c h e o n g n a m +chuyên c h u y ê n +chuyến c h u y ế n +chuyền c h u y ề n +chuyển c h u y ể n +chuyện c h u y ệ n +chuôi c h u ô i +chuông c h u ô n g +chuẩn c h u ẩ n +chuếnh c h u ế n h +chuốc c h u ố c +chuối c h u ố i +chuốt c h u ố t +chuồi c h u ồ i +chuồn c h u ồ n +chuồng c h u ồ n g +chuỗi c h u ỗ i +chuộc c h u ộ c +chuộng c h u ộ n g +chuột c h u ộ t +chà c h à +chài c h à i +chàm c h à m +chàng c h à n g +chành c h à n h +chào c h à o +chày c h à y +chác c h á c +chái c h á i +chán c h á n +chánh c h á n h +cháo c h á o +chát c h á t +cháu c h á u +cháy c h á y +châm c h â m +chân c h â n +châu c h â u +chã c h ã +chãi c h ã i +chão c h ã o +chè c h è +chèn c h è n +chèo c h è o +ché c h é +chém c h é m +chén c h é n +chéo c h é o +chép c h é p +chét c h é t +chê c h ê +chêm c h ê m +chênh c h ê n h +chì c h ì +chìa c h ì a +chìm c h ì m +chình c h ì n h +chìu c h ì u +chí c h í +chía c h í a +chích c h í c h +chím c h í m +chín c h í n +chính c h í n h +chíp c h í p +chít c h í t +chíu c h í u +chò c h ò +chòi c h ò i +chòm c h ò m +chòng c h ò n g +chó c h ó +chóc c h ó c +chóe c h ó e +chói c h ó i +chóng c h ó n g +chóp c h ó p +chót c h ó t +chôm c h ô m +chôn c h ô n +chông c h ô n g +chù c h ù +chùa c h ù a +chùi c h ù i +chùm c h ù m +chùng c h ù n g +chú c h ú +chúa c h ú a +chúc c h ú c +chúi c h ú i +chúm c h ú m +chúng c h ú n g +chút c h ú t +chăm c h ă m +chăn c h ă n +chăng c h ă n g +chĩ c h ĩ +chĩa c h ĩ a +chĩn c h ĩ n +chĩu c h ĩ u +chũi c h ũ i +chũn c h ũ n +chơ c h ơ +chơi c h ơ i +chư c h ư +chưa c h ư a +chưng c h ư n g +chưýên c h ư ý ê n +chương c h ư ơ n g +chước c h ư ớ c +chướng c h ư ớ n g +chườm c h ư ờ m +chường c h ư ờ n g +chưởng c h ư ở n g +chược c h ư ợ c +chạ c h ạ +chạc c h ạ c +chạch c h ạ c h +chạm c h ạ m +chạn c h ạ n +chạng c h ạ n g +chạnh c h ạ n h +chạo c h ạ o +chạp c h ạ p +chạy c h ạ y +chả c h ả +chải c h ả i +chảnh c h ả n h +chảo c h ả o +chảu c h ả u +chảy c h ả y +chấm c h ấ m +chấn c h ấ n +chấp c h ấ p +chất c h ấ t +chấu c h ấ u +chầm c h ầ m +chần c h ầ n +chầu c h ầ u +chầy c h ầ y +chẩm c h ẩ m +chẩn c h ẩ n +chậm c h ậ m +chập c h ậ p +chật c h ậ t +chậu c h ậ u +chắc c h ắ c +chắm c h ắ m +chắn c h ắ n +chắp c h ắ p +chắt c h ắ t +chằm c h ằ m +chằn c h ằ n +chằng c h ằ n g +chẳng c h ẳ n g +chẵn c h ẵ n +chẵng c h ẵ n g +chặc c h ặ c +chặn c h ặ n +chặng c h ặ n g +chặt c h ặ t +chẹn c h ẹ n +chẹo c h ẹ o +chẹp c h ẹ p +chẻ c h ẻ +chẻm c h ẻ m +chẻo c h ẻ o +chẽ c h ẽ +chẽn c h ẽ n +chế c h ế +chếch c h ế c h +chết c h ế t +chề c h ề +chềnh c h ề n h +chểnh c h ể n h +chệch c h ệ c h +chỉ c h ỉ +chỉn c h ỉ n +chỉnh c h ỉ n h +chị c h ị +chịt c h ị t +chịu c h ị u +chọc c h ọ c +chọe c h ọ e +chọi c h ọ i +chọn c h ọ n +chọt c h ọ t +chỏ c h ỏ +chỏm c h ỏ m +chỏn c h ỏ n +chỏng c h ỏ n g +chốc c h ố c +chối c h ố i +chốn c h ố n +chống c h ố n g +chốt c h ố t +chồi c h ồ i +chồm c h ồ m +chồn c h ồ n +chồng c h ồ n g +chổ c h ổ +chổi c h ổ i +chổm c h ổ m +chổng c h ổ n g +chỗ c h ỗ +chội c h ộ i +chộp c h ộ p +chột c h ộ t +chớ c h ớ +chới c h ớ i +chớm c h ớ m +chớp c h ớ p +chờ c h ờ +chờn c h ờ n +chở c h ở +chởm c h ở m +chợ c h ợ +chợp c h ợ p +chợt c h ợ t +chục c h ụ c +chụm c h ụ m +chụp c h ụ p +chủ c h ủ +chủng c h ủ n g +chứ c h ứ +chứa c h ứ a +chức c h ứ c +chứng c h ứ n g +chừ c h ừ +chừa c h ừ a +chừng c h ừ n g +chử c h ử +chửa c h ử a +chửi c h ử i +chửng c h ử n g +chữ c h ữ +chữa c h ữ a +chững c h ữ n g +chực c h ự c +circus c i r c u s +cisco c i s c o +citroen c i t r o e n +city c i t y +civic c i v i c +claremont c l a r e m o n t +clarinet c l a r i n e t +class c l a s s +classmate c l a s s m a t e +claymore c l a y m o r e +clean c l e a n +clear c l e a r +clement c l e m e n t +click c l i c k +clinton c l i n t o n +clip c l i p +close c l o s e +club c l u b +cluj c l u j +cm c m +co c o +coast c o a s t +coca c o c a +cocacola c o c a c o l a +cocktail c o c k t a i l +code c o d e +coffee c o f f e e +coffman c o f f m a n +coi c o i +cold c o l d +cole c o l e +coleen c o l e e n +coleman c o l e m a n +college c o l l e g e +cologne c o l o g n e +colombia c o l o m b i a +colombo c o l o m b o +com c o m +common c o m m o n +computer c o m p u t e r +computing c o m p u t i n g +con c o n +condom c o n d o m +confirm c o n f i r m +cong c o n g +connect c o n n e c t +connor c o n n o r +console c o n s o l e +contacts c o n t a c t s +container c o n t a i n e r +cookie c o o k i e +cool c o o l +cop c o p +copenhagen c o p e n h a g e n +copy c o p y +corp c o r p +cos c o s +costa c o s t a +cota c o t a +countries c o u n t r i e s +country c o u n t r y +coup c o u p +coupe c o u p e +couper c o u p e r +couture c o u t u r e +cover c o v e r +crack c r a c k +craddock c r a d d o c k +craigie c r a i g i e +cricket c r i c k e t +croatia c r o a t i a +crouch c r o u c h +crowell c r o w e l l +cruise c r u i s e +cruze c r u z e +cry c r y +cs c s +cu c u +cua c u a +cuba c u b a +cullen c u l l e n +cun c u n +cung c u n g +cup c u p +customize c u s t o m i z e +cuôc c u ô c +cuông c u ô n g +cuốc c u ố c +cuối c u ố i +cuốn c u ố n +cuống c u ố n g +cuồn c u ồ n +cuồng c u ồ n g +cuỗm c u ỗ m +cuộc c u ộ c +cuội c u ộ i +cuộn c u ộ n +cx c x +cyrus c y r u s +cà c à +cài c à i +càn c à n +càng c à n g +cành c à n h +cào c à o +càu c à u +cày c à y +cá c á +các c á c +cách c á c h +cái c á i +cám c á m +cán c á n +cáng c á n g +cánh c á n h +cáo c á o +cáp c á p +cát c á t +cáu c á u +cáy c á y +câm c â m +cân c â n +câu c â u +cây c â y +câù c â ù +cãi c ã i +cò c ò +còi c ò i +còm c ò m +còn c ò n +còng c ò n g +có c ó +cóc c ó c +cói c ó i +cóng c ó n g +cóp c ó p +cót c ó t +cô c ô +côca c ô c a +côi c ô i +côla c ô l a +côm c ô m +côn c ô n +công c ô n g +cõi c õ i +cõng c õ n g +cù c ù +cùa c ù a +cùi c ù i +cùm c ù m +cùn c ù n +cùng c ù n g +cú c ú +cúc c ú c +cúi c ú i +cúm c ú m +cún c ú n +cúng c ú n g +cúp c ú p +cút c ú t +căm c ă m +căn c ă n +căng c ă n g +cũ c ũ +cũi c ũ i +cũn c ũ n +cũng c ũ n g +cơ c ơ +cơi c ơ i +cơm c ơ m +cơn c ơ n +cư c ư +cưa c ư a +cưng c ư n g +cưu c ư u +cương c ư ơ n g +cước c ư ớ c +cưới c ư ớ i +cướp c ư ớ p +cười c ư ờ i +cườm c ư ờ m +cường c ư ờ n g +cưỡi c ư ỡ i +cưỡng c ư ỡ n g +cược c ư ợ c +cạc c ạ c +cạch c ạ c h +cạm c ạ m +cạn c ạ n +cạnh c ạ n h +cạo c ạ o +cạp c ạ p +cạu c ạ u +cạy c ạ y +cả c ả +cải c ả i +cảm c ả m +cản c ả n +cảng c ả n g +cảnh c ả n h +cảo c ả o +cảu c ả u +cấm c ấ m +cấn c ấ n +cấp c ấ p +cất c ấ t +cấu c ấ u +cấy c ấ y +cầm c ầ m +cần c ầ n +cầu c ầ u +cầy c ầ y +cẩm c ẩ m +cẩn c ẩ n +cẩu c ẩ u +cẫng c ẫ n g +cận c ậ n +cập c ậ p +cật c ậ t +cậu c ậ u +cậy c ậ y +cắc c ắ c +cắm c ắ m +cắn c ắ n +cắp c ắ p +cắt c ắ t +cằm c ằ m +cằn c ằ n +cẳng c ẳ n g +cặm c ặ m +cặn c ặ n +cặp c ặ p +cọ c ọ +cọc c ọ c +cọn c ọ n +cọng c ọ n g +cọp c ọ p +cọt c ọ t +cỏ c ỏ +cỏi c ỏ i +cỏm c ỏ m +cố c ố +cốc c ố c +cối c ố i +cốm c ố m +cống c ố n g +cốp c ố p +cốt c ố t +cồ c ồ +cồm c ồ m +cồn c ồ n +cồng c ồ n g +cổ c ổ +cổng c ổ n g +cỗ c ỗ +cỗi c ỗ i +cộ c ộ +cộc c ộ c +cội c ộ i +cộm c ộ m +cộng c ộ n g +cộp c ộ p +cột c ộ t +cớ c ớ +cờ c ờ +cời c ờ i +cờn c ờ n +cở c ở +cởi c ở i +cỡ c ỡ +cỡi c ỡ i +cỡn c ỡ n +cợt c ợ t +cụ c ụ +cục c ụ c +cụi c ụ i +cụm c ụ m +cụp c ụ p +cụt c ụ t +củ c ủ +của c ủ a +củanh c ủ a n h +củi c ủ i +củng c ủ n g +cứ c ứ +cứa c ứ a +cứng c ứ n g +cứu c ứ u +cừ c ừ +cừu c ừ u +cử c ử +cửa c ử a +cửi c ử i +cửu c ử u +cữ c ữ +cự c ự +cựa c ự a +cực c ự c +cựu c ự u +d d +da d a +dae d a e +dai d a i +daily d a i l y +daki d a k i +damper d a m p e r +dan d a n +dang d a n g +danh d a n h +danie d a n i e +danielle d a n i e l l e +dante d a n t e +danube d a n u b e +dao d a o +darling d a r l i n g +darvo d a r v o +data d a t a +dave d a v e +david d a v i d +davids d a v i d s +dawn d a w n +day d a y +dc d c +de d e +dean d e a n +dear d e a r +decor d e c o r +defender d e f e n d e r +defense d e f e n s e +del d e l +delete d e l e t e +dell d e l l +delta d e l t a +demarco d e m a r c o +demo d e m o +deo d e o +deposit d e p o s i t +depp d e p p +derby d e r b y +detroit d e t r o i t +device d e v i c e +dhabit d h a b i t +di d i +diablo d i a b l o +diagnostic d i a g n o s t i c +diamond d i a m o n d +diaz d i a z +did d i d +die d i e +diego d i e g o +diesel d i e s e l +dim d i m +diners d i n e r s +dinh d i n h +disable d i s a b l e +disneyland d i s n e y l a n d +diva d i v a +diêm d i ê m +diên d i ê n +diêu d i ê u +diếc d i ế c +diếp d i ế p +diết d i ế t +diếu d i ế u +diều d i ề u +diễm d i ễ m +diễn d i ễ n +diễu d i ễ u +diệc d i ệ c +diệm d i ệ m +diện d i ệ n +diệp d i ệ p +diệt d i ệ t +diệu d i ệ u +dmax d m a x +dna d n a +do d o +doanh d o a n h +dobkin d o b k i n +doc d o c +dock d o c k +dodger d o d g e r +dog d o g +dogs d o g s +doha d o h a +doi d o i +dollar d o l l a r +dom d o m +domenech d o m e n e c h +don d o n +done d o n e +dong d o n g +dongyu d o n g y u +donovan d o n o v a n +dorn d o r n +dorothy d o r o t h y +dot d o t +dover d o v e r +down d o w n +download d o w n l o a d +doãn d o ã n +doạ d o ạ +drama d r a m a +dream d r e a m +drive d r i v e +driver d r i v e r +dslr d s l r +du d u +dua d u a +dubai d u b a i +dudek d u d e k +dukoni d u k o n i +dung d u n g +duy d u y +duyên d u y ê n +duyệt d u y ệ t +duật d u ậ t +duệ d u ệ +duỗi d u ỗ i +dwight d w i g h t +dynamic d y n a m i c +dynamo d y n a m o +dà d à +dài d à i +dàn d à n +dàng d à n g +dành d à n h +dào d à o +dày d à y +dác d á c +dái d á i +dám d á m +dán d á n +dáng d á n g +dáo d á o +dát d á t +dâm d â m +dân d â n +dâng d â n g +dâu d â u +dây d â y +dã d ã +dãi d ã i +dãn d ã n +dãng d ã n g +dãy d ã y +dè d è +dém d é m +dép d é p +dê d ê +dên d ê n +dì d ì +dìm d ì m +dìu d ì u +dí d í +dính d í n h +díp d í p +díu d í u +dò d ò +dòi d ò i +dòm d ò m +dòng d ò n g +dó d ó +dóc d ó c +dóm d ó m +dôi d ô i +dông d ô n g +dõi d õ i +dõng d õ n g +dù d ù +dùi d ù i +dùm d ù m +dùng d ù n g +dúi d ú i +dúm d ú m +dún d ú n +dăm d ă m +dăn d ă n +dăng d ă n g +dĩ d ĩ +dĩa d ĩ a +dĩnh d ĩ n h +dũ d ũ +dũa d ũ a +dũng d ũ n g +dơ d ơ +dơi d ơ i +dơn d ơ n +dư d ư +dưa d ư a +dưng d ư n g +dương d ư ơ n g +dưới d ư ớ i +dường d ư ờ n g +dưỡng d ư ỡ n g +dược d ư ợ c +dượng d ư ợ n g +dượt d ư ợ t +dạ d ạ +dạc d ạ c +dại d ạ i +dạm d ạ m +dạn d ạ n +dạng d ạ n g +dạo d ạ o +dạt d ạ t +dạy d ạ y +dả d ả +dải d ả i +dấm d ấ m +dấn d ấ n +dấp d ấ p +dấu d ấ u +dấy d ấ y +dầm d ầ m +dần d ầ n +dầu d ầ u +dẩn d ẩ n +dẫm d ẫ m +dẫn d ẫ n +dẫu d ẫ u +dẫy d ẫ y +dậm d ậ m +dập d ậ p +dật d ậ t +dậu d ậ u +dậy d ậ y +dắt d ắ t +dằn d ằ n +dằng d ằ n g +dẳng d ẳ n g +dặc d ặ c +dặm d ặ m +dặn d ặ n +dặt d ặ t +dẹp d ẹ p +dẹt d ẹ t +dẻ d ẻ +dẻo d ẻ o +dẽ d ẽ +dế d ế +dề d ề +dền d ề n +dềnh d ề n h +dễ d ễ +dệt d ệ t +dị d ị +dịch d ị c h +dịp d ị p +dịu d ị u +dọa d ọ a +dọc d ọ c +dọn d ọ n +dỏm d ỏ m +dỏng d ỏ n g +dốc d ố c +dối d ố i +dốt d ố t +dồi d ồ i +dồn d ồ n +dỗ d ỗ +dỗi d ỗ i +dội d ộ i +dột d ộ t +dớ d ớ +dớn d ớ n +dời d ờ i +dờn d ờ n +dở d ở +dởm d ở m +dỡ d ỡ +dợ d ợ +dụ d ụ +dục d ụ c +dụi d ụ i +dụm d ụ m +dụng d ụ n g +dụt d ụ t +dứa d ứ a +dứt d ứ t +dừa d ừ a +dừng d ừ n g +dử d ử +dửng d ử n g +dữ d ữ +dự d ự +dựa d ự a +dực d ự c +dựng d ự n g +e e +eco e c o +economic e c o n o m i c +economy e c o n o m y +eddie e d d i e +edinburgh e d i n b u r g h +edith e d i t h +edward e d w a r d +effective e f f e c t i v e +eh e h +eisenhower e i s e n h o w e r +el e l +elias e l i a s +elite e l i t e +elizabeth e l i z a b e t h +ellery e l l e r y +elly e l l y +elmham e l m h a m +elton e l t o n +em e m +email e m a i l +emm e m m +emma e m m a +emu e m u +en e n +enclave e n c l a v e +encrypt e n c r y p t +ended e n d e d +endorphin e n d o r p h i n +enemies e n e m i e s +ensure e n s u r e +enzo e n z o +eo e o +eric e r i c +erik e r i k +es e s +escape e s c a p e +essentially e s s e n t i a l l y +esteben e s t e b e n +estee e s t e e +esteem e s t e e m +estella e s t e l l a +ethernet e t h e r n e t +eto e t o +euro e u r o +europass e u r o p a s s +eurostar e u r o s t a r +eva e v a +evan e v a n +evans e v a n s +eve e v e +event e v e n t +ever e v e r +evn e v n +evolution e v o l u t i o n +excel e x c e l +exchange e x c h a n g e +exciter e x c i t e r +export e x p o r t +exporting e x p o r t i n g +express e x p r e s s +f f +fa f a +facebook f a c e b o o k +facts f a c t s +fair f a i r +fairmont f a i r m o n t +fake f a k e +fan f a n +fans f a n s +fansipan f a n s i p a n +fantom f a n t o m +fashion f a s h i o n +fast f a s t +fax f a x +fe f e +federer f e d e r e r +feeling f e e l i n g +feet f e e t +felt f e l t +fenn f e n n +fenton f e n t o n +ferdinand f e r d i n a n d +ferguson f e r g u s o n +fergusson f e r g u s s o n +ferrari f e r r a r i +ferrer f e r r e r +fertile f e r t i l e +fi f i +fiat f i a t +fifa f i f a +fifth f i f t h +fil f i l +file f i l e +files f i l e s +film f i l m +filo f i l o +finance f i n a n c e +finder f i n d e r +firefox f i r e f o x +first f i r s t +fish f i s h +fishermen f i s h e r m e n +fix f i x +flame f l a m e +flanders f l a n d e r s +flash f l a s h +florentino f l o r e n t i n o +florida f l o r i d a +floyd f l o y d +fly f l y +fone f o n e +for f o r +force f o r c e +ford f o r d +foreman f o r e m a n +forest f o r e s t +format f o r m a t +forte f o r t e +forum f o r u m +fp f p +frame f r a m e +france f r a n c e +francisco f r a n c i s c o +frank f r a n k +frankfurt f r a n k f u r t +frazier f r a z i e r +freedom f r e e d o m +fsoft f s o f t +fujitv f u j i t v +full f u l l +fun f u n +fund f u n d +funky f u n k y +funès f u n è s +ga g a +gaal g a a l +gabriel g a b r i e l +gadhafi g a d h a f i +gaga g a g a +gai g a i +gallon g a l l o n +gam g a m +game g a m e +games g a m e s +gan g a n +gang g a n g +ganh g a n h +gao g a o +gara g a r a +garage g a r a g e +garay g a r a y +garden g a r d e n +garu g a r u +gas g a s +gates g a t e s +gatorade g a t o r a d e +gattuso g a t t u s o +gautier g a u t i e r +gay g a y +gazprom g a z p r o m +gcb g c b +gdp g d p +gehos g e h o s +gel g e l +gelfand g e l f a n d +gemma g e m m a +gen g e n +general g e n e r a l +geneva g e n e v a +genève g e n è v e +george g e o r g e +geos g e o s +german g e r m a n +get g e t +ghe g h e +ghem g h e m +ghen g h e n +ghi g h i +ghim g h i m +ghiếc g h i ế c +ghiền g h i ề n +ghè g h è +ghèn g h è n +ghé g h é +ghém g h é m +ghép g h é p +ghét g h é t +ghê g h ê +ghì g h ì +ghìm g h ì m +ghí g h í +ghẹ g h ẹ +ghẹo g h ẹ o +ghẻ g h ẻ +ghẽ g h ẽ +ghế g h ế +ghề g h ề +ghềnh g h ề n h +ghểnh g h ể n h +ghệt g h ệ t +gia g i a +giai g i a i +giam g i a m +gian g i a n +giang g i a n g +gianh g i a n h +giao g i a o +gieo g i e o +giggs g i g g s +gihao g i h a o +gilly g i l l y +gin g i n +gina g i n a +ginny g i n n y +ginza g i n z a +gio g i o +gion g i o n +gioăng g i o ă n g +girl g i r l +giua g i u a +giun g i u n +già g i à +giàn g i à n +giàng g i à n g +giành g i à n h +giàu g i à u +giày g i à y +giá g i á +giác g i á c +giám g i á m +gián g i á n +giáng g i á n g +giáo g i á o +giáp g i á p +giâm g i â m +giây g i â y +giã g i ã +giãi g i ã i +giãm g i ã m +giãn g i ã n +giãy g i ã y +gièm g i è m +gié g i é +giê g i ê +giêng g i ê n g +giò g i ò +giòn g i ò n +gió g i ó +gión g i ó n +gióng g i ó n g +giô g i ô +giông g i ô n g +giùm g i ù m +giú g i ú +giúp g i ú p +giăm g i ă m +giăng g i ă n g +giũ g i ũ +giũa g i ũ a +giơ g i ơ +giương g i ư ơ n g +giướng g i ư ớ n g +giường g i ư ờ n g +giạ g i ạ +giạt g i ạ t +giả g i ả +giải g i ả i +giảm g i ả m +giản g i ả n +giảng g i ả n g +giảnh g i ả n h +giảo g i ả o +giấc g i ấ c +giấm g i ấ m +giấp g i ấ p +giất g i ấ t +giấu g i ấ u +giấy g i ấ y +giầm g i ầ m +giần g i ầ n +giầu g i ầ u +giầy g i ầ y +giẫm g i ẫ m +giẫy g i ẫ y +giậm g i ậ m +giận g i ậ n +giập g i ậ p +giật g i ậ t +giắt g i ắ t +giằm g i ằ m +giằn g i ằ n +giằng g i ằ n g +giặc g i ặ c +giặm g i ặ m +giặn g i ặ n +giặt g i ặ t +giẹo g i ẹ o +giẻ g i ẻ +giếm g i ế m +giếng g i ế n g +giết g i ế t +giềng g i ề n g +giễu g i ễ u +giọ g i ọ +giọng g i ọ n g +giọt g i ọ t +giỏ g i ỏ +giỏi g i ỏ i +giỏn g i ỏ n +giống g i ố n g +giồng g i ồ n g +giỗ g i ỗ +giớ g i ớ +giới g i ớ i +giờ g i ờ +giời g i ờ i +giở g i ở +giởi g i ở i +giỡn g i ỡ n +giụa g i ụ a +giục g i ụ c +giủi g i ủ i +giữ g i ữ +giữa g i ữ a +giựt g i ự t +glasgow g l a s g o w +glenfiddich g l e n f i d d i c h +glow g l o w +gmx g m x +go g o +godin g o d i n +golf g o l f +gom g o m +gomez g o m e z +good g o o d +goodison g o o d i s o n +google g o o g l e +goto g o t o +gout g o u t +goóc g o ó c +gr g r +grafton g r a f t o n +grand g r a n d +grandis g r a n d i s +great g r e a t +green g r e e n +greg g r e g +gregan g r e g a n +group g r o u p +gruzia g r u z i a +gu g u +guardiola g u a r d i o l a +guest g u e s t +gugu g u g u +guitar g u i t a r +gulliver g u l l i v e r +gun g u n +guti g u t i +guốc g u ố c +guồng g u ồ n g +guộc g u ộ c +gà g à +gài g à i +gàn g à n +gàng g à n g +gành g à n h +gào g à o +gàu g à u +gày g à y +gác g á c +gái g á i +gán g á n +gánh g á n h +gáo g á o +gáp g á p +gáy g á y +gân g â n +gây g â y +gã g ã +gãi g ã i +gãy g ã y +gì g ì +gìa g ì a +gìn g ì n +gí g í +gò g ò +gòi g ò i +gòn g ò n +góa g ó a +góc g ó c +gói g ó i +góp g ó p +gót g ó t +gô g ô +gôm g ô m +gôn g ô n +gông g ô n g +gõ g õ +gù g ù +gùi g ù i +gú g ú +gút g ú t +găm g ă m +găng g ă n g +gũi g ũ i +gươm g ư ơ m +gương g ư ơ n g +gườm g ư ờ m +gường g ư ờ n g +gượng g ư ợ n g +gạ g ạ +gạc g ạ c +gạch g ạ c h +gạn g ạ n +gạo g ạ o +gạt g ạ t +gả g ả +gảy g ả y +gấc g ấ c +gấp g ấ p +gấu g ấ u +gấy g ấ y +gầm g ầ m +gần g ầ n +gầu g ầ u +gầy g ầ y +gẫm g ẫ m +gẫu g ẫ u +gẫy g ẫ y +gập g ậ p +gật g ậ t +gậy g ậ y +gắm g ắ m +gắn g ắ n +gắng g ắ n g +gắp g ắ p +gắt g ắ t +gằm g ằ m +gằn g ằ n +gặm g ặ m +gặn g ặ n +gặng g ặ n g +gặp g ặ p +gặt g ặ t +gỉ g ỉ +gọi g ọ i +gọn g ọ n +gọng g ọ n g +gọt g ọ t +gỏi g ỏ i +gỏng g ỏ n g +gốc g ố c +gối g ố i +gốm g ố m +gồ g ồ +gồm g ồ m +gồng g ồ n g +gổ g ổ +gỗ g ỗ +gộc g ộ c +gội g ộ i +gộp g ộ p +gột g ộ t +gớm g ớ m +gờ g ờ +gờm g ờ m +gở g ở +gởi g ở i +gỡ g ỡ +gợi g ợ i +gợn g ợ n +gợt g ợ t +gụ g ụ +gục g ụ c +gừ g ừ +gừng g ừ n g +gửi g ử i +gữi g ữ i +h h +ha h a +hachidiru h a c h i d i r u +hack h a c k +hacker h a c k e r +hai h a i +haley h a l e y +hall h a l l +halloween h a l l o w e e n +ham h a m +hamburger h a m b u r g e r +hamden h a m d e n +hamlet h a m l e t +hamman h a m m a n +han h a n +hang h a n g +hanh h a n h +hani h a n i +hanna h a n n a +hannibal h a n n i b a l +hans h a n s +hantuchova h a n t u c h o v a +hao h a o +hara h a r a +harada h a r a d a +hardy h a r d y +hargreaves h a r g r e a v e s +harmonica h a r m o n i c a +harrison h a r r i s o n +harry h a r r y +hart h a r t +haruko h a r u k o +hasebe h a s e b e +hashimoto h a s h i m o t o +hat h a t +hatchback h a t c h b a c k +hattie h a t t i e +hattrick h a t t r i c k +haute h a u t e +hawaii h a w a i i +hawaiian h a w a i i a n +hawk h a w k +hay h a y +hayward h a y w a r d +hbo h b o +he h e +head h e a d +heathrow h e a t h r o w +hee h e e +heights h e i g h t s +help h e l p +helsinki h e l s i n k i +hem h e m +hen h e n +henry h e n r y +heo h e o +hepburn h e p b u r n +hera h e r a +herd h e r d +hernandez h e r n a n d e z +heroin h e r o i n +herrera h e r r e r a +hi h i +hia h i a +hideyuki h i d e y u k i +high h i g h +hill h i l l +hills h i l l s +hilton h i l t o n +him h i m +hin h i n +hingis h i n g i s +hinh h i n h +hiroshi h i r o s h i +hiroshima h i r o s h i m a +history h i s t o r y +hit h i t +hitler h i t l e r +hiu h i u +hiv h i v +hix h i x +hiên h i ê n +hiêng h i ê n g +hiếm h i ế m +hiến h i ế n +hiếp h i ế p +hiết h i ế t +hiếu h i ế u +hiềm h i ề m +hiền h i ề n +hiểm h i ể m +hiển h i ể n +hiểu h i ể u +hiện h i ệ n +hiệp h i ệ p +hiệu h i ệ u +hlv h l v +ho h o +hoa h o a +hoan h o a n +hoang h o a n g +hoay h o a y +hobart h o b a r t +hockey h o c k e y +hodgson h o d g s o n +hoe h o e +hoen h o e n +hoffenheim h o f f e n h e i m +hoi h o i +hok h o k +hokkaido h o k k a i d o +holiday h o l i d a y +hollyhock h o l l y h o c k +hollywood h o l l y w o o d +holmes h o l m e s +hom h o m +home h o m e +homer h o m e r +hon h o n +honda h o n d a +hong h o n g +hongkong h o n g k o n g +honolulu h o n o l u l u +hope h o p e +hormone h o r m o n e +hornung h o r n u n g +horyu h o r y u +hosni h o s n i +hot h o t +hotel h o t e l +hoà h o à +hoài h o à i +hoàn h o à n +hoàng h o à n g +hoành h o à n h +hoá h o á +hoác h o á c +hoái h o á i +hoán h o á n +hoãn h o ã n +hoét h o é t +hoóc h o ó c +hoạ h o ạ +hoạch h o ạ c h +hoại h o ạ i +hoạn h o ạ n +hoạnh h o ạ n h +hoạt h o ạ t +hoả h o ả +hoải h o ả i +hoản h o ả n +hoảng h o ả n g +hoắc h o ắ c +hoắt h o ắ t +hoằng h o ằ n g +hoẳn h o ẳ n +hoặc h o ặ c +hu h u +hula h u l a +hull h u l l +hun h u n +hung h u n g +hungary h u n g a r y +hunger h u n g e r +huy h u y +huyndai h u y n d a i +huynh h u y n h +huyên h u y ê n +huyến h u y ế n +huyết h u y ế t +huyền h u y ề n +huyển h u y ể n +huyễn h u y ễ n +huyện h u y ệ n +huyệt h u y ệ t +huân h u â n +huê h u ê +huých h u ý c h +huýt h u ý t +huơ h u ơ +huấn h u ấ n +huế h u ế +huếch h u ế c h +huề h u ề +huệ h u ệ +huống h u ố n g +huổi h u ổ i +huỳnh h u ỳ n h +huỵch h u ỵ c h +huỷ h u ỷ +hy h y +hybrid h y b r i d +hyde h y d e +hyun h y u n +hà h à +hài h à i +hàm h à m +hàn h à n +hàng h à n g +hành h à n h +hào h à o +hàu h à u +há h á +hác h á c +hách h á c h +hái h á i +hám h á m +hán h á n +háng h á n g +háo h á o +hát h á t +háu h á u +hâm h â m +hân h â n +hâu h â u +hãi h ã i +hãm h ã m +hãn h ã n +hãng h ã n g +hãnh h ã n h +hão h ã o +hãy h ã y +hè h è +hèn h è n +hé h é +héo h é o +hét h é t +hê h ê +hên h ê n +hênh h ê n h +hì h ì +hình h ì n h +hí h í +hích h í c h +híp h í p +hít h í t +hò h ò +hòa h ò a +hòm h ò m +hòn h ò n +hòng h ò n g +hóa h ó a +hóc h ó c +hói h ó i +hóm h ó m +hóng h ó n g +hóp h ó p +hót h ó t +hô h ô +hôi h ô i +hôm h ô m +hôn h ô n +hông h ô n g +hù h ù +hùa h ù a +hùm h ù m +hùn h ù n +hùng h ù n g +hú h ú +húc h ú c +húi h ú i +húng h ú n g +húp h ú p +hút h ú t +húy h ú y +hăm h ă m +hăng h ă n g +hĩnh h ĩ n h +hũ h ũ +hũm h ũ m +hơ h ơ +hơi h ơ i +hơn h ơ n +hơp h ơ p +hư h ư +hưng h ư n g +hưu h ư u +hương h ư ơ n g +hươu h ư ơ u +hước h ư ớ c +hướm h ư ớ m +hướng h ư ớ n g +hường h ư ờ n g +hưởng h ư ở n g +hượm h ư ợ m +hạ h ạ +hạc h ạ c +hạch h ạ c h +hại h ạ i +hạm h ạ m +hạn h ạ n +hạng h ạ n g +hạnh h ạ n h +hạo h ạ o +hạp h ạ p +hạt h ạ t +hả h ả +hải h ả i +hảm h ả m +hảo h ả o +hấn h ấ n +hấng h ấ n g +hấp h ấ p +hất h ấ t +hấu h ấ u +hầm h ầ m +hầu h ầ u +hầy h ầ y +hẩm h ẩ m +hẩu h ẩ u +hẫng h ẫ n g +hậm h ậ m +hận h ậ n +hập h ậ p +hậu h ậ u +hắc h ắ c +hắn h ắ n +hắng h ắ n g +hắt h ắ t +hằn h ằ n +hằng h ằ n g +hẳn h ẳ n +hẵng h ẵ n g +hặc h ặ c +hẹ h ẹ +hẹn h ẹ n +hẹp h ẹ p +hẻm h ẻ m +hẻo h ẻ o +hếch h ế c h +hến h ế n +hết h ế t +hề h ề +hể h ể +hển h ể n +hểnh h ể n h +hễ h ễ +hệ h ệ +hệt h ệ t +hỉ h ỉ +hỉnh h ỉ n h +họ h ọ +họa h ọ a +học h ọ c +họccặp h ọ c c ặ p +họe h ọ e +họng h ọ n g +họp h ọ p +hỏ h ỏ +hỏa h ỏ a +hỏi h ỏ i +hỏm h ỏ m +hỏn h ỏ n +hỏng h ỏ n g +hố h ố +hốc h ố c +hối h ố i +hống h ố n g +hốt h ố t +hồ h ồ +hồi h ồ i +hồn h ồ n +hồng h ồ n g +hổ h ổ +hổi h ổ i +hổm h ổ m +hổn h ổ n +hổng h ổ n g +hỗ h ỗ +hỗn h ỗ n +hộ h ộ +hộc h ộ c +hội h ộ i +hộn h ộ n +hộp h ộ p +hột h ộ t +hớ h ớ +hớn h ớ n +hớp h ớ p +hớt h ớ t +hờ h ờ +hời h ờ i +hờn h ờ n +hở h ở +hởi h ở i +hỡi h ỡ i +hợi h ợ i +hợm h ợ m +hợp h ợ p +hợt h ợ t +hụ h ụ +hục h ụ c +hụi h ụ i +hụt h ụ t +hủ h ủ +hủi h ủ i +hủy h ủ y +hứa h ứ a +hức h ứ c +hứng h ứ n g +hừ h ừ +hừm h ừ m +hừng h ừ n g +hử h ử +hửng h ử n g +hững h ữ n g +hữu h ữ u +hự h ự +hực h ự c +hựu h ự u +hỷ h ỷ +i i +ibm i b m +icahn i c a h n +iceland i c e l a n d +icon i c o n +ida i d a +igc i g c +ii i i +iijima i i j i m a +ikeda i k e d a +il i l +im i m +imel i m e l +in i n +inch i n c h +inches i n c h e s +indeed i n d e e d +index i n d e x +indian i n d i a n +indonesia i n d o n e s i a +industry i n d u s t r y +infiniti i n f i n i t i +infinity i n f i n i t y +inh i n h +inn i n n +inna i n n a +innocent i n n o c e n t +insulin i n s u l i n +intel i n t e l +inter i n t e r +internet i n t e r n e t +interpol i n t e r p o l +invest i n v e s t +ion i o n +ios i o s +ip i p +ipad i p a d +iphone i p h o n e +ipod i p o d +iran i r a n +iraq i r a q +ireland i r e l a n d +is i s +ish i s h +ishibashi i s h i b a s h i +ishida i s h i d a +israel i s r a e l +it i t +italia i t a l i a +italy i t a l y +item i t e m +itunes i t u n e s +iu i u +ivan i v a n +j j +jack j a c k +jackie j a c k i e +jackson j a c k s o n +jacksonville j a c k s o n v i l l e +jae j a e +jakarta j a k a r t a +jake j a k e +jal j a l +jamie j a m i e +jane j a n e +jang j a n g +japan j a p a n +jardin j a r d i n +jardine j a r d i n e +jasmine j a s m i n e +jasper j a s p e r +java j a v a +javier j a v i e r +jaya j a y a +jazz j a z z +jean j e a n +jeddah j e d d a h +jeffrey j e f f r e y +jen j e n +jennifer j e n n i f e r +jerry j e r r y +jerusalem j e r u s a l e m +jessica j e s s i c a +jesus j e s u s +jett j e t t +ji j i +jie j i e +jim j i m +jimmy j i m m y +jin j i n +jinx j i n x +jiyugaoka j i y u g a o k a +jm j m +joao j o a o +job j o b +jobs j o b s +joe j o e +johan j o h a n +john j o h n +johnny j o h n n y +johnson j o h n s o n +jolie j o l i e +jones j o n e s +jong j o n g +jonh j o n h +joon j o o n +joong j o o n g +joseph j o s e p h +josephine j o s e p h i n e +jr j r +ju j u +judo j u d o +julia j u l i a +julie j u l i e +juliet j u l i e t +jun j u n +june j u n e +jung j u n g +jungle j u n g l e +junichiro j u n i c h i r o +justin j u s t i n +juve j u v e +juventus j u v e n t u s +k k +ka k a +kabuki k a b u k i +kahn k a h n +kai k a i +kaka k a k a +kaki k a k i +kaladze k a l a d z e +kali k a l i +kamen k a m e n +kang k a n g +kangaroo k a n g a r o o +kansai k a n s a i +kanto k a n t o +karachi k a r a c h i +karaoke k a r a o k e +karin k a r i n +karira k a r i r a +kate k a t e +katharine k a t h a r i n e +katherine k a t h e r i n e +kathleen k a t h l e e n +kathyra k a t h y r a +katia k a t i a +kawaramachi k a w a r a m a c h i +kazakhstan k a z a k h s t a n +kazu k a z u +ke k e +keegan k e e g a n +keith k e i t h +kelly k e l l y +kelvin k e l v i n +kem k e m +kemper k e m p e r +ken k e n +keng k e n g +kenichi k e n i c h i +kenji k e n j i +kentaro k e n t a r o +keo k e o +kerns k e r n s +kerr k e r r +kevin k e v i n +key k e y +kg k g +kha k h a +khai k h a i +khamtai k h a m t a i +khamtay k h a m t a y +khan k h a n +khang k h a n g +khanh k h a n h +khao k h a o +khau k h a u +khay k h a y +khe k h e +khem k h e m +khen k h e n +kheo k h e o +khi k h i +khinh k h i n h +khiu k h i u +khiêm k h i ê m +khiên k h i ê n +khiêng k h i ê n g +khiêu k h i ê u +khiếm k h i ế m +khiến k h i ế n +khiếp k h i ế p +khiết k h i ế t +khiếu k h i ế u +khiển k h i ể n +khmer k h m e r +kho k h o +khoa k h o a +khoai k h o a i +khoan k h o a n +khoang k h o a n g +khoanh k h o a n h +khoe k h o e +khoeo k h o e o +khom k h o m +khoá k h o á +khoác k h o á c +khoái k h o á i +khoán k h o á n +khoáng k h o á n g +khoát k h o á t +khoèo k h o è o +khoé k h o é +khoét k h o é t +khoăn k h o ă n +khoải k h o ả i +khoản k h o ả n +khoảng k h o ả n g +khoảnh k h o ả n h +khoắn k h o ắ n +khoắt k h o ắ t +khoẻ k h o ẻ +khrushchev k h r u s h c h e v +khu k h u +khua k h u a +khui k h u i +khum k h u m +khung k h u n g +khuy k h u y +khuya k h u y a +khuynh k h u y n h +khuyên k h u y ê n +khuyến k h u y ế n +khuyết k h u y ế t +khuân k h u â n +khuâng k h u â n g +khuây k h u â y +khuê k h u ê +khuôn k h u ô n +khuông k h u ô n g +khuất k h u ấ t +khuấy k h u ấ y +khuẩn k h u ẩ n +khuỳnh k h u ỳ n h +khuỵu k h u ỵ u +khuỷu k h u ỷ u +khà k h à +khàn k h à n +khàng k h à n g +khá k h á +khác k h á c +khách k h á c h +khái k h á i +khám k h á m +khán k h á n +kháng k h á n g +khánh k h á n h +kháo k h á o +kháp k h á p +khát k h á t +kháu k h á u +khâm k h â m +khâu k h â u +khè k h è +khèn k h è n +khèo k h è o +khé k h é +khén k h é n +khéo k h é o +khép k h é p +khét k h é t +khê k h ê +khênh k h ê n h +khêu k h ê u +khí k h í +khía k h í a +khích k h í c h +khít k h í t +khíu k h í u +khò k h ò +khó k h ó +khóa k h ó a +khóc k h ó c +khóe k h ó e +khói k h ó i +khóm k h ó m +khô k h ô +khôi k h ô i +khôn k h ô n +không k h ô n g +khù k h ù +khùng k h ù n g +khú k h ú +khúc k h ú c +khúm k h ú m +khăm k h ă m +khăn k h ă n +khăng k h ă n g +khơ k h ơ +khơi k h ơ i +khư k h ư +khươm k h ư ơ m +khươn k h ư ơ n +khương k h ư ơ n g +khước k h ư ớ c +khướt k h ư ớ t +khạc k h ạ c +khạng k h ạ n g +khạp k h ạ p +khả k h ả +khải k h ả i +khản k h ả n +khảng k h ả n g +khảnh k h ả n h +khảo k h ả o +khảy k h ả y +khấm k h ấ m +khấn k h ấ n +khấp k h ấ p +khất k h ấ t +khấu k h ấ u +khẩn k h ẩ n +khẩu k h ẩ u +khật k h ậ t +khắc k h ắ c +khắm k h ắ m +khắn k h ắ n +khắng k h ắ n g +khắp k h ắ p +khắt k h ắ t +khẳm k h ẳ m +khẳng k h ẳ n g +khẻ k h ẻ +khẽ k h ẽ +khế k h ế +khề k h ề +khều k h ề u +khểnh k h ể n h +khệ k h ệ +khệnh k h ệ n h +khỉ k h ỉ +khỉnh k h ỉ n h +khịt k h ị t +khỏa k h ỏ a +khỏe k h ỏ e +khỏi k h ỏ i +khố k h ố +khốc k h ố c +khối k h ố i +khốn k h ố n +khống k h ố n g +khổ k h ổ +khổng k h ổ n g +khổthân k h ổ t h â n +khớ k h ớ +khớp k h ớ p +khờ k h ờ +khởi k h ở i +khụ k h ụ +khụy k h ụ y +khủng k h ủ n g +khứ k h ứ +khứa k h ứ a +khứu k h ứ u +khừ k h ừ +khử k h ử +khựng k h ự n g +ki k i +kia k i a +kid k i d +kidman k i d m a n +kiev k i e v +kilô k i l ô +kilôgam k i l ô g a m +kilômét k i l ô m é t +kim k i m +kimono k i m o n o +kimura k i m u r a +kin k i n +kinh k i n h +kissed k i s s e d +kitano k i t a n o +kitty k i t t y +kitô k i t ô +kiwi k i w i +kiêm k i ê m +kiên k i ê n +kiêng k i ê n g +kiêu k i ê u +kiếm k i ế m +kiến k i ế n +kiếng k i ế n g +kiếp k i ế p +kiết k i ế t +kiềm k i ề m +kiền k i ề n +kiềng k i ề n g +kiều k i ề u +kiểm k i ể m +kiểng k i ể n g +kiểu k i ể u +kiệm k i ệ m +kiện k i ệ n +kiệt k i ệ t +kiệu k i ệ u +km k m +ko k o +kobaya k o b a y a +kobayashi k o b a y a s h i +kobe k o b e +kodak k o d a k +kojima k o j i m a +kombat k o m b a t +kon k o n +kong k o n g +kool k o o l +koscielny k o s c i e l n y +kristen k r i s t e n +krông k r ô n g +ku k u +kuala k u a l a +kubo k u b o +kuman k u m a n +kumanthong k u m a n t h o n g +kumanthông k u m a n t h ô n g +kvitova k v i t o v a +ky k y +kyodo k y o d o +kyoko k y o k o +kyoto k y o t o +kyoyu k y o y u +kyung k y u n g +kyushu k y u s h u +kè k è +kèm k è m +kèn k è n +kèo k è o +ké k é +kém k é m +kén k é n +kéo k é o +kép k é p +két k é t +kê k ê +kênh k ê n h +kêu k ê u +kì k ì +kìa k ì a +kìm k ì m +kình k ì n h +kí k í +kích k í c h +kín k í n +kính k í n h +kíp k í p +kít k í t +kông k ô n g +ký k ý +kĩ k ĩ +kạn k ạ n +kẹn k ẹ n +kẹo k ẹ o +kẹp k ẹ p +kẹt k ẹ t +kẻ k ẻ +kẻng k ẻ n g +kẻo k ẻ o +kẽ k ẽ +kẽm k ẽ m +kẽo k ẽ o +kế k ế +kếch k ế c h +kếp k ế p +kết k ế t +kề k ề +kềm k ề m +kền k ề n +kềnh k ề n h +kể k ể +kệ k ệ +kệch k ệ c h +kệnh k ệ n h +kệt k ệ t +kỉ k ỉ +kỉnh k ỉ n h +kị k ị +kịch k ị c h +kịp k ị p +kịt k ị t +kụ k ụ +kỳ k ỳ +kỵ k ỵ +kỷ k ỷ +kỹ k ỹ +la l a +laden l a d e n +lady l a d y +lai l a i +lake l a k e +lam l a m +lama l a m a +lan l a n +lancet l a n c e t +landing l a n d i n g +lane l a n e +lang l a n g +lanh l a n h +lao l a o +laptop l a p t o p +lara l a r a +las l a s +laser l a s e r +lat l a t +lau l a u +lauder l a u d e r +laura l a u r a +laurence l a u r e n c e +laurie l a u r i e +lavor l a v o r +lay l a y +layer l a y e r +layout l a y o u t +lazaro l a z a r o +le l e +league l e a g u e +lee l e e +legging l e g g i n g +leicester l e i c e s t e r +leigh l e i g h +leighton l e i g h t o n +lem l e m +len l e n +lena l e n a +leng l e n g +lenin l e n i n +leningrad l e n i n g r a d +lennon l e n n o n +leo l e o +lester l e s t e r +let l e t +level l e v e l +leverkusen l e v e r k u s e n +levi l e v i +levine l e v i n e +lewandowski l e w a n d o w s k i +lewis l e w i s +lexington l e x i n g t o n +lexus l e x u s +lg l g +li l i +lia l i a +liam l i a m +library l i b r a r y +libya l i b y a +lido l i d o +like l i k e +lily l i l y +lim l i m +limited l i m i t e d +limos l i m o s +limousine l i m o u s i n e +lin l i n +lincoln l i n c o l n +linda l i n d a +linh l i n h +link l i n k +lipo l i p o +lippi l i p p i +lipton l i p t o n +lisa l i s a +lisbon l i s b o n +list l i s t +little l i t t l e +liu l i u +live l i v e +liverpool l i v e r p o o l +lizzie l i z z i e +liêm l i ê m +liên l i ê n +liêng l i ê n g +liêu l i ê u +liếc l i ế c +liếm l i ế m +liến l i ế n +liếng l i ế n g +liếp l i ế p +liềm l i ề m +liền l i ề n +liều l i ề u +liễu l i ễ u +liệm l i ệ m +liện l i ệ n +liệng l i ệ n g +liệt l i ệ t +liệu l i ệ u +lo l o +loa l o a +load l o a d +loai l o a i +loan l o a n +loang l o a n g +loanh l o a n h +loay l o a y +lock l o c k +logic l o g i c +logo l o g o +loi l o i +lom l o m +lon l o n +london l o n d o n +long l o n g +lopez l o p e z +lord l o r d +lorenzo l o r e n z o +los l o s +louboutin l o u b o u t i n +louis l o u i s +louisiana l o u i s i a n a +louisville l o u i s v i l l e +lounge l o u n g e +loà l o à +loài l o à i +loàn l o à n +loàng l o à n g +loáng l o á n g +loát l o á t +loãng l o ã n g +loè l o è +loé l o é +loét l o é t +loăng l o ă n g +loại l o ạ i +loạn l o ạ n +loạng l o ạ n g +loạt l o ạ t +loảng l o ả n g +loắt l o ắ t +loằng l o ằ n g +loẹt l o ẹ t +ls l s +lu l u +lua l u a +luc l u c +lucas l u c a s +lucia l u c i a +lucio l u c i o +lui l u i +lum l u m +lumpur l u m p u r +lung l u n g +luy l u y +luyn l u y n +luyến l u y ế n +luyện l u y ệ n +luân l u â n +luôn l u ô n +luông l u ô n g +luẩn l u ẩ n +luận l u ậ n +luật l u ậ t +luốc l u ố c +luống l u ố n g +luồn l u ồ n +luồng l u ồ n g +luỗng l u ỗ n g +luộc l u ộ c +luộm l u ộ m +ly l y +lyon l y o n +là l à +lài l à i +làm l à m +làn l à n +làng l à n g +lành l à n h +lào l à o +làu l à u +lày l à y +lá l á +lác l á c +lách l á c h +lái l á i +lán l á n +láng l á n g +lánh l á n h +láo l á o +láp l á p +lát l á t +láu l á u +láy l á y +lâm l â m +lân l â n +lâng l â n g +lâu l â u +lây l â y +lã l ã +lãi l ã i +lãm l ã m +lãn l ã n +lãng l ã n g +lãnh l ã n h +lão l ã o +lè l è +lèm l è m +lèo l è o +lé l é +léc l é c +lém l é m +lén l é n +léng l é n g +léo l é o +lép l é p +lét l é t +lê l ê +lên l ê n +lênh l ê n h +lêu l ê u +lì l ì +lìa l ì a +lìm l ì m +lìn l ì n +lình l ì n h +lìu l ì u +lí l í +lính l í n h +líp l í p +lít l í t +líu l í u +lò l ò +lòa l ò a +lòe l ò e +lòi l ò i +lòm l ò m +lòng l ò n g +ló l ó +lóa l ó a +lóc l ó c +lóe l ó e +lói l ó i +lóm l ó m +lóng l ó n g +lóp l ó p +lót l ó t +lô l ô +lôi l ô i +lôm l ô m +lông l ô n g +lõa l õ a +lõi l õ i +lõm l õ m +lõng l õ n g +lù l ù +lùa l ù a +lùi l ù i +lùm l ù m +lùn l ù n +lùng l ù n g +lú l ú +lúa l ú a +lúc l ú c +lúi l ú i +lúm l ú m +lún l ú n +lúng l ú n g +lúp l ú p +lút l ú t +lý l ý +lăk l ă k +lăm l ă m +lăn l ă n +lăng l ă n g +lĩnh l ĩ n h +lũ l ũ +lũi l ũ i +lũm l ũ m +lũn l ũ n +lũng l ũ n g +lũy l ũ y +lơ l ơ +lơi l ơ i +lơn l ơ n +lư l ư +lưa l ư a +lưng l ư n g +lưu l ư u +lươm l ư ơ m +lươn l ư ơ n +lương l ư ơ n g +lưới l ư ớ i +lướng l ư ớ n g +lướt l ư ớ t +lười l ư ờ i +lường l ư ờ n g +lưỡi l ư ỡ i +lưỡng l ư ỡ n g +lược l ư ợ c +lượm l ư ợ m +lượn l ư ợ n +lượng l ư ợ n g +lượt l ư ợ t +lạ l ạ +lạc l ạ c +lạch l ạ c h +lại l ạ i +lạm l ạ m +lạn l ạ n +lạng l ạ n g +lạnh l ạ n h +lạo l ạ o +lạp l ạ p +lạt l ạ t +lạy l ạ y +lả l ả +lải l ả i +lảm l ả m +lảng l ả n g +lảnh l ả n h +lảo l ả o +lảy l ả y +lấm l ấ m +lấn l ấ n +lấp l ấ p +lất l ấ t +lấy l ấ y +lầm l ầ m +lần l ầ n +lầng l ầ n g +lầu l ầ u +lầy l ầ y +lẩm l ẩ m +lẩn l ẩ n +lẩu l ẩ u +lẩy l ẩ y +lẫm l ẫ m +lẫn l ẫ n +lẫy l ẫ y +lận l ậ n +lập l ậ p +lật l ậ t +lậu l ậ u +lắc l ắ c +lắk l ắ k +lắm l ắ m +lắng l ắ n g +lắp l ắ p +lắt l ắ t +lằn l ằ n +lằng l ằ n g +lẳm l ẳ m +lẳn l ẳ n +lẳng l ẳ n g +lặc l ặ c +lặm l ặ m +lặn l ặ n +lặng l ặ n g +lặp l ặ p +lặt l ặ t +lẹ l ẹ +lẹm l ẹ m +lẹt l ẹ t +lẻ l ẻ +lẻn l ẻ n +lẻng l ẻ n g +lẻo l ẻ o +lẽ l ẽ +lẽn l ẽ n +lẽo l ẽ o +lết l ế t +lếu l ế u +lề l ề +lềnh l ề n h +lều l ề u +lể l ể +lễ l ễ +lệ l ệ +lệch l ệ c h +lệnh l ệ n h +lỉm l ỉ m +lỉnh l ỉ n h +lị l ị +lịa l ị a +lịch l ị c h +lịm l ị m +lịnh l ị n h +lọ l ọ +lọc l ọ c +lọi l ọ i +lọn l ọ n +lọng l ọ n g +lọt l ọ t +lỏ l ỏ +lỏi l ỏ i +lỏm l ỏ m +lỏn l ỏ n +lỏng l ỏ n g +lố l ố +lốc l ố c +lối l ố i +lốm l ố m +lốn l ố n +lốp l ố p +lốt l ố t +lồ l ồ +lồi l ồ i +lồm l ồ m +lồng l ồ n g +lổ l ổ +lổm l ổ m +lổng l ổ n g +lỗ l ỗ +lỗi l ỗ i +lộ l ộ +lộc l ộ c +lội l ộ i +lộn l ộ n +lộng l ộ n g +lộp l ộ p +lột l ộ t +lới l ớ i +lớn l ớ n +lớp l ớ p +lớt l ớ t +lờ l ờ +lời l ờ i +lờm l ờ m +lờn l ờ n +lở l ở +lởi l ở i +lởm l ở m +lởn l ở n +lỡ l ỡ +lỡm l ỡ m +lợ l ợ +lợi l ợ i +lợm l ợ m +lợn l ợ n +lợp l ợ p +lụ l ụ +lụa l ụ a +lục l ụ c +lụi l ụ i +lụng l ụ n g +lụp l ụ p +lụt l ụ t +lụy l ụ y +lủ l ủ +lủi l ủ i +lủm l ủ m +lủng l ủ n g +lứa l ứ a +lức l ứ c +lứt l ứ t +lừ l ừ +lừa l ừ a +lừng l ừ n g +lử l ử +lửa l ử a +lửng l ử n g +lữ l ữ +lữa l ữ a +lững l ữ n g +lự l ự +lựa l ự a +lực l ự c +lựng l ự n g +lựu l ự u +lỳ l ỳ +lỵ l ỵ +m m +ma m a +macs m a c s +madison m a d i s o n +madrid m a d r i d +magic m a g i c +mahmudi m a h m u d i +mai m a i +mail m a i l +mainz m a i n z +make m a k e +malaga m a l a g a +malan m a l a n +malay m a l a y +malaysia m a l a y s i a +malicious m a l i c i o u s +mall m a l l +mallie m a l l i e +man m a n +management m a n a g e m e n t +manager m a n a g e r +manchester m a n c h e s t e r +mandi m a n d i +manera m a n e r a +mang m a n g +mangan m a n g a n +manh m a n h +manhattan m a n h a t t a n +mao m a o +marathon m a r a t h o n +marazzina m a r a z z i n a +marche m a r c h e +mardy m a r d y +margaret m a r g a r e t +margarita m a r g a r i t a +maria m a r i a +marie m a r i e +marilyn m a r i l y n +marine m a r i n e +mario m a r i o +mark m a r k +market m a r k e t +marry m a r r y +martin m a r t i n +martini m a r t i n i +marx m a r x +mary m a r y +maryam m a r y a m +masako m a s a k o +massage m a s s a g e +mastercard m a s t e r c a r d +masumi m a s u m i +match m a t c h +matri m a t r i +matsumoto m a t s u m o t o +matte m a t t e +mattel m a t t e l +matthew m a t t h e w +mau m a u +maui m a u i +maunet m a u n e t +max m a x +may m a y +maybe m a y b e +mayflower m a y f l o w e r +mayweather m a y w e a t h e r +mazda m a z d a +mccaffrey m c c a f f r e y +mcdonald m c d o n a l d +mcdougall m c d o u g a l l +me m e +medan m e d a n +medicine m e d i c i n e +mehico m e h i c o +melaka m e l a k a +melbourne m e l b o u r n e +mem m e m +men m e n +menlo m e n l o +menu m e n u +meo m e o +mer m e r +mercedes m e r c e d e s +mercury m e r c u r y +meridian m e r i d i a n +merlu m e r l u +messi m e s s i +meta m e t a +metro m e t r o +metroly m e t r o l y +metropolitan m e t r o p o l i t a n +mexico m e x i c o +mfl m f l +mi m i +mia m i a +miami m i a m i +mianshi m i a n s h i +michael m i c h a e l +michigan m i c h i g a n +micky m i c k y +microsoft m i c r o s o f t +midas m i d a s +mihajlovic m i h a j l o v i c +mike m i k e +mikel m i k e l +milan m i l a n +miley m i l e y +milimét m i l i m é t +miller m i l l e r +min m i n +minh m i n h +mini m i n i +minsk m i n s k +mirage m i r a g e +miranda m i r a n d a +miss m i s s +mississippi m i s s i s s i p p i +missouri m i s s o u r i +mitch m i t c h +mito m i t o +mix m i x +miên m i ê n +miêu m i ê u +miến m i ế n +miếng m i ế n g +miết m i ế t +miếu m i ế u +miền m i ề n +miều m i ề u +miễn m i ễ n +miện m i ệ n +miệng m i ệ n g +miệt m i ệ t +mm m m +mo m o +moammar m o a m m a r +moana m o a n a +mobile m o b i l e +mobility m o b i l i t y +mockingjay m o c k i n g j a y +mod m o d +model m o d e l +modern m o d e r n +mohammad m o h a m m a d +moi m o i +molecular m o l e c u l a r +mom m o m +moma m o m a +mon m o n +mondeo m o n d e o +monfils m o n f i l s +mong m o n g +monica m o n i c a +monroe m o n r o e +monte m o n t e +moore m o o r e +more m o r e +morning m o r n i n g +morris m o r r i s +mortal m o r t a l +moskva m o s k v a +motogp m o t o g p +motorola m o t o r o l a +mr m r +mrs m r s +mtr m t r +mu m u +mua m u a +mubarak m u b a r a k +mudenge m u d e n g e +mui m u i +mullen m u l l e n +muller m u l l e r +mun m u n +mung m u n g +murakami m u r a k a m i +murray m u r r a y +museum m u s e u m +musical m u s i c a l +muôi m u ô i +muôn m u ô n +muông m u ô n g +muối m u ố i +muốn m u ố n +muống m u ố n g +muốt m u ố t +muồi m u ồ i +muồn m u ồ n +muỗi m u ỗ i +muỗm m u ỗ m +muỗng m u ỗ n g +muội m u ộ i +muộn m u ộ n +my m y +myami m y a m i +myanmar m y a n m a r +mà m à +mài m à i +màn m à n +màng m à n g +mành m à n h +mào m à o +màu m à u +mày m à y +má m á +mác m á c +mách m á c h +mái m á i +mán m á n +máng m á n g +mánh m á n h +máo m á o +mát m á t +máu m á u +máy m á y +mâm m â m +mân m â n +mâu m â u +mây m â y +mã m ã +mãi m ã i +mãn m ã n +mãng m ã n g +mãnh m ã n h +mão m ã o +mè m è +mèm m è m +mèn m è n +mèo m è o +mé m é +mém m é m +mén m é n +méo m é o +mép m é p +mét m é t +méxico m é x i c o +mê m ê +mênh m ê n h +mì m ì +mìn m ì n +mình m ì n h +mí m í +mía m í a +mích m í c h +mính m í n h +míp m í p +mít m í t +míu m í u +mò m ò +mòi m ò i +mòn m ò n +mòng m ò n g +mó m ó +móc m ó c +mói m ó i +móm m ó m +món m ó n +móng m ó n g +móp m ó p +mót m ó t +mô m ô +môi m ô i +môn m ô n +mông m ô n g +môt m ô t +mõ m õ +mõi m õ i +mõm m õ m +mù m ù +mùa m ù a +mùi m ù i +mùn m ù n +mùng m ù n g +mú m ú +múa m ú a +múc m ú c +múi m ú i +mún m ú n +múp m ú p +mút m ú t +măm m ă m +măn m ă n +măng m ă n g +mĩ m ĩ +mĩm m ĩ m +mũ m ũ +mũi m ũ i +mũm m ũ m +mơ m ơ +mơn m ơ n +mưa m ư a +mưng m ư n g +mưu m ư u +mươi m ư ơ i +mươn m ư ơ n +mương m ư ơ n g +mướn m ư ớ n +mướp m ư ớ p +mướt m ư ớ t +mười m ư ờ i +mườimây m ư ờ i m â y +mường m ư ờ n g +mượn m ư ợ n +mượt m ư ợ t +mạ m ạ +mạc m ạ c +mạch m ạ c h +mại m ạ i +mạn m ạ n +mạng m ạ n g +mạnh m ạ n h +mạo m ạ o +mạp m ạ p +mạt m ạ t +mạy m ạ y +mả m ả +mải m ả i +mảng m ả n g +mảnh m ả n h +mảy m ả y +mấn m ấ n +mấp m ấ p +mất m ấ t +mấu m ấ u +mấy m ấ y +mầm m ầ m +mần m ầ n +mầu m ầ u +mẩn m ẩ n +mẩu m ẩ u +mẩy m ẩ y +mẫm m ẫ m +mẫn m ẫ n +mẫu m ẫ u +mận m ậ n +mập m ậ p +mật m ậ t +mậu m ậ u +mắc m ắ c +mắm m ắ m +mắn m ắ n +mắng m ắ n g +mắt m ắ t +mằn m ằ n +mẳn m ẳ n +mặc m ặ c +mặn m ặ n +mặt m ặ t +mẹ m ẹ +mẹo m ẹ o +mẹt m ẹ t +mẻ m ẻ +mẽ m ẽ +mế m ế +mếch m ế c h +mến m ế n +mếu m ế u +mề m ề +mềm m ề m +mền m ề n +mệ m ệ +mệnh m ệ n h +mệt m ệ t +mỉ m ỉ +mỉa m ỉ a +mỉm m ỉ m +mị m ị +mịch m ị c h +mịn m ị n +mịt m ị t +mọ m ọ +mọc m ọ c +mọi m ọ i +mọn m ọ n +mọng m ọ n g +mọt m ọ t +mỏ m ỏ +mỏi m ỏ i +mỏm m ỏ m +mỏng m ỏ n g +mố m ố +mốc m ố c +mối m ố i +mống m ố n g +mốt m ố t +mồ m ồ +mồi m ồ i +mồm m ồ m +mồng m ồ n g +mổ m ổ +mỗ m ỗ +mỗi m ỗ i +mộ m ộ +mộc m ộ c +mộng m ộ n g +một m ộ t +mớ m ớ +mới m ớ i +mớm m ớ m +mớp m ớ p +mờ m ờ +mời m ờ i +mở m ở +mởn m ở n +mỡ m ỡ +mợ m ợ +mụ m ụ +mục m ụ c +mụi m ụ i +mụn m ụ n +mụp m ụ p +mủ m ủ +mủi m ủ i +mủn m ủ n +mức m ứ c +mứt m ứ t +mừng m ừ n g +mửa m ử a +mực m ự c +mỳ m ỳ +mỵ m ỵ +mỹ m ỹ +n n +na n a +nadal n a d a l +nagashima n a g a s h i m a +nai n a i +nail n a i l +nakayama n a k a y a m a +nam n a m +nan n a n +nancy n a n c y +nang n a n g +nanh n a n h +nao n a o +naomi n a o m i +napoca n a p o c a +napoli n a p o l i +nara n a r a +narita n a r i t a +narnia n a r n i a +nashang n a s h a n g +natalie n a t a l i e +natri n a t r i +natsuki n a t s u k i +nax n a x +naxăngno n a x ă n g n o +nay n a y +nazi n a z i +ne n e +nec n e c +nederland n e d e r l a n d +nem n e m +neo n e o +nessie n e s s i e +net n e t +neville n e v i l l e +new n e w +newcastle n e w c a s t l e +newman n e w m a n +neworleans n e w o r l e a n s +news n e w s +newyork n e w y o r k +next n e x t +nga n g a +ngai n g a i +ngam n g a m +ngan n g a n +ngang n g a n g +ngao n g a o +ngay n g a y +nghe n g h e +nghi n g h i +nghinh n g h i n h +nghiêm n g h i ê m +nghiên n g h i ê n +nghiêng n g h i ê n g +nghiêp n g h i ê p +nghiến n g h i ế n +nghiền n g h i ề n +nghiễm n g h i ễ m +nghiệm n g h i ệ m +nghiện n g h i ệ n +nghiệp n g h i ệ p +nghiệt n g h i ệ t +nghè n g h è +nghèo n g h è o +nghé n g h é +nghén n g h é n +nghét n g h é t +nghê n g h ê +nghênh n g h ê n h +nghêu n g h ê u +nghìn n g h ì n +nghía n g h í a +nghĩ n g h ĩ +nghĩa n g h ĩ a +nghĩnh n g h ĩ n h +nghẹn n g h ẹ n +nghẹo n g h ẹ o +nghẹt n g h ẹ t +nghẻo n g h ẻ o +nghẽn n g h ẽ n +nghẽo n g h ẽ o +nghếch n g h ế c h +nghề n g h ề +nghểnh n g h ể n h +nghễ n g h ễ +nghệ n g h ệ +nghệch n g h ệ c h +nghỉ n g h ỉ +nghỉm n g h ỉ m +nghỉu n g h ỉ u +nghị n g h ị +nghịch n g h ị c h +nghịt n g h ị t +nghịu n g h ị u +ngo n g o +ngoa n g o a +ngoai n g o a i +ngoan n g o a n +ngoang n g o a n g +ngoay n g o a y +ngoc n g o c +ngoe n g o e +ngoi n g o i +ngon n g o n +ngong n g o n g +ngoài n g o à i +ngoàm n g o à m +ngoác n g o á c +ngoách n g o á c h +ngoái n g o á i +ngoáo n g o á o +ngoáy n g o á y +ngoãn n g o ã n +ngoèo n g o è o +ngoéo n g o é o +ngoại n g o ạ i +ngoạm n g o ạ m +ngoạn n g o ạ n +ngoải n g o ả i +ngoảnh n g o ả n h +ngoắc n g o ắ c +ngoắt n g o ắ t +ngoằn n g o ằ n +ngoằng n g o ằ n g +ngoẵng n g o ẵ n g +ngoặc n g o ặ c +ngoặt n g o ặ t +ngu n g u +nguy n g u y +nguyên n g u y ê n +nguyền n g u y ề n +nguyển n g u y ể n +nguyễn n g u y ễ n +nguyện n g u y ệ n +nguyệt n g u y ệ t +nguôi n g u ô i +nguẩy n g u ẩ y +nguậy n g u ậ y +nguệch n g u ệ c h +nguồi n g u ồ i +nguồn n g u ồ n +nguội n g u ộ i +nguỵ n g u ỵ +ngà n g à +ngài n g à i +ngàm n g à m +ngàn n g à n +ngàng n g à n g +ngành n g à n h +ngào n g à o +ngày n g à y +ngác n g á c +ngách n g á c h +ngái n g á i +ngán n g á n +ngáng n g á n g +ngáo n g á o +ngáp n g á p +ngát n g á t +ngáu n g á u +ngáy n g á y +ngâm n g â m +ngân n g â n +ngâu n g â u +ngây n g â y +ngã n g ã +ngãi n g ã i +ngía n g í a +ngò n g ò +ngòi n g ò i +ngòm n g ò m +ngó n g ó +ngóc n g ó c +ngóe n g ó e +ngói n g ó i +ngón n g ó n +ngóng n g ó n g +ngóp n g ó p +ngót n g ó t +ngô n g ô +ngôi n g ô i +ngôn n g ô n +ngông n g ô n g +ngõ n g õ +ngùi n g ù i +ngùn n g ù n +ngùng n g ù n g +ngúc n g ú c +ngúng n g ú n g +ngút n g ú t +ngăm n g ă m +ngăn n g ă n +ngũ n g ũ +ngơ n g ơ +ngơi n g ơ i +ngư n g ư +ngưa n g ư a +ngưng n g ư n g +ngưu n g ư u +ngươi n g ư ơ i +ngước n g ư ớ c +người n g ư ờ i +ngưởng n g ư ở n g +ngưỡng n g ư ỡ n g +ngược n g ư ợ c +ngượng n g ư ợ n g +ngạc n g ạ c +ngạch n g ạ c h +ngại n g ạ i +ngạn n g ạ n +ngạnh n g ạ n h +ngạo n g ạ o +ngạt n g ạ t +ngả n g ả +ngải n g ả i +ngảnh n g ả n h +ngấm n g ấ m +ngấn n g ấ n +ngất n g ấ t +ngấu n g ấ u +ngấy n g ấ y +ngầm n g ầ m +ngần n g ầ n +ngầu n g ầ u +ngầy n g ầ y +ngẩm n g ẩ m +ngẩn n g ẩ n +ngẩng n g ẩ n g +ngẫm n g ẫ m +ngẫu n g ẫ u +ngậm n g ậ m +ngập n g ậ p +ngậu n g ậ u +ngậy n g ậ y +ngắc n g ắ c +ngắm n g ắ m +ngắn n g ắ n +ngắt n g ắ t +ngằn n g ằ n +ngẳng n g ẳ n g +ngẵng n g ẵ n g +ngặt n g ặ t +ngọ n g ọ +ngọc n g ọ c +ngọn n g ọ n +ngọng n g ọ n g +ngọt n g ọ t +ngỏ n g ỏ +ngố n g ố +ngốc n g ố c +ngốn n g ố n +ngồi n g ồ i +ngồm n g ồ m +ngồn n g ồ n +ngồng n g ồ n g +ngổ n g ổ +ngổm n g ổ m +ngổn n g ổ n +ngỗ n g ỗ +ngỗng n g ỗ n g +ngộ n g ộ +ngộn n g ộ n +ngộp n g ộ p +ngột n g ộ t +ngớ n g ớ +ngớn n g ớ n +ngớt n g ớ t +ngờ n g ờ +ngời n g ờ i +ngỡ n g ỡ +ngợ n g ợ +ngợi n g ợ i +ngợm n g ợ m +ngợp n g ợ p +ngụ n g ụ +ngụa n g ụ a +ngục n g ụ c +ngụm n g ụ m +ngụp n g ụ p +ngụt n g ụ t +ngụy n g ụ y +ngủ n g ủ +ngủi n g ủ i +ngủn n g ủ n +ngứ n g ứ +ngứa n g ứ a +ngừ n g ừ +ngừa n g ừ a +ngừng n g ừ n g +ngửa n g ử a +ngửi n g ử i +ngửng n g ử n g +ngữ n g ữ +ngự n g ự +ngựa n g ự a +ngực n g ự c +ngựu n g ự u +nha n h a +nhai n h a i +nham n h a m +nhan n h a n +nhang n h a n g +nhanh n h a n h +nhao n h a o +nhau n h a u +nhay n h a y +nhe n h e +nhem n h e m +nhen n h e n +nheo n h e o +nhi n h i +nhin n h i n +nhiu n h i u +nhiên n h i ê n +nhiêu n h i ê u +nhiếc n h i ế c +nhiếp n h i ế p +nhiều n h i ề u +nhiễm n h i ễ m +nhiễu n h i ễ u +nhiệm n h i ệ m +nhiệt n h i ệ t +nho n h o +nhoai n h o a i +nhoe n h o e +nhoen n h o e n +nhoi n h o i +nhom n h o m +nhong n h o n g +nhoà n h o à +nhoài n h o à i +nhoàm n h o à m +nhoáng n h o á n g +nhoét n h o é t +nhoạng n h o ạ n g +nhoẻn n h o ẻ n +nhu n h u +nhum n h u m +nhung n h u n g +nhuyễn n h u y ễ n +nhuần n h u ầ n +nhuận n h u ậ n +nhuệ n h u ệ +nhuốc n h u ố c +nhuốm n h u ố m +nhuộm n h u ộ m +nhà n h à +nhài n h à i +nhàm n h à m +nhàn n h à n +nhàng n h à n g +nhành n h à n h +nhào n h à o +nhàu n h à u +nhá n h á +nhác n h á c +nhách n h á c h +nhái n h á i +nhám n h á m +nháng n h á n g +nhánh n h á n h +nháo n h á o +nháp n h á p +nhát n h á t +nháy n h á y +nhâm n h â m +nhân n h â n +nhã n h ã +nhãi n h ã i +nhãn n h ã n +nhãng n h ã n g +nhão n h ã o +nhè n h è +nhèm n h è m +nhèo n h è o +nhé n h é +nhép n h é p +nhét n h é t +nhì n h ì +nhìn n h ì n +nhìu n h ì u +nhí n h í +nhích n h í c h +nhím n h í m +nhíp n h í p +nhít n h í t +nhíu n h í u +nhò n h ò +nhòa n h ò a +nhòe n h ò e +nhòm n h ò m +nhó n h ó +nhóc n h ó c +nhói n h ó i +nhóm n h ó m +nhón n h ó n +nhóng n h ó n g +nhóp n h ó p +nhót n h ó t +nhô n h ô +nhôm n h ô m +nhôn n h ô n +nhông n h ô n g +nhõ n h õ +nhõm n h õ m +nhõn n h õ n +nhõng n h õ n g +nhù n h ù +nhùi n h ù i +nhùng n h ù n g +nhú n h ú +nhúa n h ú a +nhúc n h ú c +nhúm n h ú m +nhún n h ú n +nhúng n h ú n g +nhút n h ú t +nhăm n h ă m +nhăn n h ă n +nhăng n h ă n g +nhĩ n h ĩ +nhũ n h ũ +nhũng n h ũ n g +nhơ n h ơ +nhơi n h ơ i +nhơn n h ơ n +như n h ư +nhưng n h ư n g +nhướn n h ư ớ n +nhướng n h ư ớ n g +nhường n h ư ờ n g +nhưỡng n h ư ỡ n g +nhược n h ư ợ c +nhượng n h ư ợ n g +nhạc n h ạ c +nhại n h ạ i +nhạn n h ạ n +nhạnh n h ạ n h +nhạo n h ạ o +nhạt n h ạ t +nhạy n h ạ y +nhả n h ả +nhải n h ả i +nhảm n h ả m +nhản n h ả n +nhảnh n h ả n h +nhảy n h ả y +nhấc n h ấ c +nhấm n h ấ m +nhấn n h ấ n +nhấp n h ấ p +nhất n h ấ t +nhầm n h ầ m +nhầy n h ầ y +nhẩm n h ẩ m +nhẩn n h ẩ n +nhẩu n h ẩ u +nhẩy n h ẩ y +nhẫn n h ẫ n +nhẫy n h ẫ y +nhậm n h ậ m +nhận n h ậ n +nhập n h ậ p +nhật n h ậ t +nhậu n h ậ u +nhắc n h ắ c +nhắm n h ắ m +nhắn n h ắ n +nhắt n h ắ t +nhằm n h ằ m +nhằn n h ằ n +nhằng n h ằ n g +nhẵn n h ẵ n +nhặm n h ặ m +nhặn n h ặ n +nhặng n h ặ n g +nhặt n h ặ t +nhẹ n h ẹ +nhẹm n h ẹ m +nhẹn n h ẹ n +nhẹo n h ẹ o +nhẹp n h ẹ p +nhẹt n h ẹ t +nhẻm n h ẻ m +nhẽ n h ẽ +nhẽo n h ẽ o +nhếch n h ế c h +nhễ n h ễ +nhệch n h ệ c h +nhện n h ệ n +nhệu n h ệ u +nhỉ n h ỉ +nhỉnh n h ỉ n h +nhị n h ị +nhịn n h ị n +nhịp n h ị p +nhịt n h ị t +nhịu n h ị u +nhọ n h ọ +nhọc n h ọ c +nhọn n h ọ n +nhọt n h ọ t +nhỏ n h ỏ +nhỏm n h ỏ m +nhố n h ố +nhối n h ố i +nhốt n h ố t +nhồi n h ồ i +nhồm n h ồ m +nhồn n h ồ n +nhồng n h ồ n g +nhổ n h ổ +nhổm n h ổ m +nhổn n h ổ n +nhộn n h ộ n +nhộng n h ộ n g +nhột n h ộ t +nhớ n h ớ +nhớp n h ớ p +nhớt n h ớ t +nhờ n h ờ +nhờn n h ờ n +nhở n h ở +nhởn n h ở n +nhỡ n h ỡ +nhợt n h ợ t +nhụa n h ụ a +nhục n h ụ c +nhụt n h ụ t +nhụy n h ụ y +nhủ n h ủ +nhủi n h ủ i +nhủn n h ủ n +nhứ n h ứ +nhức n h ứ c +nhứt n h ứ t +nhừ n h ừ +nhử n h ử +nhữ n h ữ +những n h ữ n g +nhựa n h ự a +nhựt n h ự t +ni n i +nia n i a +niagara n i a g a r a +nicholas n i c h o l a s +nick n i c k +nicki n i c k i +nicole n i c o l e +nigeria n i g e r i a +night n i g h t +nile n i l e +nin n i n +ninh n i n h +ninja n i n j a +nino n i n o +niu n i u +niêm n i ê m +niên n i ê n +niêu n i ê u +niết n i ế t +niềm n i ề m +niềng n i ề n g +niệm n i ệ m +niệu n i ệ u +no n o +noami n o a m i +noel n o e l +noi n o i +nolting n o l t i n g +nom n o m +nomo n o m o +non n o n +nong n o n g +noriko n o r i k o +norodom n o r o d o m +north n o r t h +norwich n o r w i c h +not n o t +nottingham n o t t i n g h a m +now n o w +noãn n o ã n +npk n p k +nua n u a +nude n u d e +nung n u n g +nuôi n u ô i +nuông n u ô n g +nuốc n u ố c +nuối n u ố i +nuốt n u ố t +nuột n u ộ t +ny n y +nylon n y l o n +nà n à +nài n à i +nàm n à m +nàn n à n +nàng n à n g +nành n à n h +nào n à o +này n à y +ná n á +nác n á c +nách n á c h +nái n á i +nám n á m +nán n á n +náo n á o +nát n á t +náu n á u +náy n á y +nâng n â n g +nâu n â u +nây n â y +nã n ã +nãm n ã m +não n ã o +nãy n ã y +nè n è +nèo n è o +né n é +ném n é m +nén n é n +néo n é o +nép n é p +nét n é t +nê n ê +nêm n ê m +nên n ê n +nêu n ê u +nì n ì +nình n ì n h +nía n í a +ních n í c h +nín n í n +nính n í n h +nít n í t +níu n í u +nò n ò +nòi n ò i +nòng n ò n g +nó n ó +nóc n ó c +nói n ó i +nón n ó n +nóng n ó n g +nót n ó t +nô n ô +nôi n ô i +nôm n ô m +nôn n ô n +nông n ô n g +nõn n õ n +nùn n ù n +nùng n ù n g +núa n ú a +núc n ú c +núi n ú i +núm n ú m +núng n ú n g +núp n ú p +nút n ú t +năm n ă m +nămg n ă m g +năn n ă n +năng n ă n g +nĩa n ĩ a +nũng n ũ n g +nơ n ơ +nơi n ơ i +nơm n ơ m +nư n ư +nưa n ư a +nương n ư ơ n g +nước n ư ớ c +nướng n ư ớ n g +nướu n ư ớ u +nườm n ư ờ m +nượp n ư ợ p +nạ n ạ +nạc n ạ c +nại n ạ i +nạm n ạ m +nạn n ạ n +nạng n ạ n g +nạnh n ạ n h +nạo n ạ o +nạp n ạ p +nạt n ạ t +nả n ả +nải n ả i +nản n ả n +nảy n ả y +nấc n ấ c +nấm n ấ m +nấng n ấ n g +nấp n ấ p +nấu n ấ u +nấy n ấ y +nầm n ầ m +nần n ầ n +nầy n ầ y +nẩy n ẩ y +nẫm n ẫ m +nẫng n ẫ n g +nậm n ậ m +nập n ậ p +nậu n ậ u +nắc n ắ c +nắm n ắ m +nắn n ắ n +nắng n ắ n g +nắp n ắ p +nằm n ằ m +nằn n ằ n +nằng n ằ n g +nẵng n ẵ n g +nặc n ặ c +nặn n ặ n +nặng n ặ n g +nẹp n ẹ p +nẹt n ẹ t +nẻ n ẻ +nẻo n ẻ o +nếm n ế m +nến n ế n +nếp n ế p +nết n ế t +nếu n ế u +nề n ề +nền n ề n +nể n ể +nệ n ệ +nệm n ệ m +nện n ệ n +nỉ n ỉ +nịch n ị c h +nịnh n ị n h +nịt n ị t +nịu n ị u +nọ n ọ +nọc n ọ c +nọng n ọ n g +nọt n ọ t +nỏ n ỏ +nố n ố +nốc n ố c +nối n ố i +nống n ố n g +nốt n ố t +nồ n ồ +nồi n ồ i +nồm n ồ m +nồng n ồ n g +nổ n ổ +nổi n ổ i +nỗ n ỗ +nỗi n ỗ i +nộ n ộ +nộc n ộ c +nội n ộ i +nộm n ộ m +nộn n ộ n +nộp n ộ p +nớ n ớ +nới n ớ i +nớp n ớ p +nớt n ớ t +nở n ở +nỡ n ỡ +nợ n ợ +nụ n ụ +nứa n ứ a +nức n ứ c +nứt n ứ t +nửa n ử a +nữ n ữ +nữa n ữ a +nữanh n ữ a n h +nữu n ữ u +nự n ự +nực n ự c +nựng n ự n g +o o +oa o a +oai o a i +oak o a k +oan o a n +oang o a n g +oanh o a n h +obama o b a m a +obi o b i +obon o b o n +odyssey o d y s s e y +oe o e +of o f +off o f f +office o f f i c e +offline o f f l i n e +ogihara o g i h a r a +ohno o h n o +oi o i +ok o k +oka o k a +okada o k a d a +okamoto o k a m o t o +okawa o k a w a +old o l d +oldman o l d m a n +olga o l g a +oliver o l i v e r +olympic o l y m p i c +om o m +one o n e +ong o n g +online o n l i n e +opec o p e c +open o p e n +opera o p e r a +option o p t i o n +options o p t i o n s +or o r +orange o r a n g e +organization o r g a n i z a t i o n +orhan o r h a n +orlando o r l a n d o +osaka o s a k a +oscar o s c a r +oser o s e r +otc o t c +outback o u t b a c k +outlook o u t l o o k +owen o w e n +oxi o x i +oxy o x y +oành o à n h +oác o á c +oách o á c h +oái o á i +oán o á n +oánh o á n h +oăm o ă m +oạp o ạ p +oải o ả i +oắt o ắ t +oằn o ằ n +oặt o ặ t +p p +pa p a +paa p a a +packs p a c k s +padu p a d u +paige p a i g e +pair p a i r +pakistan p a k i s t a n +palm p a l m +pamuk p a m u k +pan p a n +panh p a n h +pao p a o +paparazzi p a p a r a z z i +paradise p a r a d i s e +pari p a r i +paris p a r i s +park p a r k +partition p a r t i t i o n +pass p a s s +password p a s s w o r d +patrick p a t r i c k +paul p a u l +paypass p a y p a s s +pe p e +pearson p e a r s o n +pedro p e d r o +peggy p e g g y +pen p e n +penalty p e n a l t y +penn p e n n +penny p e n n y +pentax p e n t a x +penthouse p e n t h o u s e +pentium p e n t i u m +pep p e p +pepe p e p e +pepsi p e p s i +pepto p e p t o +perejil p e r e j i l +perez p e r e z +perin p e r i n +perrotta p e r r o t t a +personalize p e r s o n a l i z e +peso p e s o +petaling p e t a l i n g +peter p e t e r +petroleum p e t r o l e u m +petrolimex p e t r o l i m e x +pha p h a +phai p h a i +phan p h a n +phang p h a n g +phanh p h a n h +phantom p h a n t o m +phao p h a o +phau p h a u +phay p h a y +phe p h e +phen p h e n +pheng p h e n g +phi p h i +phil p h i l +philippines p h i l i p p i n e s +phillipines p h i l l i p i n e s +phim p h i m +phin p h i n +phiu p h i u +phiên p h i ê n +phiêng p h i ê n g +phiêu p h i ê u +phiếm p h i ế m +phiến p h i ế n +phiết p h i ế t +phiếu p h i ế u +phiền p h i ề n +phiện p h i ệ n +pho p h o +phoenix p h o e n i x +phom p h o m +phone p h o n e +phong p h o n g +photos p h o t o s +photoshop p h o t o s h o p +phu p h u +phui p h u i +phun p h u n +phung p h u n g +phuy p h u y +phà p h à +phàm p h à m +phàn p h à n +phàng p h à n g +phào p h à o +phá p h á +phác p h á c +phách p h á c h +phái p h á i +phán p h á n +pháo p h á o +pháp p h á p +phát p h á t +phân p h â n +phây p h â y +phè p h è +phèn p h è n +phèng p h è n g +phèo p h è o +phéng p h é n g +phép p h é p +phét p h é t +phê p h ê +phên p h ê n +phì p h ì +phình p h ì n h +phí p h í +phía p h í a +phích p h í c h +phím p h í m +phính p h í n h +phò p h ò +phòi p h ò i +phòng p h ò n g +phó p h ó +phóc p h ó c +phóng p h ó n g +phót p h ó t +phô p h ô +phôi p h ô i +phôn p h ô n +phông p h ô n g +phù p h ù +phùn p h ù n +phùng p h ù n g +phú p h ú +phúc p h ú c +phúng p h ú n g +phút p h ú t +phăng p h ă n g +phĩnh p h ĩ n h +phũ p h ũ +phơ p h ơ +phơi p h ơ i +phơn p h ơ n +phương p h ư ơ n g +phước p h ư ớ c +phướn p h ư ớ n +phường p h ư ờ n g +phượng p h ư ợ n g +phượt p h ư ợ t +phạc p h ạ c +phạm p h ạ m +phạng p h ạ n g +phạt p h ạ t +phả p h ả +phải p h ả i +phản p h ả n +phảng p h ả n g +phảy p h ả y +phấn p h ấ n +phấp p h ấ p +phất p h ấ t +phầm p h ầ m +phần p h ầ n +phẩm p h ẩ m +phẩy p h ẩ y +phẫn p h ẫ n +phẫu p h ẫ u +phận p h ậ n +phập p h ậ p +phật p h ậ t +phắc p h ắ c +phẳng p h ẳ n g +phẹt p h ẹ t +phế p h ế +phếch p h ế c h +phết p h ế t +phề p h ề +phều p h ề u +phễu p h ễ u +phệ p h ệ +phệnh p h ệ n h +phỉ p h ỉ +phỉnh p h ỉ n h +phịch p h ị c h +phịu p h ị u +phọt p h ọ t +phỏng p h ỏ n g +phố p h ố +phốc p h ố c +phối p h ố i +phốt p h ố t +phồm p h ồ m +phồn p h ồ n +phồng p h ồ n g +phổ p h ổ +phổi p h ổ i +phổng p h ổ n g +phỗng p h ỗ n g +phộng p h ộ n g +phớ p h ớ +phới p h ớ i +phớn p h ớ n +phớt p h ớ t +phờ p h ờ +phở p h ở +phỡn p h ỡ n +phụ p h ụ +phục p h ụ c +phụng p h ụ n g +phủ p h ủ +phủi p h ủ i +phức p h ứ c +pi p i +piaggio p i a g g i o +piano p i a n o +picaso p i c a s o +piccadilly p i c c a d i l l y +picture p i c t u r e +pictures p i c t u r e s +piero p i e r o +pierre p i e r r e +pimlico p i m l i c o +pin p i n +pinewood p i n e w o o d +pique p i q u e +pitt p i t t +pizza p i z z a +piêu p i ê u +plan p l a n +plastic p l a s t i c +play p l a y +player p l a y e r +plaza p l a z a +pleiku p l e i k u +plus p l u s +plymouth p l y m o u t h +podium p o d i u m +polo p o l o +pom p o m +pop p o p +portland p o r t l a n d +pos p o s +pose p o s e +posh p o s h +post p o s t +potter p o t t e r +pound p o u n d +power p o w e r +poznań p o z n a ń +premier p r e m i e r +premiership p r e m i e r s h i p +premium p r e m i u m +preston p r e s t o n +pretty p r e t t y +preview p r e v i e w +prius p r i u s +propane p r o p a n e +properties p r o p e r t i e s +protection p r o t e c t i o n +protein p r o t e i n +provence p r o v e n c e +proxy p r o x y +pstn p s t n +pu p u +public p u b l i c +pudding p u d d i n g +purchase p u r c h a s e +puri p u r i +push p u s h +putin p u t i n +puốc p u ố c +pài p à i +pành p à n h +pác p á c +pán p á n +pê p ê +pí p í +pò p ò +pót p ó t +pô p ô +pôn p ô n +pơ p ơ +pải p ả i +pắc p ắ c +qatar q a t a r +qua q u a +quai q u a i +quan q u a n +quang q u a n g +quanh q u a n h +quay q u a y +que q u e +quen q u e n +queo q u e o +qui q u i +quoạng q u o ạ n g +quy q u y +quyên q u y ê n +quyến q u y ế n +quyết q u y ế t +quyền q u y ề n +quyển q u y ể n +quyện q u y ệ n +quyệt q u y ệ t +quà q u à +quài q u à i +quàng q u à n g +quày q u à y +quá q u á +quác q u á c +quách q u á c h +quái q u á i +quán q u á n +quáng q u á n g +quánh q u á n h +quát q u á t +quân q u â n +quâng q u â n g +quây q u â y +quãng q u ã n g +què q u è +quèn q u è n +quèo q u è o +quét q u é t +quê q u ê +quên q u ê n +quì q u ì +quí q u í +quít q u í t +quý q u ý +quýnh q u ý n h +quýt q u ý t +quăm q u ă m +quăn q u ă n +quăng q u ă n g +quĩ q u ĩ +quơ q u ơ +quạc q u ạ c +quạch q u ạ c h +quại q u ạ i +quạng q u ạ n g +quạnh q u ạ n h +quạt q u ạ t +quả q u ả +quải q u ả i +quản q u ả n +quảng q u ả n g +quảy q u ả y +quấn q u ấ n +quất q u ấ t +quấy q u ấ y +quần q u ầ n +quầng q u ầ n g +quầy q u ầ y +quẩn q u ẩ n +quẫn q u ẫ n +quẫy q u ẫ y +quận q u ậ n +quật q u ậ t +quậy q u ậ y +quắc q u ắ c +quắn q u ắ n +quắp q u ắ p +quắt q u ắ t +quằn q u ằ n +quẳng q u ẳ n g +quặc q u ặ c +quặm q u ặ m +quặn q u ặ n +quặng q u ặ n g +quặt q u ặ t +quẹo q u ẹ o +quẹt q u ẹ t +quế q u ế +quết q u ế t +quềnh q u ề n h +quệ q u ệ +quện q u ệ n +quệnh q u ệ n h +quệt q u ệ t +quỉ q u ỉ +quị q u ị +quốc q u ố c +quới q u ớ i +quớt q u ớ t +quờ q u ờ +quờn q u ờ n +quở q u ở +quỳ q u ỳ +quỳnh q u ỳ n h +quỵ q u ỵ +quỵt q u ỵ t +quỷ q u ỷ +quỹ q u ỹ +qúy q ú y +r r +ra r a +rabbani r a b b a n i +racer r a c e r +rachel r a c h e l +racing r a c i n g +radar r a d a r +radio r a d i o +rafa r a f a +rafael r a f a e l +rai r a i +rail r a i l +ram r a m +ramen r a m e n +ran r a n +rang r a n g +ranh r a n h +rao r a o +rap r a p +raphael r a p h a e l +ratrầm r a t r ầ m +rau r a u +ray r a y +raya r a y a +rayman r a y m a n +rađiô r a đ i ô +re r e +real r e a l +really r e a l l y +rectangle r e c t a n g l e +reed r e e d +refurbished r e f u r b i s h e d +regent r e g e n t +region r e g i o n +rem r e m +reminders r e m i n d e r s +remote r e m o t e +removal r e m o v a l +remy r e m y +ren r e n +rename r e n a m e +reng r e n g +renta r e n t a +reo r e o +resort r e s o r t +respiratory r e s p i r a t o r y +reynolds r e y n o l d s +rhone r h o n e +ri r i +ria r i a +rica r i c a +richard r i c h a r d +richter r i c h t e r +ricoh r i c o h +rihanna r i h a n n a +rim r i m +rinaldi r i n a l d i +ringgit r i n g g i t +rinh r i n h +rio r i o +rios r i o s +riu r i u +riêng r i ê n g +riêu r i ê u +riếp r i ế p +riết r i ế t +riềng r i ề n g +riệt r i ệ t +ro r o +roadshow r o a d s h o w +robben r o b b e n +robert r o b e r t +roberts r o b e r t s +robinson r o b i n s o n +robocon r o b o c o n +robot r o b o t +robusta r o b u s t a +rock r o c k +rockefeller r o c k e f e l l e r +rocker r o c k e r +rocket r o c k e t +rocky r o c k y +rodrigo r o d r i g o +rogers r o g e r s +roi r o i +rolex r o l e x +rom r o m +roma r o m a +romania r o m a n i a +rome r o m e +ron r o n +rong r o n g +room r o o m +rooney r o o n e y +roong r o o n g +root r o o t +rootkit r o o t k i t +rose r o s e +rosemead r o s e m e a d +roy r o y +ru r u +rua r u a +ruby r u b y +rui r u i +rum r u m +rumi r u m i +run r u n +rung r u n g +rupiah r u p i a h +russell r u s s e l l +ruốc r u ố c +ruồi r u ồ i +ruồng r u ồ n g +ruổi r u ổ i +ruỗng r u ỗ n g +ruộng r u ộ n g +ruột r u ộ t +ry r y +ryan r y a n +rà r à +ràng r à n g +rành r à n h +rào r à o +rày r à y +rác r á c +rách r á c h +rái r á i +rám r á m +rán r á n +ráng r á n g +ráo r á o +ráp r á p +rát r á t +ráy r á y +râm r â m +rân r â n +râu r â u +rã r ã +rãi r ã i +rãnh r ã n h +rãy r ã y +rè r è +rèm r è m +rèn r è n +rèo r è o +rén r é n +réo r é o +rét r é t +rê r ê +rên r ê n +rêu r ê u +rì r ì +rìa r ì a +rình r ì n h +rìu r ì u +rí r í +rích r í c h +rít r í t +ríu r í u +rò r ò +ròi r ò i +ròm r ò m +ròng r ò n g +ró r ó +róc r ó c +rói r ó i +róm r ó m +rón r ó n +rót r ó t +rô r ô +rôi r ô i +rôm r ô m +rôn r ô n +rông r ô n g +rôì r ô ì +rõ r õ +rùa r ù a +rùi r ù i +rùm r ù m +rùng r ù n g +rú r ú +rúc r ú c +rúm r ú m +rúng r ú n g +rút r ú t +răm r ă m +răn r ă n +răng r ă n g +rĩ r ĩ +rũ r ũ +rơ r ơ +rơi r ơ i +rơm r ơ m +rơn r ơ n +rưng r ư n g +rươi r ư ơ i +rương r ư ơ n g +rươu r ư ơ u +rước r ư ớ c +rưới r ư ớ i +rướm r ư ớ m +rướn r ư ớ n +rười r ư ờ i +rườm r ư ờ m +rưởi r ư ở i +rưỡi r ư ỡ i +rượi r ư ợ i +rượt r ư ợ t +rượu r ư ợ u +rạ r ạ +rạc r ạ c +rạch r ạ c h +rạn r ạ n +rạng r ạ n g +rạo r ạ o +rạp r ạ p +rạt r ạ t +rạy r ạ y +rả r ả +rải r ả i +rảnh r ả n h +rảo r ả o +rấn r ấ n +rấp r ấ p +rất r ấ t +rầm r ầ m +rần r ầ n +rầu r ầ u +rầy r ầ y +rẩy r ẩ y +rẫy r ẫ y +rậm r ậ m +rận r ậ n +rập r ậ p +rật r ậ t +rắc r ắ c +rắm r ắ m +rắn r ắ n +rắp r ắ p +rắt r ắ t +rằm r ằ m +rằn r ằ n +rằng r ằ n g +rặn r ặ n +rặng r ặ n g +rẹo r ẹ o +rẹt r ẹ t +rẻ r ẻ +rẽ r ẽ +rế r ế +rến r ế n +rết r ế t +rếu r ế u +rề r ề +rền r ề n +rể r ể +rễ r ễ +rệ r ệ +rệt r ệ t +rệu r ệ u +rỉ r ỉ +rỉa r ỉ a +rỉnh r ỉ n h +rịa r ị a +rịch r ị c h +rịn r ị n +rịp r ị p +rịt r ị t +rọ r ọ +rọc r ọ c +rọi r ọ i +rỏi r ỏ i +rốc r ố c +rối r ố i +rốn r ố n +rống r ố n g +rốp r ố p +rốt r ố t +rồ r ồ +rồi r ồ i +rồng r ồ n g +rổ r ổ +rỗ r ỗ +rỗi r ỗ i +rỗng r ỗ n g +rộ r ộ +rộc r ộ c +rộm r ộ m +rộn r ộ n +rộng r ộ n g +rộp r ộ p +rớm r ớ m +rớp r ớ p +rớt r ớ t +rờ r ờ +rời r ờ i +rờm r ờ m +rờn r ờ n +rở r ở +rởm r ở m +rỡ r ỡ +rỡn r ỡ n +rợ r ợ +rợi r ợ i +rợn r ợ n +rợp r ợ p +rục r ụ c +rụi r ụ i +rụm r ụ m +rụng r ụ n g +rụt r ụ t +rủ r ủ +rủa r ủ a +rủi r ủ i +rủn r ủ n +rủng r ủ n g +rứa r ứ a +rức r ứ c +rứt r ứ t +rừng r ừ n g +rửa r ử a +rữa r ữ a +rựa r ự a +rực r ự c +s s +sa s a +sachiko s a c h i k o +sachs s a c h s +safari s a f a r i +sai s a i +saigon s a i g o n +saijo s a i j o +saitama s a i t a m a +sakharov s a k h a r o v +salad s a l a d +sale s a l e +saleh s a l e h +salem s a l e m +sales s a l e s +sally s a l l y +salon s a l o n +saloon s a l o o n +salsa s a l s a +salt s a l t +sam s a m +samba s a m b a +samsonite s a m s o n i t e +samsung s a m s u n g +san s a n +sandra s a n d r a +sandwich s a n d w i c h +sang s a n g +sanh s a n h +santa s a n t a +santiago s a n t i a g o +sao s a o +sapa s a p a +saphira s a p h i r a +saraburi s a r a b u r i +sarah s a r a h +sato s a t o +sau s a u +saudi s a u d i +saviola s a v i o l a +savior s a v i o r +savoy s a v o y +say s a y +scala s c a l a +scan s c a n +scandal s c a n d a l +scandinavian s c a n d i n a v i a n +scarf s c a r f +schilling s c h i l l i n g +school s c h o o l +schuster s c h u s t e r +science s c i e n c e +scooter s c o o t e r +scotch s c o t c h +scotland s c o t l a n d +scott s c o t t +sctv s c t v +se s e +search s e a r c h +seaside s e a s i d e +seat s e a t +seatte s e a t t e +seattle s e a t t l e +sec s e c +secure s e c u r e +security s e c u r i t y +sedan s e d a n +seifert s e i f e r t +selective s e l e c t i v e +selena s e l e n a +sen s e n +send s e n d +sendai s e n d a i +seng s e n g +senko s e n k o +seo s e o +seoul s e o u l +sequoia s e q u o i a +server s e r v e r +set s e t +setting s e t t i n g +settings s e t t i n g s +sex s e x +sexy s e x y +sh s h +shape s h a p e +share s h a r e +sharon s h a r o n +sharp s h a r p +shayla s h a y l a +shayne s h a y n e +she s h e +sheer s h e e r +shell s h e l l +shelly s h e l l y +sheraton s h e r a t o n +sherlock s h e r l o c k +shichi s h i c h i +shihara s h i h a r a +shima s h i m a +shimada s h i m a d a +shinshu s h i n s h u +ship s h i p +shop s h o p +short s h o r t +show s h o w +showbiz s h o w b i z +showtime s h o w t i m e +shubert s h u b e r t +si s i +sichaleune s i c h a l e u n e +side s i d e +signature s i g n a t u r e +sihamoni s i h a m o n i +silicon s i l i c o n +silvia s i l v i a +sim s i m +simpson s i m p s o n +sin s i n +singapore s i n g a p o r e +singha s i n g h a +single s i n g l e +sinh s i n h +siphandon s i p h a n d o n +siphandone s i p h a n d o n e +sitcom s i t c o m +six s i x +siêng s i ê n g +siêu s i ê u +siết s i ế t +skate s k a t e +sky s k y +skype s k y p e +skyway s k y w a y +slam s l a m +sleep s l e e p +sloan s l o a n +smart s m a r t +smartphone s m a r t p h o n e +smith s m i t h +smokey s m o k e y +snapchat s n a p c h a t +so s o +soda s o d a +sofa s o f a +soft s o f t +software s o f t w a r e +soho s o h o +soi s o i +sol s o l +some s o m e +somphone s o m p h o n e +son s o n +song s o n g +sonne s o n n e +sonya s o n y a +soo s o o +sooke s o o k e +sophie s o p h i e +sorry s o r r y +sosan s o s a n +soup s o u p +source s o u r c e +south s o u t h +southgate s o u t h g a t e +soái s o á i +soát s o á t +soóc s o ó c +soạn s o ạ n +soạng s o ạ n g +soạt s o ạ t +spa s p a +spacey s p a c e y +spears s p e a r s +speed s p e e d +spice s p i c e +sporting s p o r t i n g +sports s p o r t s +spyware s p y w a r e +square s q u a r e +ssi s s i +stamford s t a m f o r d +stan s t a n +stanford s t a n f o r d +stanton s t a n t o n +starcraft s t a r c r a f t +stark s t a r k +start s t a r t +starter s t a r t e r +startup s t a r t u p +station s t a t i o n +status s t a t u s +steak s t e a k +steering s t e e r i n g +steve s t e v e +stevie s t e v i e +stewart s t e w a r t +stick s t i c k +stock s t o c k +stoke s t o k e +stone s t o n e +stonehenge s t o n e h e n g e +store s t o r e +story s t o r y +stream s t r e a m +street s t r e e t +stress s t r e s s +stuart s t u a r t +studio s t u d i o +stuttgart s t u t t g a r t +style s t y l e +su s u +subang s u b a n g +subic s u b i c +sudan s u d a n +suk s u k +sulfa s u l f a +sum s u m +sumo s u m o +sun s u n +sundance s u n d a n c e +sung s u n g +sunny s u n n y +sunroof s u n r o o f +sunset s u n s e t +supha s u p h a +support s u p p o r t +surat s u r a t +surface s u r f a c e +susan s u s a n +sushi s u s h i +suspect s u s p e c t +suy s u y +suyển s u y ể n +suyễn s u y ễ n +suzuki s u z u k i +suê s u ê +suôn s u ô n +suông s u ô n g +suýt s u ý t +suất s u ấ t +suối s u ố i +suốt s u ố t +suỵt s u ỵ t +swift s w i f t +swing s w i n g +sydney s y d n e y +symantec s y m a n t e c +sync s y n c +syria s y r i a +system s y s t e m +sà s à +sài s à i +sàm s à m +sàn s à n +sàng s à n g +sành s à n h +sào s à o +sá s á +sác s á c +sách s á c h +sái s á i +sám s á m +sán s á n +sáng s á n g +sánh s á n h +sáo s á o +sáp s á p +sát s á t +sáu s á u +sâm s â m +sân s â n +sâu s â u +sãi s ã i +sèo s è o +séc s é c +sém s é m +sét s é t +sê s ê +sên s ê n +sênh s ê n h +sêu s ê u +sì s ì +sính s í n h +sít s í t +sò s ò +sòm s ò m +sòng s ò n g +sóc s ó c +sói s ó i +són s ó n +sóng s ó n g +sót s ó t +sô s ô +sôi s ô i +sông s ô n g +sõi s õ i +sùi s ù i +sùng s ù n g +sú s ú +súc s ú c +sún s ú n +súng s ú n g +súp s ú p +sút s ú t +súy s ú y +săm s ă m +săn s ă n +sĩ s ĩ +sũng s ũ n g +sơ s ơ +sơm s ơ m +sơn s ơ n +sư s ư +sưa s ư a +sưng s ư n g +sưu s ư u +sương s ư ơ n g +sướng s ư ớ n g +sướt s ư ớ t +sườn s ư ờ n +sường s ư ờ n g +sưởi s ư ở i +sượng s ư ợ n g +sượt s ư ợ t +sạ s ạ +sạc s ạ c +sạch s ạ c h +sạm s ạ m +sạn s ạ n +sạo s ạ o +sạp s ạ p +sạt s ạ t +sả s ả +sải s ả i +sản s ả n +sảng s ả n g +sảnh s ả n h +sảo s ả o +sảy s ả y +sấm s ấ m +sấn s ấ n +sấp s ấ p +sấu s ấ u +sấy s ấ y +sầm s ầ m +sần s ầ n +sầu s ầ u +sẩn s ẩ n +sẩy s ẩ y +sẫm s ẫ m +sậm s ậ m +sập s ậ p +sật s ậ t +sậy s ậ y +sắc s ắ c +sắm s ắ m +sắn s ắ n +sắng s ắ n g +sắp s ắ p +sắt s ắ t +sằng s ằ n g +sẳn s ẳ n +sẵn s ẵ n +sặc s ặ c +sặt s ặ t +sẹm s ẹ m +sẹo s ẹ o +sẻ s ẻ +sẻn s ẻ n +sẽ s ẽ +sến s ế n +sếp s ế p +sếu s ế u +sề s ề +sền s ề n +sể s ể +sểnh s ể n h +sễ s ễ +sệ s ệ +sệt s ệ t +sỉ s ỉ +sị s ị +sịt s ị t +sọ s ọ +sọc s ọ c +sọm s ọ m +sọt s ọ t +sỏ s ỏ +sỏi s ỏ i +số s ố +sốc s ố c +sống s ố n g +sốt s ố t +sồ s ồ +sồi s ồ i +sồn s ồ n +sổ s ổ +sỗ s ỗ +sộ s ộ +sộp s ộ p +sột s ộ t +sớ s ớ +sới s ớ i +sớm s ớ m +sớn s ớ n +sớt s ớ t +sờ s ờ +sờm s ờ m +sờn s ờ n +sở s ở +sởi s ở i +sởn s ở n +sỡ s ỡ +sợ s ợ +sợi s ợ i +sụ s ụ +sụa s ụ a +sục s ụ c +sụn s ụ n +sụp s ụ p +sụt s ụ t +sủa s ủ a +sủi s ủ i +sủng s ủ n g +sứ s ứ +sứa s ứ a +sức s ứ c +sứt s ứ t +sừng s ừ n g +sử s ử +sửa s ử a +sửng s ử n g +sửu s ử u +sữa s ữ a +sững s ữ n g +sự s ự +sực s ự c +sỹ s ỹ +t t +ta t a +tab t a b +tabasco t a b a s c o +tablet t a b l e t +tae t a e +taekwondo t a e k w o n d o +tahoe t a h o e +tai t a i +takagi t a k a g i +takahashi t a k a h a s h i +takako t a k a k o +takashi t a k a s h i +tam t a m +taman t a m a n +tan t a n +tanaka t a n a k a +tang t a n g +tanh t a n h +tanizaki t a n i z a k i +tanner t a n n e r +tao t a o +tapio t a p i o +tario t a r i o +taro t a r o +task t a s k +tasman t a s m a n +tat t a t +tauron t a u r o n +taxi t a x i +tay t a y +taylor t a y l o r +taù t a ù +te t e +team t e a m +techcombank t e c h c o m b a n k +ted t e d +teen t e e n +teens t e e n s +tele t e l e +telemere t e l e m e r e +telephone t e l e p h o n e +tell t e l l +tem t e m +tempura t e m p u r a +ten t e n +tenerife t e n e r i f e +tennessee t e n n e s s e e +tennis t e n n i s +teo t e o +test t e s t +texas t e x a s +tha t h a +thai t h a i +thailand t h a i l a n d +tham t h a m +than t h a n +thang t h a n g +thanh t h a n h +thank t h a n k +thanks t h a n k s +thao t h a o +thatcher t h a t c h e r +thau t h a u +thay t h a y +the t h e +them t h e m +theme t h e m e +then t h e n +theo t h e o +theron t h e r o n +thi t h i +thia t h i a +thick t h i c k +thiel t h i e l +thin t h i n +thinh t h i n h +thiu t h i u +thiêm t h i ê m +thiên t h i ê n +thiêng t h i ê n g +thiêu t h i ê u +thiếc t h i ế c +thiến t h i ế n +thiếp t h i ế p +thiết t h i ế t +thiếu t h i ế u +thiềm t h i ề m +thiền t h i ề n +thiều t h i ề u +thiểm t h i ể m +thiển t h i ể n +thiểu t h i ể u +thiện t h i ệ n +thiệp t h i ệ p +thiệt t h i ệ t +thiệu t h i ệ u +tho t h o +thoa t h o a +thoang t h o a n g +thoi t h o i +thomas t h o m a s +thon t h o n +thong t h o n g +thor t h o r +thorton t h o r t o n +thoái t h o á i +thoáng t h o á n g +thoát t h o á t +thoăn t h o ă n +thoại t h o ạ i +thoạt t h o ạ t +thoả t h o ả +thoải t h o ả i +thoảng t h o ả n g +thoắt t h o ắ t +thu t h u +thua t h u a +thui t h u i +thum t h u m +thumbnail t h u m b n a i l +thun t h u n +thung t h u n g +thursday t h u r s d a y +thuyên t h u y ê n +thuyết t h u y ế t +thuyền t h u y ề n +thuê t h u ê +thuôn t h u ô n +thuạt t h u ạ t +thuấn t h u ấ n +thuần t h u ầ n +thuẫn t h u ẫ n +thuận t h u ậ n +thuật t h u ậ t +thuế t h u ế +thuốc t h u ố c +thuồng t h u ồ n g +thuộc t h u ộ c +thuộm t h u ộ m +thuột t h u ộ t +thuở t h u ở +thuỳ t h u ỳ +thuỷ t h u ỷ +thyền t h y ề n +thà t h à +thài t h à i +thành t h à n h +thào t h à o +thày t h à y +thác t h á c +thách t h á c h +thái t h á i +thám t h á m +thán t h á n +tháng t h á n g +thánh t h á n h +tháo t h á o +tháp t h á p +thâm t h â m +thân t h â n +thâu t h â u +thây t h â y +thãi t h ã i +thèm t h è m +thèo t h è o +thép t h é p +thét t h é t +thê t h ê +thêm t h ê m +thênh t h ê n h +thêu t h ê u +thì t h ì +thìa t h ì a +thìn t h ì n +thình t h ì n h +thìu t h ì u +thí t h í +thía t h í a +thích t h í c h +thím t h í m +thín t h í n +thính t h í n h +thíp t h í p +thít t h í t +thò t h ò +thòi t h ò i +thòng t h ò n g +thó t h ó +thóa t h ó a +thóc t h ó c +thói t h ó i +thóp t h ó p +thót t h ó t +thô t h ô +thôi t h ô i +thôn t h ô n +thông t h ô n g +thõa t h õ a +thõng t h õ n g +thù t h ù +thùm t h ù m +thùng t h ù n g +thùy t h ù y +thú t h ú +thúc t h ú c +thúi t h ú i +thúng t h ú n g +thút t h ú t +thúy t h ú y +thăm t h ă m +thăn t h ă n +thăng t h ă n g +thũng t h ũ n g +thơ t h ơ +thơi t h ơ i +thơm t h ơ m +thư t h ư +thưa t h ư a +thưc t h ư c +thưeo t h ư e o +thương t h ư ơ n g +thước t h ư ớ c +thườn t h ư ờ n +thường t h ư ờ n g +thưởng t h ư ở n g +thưỡi t h ư ỡ i +thưỡn t h ư ỡ n +thược t h ư ợ c +thượng t h ư ợ n g +thượt t h ư ợ t +thạc t h ạ c +thạch t h ạ c h +thạnh t h ạ n h +thạo t h ạ o +thả t h ả +thải t h ả i +thảm t h ả m +thản t h ả n +thảng t h ả n g +thảnh t h ả n h +thảo t h ả o +thảy t h ả y +thấm t h ấ m +thấp t h ấ p +thất t h ấ t +thấu t h ấ u +thấy t h ấ y +thầm t h ầ m +thần t h ầ n +thầu t h ầ u +thầy t h ầ y +thẩm t h ẩ m +thẩn t h ẩ n +thẫm t h ẫ m +thẫn t h ẫ n +thậm t h ậ m +thận t h ậ n +thập t h ậ p +thật t h ậ t +thắc t h ắ c +thắm t h ắ m +thắn t h ắ n +thắng t h ắ n g +thắp t h ắ p +thắt t h ắ t +thằn t h ằ n +thằng t h ằ n g +thẳm t h ẳ m +thẳng t h ẳ n g +thặng t h ặ n g +thẹn t h ẹ n +thẹo t h ẹ o +thẻ t h ẻ +thẽ t h ẽ +thế t h ế +thếch t h ế c h +thếp t h ế p +thết t h ế t +thề t h ề +thềm t h ề m +thều t h ề u +thể t h ể +thệ t h ệ +thỉ t h ỉ +thỉnh t h ỉ n h +thỉu t h ỉ u +thị t h ị +thịch t h ị c h +thịnh t h ị n h +thịt t h ị t +thịu t h ị u +thọ t h ọ +thọc t h ọ c +thọt t h ọ t +thỏ t h ỏ +thỏa t h ỏ a +thỏi t h ỏ i +thỏm t h ỏ m +thố t h ố +thốc t h ố c +thối t h ố i +thốn t h ố n +thống t h ố n g +thốt t h ố t +thồ t h ồ +thồi t h ồ i +thồn t h ồ n +thổ t h ổ +thổi t h ổ i +thổn t h ổ n +thộp t h ộ p +thớ t h ớ +thới t h ớ i +thớt t h ớ t +thờ t h ờ +thời t h ờ i +thở t h ở +thợ t h ợ +thụ t h ụ +thục t h ụ c +thụng t h ụ n g +thụp t h ụ p +thụt t h ụ t +thụy t h ụ y +thủ t h ủ +thủa t h ủ a +thủi t h ủ i +thủng t h ủ n g +thủy t h ủ y +thứ t h ứ +thức t h ứ c +thừ t h ừ +thừa t h ừ a +thừng t h ừ n g +thử t h ử +thửa t h ử a +thững t h ữ n g +thự t h ự +thực t h ự c +ti t i +tia t i a +tie t i e +tiebreak t i e b r e a k +tiger t i g e r +tiiền t i i ề n +tim t i m +time t i m e +times t i m e s +tin t i n +tina t i n a +tinh t i n h +titanic t i t a n i c +tiu t i u +tivi t i v i +tiêm t i ê m +tiên t i ê n +tiêu t i ê u +tiếc t i ế c +tiếm t i ế m +tiến t i ế n +tiếng t i ế n g +tiếp t i ế p +tiết t i ế t +tiếu t i ế u +tiềm t i ề m +tiền t i ề n +tiều t i ề u +tiển t i ể n +tiểng t i ể n g +tiểu t i ể u +tiễn t i ễ n +tiễu t i ễ u +tiệc t i ệ c +tiệm t i ệ m +tiện t i ệ n +tiệp t i ệ p +tiệt t i ệ t +to t o +toa t o a +toan t o a n +toang t o a n g +toanh t o a n h +today t o d a y +toe t o e +together t o g e t h e r +toi t o i +toilet t o i l e t +tokyo t o k y o +tokyô t o k y ô +tom t o m +tomoko t o m o k o +ton t o n +tone t o n e +tong t o n g +tony t o n y +tool t o o l +toolbar t o o l b a r +tools t o o l s +top t o p +topaz t o p a z +topic t o p i c +torres t o r r e s +tottenham t o t t e n h a m +touch t o u c h +toulouse t o u l o u s e +tour t o u r +tower t o w e r +town t o w n +toy t o y +toyota t o y o t a +toà t o à +toài t o à i +toàn t o à n +toàng t o à n g +toác t o á c +toái t o á i +toán t o á n +toáng t o á n g +toát t o á t +toáy t o á y +toét t o é t +toạc t o ạ c +toại t o ạ i +toả t o ả +toản t o ả n +toẹt t o ẹ t +tra t r a +trade t r a d e +trafford t r a f f o r d +trai t r a i +tram t r a m +trang t r a n g +tranh t r a n h +trao t r a o +trau t r a u +trax t r a x +tre t r e +tren t r e n +treo t r e o +tri t r i +trichet t r i c h e t +trick t r i c k +tring t r i n g +trinh t r i n h +trinity t r i n i t y +triton t r i t o n +triêng t r i ê n g +triết t r i ế t +triền t r i ề n +triềng t r i ề n g +triều t r i ề u +triển t r i ể n +triện t r i ệ n +triệng t r i ệ n g +triệt t r i ệ t +triệu t r i ệ u +tro t r o +trong t r o n g +tru t r u +trui t r u i +trung t r u n g +truong t r u o n g +truy t r u y +truyền t r u y ề n +truyện t r u y ệ n +truân t r u â n +truật t r u ậ t +truồng t r u ồ n g +trà t r à +trài t r à i +tràm t r à m +tràn t r à n +tràng t r à n g +trành t r à n h +trào t r à o +trá t r á +trác t r á c +trách t r á c h +trái t r á i +trám t r á m +trán t r á n +tráng t r á n g +tránh t r á n h +tráo t r á o +tráp t r á p +trát t r á t +trâm t r â m +trân t r â n +trâu t r â u +trã t r ã +trãi t r ã i +trèo t r è o +trém t r é m +tréo t r é o +trê t r ê +trên t r ê n +trêu t r ê u +trì t r ì +trình t r ì n h +trìu t r ì u +trí t r í +trích t r í c h +trò t r ò +tròn t r ò n +tròng t r ò n g +tróc t r ó c +trói t r ó i +tróng t r ó n g +trót t r ó t +trôi t r ô i +trôm t r ô m +trông t r ô n g +trõn t r õ n +trù t r ù +trùi t r ù i +trùm t r ù m +trùn t r ù n +trùng t r ù n g +trú t r ú +trúc t r ú c +trúm t r ú m +trúng t r ú n g +trút t r ú t +trăm t r ă m +trăn t r ă n +trăng t r ă n g +trĩ t r ĩ +trĩnh t r ĩ n h +trĩu t r ĩ u +trũng t r ũ n g +trơ t r ơ +trơi t r ơ i +trơn t r ơ n +trư t r ư +trưa t r ư a +trưng t r ư n g +trương t r ư ơ n g +trước t r ư ớ c +trướng t r ư ớ n g +trườn t r ư ờ n +trường t r ư ờ n g +trưởng t r ư ở n g +trưỡng t r ư ỡ n g +trượt t r ư ợ t +trạc t r ạ c +trạch t r ạ c h +trại t r ạ i +trạm t r ạ m +trạng t r ạ n g +trạo t r ạ o +trả t r ả +trải t r ả i +trảng t r ả n g +trảo t r ả o +trảu t r ả u +trấn t r ấ n +trấu t r ấ u +trầm t r ầ m +trần t r ầ n +trầu t r ầ u +trầy t r ầ y +trẩy t r ẩ y +trẫm t r ẫ m +trận t r ậ n +trập t r ậ p +trật t r ậ t +trắc t r ắ c +trắng t r ắ n g +trằn t r ằ n +trặc t r ặ c +trặn t r ặ n +trẹo t r ẹ o +trẻ t r ẻ +trẻo t r ẻ o +trẽn t r ẽ n +trếch t r ế c h +trề t r ề +trễ t r ễ +trệ t r ệ +trệt t r ệ t +trệu t r ệ u +trỉa t r ỉ a +trị t r ị +trịa t r ị a +trịch t r ị c h +trịnh t r ị n h +trịt t r ị t +trọ t r ọ +trọc t r ọ c +trọi t r ọ i +trọn t r ọ n +trọng t r ọ n g +trọt t r ọ t +trỏ t r ỏ +trối t r ố i +trốn t r ố n +trống t r ố n g +trồ t r ồ +trồi t r ồ i +trồng t r ồ n g +trổ t r ổ +trỗ t r ỗ +trỗi t r ỗ i +trộ t r ộ +trội t r ộ i +trộm t r ộ m +trộn t r ộ n +trớ t r ớ +trớn t r ớ n +trớt t r ớ t +trờ t r ờ +trời t r ờ i +trở t r ở +trợ t r ợ +trợn t r ợ n +trợt t r ợ t +trụ t r ụ +trụa t r ụ a +trục t r ụ c +trụi t r ụ i +trụt t r ụ t +trụy t r ụ y +trứ t r ứ +trứng t r ứ n g +trừ t r ừ +trừng t r ừ n g +trừu t r ừ u +trửng t r ử n g +trữ t r ữ +trững t r ữ n g +trực t r ự c +ts t s +tu t u +tua t u a +tui t u i +tum t u m +tung t u n g +tunisia t u n i s i a +tus t u s +tusumbadan t u s u m b a d a n +tuy t u y +tuyên t u y ê n +tuyến t u y ế n +tuyết t u y ế t +tuyền t u y ề n +tuyển t u y ể n +tuyệt t u y ệ t +tuân t u â n +tuí t u í +tuôn t u ô n +tuông t u ô n g +tuý t u ý +tuýp t u ý p +tuýt t u ý t +tuấn t u ấ n +tuất t u ấ t +tuần t u ầ n +tuế t u ế +tuềnh t u ề n h +tuệ t u ệ +tuệch t u ệ c h +tuốt t u ố t +tuồn t u ồ n +tuồng t u ồ n g +tuổi t u ổ i +tuộc t u ộ c +tuột t u ộ t +tuỳ t u ỳ +tuỵ t u ỵ +tv t v +tvtv t v t v +tweet t w e e t +twitter t w i t t e r +ty t y +tà t à +tài t à i +tàn t à n +tàng t à n g +tành t à n h +tào t à o +tàu t à u +tày t à y +tá t á +tác t á c +tách t á c h +tái t á i +tám t á m +tán t á n +táng t á n g +tánh t á n h +táo t á o +táp t á p +tát t á t +táy t á y +tâm t â m +tân t â n +tâng t â n g +tâu t â u +tây t â y +tã t ã +tãi t ã i +tè t è +tèn t è n +té t é +téc t é c +tém t é m +tén t é n +tép t é p +tét t é t +tê t ê +tên t ê n +tì t ì +tìm t ì m +tình t ì n h +tí t í +tía t í a +tích t í c h +tím t í m +tín t í n +tính t í n h +típ t í p +tít t í t +tíu t í u +tò t ò +tòa t ò a +tòe t ò e +tòi t ò i +tòm t ò m +tòn t ò n +tòng t ò n g +tóc t ó c +tóe t ó e +tói t ó i +tóm t ó m +tóp t ó p +tót t ó t +tô t ô +tôi t ô i +tôm t ô m +tôn t ô n +tông t ô n g +tù t ù +tùa t ù a +tùm t ù m +tùng t ù n g +tùy t ù y +tú t ú +túa t ú a +túc t ú c +túi t ú i +túm t ú m +túng t ú n g +túp t ú p +tút t ú t +túy t ú y +tý t ý +tăm t ă m +tăn t ă n +tăng t ă n g +tĩnh t ĩ n h +tĩu t ĩ u +tũm t ũ m +tơ t ơ +tơi t ơ i +tơn t ơ n +tư t ư +tưa t ư a +tưng t ư n g +tươi t ư ơ i +tươm t ư ơ m +tương t ư ơ n g +tước t ư ớ c +tưới t ư ớ i +tướng t ư ớ n g +tướt t ư ớ t +tườm t ư ờ m +tường t ư ờ n g +tườu t ư ờ u +tưởi t ư ở i +tưởng t ư ở n g +tược t ư ợ c +tượng t ư ợ n g +tượp t ư ợ p +tạ t ạ +tạc t ạ c +tạch t ạ c h +tại t ạ i +tạm t ạ m +tạng t ạ n g +tạnh t ạ n h +tạo t ạ o +tạp t ạ p +tạt t ạ t +tả t ả +tải t ả i +tản t ả n +tảng t ả n g +tảo t ả o +tấc t ấ c +tấm t ấ m +tấn t ấ n +tấp t ấ p +tất t ấ t +tấu t ấ u +tấy t ấ y +tầm t ầ m +tần t ầ n +tầng t ầ n g +tầu t ầ u +tầy t ầ y +tẩm t ẩ m +tẩn t ẩ n +tẩu t ẩ u +tẩy t ẩ y +tẫu t ẫ u +tậm t ậ m +tận t ậ n +tập t ậ p +tật t ậ t +tậu t ậ u +tắc t ắ c +tắm t ắ m +tắn t ắ n +tắp t ắ p +tắt t ắ t +tằm t ằ m +tằn t ằ n +tẳn t ẳ n +tặc t ặ c +tặn t ặ n +tặng t ặ n g +tẹo t ẹ o +tẹp t ẹ p +tẹt t ẹ t +tẻ t ẻ +tẽ t ẽ +tế t ế +tết t ế t +tếu t ế u +tề t ề +tể t ể +tễ t ễ +tễnh t ễ n h +tệ t ệ +tệp t ệ p +tỉ t ỉ +tỉa t ỉ a +tỉm t ỉ m +tỉnh t ỉ n h +tị t ị +tịch t ị c h +tịnh t ị n h +tịt t ị t +tọa t ọ a +tọc t ọ c +tọp t ọ p +tọt t ọ t +tỏ t ỏ +tỏa t ỏ a +tỏi t ỏ i +tố t ố +tốc t ố c +tối t ố i +tốn t ố n +tống t ố n g +tốp t ố p +tốt t ố t +tồi t ồ i +tồn t ồ n +tổ t ổ +tổn t ổ n +tổng t ổ n g +tộ t ộ +tộc t ộ c +tội t ộ i +tột t ộ t +tớ t ớ +tới t ớ i +tớn t ớ n +tờ t ờ +tời t ờ i +tởm t ở m +tợ t ợ +tợn t ợ n +tợp t ợ p +tụ t ụ +tục t ụ c +tụi t ụ i +tụm t ụ m +tụng t ụ n g +tụt t ụ t +tụy t ụ y +tủ t ủ +tủa t ủ a +tủi t ủ i +tủm t ủ m +tủn t ủ n +tủy t ủ y +tứ t ứ +tứa t ứ a +tức t ứ c +từ t ừ +từng t ừ n g +tử t ử +tửa t ử a +tửng t ử n g +tửu t ử u +tự t ự +tựa t ự a +tựu t ự u +tỳ t ỳ +tỵ t ỵ +tỷ t ỷ +u u +uber u b e r +ubuntu u b u n t u +ui u i +ukraine u k r a i n e +um u m +under u n d e r +ung u n g +unicity u n i c i t y +unified u n i f i e d +union u n i o n +united u n i t e d +universal u n i v e r s a l +unlock u n l o c k +until u n t i l +up u p +update u p d a t e +upton u p t o n +uranium u r a n i u m +urban u r b a n +ures u r e s +uruguay u r u g u a y +us u s +usaid u s a i d +usb u s b +usd u s d +utd u t d +utility u t i l i t y +uy u y +uyên u y ê n +uyển u y ể n +uông u ô n g +uých u ý c h +uất u ấ t +uẩn u ẩ n +uế u ế +uể u ể +uốn u ố n +uống u ố n g +uổng u ổ n g +uột u ộ t +uớt u ớ t +uỳnh u ỳ n h +uỵch u ỵ c h +uỷ u ỷ +v v +va v a +vadim v a d i m +vai v a i +valdes v a l d e s +valencia v a l e n c i a +valentina v a l e n t i n a +valentine v a l e n t i n e +valerie v a l e r i e +vali v a l i +valverde v a l v e r d e +van v a n +vancouver v a n c o u v e r +vanessa v a n e s s a +vang v a n g +vanh v a n h +vani v a n i +vao v a o +vardy v a r d y +variable v a r i a b l e +vasco v a s c o +vat v a t +vay v a y +vaò v a ò +vcb v c b +vcp v c p +ve v e +vegas v e g a s +velasquez v e l a s q u e z +ven v e n +venezia v e n e z i a +venezuela v e n e z u e l a +venice v e n i c e +venus v e n u s +veo v e o +versace v e r s a c e +vest v e s t +veston v e s t o n +vgiấy v g i ấ y +vi v i +victoria v i c t o r i a +video v i d e o +viera v i e r a +vietnamplus v i e t n a m p l u s +viettel v i e t t e l +view v i e w +viewer v i e w e r +vila v i l a +villa v i l l a +village v i l l a g e +villarreal v i l l a r r e a l +villas v i l l a s +vim v i m +vin v i n +vina v i n a +vinh v i n h +vinson v i n s o n +violin v i o l i n +violon v i o l o n +vip v i p +virginia v i r g i n i a +virus v i r u s +visa v i s a +vista v i s t a +vitamin v i t a m i n +viêm v i ê m +viên v i ê n +viêt v i ê t +viếng v i ế n g +viết v i ế t +viền v i ề n +viển v i ể n +viễn v i ễ n +việc v i ệ c +viện v i ệ n +việt v i ệ t +vladimir v l a d i m i r +vn v n +vnexpress v n e x p r e s s +vnindex v n i n d e x +vnpt v n p t +vo v o +voan v o a n +vodafone v o d a f o n e +vogue v o g u e +voi v o i +voice v o i c e +volker v o l k e r +von v o n +vong v o n g +vote v o t e +voyager v o y a g e r +voòng v o ò n g +voọc v o ọ c +vtv v t v +vu v u +vua v u a +vui v u i +vun v u n +vung v u n g +vuông v u ô n g +vuốt v u ố t +vuột v u ộ t +vy v y +và v à +vài v à i +vàm v à m +vàn v à n +vàng v à n g +vành v à n h +vào v à o +vàotrong v à o t r o n g +vày v à y +vá v á +vác v á c +vách v á c h +vái v á i +ván v á n +váng v á n g +vánh v á n h +váo v á o +vát v á t +váy v á y +vân v â n +vâng v â n g +vây v â y +vã v ã +vãi v ã i +vãn v ã n +vãng v ã n g +vãnh v ã n h +vè v è +vèo v è o +vé v é +vén v é n +véo v é o +vét v é t +vê v ê +vên v ê n +vênh v ê n h +vì v ì +ví v í +vía v í a +vích v í c h +vít v í t +víu v í u +vò v ò +vòi v ò i +vòm v ò m +vòng v ò n g +vó v ó +vóc v ó c +vói v ó i +vón v ó n +vót v ó t +vô v ô +vôi v ô i +vông v ô n g +võ v õ +võng v õ n g +vù v ù +vùi v ù i +vùn v ù n +vùng v ù n g +vú v ú +vút v ú t +văn v ă n +văng v ă n g +vĩ v ĩ +vĩnh v ĩ n h +vũ v ũ +vũng v ũ n g +vơ v ơ +vơi v ơ i +vươn v ư ơ n +vương v ư ơ n g +vướng v ư ớ n g +vườn v ư ờ n +vưởng v ư ở n g +vượn v ư ợ n +vượng v ư ợ n g +vượt v ư ợ t +vạ v ạ +vạc v ạ c +vạch v ạ c h +vại v ạ i +vạm v ạ m +vạn v ạ n +vạng v ạ n g +vạt v ạ t +vả v ả +vải v ả i +vảng v ả n g +vảy v ả y +vấn v ấ n +vấp v ấ p +vất v ấ t +vấu v ấ u +vấy v ấ y +vần v ầ n +vầng v ầ n g +vầy v ầ y +vẩn v ẩ n +vẩy v ẩ y +vẫn v ẫ n +vẫy v ẫ y +vận v ậ n +vập v ậ p +vật v ậ t +vậy v ậ y +vắc v ắ c +vắn v ắ n +vắng v ắ n g +vắt v ắ t +vằm v ằ m +vằn v ằ n +vằng v ằ n g +vẳng v ẳ n g +vặc v ặ c +vặn v ặ n +vặt v ặ t +vẹm v ẹ m +vẹn v ẹ n +vẹo v ẹ o +vẹt v ẹ t +vẻ v ẻ +vẻn v ẻ n +vẽ v ẽ +vế v ế +vếch v ế c h +vết v ế t +về v ề +vểnh v ể n h +vệ v ệ +vện v ệ n +vệt v ệ t +vỉ v ỉ +vỉa v ỉ a +vị v ị +vịm v ị m +vịn v ị n +vịnh v ị n h +vịt v ị t +vọc v ọ c +vọng v ọ n g +vọt v ọ t +vỏ v ỏ +vỏn v ỏ n +vố v ố +vối v ố i +vốn v ố n +vống v ố n g +vồ v ồ +vồn v ồ n +vồng v ồ n g +vỗ v ỗ +vội v ộ i +vớ v ớ +với v ớ i +vớt v ớ t +vờ v ờ +vời v ờ i +vờn v ờ n +vở v ở +vởn v ở n +vỡ v ỡ +vợ v ợ +vợi v ợ i +vợt v ợ t +vụ v ụ +vục v ụ c +vụn v ụ n +vụng v ụ n g +vụt v ụ t +vức v ứ c +vứt v ứ t +vừa v ừ a +vừng v ừ n g +vửng v ử n g +vữa v ữ a +vững v ữ n g +vựa v ự a +vực v ự c +vựng v ự n g +vỹ v ỹ +wagon w a g o n +waikiki w a i k i k i +wales w a l e s +walking w a l k i n g +wall w a l l +wallis w a l l i s +wang w a n g +ward w a r d +warfare w a r f a r e +was w a s +washington w a s h i n g t o n +watana w a t a n a +watch w a t c h +watson w a t s o n +wave w a v e +web w e b +website w e b s i t e +wells w e l l s +wendy w e n d y +wenger w e n g e r +west w e s t +wharf w h a r f +wheel w h e e l +whelan w h e l a n +when w h e n +whisky w h i s k y +wi w i +wifi w i f i +wild w i l d +william w i l l i a m +williard w i l l i a r d +wilshere w i l s h e r e +wilson w i l s o n +wimbledon w i m b l e d o n +win w i n +windows w i n d o w s +windsor w i n d s o r +winters w i n t e r s +winthrop w i n t h r o p +with w i t h +witt w i t t +wolf w o l f +wolfsburg w o l f s b u r g +won w o n +woo w o o +woodside w o o d s i d e +woody w o o d y +worcestershire w o r c e s t e r s h i r e +word w o r d +world w o r l d +x x +xa x a +xang x a n g +xanh x a n h +xao x a o +xay x a y +xe x e +xem x e m +xen x e n +xentimét x e n t i m é t +xeo x e o +xeres x e r e s +xerox x e r o x +xhcn x h c n +xi x i +xia x i a +xiang x i a n g +xin x i n +xinh x i n h +xiêm x i ê m +xiên x i ê n +xiêu x i ê u +xiếc x i ế c +xiết x i ế t +xiềng x i ề n g +xo x o +xoa x o a +xoan x o a n +xoang x o a n g +xoay x o a y +xoe x o e +xoen x o e n +xoi x o i +xom x o m +xon x o n +xong x o n g +xoong x o o n g +xoài x o à i +xoàn x o à n +xoàng x o à n g +xoành x o à n h +xoá x o á +xoáy x o á y +xoè x o è +xoèn x o è n +xoét x o é t +xoăn x o ă n +xoạc x o ạ c +xoạch x o ạ c h +xoảng x o ả n g +xoắn x o ắ n +xoẹt x o ẹ t +xtơn x t ơ n +xu x u +xua x u a +xui x u i +xum x u m +xung x u n g +xuyên x u y ê n +xuyến x u y ế n +xuân x u â n +xuê x u ê +xuôi x u ô i +xuýt x u ý t +xuất x u ấ t +xuẩn x u ẩ n +xuề x u ề +xuể x u ể +xuống x u ố n g +xuồng x u ồ n g +xy x y +xà x à +xài x à i +xàm x à m +xàng x à n g +xào x à o +xá x á +xác x á c +xách x á c h +xám x á m +xán x á n +xáo x á o +xát x á t +xâm x â m +xâu x â u +xây x â y +xã x ã +xè x è +xèng x è n g +xèo x è o +xé x é +xém x é m +xén x é n +xéo x é o +xét x é t +xê x ê +xênh x ê n h +xì x ì +xình x ì n h +xìu x ì u +xí x í +xíc x í c +xích x í c h +xính x í n h +xít x í t +xíu x í u +xòa x ò a +xòe x ò e +xòng x ò n g +xó x ó +xóa x ó a +xóc x ó c +xói x ó i +xóm x ó m +xót x ó t +xô x ô +xôi x ô i +xôm x ô m +xôn x ô n +xông x ô n g +xõa x õ a +xù x ù +xùi x ù i +xùm x ù m +xú x ú +xúc x ú c +xúm x ú m +xúng x ú n g +xúp x ú p +xúy x ú y +xăm x ă m +xăng x ă n g +xơ x ơ +xơi x ơ i +xưa x ư a +xưanh x ư a n h +xưng x ư n g +xương x ư ơ n g +xước x ư ớ c +xướng x ư ớ n g +xường x ư ờ n g +xưởng x ư ở n g +xược x ư ợ c +xạ x ạ +xạc x ạ c +xạch x ạ c h +xạo x ạ o +xạp x ạ p +xả x ả +xảm x ả m +xảo x ả o +xảy x ả y +xấc x ấ c +xấp x ấ p +xấu x ấ u +xầm x ầ m +xẩm x ẩ m +xẩy x ẩ y +xập x ậ p +xắc x ắ c +xắn x ắ n +xắp x ắ p +xắt x ắ t +xẵng x ẵ n g +xẹo x ẹ o +xẹp x ẹ p +xẻ x ẻ +xẻng x ẻ n g +xẻo x ẻ o +xế x ế +xếch x ế c h +xếp x ế p +xềnh x ề n h +xể x ể +xệ x ệ +xệch x ệ c h +xỉ x ỉ +xỉa x ỉ a +xỉn x ỉ n +xỉnh x ỉ n h +xỉu x ỉ u +xị x ị +xịch x ị c h +xịn x ị n +xịt x ị t +xọc x ọ c +xọn x ọ n +xọp x ọ p +xỏ x ỏ +xốc x ố c +xối x ố i +xốn x ố n +xống x ố n g +xốp x ố p +xốt x ố t +xồng x ồ n g +xổ x ổ +xổi x ổ i +xổm x ổ m +xổng x ổ n g +xộc x ộ c +xộn x ộ n +xới x ớ i +xớt x ớ t +xở x ở +xởi x ở i +xợt x ợ t +xụ x ụ +xục x ụ c +xụi x ụ i +xụp x ụ p +xứ x ứ +xức x ứ c +xứng x ứ n g +xử x ử +xửa x ử a +xửng x ử n g +y y +yahoo y a h o o +yamada y a m a d a +yamaha y a m a h a +yamamoto y a m a m o t o +yamase y a m a s e +yang y a n g +yanhee y a n h e e +yankee y a n k e e +yasui y a s u i +yasukuni y a s u k u n i +yaya y a y a +yemen y e m e n +yen y e n +yes y e s +yeti y e t i +ymca y m c a +yoga y o g a +yoko y o k o +yokota y o k o t a +yoo y o o +york y o r k +yorke y o r k e +young y o u n g +youtube y o u t u b e +yuichiro y u i c h i r o +yuki y u k i +yát y á t +yêm y ê m +yên y ê n +yêng y ê n g +yêu y ê u +yếm y ế m +yến y ế n +yết y ế t +yếu y ế u +yểm y ể m +yểu y ể u +z z +zamora z a m o r a +zane z a n e +zealand z e a l a n d +zeppelin z e p p e l i n +zhang z h a n g +zheng z h e n g +zhivago z h i v a g o +zimbabwe z i m b a b w e +zing z i n g +zinger z i n g e r +zone z o n e +zoom z o o m +zuckerberg z u c k e r b e r g +à à +àm à m +ào à o +á á +ác á c +ách á c h +ái á i +ám á m +án á n +áng á n g +ánh á n h +áo á o +áp á p +át á t +áy á y +âm â m +ân â n +âu â u +ây â y +ã ã +è è +èo è o +é é +ém é m +én é n +éo é o +ép é p +ê ê +êm ê m +ì ì +ình ì n h +í í +ích í c h +ín í n +ít í t +òa ò a +òn ò n +òng ò n g +ó ó +óc ó c +óe ó e +ói ó i +óng ó n g +ót ó t +ô ô +ôi ô i +ôm ô m +ôn ô n +ông ô n g +ôtô ô t ô +ù ù +ùa ù a +ùn ù n +ùng ù n g +ú ú +úa ú a +úc ú c +úi ú i +úm ú m +úng ú n g +úp ú p +út ú t +úy ú y +ý ý +ăm ă m +ăn ă n +ăng ă n g +đa đ a +đai đ a i +đam đ a m +đan đ a n +đang đ a n g +đanh đ a n h +đao đ a o +đau đ a u +đay đ a y +đe đ e +đem đ e m +đen đ e n +đeo đ e o +đi đ i +đia đ i a +đicr đ i c r +đigiúp đ i g i ú p +đinh đ i n h +điu đ i u +điên đ i ê n +điêu đ i ê u +điạ đ i ạ +điếc đ i ế c +điếm đ i ế m +điếng đ i ế n g +điếu đ i ế u +điềm đ i ề m +điền đ i ề n +điều đ i ề u +điểm đ i ể m +điển đ i ể n +điểu đ i ể u +điệm đ i ệ m +điện đ i ệ n +điệp đ i ệ p +điệu đ i ệ u +đo đ o +đoan đ o a n +đom đ o m +đon đ o n +đong đ o n g +đoài đ o à i +đoàn đ o à n +đoàng đ o à n g +đoái đ o á i +đoán đ o á n +đoạn đ o ạ n +đoạt đ o ạ t +đoản đ o ả n +đoảng đ o ả n g +đt đ t +đu đ u +đua đ u a +đui đ u i +đun đ u n +đung đ u n g +đuôi đ u ô i +đuốc đ u ố c +đuối đ u ố i +đuống đ u ố n g +đuổi đ u ổ i +đuỗn đ u ỗ n +đuột đ u ộ t +đà đ à +đài đ à i +đàm đ à m +đàn đ à n +đàng đ à n g +đành đ à n h +đào đ à o +đày đ à y +đá đ á +đác đ á c +đái đ á i +đám đ á m +đán đ á n +đáng đ á n g +đánh đ á n h +đáo đ á o +đáp đ á p +đát đ á t +đáu đ á u +đáy đ á y +đâm đ â m +đâu đ â u +đây đ â y +đã đ ã +đãi đ ã i +đãng đ ã n g +đè đ è +đèn đ è n +đèo đ è o +đéc đ é c +đén đ é n +đéo đ é o +đét đ é t +đê đ ê +đêm đ ê m +đênh đ ê n h +đêu đ ê u +đìa đ ì a +đình đ ì n h +đìu đ ì u +đìện đ ì ệ n +đích đ í c h +đính đ í n h +đít đ í t +đò đ ò +đòi đ ò i +đòm đ ò m +đòn đ ò n +đòng đ ò n g +đó đ ó +đóa đ ó a +đói đ ó i +đóm đ ó m +đón đ ó n +đóng đ ó n g +đô đ ô +đôc đ ô c +đôgn đ ô g n +đôi đ ô i +đôla đ ô l a +đôn đ ô n +đông đ ô n g +đôị đ ô ị +đùa đ ù a +đùi đ ù i +đùm đ ù m +đùn đ ù n +đùng đ ù n g +đú đ ú +đúc đ ú c +đúm đ ú m +đúng đ ú n g +đúp đ ú p +đút đ ú t +đăk đ ă k +đăm đ ă m +đăng đ ă n g +đĩ đ ĩ +đĩa đ ĩ a +đĩnh đ ĩ n h +đũa đ ũ a +đũng đ ũ n g +đơ đ ơ +đơm đ ơ m +đơn đ ơ n +đưa đ ư a +đươc đ ư ơ c +đương đ ư ơ n g +đước đ ư ớ c +đường đ ư ờ n g +được đ ư ợ c +đượm đ ư ợ m +đạ đ ạ +đạc đ ạ c +đạch đ ạ c h +đại đ ạ i +đạm đ ạ m +đạn đ ạ n +đạo đ ạ o +đạp đ ạ p +đạt đ ạ t +đả đ ả +đảm đ ả m +đản đ ả n +đảng đ ả n g +đảnh đ ả n h +đảo đ ả o +đấm đ ấ m +đấng đ ấ n g +đất đ ấ t +đấu đ ấ u +đấy đ ấ y +đầm đ ầ m +đần đ ầ n +đầu đ ầ u +đầy đ ầ y +đẩu đ ẩ u +đẩy đ ẩ y +đẫm đ ẫ m +đẫn đ ẫ n +đẫy đ ẫ y +đậm đ ậ m +đận đ ậ n +đập đ ậ p +đật đ ậ t +đậu đ ậ u +đậy đ ậ y +đắc đ ắ c +đắk đ ắ k +đắm đ ắ m +đắn đ ắ n +đắng đ ắ n g +đắp đ ắ p +đắt đ ắ t +đằm đ ằ m +đằng đ ằ n g +đẳng đ ẳ n g +đẵng đ ẵ n g +đặc đ ặ c +đặm đ ặ m +đặn đ ặ n +đặng đ ặ n g +đặt đ ặ t +đẹp đ ẹ p +đẻ đ ẻ +đẻn đ ẻ n +đẽ đ ẽ +đẽo đ ẽ o +đế đ ế +đếm đ ế m +đến đ ế n +đề đ ề +đềm đ ề m +đền đ ề n +đềnh đ ề n h +đều đ ề u +để đ ể +đểnh đ ể n h +đểu đ ể u +đễ đ ễ +đễnh đ ễ n h +đệ đ ệ +đệm đ ệ m +đệt đ ệ t +đỉa đ ỉ a +đỉnh đ ỉ n h +địa đ ị a +địch đ ị c h +định đ ị n h +địu đ ị u +đọ đ ọ +đọa đ ọ a +đọan đ ọ a n +đọc đ ọ c +đọng đ ọ n g +đọt đ ọ t +đỏ đ ỏ +đỏng đ ỏ n g +đố đ ố +đốc đ ố c +đối đ ố i +đốm đ ố m +đốn đ ố n +đống đ ố n g +đốt đ ố t +đồ đ ồ +đồi đ ồ i +đồm đ ồ m +đồn đ ồ n +đồng đ ồ n g +đổ đ ổ +đổi đ ổ i +đổng đ ổ n g +đỗ đ ỗ +đỗi đ ỗ i +độ đ ộ +độc đ ộ c +đội đ ộ i +độn đ ộ n +động đ ộ n g +độp đ ộ p +đột đ ộ t +đới đ ớ i +đớn đ ớ n +đớp đ ớ p +đờ đ ờ +đời đ ờ i +đờm đ ờ m +đờn đ ờ n +đở đ ở +đỡ đ ỡ +đợi đ ợ i +đợp đ ợ p +đợt đ ợ t +đục đ ụ c +đụn đ ụ n +đụng đ ụ n g +đủ đ ủ +đủi đ ủ i +đủng đ ủ n g +đứa đ ứ a +đức đ ứ c +đứng đ ứ n g +đứt đ ứ t +đừng đ ừ n g +đực đ ự c +đựng đ ự n g +ĩ ĩ +ơ ơ +ơi ơ i +ơn ơ n +ư ư +ưa ư a +ưng ư n g +ưu ư u +ươi ư ơ i +ươm ư ơ m +ươn ư ơ n +ương ư ơ n g +ước ư ớ c +ướm ư ớ m +ướp ư ớ p +ướt ư ớ t +ườn ư ờ n +ưỡn ư ỡ n +ạ ạ +ạch ạ c h +ạt ạ t +ả ả +ải ả i +ảm ả m +ảnh ả n h +ảo ả o +ấm ấ m +ấn ấ n +ấp ấ p +ất ấ t +ấu ấ u +ấy ấ y +ấylắc ấ y l ắ c +ầm ầ m +ầu ầ u +ầy ầ y +ẩm ẩ m +ẩn ẩ n +ẩu ẩ u +ậm ậ m +ập ậ p +ắc ắ c +ắng ắ n g +ắp ắ p +ắt ắ t +ằng ằ n g +ẵm ẵ m +ặc ặ c +ẹp ẹ p +ẻn ẻ n +ế ế +ếch ế c h +ềnh ề n h +ệ ệ +ệch ệ c h +ện ệ n +ỉ ỉ +ỉa ỉ a +ỉm ỉ m +ỉn ỉ n +ỉu ỉ u +ị ị +ịch ị c h +ịnh ị n h +ọc ọ c +ọe ọ e +ọp ọ p +ỏi ỏ i +ỏm ỏ m +ỏn ỏ n +ỏng ỏ n g +ố ố +ốc ố c +ối ố i +ốm ố m +ống ố n g +ốp ố p +ốt ố t +ồ ồ +ồm ồ m +ồn ồ n +ồng ồ n g +ổ ổ +ổi ổ i +ổn ổ n +ổng ổ n g +ộc ộ c +ộn ộ n +ộp ộ p +ớ ớ +ới ớ i +ớn ớ n +ớt ớ t +ờ ờ +ời ờ i +ở ở +ởn ở n +ỡm ỡ m +ợ ợ +ụ ụ +ục ụ c +ủ ủ +ủa ủ a +ủi ủ i +ủn ủ n +ủng ủ n g +ủy ủ y +ứ ứ +ứa ứ a +ức ứ c +ứng ứ n g +ừ ừ +ừm ừ m +ửng ử n g +ự ự +ực ự c +ỳ ỳ +ỷ ỷ diff --git a/assets/transcript.txt b/assets/transcript.txt new file mode 100644 index 0000000000000000000000000000000000000000..b668e20a73e5a18943fbe2fb8ed826cf2cde2c93 --- /dev/null +++ b/assets/transcript.txt @@ -0,0 +1,26 @@ +Trăm năm trong cõi người ta, +Chữ tài chữ mệnh khéo là ghét nhau. +Trải qua một cuộc bể dâu, +Những điều trông thấy mà đau đớn lòng. +Lạ gì bỉ sắc tư phong, +Trời xanh quen thói má hồng đánh ghen. +Cảo thơm lần giở trước đèn, +Phong tình cổ lục còn truyền sử xanh. +Rằng: Năm Gia tĩnh triều Minh, +Bốn phương phẳng lặng hai kinh chữ vàng. +Có nhà viên ngoại họ Vương, +Gia tư nghỉ cũng thường thường bậc trung. +Một trai con thứ rốt lòng, +Vương Quan là chữ nối dòng nho gia. +Đầu lòng hai ả tố nga, +Thúy Kiều là chị em là Thúy Vân. +Mai cốt cách tuyết tinh thần, +Mỗi người một vẻ mười phân vẹn mười. +Vân xem trang trọng khác vời, +Khuôn trăng đầy đặn nét ngài nở nang. +Hoa cười ngọc thốt đoan trang, +Mây thua nước tóc tuyết nhường màu da. +Kiều càng sắc sảo mặn mà, +So bề tài sắc lại là phần hơn. +Làn thu thủy nét xuân sơn, +Hoa ghen thua thắm liễu hờn kém xanh. diff --git a/notebooks/align_text_audio_infore_mfa.ipynb b/notebooks/align_text_audio_infore_mfa.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a8b572a53e182f928beacc8e79c1c69a90f1964c --- /dev/null +++ b/notebooks/align_text_audio_infore_mfa.ipynb @@ -0,0 +1,193 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Align text and audio using Montreal Forced Aligner (MFA)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "IPkicKwU8IWj" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!apt update -y\n", + "!pip install -U pip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "G6Z-aDd08hfk" + }, + "outputs": [], + "source": [ + "%%capture\n", + "%%bash\n", + "data_root=\"./infore_16k_denoised\"\n", + "mkdir -p $data_root\n", + "cd $data_root\n", + "wget https://huggingface.co/datasets/ntt123/infore/resolve/main/infore_16k_denoised.zip -O infore.zip\n", + "unzip infore.zip " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "VWwgAePDXy4m" + }, + "outputs": [], + "source": [ + "from pathlib import Path\n", + "\n", + "txt_files = sorted(Path(\"./infore_16k_denoised\").glob(\"*.txt\"))\n", + "f = open(\"/content/words.txt\", \"w\", encoding=\"utf-8\")\n", + "for txt_file in txt_files:\n", + " wav_file = txt_file.with_suffix(\".wav\")\n", + " if not wav_file.exists():\n", + " continue\n", + " line = open(txt_file, \"r\", encoding=\"utf-8\").read()\n", + " for word in line.strip().lower().split():\n", + " f.write(word)\n", + " f.write(\"\\n\")\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "FktjNXbDkBLh" + }, + "outputs": [], + "source": [ + "black_list = (\n", + " []\n", + " + [\"q\", \"adn\", \"h\", \"stress\", \"b\", \"k\", \"mark\", \"gas\", \"cs\", \"test\", \"l\", \"hiv\"]\n", + " + [\"v\", \"d\", \"c\", \"p\", \"martin\", \"visa\", \"euro\", \"laser\", \"x\", \"real\", \"shop\"]\n", + " + [\"studio\", \"kelvin\", \"đt\", \"pop\", \"rock\", \"gara\", \"karaoke\", \"đicr\", \"đigiúp\"]\n", + " + [\"khmer\", \"ii\", \"s\", \"tr\", \"xhcn\", \"casino\", \"guitar\", \"sex\", \"oxi\", \"radio\"]\n", + " + [\"qúy\", \"asean\", \"hlv\" \"ts\", \"video\", \"virus\", \"usd\", \"robot\", \"ph\", \"album\"]\n", + " + [\"s\", \"kg\", \"km\", \"g\", \"tr\", \"đ\", \"ak\", \"d\", \"m\", \"n\"]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "b3nMwfzK_g0B" + }, + "outputs": [], + "source": [ + "ws = open(\"/content/words.txt\").readlines()\n", + "f = open(\"/content/lexicon.txt\", \"w\")\n", + "for w in sorted(set(ws)):\n", + " w = w.strip()\n", + "\n", + " # this is a hack to match phoneme set in the vietTTS repo\n", + " p = list(w)\n", + " p = \" \".join(p)\n", + " if w in black_list:\n", + " continue\n", + " else:\n", + " f.write(f\"{w}\\t{p}\\n\")\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "WuWZKTNRt1eM" + }, + "outputs": [], + "source": [ + "%%writefile install_mfa.sh\n", + "#!/bin/bash\n", + "\n", + "## a script to install Montreal Forced Aligner (MFA)\n", + "\n", + "root_dir=${1:-/tmp/mfa}\n", + "mkdir -p $root_dir\n", + "cd $root_dir\n", + "\n", + "# download miniconda3\n", + "wget -q --show-progress https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh\n", + "bash Miniconda3-latest-Linux-x86_64.sh -b -p $root_dir/miniconda3 -f\n", + "\n", + "#install MFA\n", + "$root_dir/miniconda3/bin/conda create -n aligner -c conda-forge montreal-forced-aligner=2.0.0rc7 -y\n", + "\n", + "echo -e \"\\n======== DONE ==========\"\n", + "echo -e \"\\nTo activate MFA, run: source $root_dir/miniconda3/bin/activate aligner\"" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "osR7KJCNXJYq" + }, + "outputs": [], + "source": [ + "# download and install mfa\n", + "INSTALL_DIR = \"/tmp/mfa\" # path to install directory\n", + "!bash ./install_mfa.sh {INSTALL_DIR}" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hxbXwJZlXLPz", + "outputId": "d3e40ec5-68a7-40ec-d070-137736d7a956" + }, + "outputs": [], + "source": [ + "!source {INSTALL_DIR}/miniconda3/bin/activate aligner; \\\n", + "mfa train --clean -t ./temp -o ./infore_mfa.zip ./infore_16k_denoised lexicon.txt ./infore_textgrid" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "8Z65_BtXagn1" + }, + "outputs": [], + "source": [ + "# copy to train directory\n", + "!mkdir -p train_data\n", + "!cp ./infore_16k_denoised/*.wav ./train_data\n", + "!cp ./infore_textgrid/*.TextGrid ./train_data" + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "align-text-audio | InfoRe using MFA v2rc7.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/notebooks/denoise_infore_dataset.ipynb b/notebooks/denoise_infore_dataset.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..a28bc5e785e025451cb8f96e13cf54aa27d35093 --- /dev/null +++ b/notebooks/denoise_infore_dataset.ipynb @@ -0,0 +1,138 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "qjubHCEzYtG8" + }, + "source": [ + "### Step 1. Download InfoRE dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "zCBJzJi6BE_o" + }, + "outputs": [], + "source": [ + "%%capture\n", + "%%bash\n", + "mkdir -p /content/data\n", + "cd /content/data\n", + "wget https://huggingface.co/datasets/ntt123/infore/resolve/main/infore_16k.zip\n", + "# unzip -P BroughtToYouByInfoRe 25hours.zip\n", + "unzip infore_16k.zip" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "6C47hb9nYzmB" + }, + "source": [ + "### Step 2. Normalize audio clip" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "Hp9TK8PbBcQM" + }, + "outputs": [], + "source": [ + "%%capture\n", + "!sudo apt install -y sox\n", + "!pip install soundfile librosa\n", + "!pip install onnxruntime==1.11.1" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "FW45D8xM9Mcc", + "outputId": "8d7ea7a9-ea5a-48ca-88fe-37dd4ed55d9b" + }, + "outputs": [], + "source": [ + "!mkdir -p /content/infore_16k\n", + "from pathlib import Path\n", + "import os\n", + "from tqdm.cli import tqdm\n", + "\n", + "wavs = sorted(Path(\"/content/data/InfoRe\").glob(\"*.wav\"))\n", + "for path in tqdm(wavs):\n", + " out = Path(\"/content/infore_16k\") / path.name\n", + " cmd = f\"sox {path} -c 1 -e signed-integer -b 16 -r 16k --norm=-3 {out}\"\n", + " os.system(cmd)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "kooiBrsQY5sQ" + }, + "source": [ + "### Step 3. Denoise using DNS-Challenge's baseline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "hsXeNkZ3Xacj" + }, + "outputs": [], + "source": [ + "!git clone https://github.com/microsoft/DNS-Challenge\n", + "%cd DNS-Challenge/NSNet2-baseline/\n", + "!git checkout -f 8b87a33b2892f147b5c7ad39ea978453730db269\n", + "!python run_nsnet2.py -i /content/infore_16k/ -o /content/infore_16k_denoised -m ./nsnet2-20ms-baseline.onnx" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "T5JtZwKgZI4r" + }, + "source": [ + "### Step 4. Zip the denoised dataset" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "eeFggV0uYop_" + }, + "outputs": [], + "source": [ + "%cd /content\n", + "!cp /content/data/InfoRe/*.txt ./infore_16k_denoised\n", + "!cd ./infore_16k_denoised; zip -r ../infore_16k_denoised.zip ." + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "prepare_infore_dataset.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3", + "name": "python3" + }, + "language_info": { + "name": "python" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/scripts/download_aligned_infore_dataset.py b/scripts/download_aligned_infore_dataset.py new file mode 100755 index 0000000000000000000000000000000000000000..1e54014cfc2cc726ec605596de2ec9f71f52e164 --- /dev/null +++ b/scripts/download_aligned_infore_dataset.py @@ -0,0 +1,45 @@ +""" +A script to download the InfoRE dataset and textgrid files. +""" +import shutil +from pathlib import Path + +import pooch +from pooch import Unzip +from tqdm.cli import tqdm + + +def download_infore_data(): + """download infore wav files""" + files = pooch.retrieve( + url="https://huggingface.co/datasets/ntt123/infore/resolve/main/infore_16k_denoised.zip", + known_hash="2445527b345fb0b1816ce3c8f09bae419d6bbe251f16d6c74d8dd95ef9fb0737", + processor=Unzip(), + progressbar=True, + ) + data_dir = Path(sorted(files)[0]).parent + return data_dir + + +def download_textgrid(): + """download textgrid files""" + files = pooch.retrieve( + url="https://huggingface.co/datasets/ntt123/infore/resolve/main/infore_tg.zip", + known_hash="26e4f53025220097ea95dc266657de8d65104b0a17a6ffba778fc016c8dd36d7", + processor=Unzip(), + progressbar=True, + ) + data_dir = Path(sorted(files)[0]).parent + return data_dir + + +DATA_ROOT = Path("./train_data") +DATA_ROOT.mkdir(parents=True, exist_ok=True) +wav_dir = download_infore_data() +tg_dir = download_textgrid() + +for path in tqdm(tg_dir.glob("*.TextGrid")): + wav_name = path.with_suffix(".wav").name + wav_src = wav_dir / wav_name + shutil.copy(path, DATA_ROOT) + shutil.copy(wav_src, DATA_ROOT) diff --git a/scripts/quick_start.sh b/scripts/quick_start.sh new file mode 100755 index 0000000000000000000000000000000000000000..346b3a6355cac88d1f9ff9e5b6d4ac017922c656 --- /dev/null +++ b/scripts/quick_start.sh @@ -0,0 +1,12 @@ +if [ ! -f assets/infore/hifigan/g_01140000 ]; then + echo "Downloading models..." + mkdir -p assets/infore/{nat,hifigan} + wget https://huggingface.co/ntt123/viettts_infore_16k/resolve/main/duration_latest_ckpt.pickle -O assets/infore/nat/duration_latest_ckpt.pickle + wget https://huggingface.co/ntt123/viettts_infore_16k/resolve/main/acoustic_latest_ckpt.pickle -O assets/infore/nat/acoustic_latest_ckpt.pickle + wget https://huggingface.co/ntt123/viettts_infore_16k/resolve/main/g_01140000 -O assets/infore/hifigan/g_01140000 + python3 -m vietTTS.hifigan.convert_torch_model_to_haiku --config-file=assets/hifigan/config.json --checkpoint-file=assets/infore/hifigan/g_01140000 +fi + +echo "Generate audio clip" +text=`cat assets/transcript.txt` +python3 -m vietTTS.synthesizer --text "$text" --output assets/infore/clip.wav --lexicon-file assets/infore/lexicon.txt --silence-duration 0.2 diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d566a1f4deb18e9f49e44ba571fd8ae145b1323d --- /dev/null +++ b/setup.cfg @@ -0,0 +1,14 @@ +[pep8] +max-line-length = 120 +indent-size = 2 + +[pycodestyle] +max-line-length = 120 + +[yapf] +based_on_style = pep8 +column_limit = 120 + +[tool:pytest] +testpaths= + tests diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..2f1e82df4e4e274afb46c6a927697d35c5fbb5dd --- /dev/null +++ b/setup.py @@ -0,0 +1,43 @@ +from setuptools import setup + +__version__ = "0.4.1" +url = "https://github.com/ntt123/vietTTS" + +install_requires = [ + "dm-haiku", + "einops", + "fire", + "gdown", + "jax", + "jaxlib", + "librosa", + "optax", + "tabulate", + "textgrid @ git+https://github.com/kylebgorman/textgrid.git", + "tqdm", + "matplotlib", +] +setup_requires = [] +tests_require = [] + +setup( + name="vietTTS", + version=__version__, + description="A vietnamese text-to-speech library.", + author="ntt123", + url=url, + keywords=[ + "text-to-speech", + "tts", + "deep-learning", + "dm-haiku", + "jax", + "vietnamese", + "speech-synthesis", + ], + install_requires=install_requires, + setup_requires=setup_requires, + tests_require=tests_require, + packages=["vietTTS"], + python_requires=">=3.7", +) diff --git a/tests/test_nat_acoustic.py b/tests/test_nat_acoustic.py new file mode 100644 index 0000000000000000000000000000000000000000..c603038ae56964a55bfc17a094d995bc1c9b2848 --- /dev/null +++ b/tests/test_nat_acoustic.py @@ -0,0 +1,18 @@ +import haiku +import haiku as hk +import jax.numpy as jnp +import jax.random +from vietTTS.nat.config import FLAGS +from vietTTS.nat.model import AcousticModel + + +@hk.testing.transform_and_run +def test_duration(): + net = AcousticModel() + token = jnp.zeros((2, 10), dtype=jnp.int32) + lengths = jnp.zeros((2,), dtype=jnp.int32) + durations = jnp.zeros((2, 10), dtype=jnp.float32) + mel = jnp.zeros((2, 20, 160), dtype=jnp.float32) + o1, o2 = net(token, mel, lengths, durations) + assert o1.shape == (2, 20, 160) + assert o2.shape == (2, 20, 160) diff --git a/tests/test_nat_duration.py b/tests/test_nat_duration.py new file mode 100644 index 0000000000000000000000000000000000000000..32958e41d13708b963d5865985bf871229bf8da4 --- /dev/null +++ b/tests/test_nat_duration.py @@ -0,0 +1,15 @@ +import haiku +import haiku as hk +import jax.numpy as jnp +import jax.random +from vietTTS.nat.config import FLAGS +from vietTTS.nat.model import DurationModel + + +@hk.testing.transform_and_run +def test_duration(): + net = DurationModel() + p = jnp.zeros((2, 10), dtype=jnp.int32) + l = jnp.zeros((2,), dtype=jnp.int32) + o = net(p, l) + assert o.shape == (2, 10, 1) diff --git a/vietTTS.egg-info/PKG-INFO b/vietTTS.egg-info/PKG-INFO new file mode 100644 index 0000000000000000000000000000000000000000..ad5c02fe63b526166893125030e6eeb4ac57e4d0 --- /dev/null +++ b/vietTTS.egg-info/PKG-INFO @@ -0,0 +1,11 @@ +Metadata-Version: 1.2 +Name: vietTTS +Version: 0.4.1 +Summary: A vietnamese text-to-speech library. +Home-page: https://github.com/ntt123/vietTTS +Author: ntt123 +License: UNKNOWN +Description: UNKNOWN +Keywords: text-to-speech,tts,deep-learning,dm-haiku,jax,vietnamese,speech-synthesis +Platform: UNKNOWN +Requires-Python: >=3.7 diff --git a/vietTTS.egg-info/SOURCES.txt b/vietTTS.egg-info/SOURCES.txt new file mode 100644 index 0000000000000000000000000000000000000000..44283bf8d0d5e8d054d89ee826fe318287268495 --- /dev/null +++ b/vietTTS.egg-info/SOURCES.txt @@ -0,0 +1,10 @@ +README.md +setup.cfg +setup.py +vietTTS/__init__.py +vietTTS/synthesizer.py +vietTTS.egg-info/PKG-INFO +vietTTS.egg-info/SOURCES.txt +vietTTS.egg-info/dependency_links.txt +vietTTS.egg-info/requires.txt +vietTTS.egg-info/top_level.txt \ No newline at end of file diff --git a/vietTTS.egg-info/dependency_links.txt b/vietTTS.egg-info/dependency_links.txt new file mode 100644 index 0000000000000000000000000000000000000000..8b137891791fe96927ad78e64b0aad7bded08bdc --- /dev/null +++ b/vietTTS.egg-info/dependency_links.txt @@ -0,0 +1 @@ + diff --git a/vietTTS.egg-info/requires.txt b/vietTTS.egg-info/requires.txt new file mode 100644 index 0000000000000000000000000000000000000000..7e2201ad68cba004f73b2b2b80f216904368fde6 --- /dev/null +++ b/vietTTS.egg-info/requires.txt @@ -0,0 +1,12 @@ +dm-haiku +einops +fire +gdown +jax +jaxlib +librosa +optax +tabulate +textgrid@ git+https://github.com/kylebgorman/textgrid.git +tqdm +matplotlib diff --git a/vietTTS.egg-info/top_level.txt b/vietTTS.egg-info/top_level.txt new file mode 100644 index 0000000000000000000000000000000000000000..3e37b4b4c1717e15f72538b9949c9686dbd4494f --- /dev/null +++ b/vietTTS.egg-info/top_level.txt @@ -0,0 +1 @@ +vietTTS diff --git a/vietTTS/__init__.py b/vietTTS/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/vietTTS/__pycache__/__init__.cpython-39.pyc b/vietTTS/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..10cbe4d4e84ba8fc36250ad07d26039b0fb6452e Binary files /dev/null and b/vietTTS/__pycache__/__init__.cpython-39.pyc differ diff --git a/vietTTS/__pycache__/synthesizer.cpython-39.pyc b/vietTTS/__pycache__/synthesizer.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9b3e504015ac3d674a9bd8b3e16c8c09c4a0d68 Binary files /dev/null and b/vietTTS/__pycache__/synthesizer.cpython-39.pyc differ diff --git a/vietTTS/hifigan/__pycache__/config.cpython-39.pyc b/vietTTS/hifigan/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6d1990fef3eede2ef0e4e622e1ed1819d9480049 Binary files /dev/null and b/vietTTS/hifigan/__pycache__/config.cpython-39.pyc differ diff --git a/vietTTS/hifigan/__pycache__/mel2wave.cpython-39.pyc b/vietTTS/hifigan/__pycache__/mel2wave.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad61cda592cac78b5f5a8f4b40a7778b82f5e18d Binary files /dev/null and b/vietTTS/hifigan/__pycache__/mel2wave.cpython-39.pyc differ diff --git a/vietTTS/hifigan/__pycache__/model.cpython-39.pyc b/vietTTS/hifigan/__pycache__/model.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4487902c0ba4170690ac515055bd268345e589bc Binary files /dev/null and b/vietTTS/hifigan/__pycache__/model.cpython-39.pyc differ diff --git a/vietTTS/hifigan/config.py b/vietTTS/hifigan/config.py new file mode 100644 index 0000000000000000000000000000000000000000..085a8672de44da459f2d32945775a361fb270b78 --- /dev/null +++ b/vietTTS/hifigan/config.py @@ -0,0 +1,6 @@ +from pathlib import Path +from typing import NamedTuple + + +class FLAGS: + ckpt_dir = Path("./assets/infore/hifigan") diff --git a/vietTTS/hifigan/convert_torch_model_to_haiku.py b/vietTTS/hifigan/convert_torch_model_to_haiku.py new file mode 100644 index 0000000000000000000000000000000000000000..a47782c05d196d6da601f83a8496a781bf1ae674 --- /dev/null +++ b/vietTTS/hifigan/convert_torch_model_to_haiku.py @@ -0,0 +1,83 @@ +import argparse +import json +import os +import pickle + +import numpy as np +import torch + +from .config import FLAGS +from .torch_model import Generator + + +class AttrDict(dict): + def __init__(self, *args, **kwargs): + super(AttrDict, self).__init__(*args, **kwargs) + self.__dict__ = self + + +def load_checkpoint(filepath, device): + assert os.path.isfile(filepath) + print("Loading '{}'".format(filepath)) + checkpoint_dict = torch.load(filepath, map_location=device) + print("Complete.") + return checkpoint_dict + + +def convert_to_haiku(a, h, device): + generator = Generator(h).to(device) + state_dict_g = load_checkpoint(a.checkpoint_file, device) + generator.load_state_dict(state_dict_g["generator"]) + generator.eval() + generator.remove_weight_norm() + hk_map = {} + for a, b in generator.state_dict().items(): + print(a, b.shape) + if a.startswith("conv_pre"): + a = "generator/~/conv1_d" + elif a.startswith("conv_post"): + a = "generator/~/conv1_d_1" + elif a.startswith("ups."): + ii = a.split(".")[1] + a = f"generator/~/ups_{ii}" + elif a.startswith("resblocks."): + _, x, y, z, _ = a.split(".") + ver = h.resblock + a = f"generator/~/res_block{ver}_{x}/~/{y}_{z}" + print(a, b.shape) + if a not in hk_map: + hk_map[a] = {} + if len(b.shape) == 1: + hk_map[a]["b"] = b.numpy() + else: + if "ups" in a: + hk_map[a]["w"] = np.rot90(b.numpy(), k=1, axes=(0, 2)) + elif "conv" in a: + hk_map[a]["w"] = np.swapaxes(b.numpy(), 0, 2) + else: + hk_map[a]["w"] = b.numpy() + + FLAGS.ckpt_dir.mkdir(parents=True, exist_ok=True) + with open(FLAGS.ckpt_dir / "hk_hifi.pickle", "wb") as f: + pickle.dump(hk_map, f) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--checkpoint-file", required=True) + parser.add_argument("--config-file", required=True) + a = parser.parse_args() + + config_file = a.config_file + with open(config_file) as f: + data = f.read() + + json_config = json.loads(data) + h = AttrDict(json_config) + + device = torch.device("cpu") + convert_to_haiku(a, h, device) + + +if __name__ == "__main__": + main() diff --git a/vietTTS/hifigan/create_mel.py b/vietTTS/hifigan/create_mel.py new file mode 100644 index 0000000000000000000000000000000000000000..da546f4cc723f7196f2ba32a6629a30963d79a44 --- /dev/null +++ b/vietTTS/hifigan/create_mel.py @@ -0,0 +1,241 @@ +import math +import os +import random +import torch +import torch.utils.data +import numpy as np +from librosa.util import normalize +from scipy.io.wavfile import read +from librosa.filters import mel as librosa_mel_fn + +MAX_WAV_VALUE = 32768.0 + + +def load_wav(full_path): + sampling_rate, data = read(full_path) + return data, sampling_rate + + +def dynamic_range_compression(x, C=1, clip_val=1e-5): + return np.log(np.clip(x, a_min=clip_val, a_max=None) * C) + + +def dynamic_range_decompression(x, C=1): + return np.exp(x) / C + + +def dynamic_range_compression_torch(x, C=1, clip_val=1e-5): + return torch.log(torch.clamp(x, min=clip_val) * C) + + +def dynamic_range_decompression_torch(x, C=1): + return torch.exp(x) / C + + +def spectral_normalize_torch(magnitudes): + output = dynamic_range_compression_torch(magnitudes) + return output + + +def spectral_de_normalize_torch(magnitudes): + output = dynamic_range_decompression_torch(magnitudes) + return output + + +mel_basis = {} +hann_window = {} + + +def mel_spectrogram( + y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False +): + if torch.min(y) < -1.0: + print("min value is ", torch.min(y)) + if torch.max(y) > 1.0: + print("max value is ", torch.max(y)) + + global mel_basis, hann_window + if fmax not in mel_basis: + mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax) + mel_basis[str(fmax) + "_" + str(y.device)] = ( + torch.from_numpy(mel).float().to(y.device) + ) + hann_window[str(y.device)] = torch.hann_window(win_size).to(y.device) + + y = torch.nn.functional.pad( + y.unsqueeze(1), + (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), + mode="reflect", + ) + y = y.squeeze(1) + + spec = torch.stft( + y, + n_fft, + hop_length=hop_size, + win_length=win_size, + window=hann_window[str(y.device)], + center=center, + pad_mode="reflect", + normalized=False, + onesided=True, + ) + + spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9)) + + spec = torch.matmul(mel_basis[str(fmax) + "_" + str(y.device)], spec) + spec = spectral_normalize_torch(spec) + + return spec + + +def get_dataset_filelist(a): + with open(a.input_training_file, "r", encoding="utf-8") as fi: + training_files = [ + os.path.join(a.input_wavs_dir, x.split("|")[0] + ".wav") + for x in fi.read().split("\n") + if len(x) > 0 + ] + + with open(a.input_validation_file, "r", encoding="utf-8") as fi: + validation_files = [ + os.path.join(a.input_wavs_dir, x.split("|")[0] + ".wav") + for x in fi.read().split("\n") + if len(x) > 0 + ] + return training_files, validation_files + + +class MelDataset(torch.utils.data.Dataset): + def __init__( + self, + training_files, + segment_size, + n_fft, + num_mels, + hop_size, + win_size, + sampling_rate, + fmin, + fmax, + split=True, + shuffle=True, + n_cache_reuse=1, + device=None, + fmax_loss=None, + fine_tuning=False, + base_mels_path=None, + ): + self.audio_files = training_files + random.seed(1234) + if shuffle: + random.shuffle(self.audio_files) + self.segment_size = segment_size + self.sampling_rate = sampling_rate + self.split = split + self.n_fft = n_fft + self.num_mels = num_mels + self.hop_size = hop_size + self.win_size = win_size + self.fmin = fmin + self.fmax = fmax + self.fmax_loss = fmax_loss + self.cached_wav = None + self.n_cache_reuse = n_cache_reuse + self._cache_ref_count = 0 + self.device = device + self.fine_tuning = fine_tuning + self.base_mels_path = base_mels_path + + def __getitem__(self, index): + filename = self.audio_files[index] + if self._cache_ref_count == 0: + audio, sampling_rate = load_wav(filename) + audio = audio / MAX_WAV_VALUE + if not self.fine_tuning: + audio = normalize(audio) * 0.95 + self.cached_wav = audio + if sampling_rate != self.sampling_rate: + raise ValueError( + "{} SR doesn't match target {} SR".format( + sampling_rate, self.sampling_rate + ) + ) + self._cache_ref_count = self.n_cache_reuse + else: + audio = self.cached_wav + self._cache_ref_count -= 1 + + audio = torch.FloatTensor(audio) + audio = audio.unsqueeze(0) + + if not self.fine_tuning: + if self.split: + if audio.size(1) >= self.segment_size: + max_audio_start = audio.size(1) - self.segment_size + audio_start = random.randint(0, max_audio_start) + audio = audio[:, audio_start : audio_start + self.segment_size] + else: + audio = torch.nn.functional.pad( + audio, (0, self.segment_size - audio.size(1)), "constant" + ) + + mel = mel_spectrogram( + audio, + self.n_fft, + self.num_mels, + self.sampling_rate, + self.hop_size, + self.win_size, + self.fmin, + self.fmax, + center=False, + ) + else: + mel = np.load( + os.path.join( + self.base_mels_path, + os.path.splitext(os.path.split(filename)[-1])[0] + ".npy", + ) + ) + mel = torch.from_numpy(mel) + + if len(mel.shape) < 3: + mel = mel.unsqueeze(0) + + if self.split: + frames_per_seg = math.ceil(self.segment_size / self.hop_size) + + if audio.size(1) >= self.segment_size: + mel_start = random.randint(0, mel.size(2) - frames_per_seg - 1) + mel = mel[:, :, mel_start : mel_start + frames_per_seg] + audio = audio[ + :, + mel_start + * self.hop_size : (mel_start + frames_per_seg) + * self.hop_size, + ] + else: + mel = torch.nn.functional.pad( + mel, (0, frames_per_seg - mel.size(2)), "constant" + ) + audio = torch.nn.functional.pad( + audio, (0, self.segment_size - audio.size(1)), "constant" + ) + + mel_loss = mel_spectrogram( + audio, + self.n_fft, + self.num_mels, + self.sampling_rate, + self.hop_size, + self.win_size, + self.fmin, + self.fmax_loss, + center=False, + ) + + return (mel.squeeze(), audio.squeeze(0), filename, mel_loss.squeeze()) + + def __len__(self): + return len(self.audio_files) diff --git a/vietTTS/hifigan/data_loader.py b/vietTTS/hifigan/data_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/vietTTS/hifigan/mel2wave.py b/vietTTS/hifigan/mel2wave.py new file mode 100644 index 0000000000000000000000000000000000000000..b4962667ed1901b2a6767cbd7731b06a6803ed91 --- /dev/null +++ b/vietTTS/hifigan/mel2wave.py @@ -0,0 +1,41 @@ +import json +import os +import pickle + +import haiku as hk +import jax +import jax.numpy as jnp +import numpy as np + +from .config import FLAGS +from .model import Generator + + +class AttrDict(dict): + def __init__(self, *args, **kwargs): + super(AttrDict, self).__init__(*args, **kwargs) + self.__dict__ = self + + +def mel2wave(mel): + config_file = "assets/hifigan/config.json" + MAX_WAV_VALUE = 32768.0 + with open(config_file) as f: + data = f.read() + json_config = json.loads(data) + h = AttrDict(json_config) + + @hk.transform_with_state + def forward(x): + net = Generator(h) + return net(x) + + rng = next(hk.PRNGSequence(42)) + + with open(FLAGS.ckpt_dir / "hk_hifi.pickle", "rb") as f: + params = pickle.load(f) + aux = {} + wav, aux = forward.apply(params, aux, rng, mel) + wav = jnp.squeeze(wav) + audio = jax.device_get(wav) + return audio diff --git a/vietTTS/hifigan/model.py b/vietTTS/hifigan/model.py new file mode 100644 index 0000000000000000000000000000000000000000..f5c897f52ade6c16f80d453dc582b8c6fce8e3fd --- /dev/null +++ b/vietTTS/hifigan/model.py @@ -0,0 +1,125 @@ +import haiku as hk +import jax +import jax.numpy as jnp + +LRELU_SLOPE = 0.1 + + +def get_padding(kernel_size, dilation=1): + p = int((kernel_size * dilation - dilation) / 2) + return ((p, p),) + + +class ResBlock1(hk.Module): + def __init__( + self, h, channels, kernel_size=3, dilation=(1, 3, 5), name="resblock1" + ): + super().__init__(name=name) + + self.h = h + self.convs1 = [ + hk.Conv1D( + channels, + kernel_size, + 1, + rate=dilation[i], + padding=get_padding(kernel_size, dilation[i]), + name=f"convs1_{i}", + ) + for i in range(3) + ] + + self.convs2 = [ + hk.Conv1D( + channels, + kernel_size, + 1, + rate=1, + padding=get_padding(kernel_size, 1), + name=f"convs2_{i}", + ) + for i in range(3) + ] + + def __call__(self, x): + for c1, c2 in zip(self.convs1, self.convs2): + xt = jax.nn.leaky_relu(x, LRELU_SLOPE) + xt = c1(xt) + xt = jax.nn.leaky_relu(xt, LRELU_SLOPE) + xt = c2(xt) + x = xt + x + return x + + +class ResBlock2(hk.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3), name="ResBlock2"): + super().__init__(name=name) + self.h = h + self.convs = [ + hk.Conv1D( + channels, + kernel_size, + 1, + rate=dilation[i], + padding=get_padding(kernel_size, dilation[i]), + ) + for i in range(2) + ] + + def __call__(self, x): + for c in self.convs: + xt = jax.nn.leaky_relu(x, LRELU_SLOPE) + xt = c(xt) + x = xt + x + return x + + +class Generator(hk.Module): + def __init__(self, h): + super().__init__() + self.h = h + self.num_kernels = len(h.resblock_kernel_sizes) + self.num_upsamples = len(h.upsample_rates) + self.conv_pre = hk.Conv1D(h.upsample_initial_channel, 7, 1, padding=((3, 3),)) + resblock = ResBlock1 if h.resblock == "1" else ResBlock2 + self.ups = [] + for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)): + self.ups.append( + hk.Conv1DTranspose( + h.upsample_initial_channel // (2 ** (i + 1)), + kernel_shape=k, + stride=u, + padding="SAME", + name=f"ups_{i}", + ) + ) + + self.resblocks = [] + + for i in range(len(self.ups)): + ch = h.upsample_initial_channel // (2 ** (i + 1)) + for j, (k, d) in enumerate( + zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes) + ): + self.resblocks.append( + resblock(h, ch, k, d, name=f"res_block1_{len(self.resblocks)}") + ) + self.conv_post = hk.Conv1D(1, 7, 1, padding=((3, 3),)) + + def __call__(self, x): + x = self.conv_pre(x) + for i in range(self.num_upsamples): + x = jax.nn.leaky_relu(x, LRELU_SLOPE) + + x = self.ups[i](x) + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i * self.num_kernels + j](x) + else: + xs += self.resblocks[i * self.num_kernels + j](x) + x = xs / self.num_kernels + x = jax.nn.leaky_relu(x) # default pytorch value + x = self.conv_post(x) + x = jnp.tanh(x) + return x diff --git a/vietTTS/hifigan/torch_model.py b/vietTTS/hifigan/torch_model.py new file mode 100644 index 0000000000000000000000000000000000000000..d768ef5cc00a76bb46370388bc1d8a7af8a58c65 --- /dev/null +++ b/vietTTS/hifigan/torch_model.py @@ -0,0 +1,414 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +from torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d +from torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm + +# from utils import init_weights, get_padding + +LRELU_SLOPE = 0.1 + + +def get_padding(kernel_size, dilation=1): + return int((kernel_size * dilation - dilation) / 2) + + +def init_weights(m, mean=0.0, std=0.01): + classname = m.__class__.__name__ + if classname.find("Conv") != -1: + m.weight.data.normal_(mean, std) + + +class ResBlock1(torch.nn.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5)): + super(ResBlock1, self).__init__() + self.h = h + self.convs1 = nn.ModuleList( + [ + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=dilation[0], + padding=get_padding(kernel_size, dilation[0]), + ) + ), + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=dilation[1], + padding=get_padding(kernel_size, dilation[1]), + ) + ), + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=dilation[2], + padding=get_padding(kernel_size, dilation[2]), + ) + ), + ] + ) + self.convs1.apply(init_weights) + + self.convs2 = nn.ModuleList( + [ + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=1, + padding=get_padding(kernel_size, 1), + ) + ), + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=1, + padding=get_padding(kernel_size, 1), + ) + ), + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=1, + padding=get_padding(kernel_size, 1), + ) + ), + ] + ) + self.convs2.apply(init_weights) + + def forward(self, x): + for c1, c2 in zip(self.convs1, self.convs2): + xt = F.leaky_relu(x, LRELU_SLOPE) + xt = c1(xt) + xt = F.leaky_relu(xt, LRELU_SLOPE) + xt = c2(xt) + x = xt + x + return x + + def remove_weight_norm(self): + for l in self.convs1: + remove_weight_norm(l) + for l in self.convs2: + remove_weight_norm(l) + + +class ResBlock2(torch.nn.Module): + def __init__(self, h, channels, kernel_size=3, dilation=(1, 3)): + super(ResBlock2, self).__init__() + self.h = h + self.convs = nn.ModuleList( + [ + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=dilation[0], + padding=get_padding(kernel_size, dilation[0]), + ) + ), + weight_norm( + Conv1d( + channels, + channels, + kernel_size, + 1, + dilation=dilation[1], + padding=get_padding(kernel_size, dilation[1]), + ) + ), + ] + ) + self.convs.apply(init_weights) + + def forward(self, x): + for c in self.convs: + xt = F.leaky_relu(x, LRELU_SLOPE) + xt = c(xt) + x = xt + x + return x + + def remove_weight_norm(self): + for l in self.convs: + remove_weight_norm(l) + + +class Generator(torch.nn.Module): + def __init__(self, h): + super(Generator, self).__init__() + self.h = h + self.num_kernels = len(h.resblock_kernel_sizes) + self.num_upsamples = len(h.upsample_rates) + self.conv_pre = weight_norm( + Conv1d(80, h.upsample_initial_channel, 7, 1, padding=3) + ) + resblock = ResBlock1 if h.resblock == "1" else ResBlock2 + + self.ups = nn.ModuleList() + for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)): + self.ups.append( + weight_norm( + ConvTranspose1d( + h.upsample_initial_channel // (2**i), + h.upsample_initial_channel // (2 ** (i + 1)), + k, + u, + padding=(k - u) // 2, + ) + ) + ) + + self.resblocks = nn.ModuleList() + for i in range(len(self.ups)): + ch = h.upsample_initial_channel // (2 ** (i + 1)) + for j, (k, d) in enumerate( + zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes) + ): + self.resblocks.append(resblock(h, ch, k, d)) + + self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3)) + self.ups.apply(init_weights) + self.conv_post.apply(init_weights) + + def forward(self, x): + x = self.conv_pre(x) + for i in range(self.num_upsamples): + x = F.leaky_relu(x, LRELU_SLOPE) + x = self.ups[i](x) + xs = None + for j in range(self.num_kernels): + if xs is None: + xs = self.resblocks[i * self.num_kernels + j](x) + else: + xs += self.resblocks[i * self.num_kernels + j](x) + x = xs / self.num_kernels + x = F.leaky_relu(x) + x = self.conv_post(x) + x = torch.tanh(x) + + return x + + def remove_weight_norm(self): + print("Removing weight norm...") + for l in self.ups: + remove_weight_norm(l) + for l in self.resblocks: + l.remove_weight_norm() + remove_weight_norm(self.conv_pre) + remove_weight_norm(self.conv_post) + + +class DiscriminatorP(torch.nn.Module): + def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False): + super(DiscriminatorP, self).__init__() + self.period = period + norm_f = weight_norm if use_spectral_norm == False else spectral_norm + self.convs = nn.ModuleList( + [ + norm_f( + Conv2d( + 1, + 32, + (kernel_size, 1), + (stride, 1), + padding=(get_padding(5, 1), 0), + ) + ), + norm_f( + Conv2d( + 32, + 128, + (kernel_size, 1), + (stride, 1), + padding=(get_padding(5, 1), 0), + ) + ), + norm_f( + Conv2d( + 128, + 512, + (kernel_size, 1), + (stride, 1), + padding=(get_padding(5, 1), 0), + ) + ), + norm_f( + Conv2d( + 512, + 1024, + (kernel_size, 1), + (stride, 1), + padding=(get_padding(5, 1), 0), + ) + ), + norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(2, 0))), + ] + ) + self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0))) + + def forward(self, x): + fmap = [] + + # 1d to 2d + b, c, t = x.shape + if t % self.period != 0: # pad first + n_pad = self.period - (t % self.period) + x = F.pad(x, (0, n_pad), "reflect") + t = t + n_pad + x = x.view(b, c, t // self.period, self.period) + + for l in self.convs: + x = l(x) + x = F.leaky_relu(x, LRELU_SLOPE) + fmap.append(x) + x = self.conv_post(x) + fmap.append(x) + x = torch.flatten(x, 1, -1) + + return x, fmap + + +class MultiPeriodDiscriminator(torch.nn.Module): + def __init__(self): + super(MultiPeriodDiscriminator, self).__init__() + self.discriminators = nn.ModuleList( + [ + DiscriminatorP(2), + DiscriminatorP(3), + DiscriminatorP(5), + DiscriminatorP(7), + DiscriminatorP(11), + ] + ) + + def forward(self, y, y_hat): + y_d_rs = [] + y_d_gs = [] + fmap_rs = [] + fmap_gs = [] + for i, d in enumerate(self.discriminators): + y_d_r, fmap_r = d(y) + y_d_g, fmap_g = d(y_hat) + y_d_rs.append(y_d_r) + fmap_rs.append(fmap_r) + y_d_gs.append(y_d_g) + fmap_gs.append(fmap_g) + + return y_d_rs, y_d_gs, fmap_rs, fmap_gs + + +class DiscriminatorS(torch.nn.Module): + def __init__(self, use_spectral_norm=False): + super(DiscriminatorS, self).__init__() + norm_f = weight_norm if use_spectral_norm == False else spectral_norm + self.convs = nn.ModuleList( + [ + norm_f(Conv1d(1, 128, 15, 1, padding=7)), + norm_f(Conv1d(128, 128, 41, 2, groups=4, padding=20)), + norm_f(Conv1d(128, 256, 41, 2, groups=16, padding=20)), + norm_f(Conv1d(256, 512, 41, 4, groups=16, padding=20)), + norm_f(Conv1d(512, 1024, 41, 4, groups=16, padding=20)), + norm_f(Conv1d(1024, 1024, 41, 1, groups=16, padding=20)), + norm_f(Conv1d(1024, 1024, 5, 1, padding=2)), + ] + ) + self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1)) + + def forward(self, x): + fmap = [] + for l in self.convs: + x = l(x) + x = F.leaky_relu(x, LRELU_SLOPE) + fmap.append(x) + x = self.conv_post(x) + fmap.append(x) + x = torch.flatten(x, 1, -1) + + return x, fmap + + +class MultiScaleDiscriminator(torch.nn.Module): + def __init__(self): + super(MultiScaleDiscriminator, self).__init__() + self.discriminators = nn.ModuleList( + [ + DiscriminatorS(use_spectral_norm=True), + DiscriminatorS(), + DiscriminatorS(), + ] + ) + self.meanpools = nn.ModuleList( + [AvgPool1d(4, 2, padding=2), AvgPool1d(4, 2, padding=2)] + ) + + def forward(self, y, y_hat): + y_d_rs = [] + y_d_gs = [] + fmap_rs = [] + fmap_gs = [] + for i, d in enumerate(self.discriminators): + if i != 0: + y = self.meanpools[i - 1](y) + y_hat = self.meanpools[i - 1](y_hat) + y_d_r, fmap_r = d(y) + y_d_g, fmap_g = d(y_hat) + y_d_rs.append(y_d_r) + fmap_rs.append(fmap_r) + y_d_gs.append(y_d_g) + fmap_gs.append(fmap_g) + + return y_d_rs, y_d_gs, fmap_rs, fmap_gs + + +def feature_loss(fmap_r, fmap_g): + loss = 0 + for dr, dg in zip(fmap_r, fmap_g): + for rl, gl in zip(dr, dg): + loss += torch.mean(torch.abs(rl - gl)) + + return loss * 2 + + +def discriminator_loss(disc_real_outputs, disc_generated_outputs): + loss = 0 + r_losses = [] + g_losses = [] + for dr, dg in zip(disc_real_outputs, disc_generated_outputs): + r_loss = torch.mean((1 - dr) ** 2) + g_loss = torch.mean(dg**2) + loss += r_loss + g_loss + r_losses.append(r_loss.item()) + g_losses.append(g_loss.item()) + + return loss, r_losses, g_losses + + +def generator_loss(disc_outputs): + loss = 0 + gen_losses = [] + for dg in disc_outputs: + l = torch.mean((1 - dg) ** 2) + gen_losses.append(l) + loss += l + + return loss, gen_losses diff --git a/vietTTS/hifigan/trainer.py b/vietTTS/hifigan/trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/vietTTS/nat/__init__.py b/vietTTS/nat/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/vietTTS/nat/__pycache__/__init__.cpython-39.pyc b/vietTTS/nat/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..57ea7a667010852f040c06107aff89568246b917 Binary files /dev/null and b/vietTTS/nat/__pycache__/__init__.cpython-39.pyc differ diff --git a/vietTTS/nat/__pycache__/config.cpython-39.pyc b/vietTTS/nat/__pycache__/config.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ffd84ef6e64b8424578d0ad299d8eb18ce7b9a7 Binary files /dev/null and b/vietTTS/nat/__pycache__/config.cpython-39.pyc differ diff --git a/vietTTS/nat/__pycache__/data_loader.cpython-39.pyc b/vietTTS/nat/__pycache__/data_loader.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e6446f87ac7581ea256f038481f284eb5a91e0bc Binary files /dev/null and b/vietTTS/nat/__pycache__/data_loader.cpython-39.pyc differ diff --git a/vietTTS/nat/__pycache__/model.cpython-39.pyc b/vietTTS/nat/__pycache__/model.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06df1102823ad348809b2fe2c870177415e120e0 Binary files /dev/null and b/vietTTS/nat/__pycache__/model.cpython-39.pyc differ diff --git a/vietTTS/nat/__pycache__/text2mel.cpython-39.pyc b/vietTTS/nat/__pycache__/text2mel.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2230c2c970bd24b968fe7c1217f96e7313a4e0fe Binary files /dev/null and b/vietTTS/nat/__pycache__/text2mel.cpython-39.pyc differ diff --git a/vietTTS/nat/acoustic_tpu_trainer.py b/vietTTS/nat/acoustic_tpu_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..911357b75b4b3876fd04847b5367e95089b8d90d --- /dev/null +++ b/vietTTS/nat/acoustic_tpu_trainer.py @@ -0,0 +1,189 @@ +import os +import pickle +from functools import partial +from typing import Deque + +import fire +import jax +import jax.numpy as jnp +import jax.tools.colab_tpu +import matplotlib.pyplot as plt +import optax +from tqdm.auto import tqdm + +from .acoustic_trainer import initial_state, loss_vag, val_loss_fn +from .config import FLAGS +from .data_loader import load_textgrid_wav +from .dsp import MelFilter +from .utils import print_flags + + +def setup_colab_tpu(): + jax.tools.colab_tpu.setup_tpu() + + +def train( + batch_size: int = 32, + steps_per_update: int = 10, + learning_rate: float = 1024e-6, +): + """Train acoustic model on multiple cores (TPU).""" + lr_schedule = optax.exponential_decay(learning_rate, 50_000, 0.5, staircase=True) + + optimizer = optax.chain( + optax.clip_by_global_norm(1.0), + optax.adamw(lr_schedule, weight_decay=FLAGS.weight_decay), + ) + + def update_step(prev_state, inputs): + params, aux, rng, optim_state = prev_state + rng, new_rng = jax.random.split(rng) + (loss, new_aux), grads = loss_vag(params, aux, rng, inputs) + grads = jax.lax.pmean(grads, axis_name="i") + updates, new_optim_state = optimizer.update(grads, optim_state, params) + new_params = optax.apply_updates(params, updates) + next_state = (new_params, new_aux, new_rng, new_optim_state) + return next_state, loss + + @partial(jax.pmap, axis_name="i") + def update(params, aux, rng, optim_state, inputs): + states, losses = jax.lax.scan( + update_step, (params, aux, rng, optim_state), inputs + ) + return states, jnp.mean(losses) + + print(jax.devices()) + num_devices = jax.device_count() + train_data_iter = load_textgrid_wav( + FLAGS.data_dir, + FLAGS.max_phoneme_seq_len, + batch_size * num_devices * steps_per_update, + FLAGS.max_wave_len, + "train", + ) + val_data_iter = load_textgrid_wav( + FLAGS.data_dir, + FLAGS.max_phoneme_seq_len, + batch_size, + FLAGS.max_wave_len, + "val", + ) + melfilter = MelFilter( + FLAGS.sample_rate, + FLAGS.n_fft, + FLAGS.mel_dim, + FLAGS.fmin, + FLAGS.fmax, + ) + batch = next(train_data_iter) + batch = jax.tree_map(lambda x: x[:1], batch) + batch = batch._replace(mels=melfilter(batch.wavs.astype(jnp.float32) / (2**15))) + params, aux, rng, optim_state = initial_state(optimizer, batch) + losses = Deque(maxlen=1000) + val_losses = Deque(maxlen=100) + + last_step = -steps_per_update + + # loading latest checkpoint + ckpt_fn = FLAGS.ckpt_dir / "acoustic_latest_ckpt.pickle" + if ckpt_fn.exists(): + print("Resuming from latest checkpoint at", ckpt_fn) + with open(ckpt_fn, "rb") as f: + dic = pickle.load(f) + last_step, params, aux, rng, optim_state = ( + dic["step"], + dic["params"], + dic["aux"], + dic["rng"], + dic["optim_state"], + ) + + tr = tqdm( + range( + last_step + steps_per_update, FLAGS.num_training_steps + 1, steps_per_update + ), + desc="training", + total=FLAGS.num_training_steps // steps_per_update + 1, + initial=last_step // steps_per_update + 1, + ) + + params, aux, rng, optim_state = jax.device_put_replicated( + (params, aux, rng, optim_state), jax.devices() + ) + + def batch_reshape(batch): + return jax.tree_map( + lambda x: jnp.reshape(x, (num_devices, steps_per_update, -1) + x.shape[1:]), + batch, + ) + + for step in tr: + batch = next(train_data_iter) + batch = batch_reshape(batch) + (params, aux, rng, optim_state), loss = update( + params, aux, rng, optim_state, batch + ) + losses.append(loss) + + if step % 10 == 0: + val_batch = next(val_data_iter) + val_loss, val_aux, predicted_mel, gt_mel = val_loss_fn( + *jax.tree_map(lambda x: x[0], (params, aux, rng)), val_batch + ) + val_losses.append(val_loss) + attn = jax.device_get(val_aux["acoustic_model"]["attn"]) + predicted_mel = jax.device_get(predicted_mel[0]) + gt_mel = jax.device_get(gt_mel[0]) + + if step % 1000 == 0: + loss = jnp.mean(sum(losses)).item() / len(losses) + val_loss = sum(val_losses).item() / len(val_losses) + tr.write(f"step {step} train loss {loss:.3f} val loss {val_loss:.3f}") + + # saving predicted mels + plt.figure(figsize=(10, 10)) + plt.subplot(3, 1, 1) + plt.imshow(predicted_mel.T, origin="lower", aspect="auto") + plt.subplot(3, 1, 2) + plt.imshow(gt_mel.T, origin="lower", aspect="auto") + plt.subplot(3, 1, 3) + plt.imshow(attn.T, origin="lower", aspect="auto") + plt.tight_layout() + plt.savefig(FLAGS.ckpt_dir / f"mel_{step:06d}.png") + plt.close() + + # saving checkpoint + with open(ckpt_fn, "wb") as f: + params_, aux_, rng_, optim_state_ = jax.tree_map( + lambda x: x[0], (params, aux, rng, optim_state) + ) + pickle.dump( + { + "step": step, + "params": params_, + "aux": aux_, + "rng": rng_, + "optim_state": optim_state_, + }, + f, + ) + + +if __name__ == "__main__": + # we don't use these flags. + del FLAGS.batch_size + del FLAGS.learning_rate + del FLAGS.duration_learning_rate + del FLAGS.duration_lstm_dim + del FLAGS.duration_embed_dropout_rate + + print_flags(FLAGS.__dict__) + + if "COLAB_TPU_ADDR" in os.environ: + setup_colab_tpu() + + if not FLAGS.ckpt_dir.exists(): + print("Create checkpoint dir at", FLAGS.ckpt_dir) + FLAGS.ckpt_dir.mkdir(parents=True, exist_ok=True) + + fire.Fire(train) diff --git a/vietTTS/nat/acoustic_trainer.py b/vietTTS/nat/acoustic_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..2799369c1330982342cc8f21b37d07ba907795d7 --- /dev/null +++ b/vietTTS/nat/acoustic_trainer.py @@ -0,0 +1,181 @@ +import pickle +from functools import partial +from typing import Deque + +import haiku as hk +import jax +import jax.numpy as jnp +import matplotlib.pyplot as plt +import optax +from tqdm.auto import tqdm +from vietTTS.nat.config import AcousticInput + +from .config import FLAGS, AcousticInput +from .data_loader import load_textgrid_wav +from .dsp import MelFilter +from .model import AcousticModel +from .utils import print_flags + + +@hk.transform_with_state +def net(x): + return AcousticModel(is_training=True)(x) + + +@hk.transform_with_state +def val_net(x): + return AcousticModel(is_training=False)(x) + + +def loss_fn(params, aux, rng, inputs: AcousticInput, is_training=True): + """Compute loss""" + melfilter = MelFilter( + FLAGS.sample_rate, FLAGS.n_fft, FLAGS.mel_dim, FLAGS.fmin, FLAGS.fmax + ) + wavs = inputs.wavs.astype(jnp.float32) / (2**15) + mels = melfilter(wavs) + B, L, D = mels.shape + go_frame = jnp.zeros((B, 1, D), dtype=jnp.float32) + inp_mels = jnp.concatenate((go_frame, mels[:, :-1, :]), axis=1) + n_frames = inputs.durations * FLAGS.sample_rate / (FLAGS.n_fft // 4) + inputs = inputs._replace(mels=inp_mels, durations=n_frames) + model = net if is_training else val_net + (mel1_hat, mel2_hat), new_aux = model.apply(params, aux, rng, inputs) + loss1 = (jnp.square(mel1_hat - mels) + jnp.square(mel2_hat - mels)) / 2 + loss2 = (jnp.abs(mel1_hat - mels) + jnp.abs(mel2_hat - mels)) / 2 + loss = jnp.mean((loss1 + loss2) / 2, axis=-1) + num_frames = (inputs.wav_lengths // (FLAGS.n_fft // 4))[:, None] + mask = jnp.arange(0, L)[None, :] < num_frames + loss = jnp.sum(loss * mask) / jnp.sum(mask) + return (loss, new_aux) if is_training else (loss, new_aux, mel2_hat, mels) + + +train_loss_fn = partial(loss_fn, is_training=True) +val_loss_fn = jax.jit(partial(loss_fn, is_training=False)) + +loss_vag = jax.value_and_grad(train_loss_fn, has_aux=True) + + +def initial_state(optimizer, batch): + rng = jax.random.PRNGKey(42) + params, aux = hk.transform_with_state(lambda x: AcousticModel(True)(x)).init( + rng, batch + ) + optim_state = optimizer.init(params) + return params, aux, rng, optim_state + + +def train(): + + optimizer = optax.chain( + optax.clip_by_global_norm(1.0), + optax.adamw(FLAGS.learning_rate, weight_decay=FLAGS.weight_decay), + ) + + @jax.jit + def update(params, aux, rng, optim_state, inputs): + rng, new_rng = jax.random.split(rng) + (loss, new_aux), grads = loss_vag(params, aux, rng, inputs) + updates, new_optim_state = optimizer.update(grads, optim_state, params) + new_params = optax.apply_updates(updates, params) + return loss, (new_params, new_aux, new_rng, new_optim_state) + + train_data_iter = load_textgrid_wav( + FLAGS.data_dir, + FLAGS.max_phoneme_seq_len, + FLAGS.batch_size, + FLAGS.max_wave_len, + "train", + ) + val_data_iter = load_textgrid_wav( + FLAGS.data_dir, + FLAGS.max_phoneme_seq_len, + FLAGS.batch_size, + FLAGS.max_wave_len, + "val", + ) + melfilter = MelFilter( + FLAGS.sample_rate, FLAGS.n_fft, FLAGS.mel_dim, FLAGS.fmin, FLAGS.fmax + ) + batch = next(train_data_iter) + batch = batch._replace(mels=melfilter(batch.wavs.astype(jnp.float32) / (2**15))) + params, aux, rng, optim_state = initial_state(optimizer, batch) + losses = Deque(maxlen=1000) + val_losses = Deque(maxlen=100) + + last_step = -1 + + # loading latest checkpoint + ckpt_fn = FLAGS.ckpt_dir / "acoustic_latest_ckpt.pickle" + if ckpt_fn.exists(): + print("Resuming from latest checkpoint at", ckpt_fn) + with open(ckpt_fn, "rb") as f: + dic = pickle.load(f) + last_step, params, aux, rng, optim_state = ( + dic["step"], + dic["params"], + dic["aux"], + dic["rng"], + dic["optim_state"], + ) + + tr = tqdm( + range(last_step + 1, FLAGS.num_training_steps + 1), + desc="training", + total=FLAGS.num_training_steps + 1, + initial=last_step + 1, + ) + for step in tr: + batch = next(train_data_iter) + loss, (params, aux, rng, optim_state) = update( + params, aux, rng, optim_state, batch + ) + losses.append(loss) + + if step % 10 == 0: + val_batch = next(val_data_iter) + val_loss, val_aux, predicted_mel, gt_mel = val_loss_fn( + params, aux, rng, val_batch + ) + val_losses.append(val_loss) + attn = jax.device_get(val_aux["acoustic_model"]["attn"]) + predicted_mel = jax.device_get(predicted_mel[0]) + gt_mel = jax.device_get(gt_mel[0]) + + if step % 1000 == 0: + loss = sum(losses).item() / len(losses) + val_loss = sum(val_losses).item() / len(val_losses) + tr.write(f"step {step} train loss {loss:.3f} val loss {val_loss:.3f}") + + # saving predicted mels + plt.figure(figsize=(10, 10)) + plt.subplot(3, 1, 1) + plt.imshow(predicted_mel.T, origin="lower", aspect="auto") + plt.subplot(3, 1, 2) + plt.imshow(gt_mel.T, origin="lower", aspect="auto") + plt.subplot(3, 1, 3) + plt.imshow(attn.T, origin="lower", aspect="auto") + plt.tight_layout() + plt.savefig(FLAGS.ckpt_dir / f"mel_{step:06d}.png") + plt.close() + + # saving checkpoint + with open(ckpt_fn, "wb") as f: + pickle.dump( + { + "step": step, + "params": params, + "aux": aux, + "rng": rng, + "optim_state": optim_state, + }, + f, + ) + + +if __name__ == "__main__": + print_flags(FLAGS.__dict__) + if not FLAGS.ckpt_dir.exists(): + print("Create checkpoint dir at", FLAGS.ckpt_dir) + FLAGS.ckpt_dir.mkdir(parents=True, exist_ok=True) + train() diff --git a/vietTTS/nat/config.py b/vietTTS/nat/config.py new file mode 100644 index 0000000000000000000000000000000000000000..796d4a687f5317a53cc40099069fcdafce7e573e --- /dev/null +++ b/vietTTS/nat/config.py @@ -0,0 +1,74 @@ +from argparse import Namespace +from pathlib import Path +from typing import NamedTuple + +from jax.numpy import ndarray + + +class FLAGS(Namespace): + """Configurations""" + + duration_lstm_dim = 256 + vocab_size = 256 + duration_embed_dropout_rate = 0.5 + num_training_steps = 200_000 + postnet_dim = 512 + acoustic_decoder_dim = 512 + acoustic_encoder_dim = 256 + + # dataset + max_phoneme_seq_len = 256 * 1 + assert max_phoneme_seq_len % 256 == 0 # prevent compilation error on Colab T4 GPU + max_wave_len = 1024 * 64 * 3 + + # Montreal Forced Aligner + special_phonemes = ["sil", "sp", "spn", " "] # [sil], [sp] [spn] [word end] + sil_index = special_phonemes.index("sil") + sp_index = sil_index # no use of "sp" + word_end_index = special_phonemes.index(" ") + _normal_phonemes = ( + [] + + ["a", "b", "c", "d", "e", "g", "h", "i", "k", "l"] + + ["m", "n", "o", "p", "q", "r", "s", "t", "u", "v"] + + ["x", "y", "à", "á", "â", "ã", "è", "é", "ê", "ì"] + + ["í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", "ă", "đ"] + + ["ĩ", "ũ", "ơ", "ư", "ạ", "ả", "ấ", "ầ", "ẩ", "ẫ"] + + ["ậ", "ắ", "ằ", "ẳ", "ẵ", "ặ", "ẹ", "ẻ", "ẽ", "ế"] + + ["ề", "ể", "ễ", "ệ", "ỉ", "ị", "ọ", "ỏ", "ố", "ồ"] + + ["ổ", "ỗ", "ộ", "ớ", "ờ", "ở", "ỡ", "ợ", "ụ", "ủ"] + + ["ứ", "ừ", "ử", "ữ", "ự", "ỳ", "ỵ", "ỷ", "ỹ"] + ) + + # dsp + mel_dim = 80 + n_fft = 1024 + sample_rate = 16000 + fmin = 0.0 + fmax = 8000 + + # training + batch_size = 64 + learning_rate = 1e-4 + duration_learning_rate = 1e-4 + max_grad_norm = 1.0 + weight_decay = 1e-4 + token_mask_prob = 0.1 + + # ckpt + ckpt_dir = Path("assets/infore/nat") + data_dir = Path("train_data") + + +class DurationInput(NamedTuple): + phonemes: ndarray + lengths: ndarray + durations: ndarray + + +class AcousticInput(NamedTuple): + phonemes: ndarray + lengths: ndarray + durations: ndarray + wavs: ndarray + wav_lengths: ndarray + mels: ndarray diff --git a/vietTTS/nat/data_loader.py b/vietTTS/nat/data_loader.py new file mode 100644 index 0000000000000000000000000000000000000000..ddffdc615ee1935065e5cd5866745902d3b062f5 --- /dev/null +++ b/vietTTS/nat/data_loader.py @@ -0,0 +1,156 @@ +import random +from pathlib import Path + +import numpy as np +import textgrid +from scipy.io import wavfile + +from .config import FLAGS, AcousticInput, DurationInput + + +def load_phonemes_set(): + S = FLAGS.special_phonemes + FLAGS._normal_phonemes + return S + + +def pad_seq(s, maxlen, value=0): + assert maxlen >= len(s) + return tuple(s) + (value,) * (maxlen - len(s)) + + +def is_in_word(phone, word): + def time_in_word(time, word): + return (word.minTime - 1e-3) < time and (word.maxTime + 1e-3) > time + + return time_in_word(phone.minTime, word) and time_in_word(phone.maxTime, word) + + +def load_textgrid(fn: Path): + """load textgrid file""" + tg = textgrid.TextGrid.fromFile(str(fn.resolve())) + data = [] + words = list(tg[0]) + widx = 0 + assert tg[1][0].minTime == 0, "The first phoneme has to start at time 0" + for p in tg[1]: + if not p in words[widx]: + widx = widx + 1 + if len(words[widx - 1].mark) > 0: + data.append((FLAGS.special_phonemes[FLAGS.word_end_index], 0.0)) + if widx >= len(words): + break + assert p in words[widx], "mismatched word vs phoneme" + mark = p.mark.strip().lower() + if len(mark) == 0: + mark = "sil" + data.append((mark, p.duration())) + return data + + +def textgrid_data_loader(data_dir: Path, seq_len: int, batch_size: int, mode: str): + """load all textgrid files in the directory""" + tg_files = sorted(data_dir.glob("*.TextGrid")) + random.Random(42).shuffle(tg_files) + L = len(tg_files) * 95 // 100 + assert mode in ["train", "val"] + phonemes = load_phonemes_set() + if mode == "train": + tg_files = tg_files[:L] + if mode == "val": + tg_files = tg_files[L:] + + data = [] + for fn in tg_files: + ps, ds = zip(*load_textgrid(fn)) + ps = [phonemes.index(p) for p in ps] + l = len(ps) + ps = pad_seq(ps, seq_len, 0) + ds = pad_seq(ds, seq_len, 0) + data.append((ps, ds, l)) + + batch = [] + while True: + random.shuffle(data) + for e in data: + batch.append(e) + if len(batch) == batch_size: + ps, ds, lengths = zip(*batch) + ps = np.array(ps, dtype=np.int32) + ds = np.array(ds, dtype=np.float32) + lengths = np.array(lengths, dtype=np.int32) + yield DurationInput(ps, lengths, ds) + batch = [] + + +def load_textgrid_wav( + data_dir: Path, token_seq_len: int, batch_size, pad_wav_len, mode: str +): + """load wav and textgrid files to memory.""" + tg_files = sorted(data_dir.glob("*.TextGrid")) + random.Random(42).shuffle(tg_files) + L = len(tg_files) * 95 // 100 + assert mode in ["train", "val", "gta"] + phonemes = load_phonemes_set() + if mode == "gta": + tg_files = tg_files # all files + elif mode == "train": + tg_files = tg_files[:L] + elif mode == "val": + tg_files = tg_files[L:] + + data = [] + for fn in tg_files: + ps, ds = zip(*load_textgrid(fn)) + ps = [phonemes.index(p) for p in ps] + l = len(ps) + ps = pad_seq(ps, token_seq_len, 0) + ds = pad_seq(ds, token_seq_len, 0) + + wav_file = data_dir / f"{fn.stem}.wav" + sr, y = wavfile.read(wav_file) + y = np.copy(y) + start_time = 0 + for i, (phone_idx, duration) in enumerate(zip(ps, ds)): + l = int(start_time * sr) + end_time = start_time + duration + r = int(end_time * sr) + if i == len(ps) - 1: + r = len(y) + if phone_idx < len(FLAGS.special_phonemes): + y[l:r] = 0 + start_time = end_time + + if len(y) > pad_wav_len: + y = y[:pad_wav_len] + + # # normalize to match hifigan preprocessing + # y = y.astype(np.float32) + # y = y / np.max(np.abs(y)) + # y = y * 0.95 + # y = y * (2 ** 15) + # y = y.astype(np.int16) + + wav_length = len(y) + y = np.pad(y, (0, pad_wav_len - len(y))) + data.append((fn.stem, ps, ds, l, y, wav_length)) + + batch = [] + while True: + random.shuffle(data) + for idx, e in enumerate(data): + batch.append(e) + if len(batch) == batch_size or (mode == "gta" and idx == len(data) - 1): + names, ps, ds, lengths, wavs, wav_lengths = zip(*batch) + ps = np.array(ps, dtype=np.int32) + ds = np.array(ds, dtype=np.float32) + lengths = np.array(lengths, dtype=np.int32) + wavs = np.array(wavs, dtype=np.int16) + wav_lengths = np.array(wav_lengths, dtype=np.int32) + if mode == "gta": + yield names, AcousticInput(ps, lengths, ds, wavs, wav_lengths, None) + else: + yield AcousticInput(ps, lengths, ds, wavs, wav_lengths, None) + batch = [] + if mode == "gta": + assert len(batch) == 0 + break diff --git a/vietTTS/nat/dsp.py b/vietTTS/nat/dsp.py new file mode 100644 index 0000000000000000000000000000000000000000..afcbaf5b5056ed3fec1dbe0235ccd50368b5c562 --- /dev/null +++ b/vietTTS/nat/dsp.py @@ -0,0 +1,128 @@ +from functools import partial +from typing import Optional + +import jax +import jax.numpy as jnp +import librosa +from einops import rearrange +from jax.numpy import ndarray + + +def rolling_window(a: ndarray, window: int, hop_length: int): + """return a stack of overlap subsequence of an array. + ``return jnp.stack( [a[0:10], a[5:15], a[10:20],...], axis=0)`` + Source: https://github.com/google/jax/issues/3171 + Args: + a (ndarray): input array of shape `[L, ...]` + window (int): length of each subarray (window). + hop_length (int): distance between neighbouring windows. + """ + + idx = ( + jnp.arange(window)[:, None] + + jnp.arange((len(a) - window) // hop_length + 1)[None, :] * hop_length + ) + return a[idx] + + +@partial(jax.jit, static_argnums=[1, 2, 3, 4, 5, 6]) +def stft( + y: ndarray, + n_fft: int = 2048, + hop_length: Optional[int] = None, + win_length: Optional[int] = None, + window: str = "hann", + center: bool = True, + pad_mode: str = "reflect", +): + """A jax reimplementation of ``librosa.stft`` function.""" + + if win_length is None: + win_length = n_fft + + if hop_length is None: + hop_length = win_length // 4 + + if window == "hann": + fft_window = jnp.hanning(win_length + 1)[:-1] + else: + raise RuntimeError(f"{window} window function is not supported!") + + pad_len = (n_fft - win_length) // 2 + fft_window = jnp.pad(fft_window, (pad_len, pad_len), mode="constant") + fft_window = fft_window[:, None] + if center: + y = jnp.pad(y, int(n_fft // 2), mode=pad_mode) + + # jax does not support ``np.lib.stride_tricks.as_strided`` function + # see https://github.com/google/jax/issues/3171 for comments. + y_frames = rolling_window(y, n_fft, hop_length) * fft_window + stft_matrix = jnp.fft.fft(y_frames, axis=0) + d = int(1 + n_fft // 2) + return stft_matrix[:d] + + +@partial(jax.jit, static_argnums=[1, 2, 3, 4, 5, 6]) +def batched_stft( + y: ndarray, + n_fft: int, + hop_length: int, + win_length: int, + window: str, + center: bool = True, + pad_mode: str = "reflect", +): + """Batched version of ``stft`` function. + TN => FTN + """ + + assert len(y.shape) >= 2 + if window == "hann": + fft_window = jnp.hanning(win_length + 1)[:-1] + else: + raise RuntimeError(f"{window} window function is not supported!") + pad_len = (n_fft - win_length) // 2 + if pad_len > 0: + fft_window = jnp.pad(fft_window, (pad_len, pad_len), mode="constant") + win_length = n_fft + else: + fft_window = fft_window + if center: + pad_width = ((n_fft // 2, n_fft // 2),) + ((0, 0),) * (len(y.shape) - 1) + y = jnp.pad(y, pad_width, mode=pad_mode) + + # jax does not support ``np.lib.stride_tricks.as_strided`` function + # see https://github.com/google/jax/issues/3171 for comments. + y_frames = rolling_window(y, n_fft, hop_length) + fft_window = jnp.reshape(fft_window, (-1,) + (1,) * (len(y.shape))) + y_frames = y_frames * fft_window + stft_matrix = jnp.fft.fft(y_frames, axis=0) + d = int(1 + n_fft // 2) + return stft_matrix[:d] + + +class MelFilter: + """Convert waveform to mel spectrogram.""" + + def __init__(self, sample_rate: int, n_fft: int, n_mels: int, fmin=0.0, fmax=8000): + self.melfb = jax.device_put( + librosa.filters.mel( + sr=sample_rate, n_fft=n_fft, n_mels=n_mels, fmin=fmin, fmax=fmax + ) + ) + self.n_fft = n_fft + + def __call__(self, y: ndarray) -> ndarray: + hop_length = self.n_fft // 4 + window_length = self.n_fft + assert len(y.shape) == 2 + y = rearrange(y, "n s -> s n") + p = (self.n_fft - hop_length) // 2 + y = jnp.pad(y, ((p, p), (0, 0)), mode="reflect") + spec = batched_stft( + y, self.n_fft, hop_length, window_length, "hann", False, "reflect" + ) + mag = jnp.sqrt(jnp.square(spec.real) + jnp.square(spec.imag) + 1e-9) + mel = jnp.einsum("ms,sfn->nfm", self.melfb, mag) + cond = jnp.log(jnp.clip(mel, a_min=1e-5, a_max=None)) + return cond diff --git a/vietTTS/nat/duration_trainer.py b/vietTTS/nat/duration_trainer.py new file mode 100644 index 0000000000000000000000000000000000000000..5d5b51d6ac6b68495ca415afb061aa8bb5cf6562 --- /dev/null +++ b/vietTTS/nat/duration_trainer.py @@ -0,0 +1,142 @@ +from functools import partial +from typing import Deque + +import haiku as hk +import jax +import jax.numpy as jnp +import matplotlib.pyplot as plt +import numpy as np +import optax +from tqdm.auto import tqdm +from vietTTS.nat.config import DurationInput + +from .config import FLAGS +from .data_loader import textgrid_data_loader +from .model import DurationModel +from .utils import load_latest_ckpt, print_flags, save_ckpt + + +def loss_fn(params, aux, rng, x: DurationInput, is_training=True): + """return the l1 loss""" + + @hk.transform_with_state + def net(x): + return DurationModel(is_training=is_training)(x) + + if is_training: + # randomly mask tokens with [WORD END] token + # during training to avoid overfitting + m_rng, rng = jax.random.split(rng, 2) + m = jax.random.bernoulli(m_rng, FLAGS.token_mask_prob, x.phonemes.shape) + x = x._replace(phonemes=jnp.where(m, FLAGS.word_end_index, x.phonemes)) + durations, aux = net.apply(params, aux, rng, x) + mask = jnp.arange(0, x.phonemes.shape[1])[None, :] < x.lengths[:, None] + # NOT predict [WORD END] token + mask = jnp.where(x.phonemes == FLAGS.word_end_index, False, mask) + masked_loss = jnp.abs(durations - x.durations) * mask + loss = jnp.sum(masked_loss) / jnp.sum(mask) + return loss, aux + + +forward_fn = jax.jit( + hk.transform_with_state(lambda x: DurationModel(is_training=False)(x)).apply +) + + +def predict_duration(params, aux, rng, x: DurationInput): + d, _ = forward_fn(params, aux, rng, x) + return d, x.durations + + +val_loss_fn = jax.jit(partial(loss_fn, is_training=False)) + +loss_vag = jax.value_and_grad(loss_fn, has_aux=True) + +optimizer = optax.chain( + optax.clip_by_global_norm(FLAGS.max_grad_norm), + optax.adamw(FLAGS.duration_learning_rate, weight_decay=FLAGS.weight_decay), +) + + +@jax.jit +def update(params, aux, rng, optim_state, inputs: DurationInput): + rng, new_rng = jax.random.split(rng) + (loss, new_aux), grads = loss_vag(params, aux, rng, inputs) + updates, new_optim_state = optimizer.update(grads, optim_state, params) + new_params = optax.apply_updates(params, updates) + return loss, (new_params, new_aux, new_rng, new_optim_state) + + +def initial_state(batch): + rng = jax.random.PRNGKey(42) + params, aux = hk.transform_with_state(lambda x: DurationModel(True)(x)).init( + rng, batch + ) + optim_state = optimizer.init(params) + return params, aux, rng, optim_state + + +def plot_val_duration(step: int, batch, params, aux, rng): + fn = FLAGS.ckpt_dir / f"duration_{step:06d}.png" + predicted_dur, gt_dur = predict_duration(params, aux, rng, batch) + L = batch.lengths[0] + x = np.arange(0, L) * 3 + plt.plot(predicted_dur[0, :L]) + plt.plot(gt_dur[0, :L]) + plt.legend(["predicted", "gt"]) + plt.title("Phoneme durations") + plt.savefig(fn) + plt.close() + + +def train(): + train_data_iter = textgrid_data_loader( + FLAGS.data_dir, FLAGS.max_phoneme_seq_len, FLAGS.batch_size, mode="train" + ) + val_data_iter = textgrid_data_loader( + FLAGS.data_dir, FLAGS.max_phoneme_seq_len, FLAGS.batch_size, mode="val" + ) + losses = Deque(maxlen=1000) + val_losses = Deque(maxlen=100) + latest_ckpt = load_latest_ckpt(FLAGS.ckpt_dir) + if latest_ckpt is not None: + last_step, params, aux, rng, optim_state = latest_ckpt + else: + last_step = -1 + print("Generate random initial states...") + params, aux, rng, optim_state = initial_state(next(train_data_iter)) + + tr = tqdm( + range(last_step + 1, 1 + FLAGS.num_training_steps), + total=1 + FLAGS.num_training_steps, + initial=last_step + 1, + ncols=80, + desc="training", + ) + for step in tr: + batch = next(train_data_iter) + loss, (params, aux, rng, optim_state) = update( + params, aux, rng, optim_state, batch + ) + losses.append(loss) + + if step % 10 == 0: + val_loss, _ = val_loss_fn(params, aux, rng, next(val_data_iter)) + val_losses.append(val_loss) + + if step % 1000 == 0: + loss = sum(losses).item() / len(losses) + val_loss = sum(val_losses).item() / len(val_losses) + plot_val_duration(step, next(val_data_iter), params, aux, rng) + tr.write( + f" {step:>6d}/{FLAGS.num_training_steps:>6d} | train loss {loss:.5f} | val loss {val_loss:.5f}" + ) + save_ckpt(step, params, aux, rng, optim_state, ckpt_dir=FLAGS.ckpt_dir) + + +if __name__ == "__main__": + print_flags(FLAGS.__dict__) + if not FLAGS.ckpt_dir.exists(): + print("Create checkpoint dir at", FLAGS.ckpt_dir) + FLAGS.ckpt_dir.mkdir(parents=True, exist_ok=True) + train() diff --git a/vietTTS/nat/gta.py b/vietTTS/nat/gta.py new file mode 100644 index 0000000000000000000000000000000000000000..8c9eba7cf3745a73bcd594988ed1489321434259 --- /dev/null +++ b/vietTTS/nat/gta.py @@ -0,0 +1,82 @@ +import pickle +from argparse import ArgumentParser +from pathlib import Path + +import haiku as hk +import jax +import jax.numpy as jnp +import numpy as np +from tqdm.auto import tqdm +from vietTTS.nat.config import AcousticInput + +from .config import FLAGS, AcousticInput +from .data_loader import load_textgrid_wav +from .dsp import MelFilter +from .model import AcousticModel + + +@hk.transform_with_state +def net(x): + return AcousticModel(is_training=True)(x) + + +@hk.transform_with_state +def val_net(x): + return AcousticModel(is_training=False)(x) + + +def forward_fn_(params, aux, rng, inputs: AcousticInput): + melfilter = MelFilter( + FLAGS.sample_rate, FLAGS.n_fft, FLAGS.mel_dim, FLAGS.fmin, FLAGS.fmax + ) + mels = melfilter(inputs.wavs.astype(jnp.float32) / (2**15)) + B, L, D = mels.shape + inp_mels = jnp.concatenate( + (jnp.zeros((B, 1, D), dtype=jnp.float32), mels[:, :-1, :]), axis=1 + ) + n_frames = inputs.durations * FLAGS.sample_rate / (FLAGS.n_fft // 4) + inputs = inputs._replace(mels=inp_mels, durations=n_frames) + (mel1_hat, mel2_hat), new_aux = val_net.apply(params, aux, rng, inputs) + return mel2_hat + + +forward_fn = jax.jit(forward_fn_) + + +def generate_gta(out_dir: Path): + out_dir.mkdir(parents=True, exist_ok=True) + data_iter = load_textgrid_wav( + FLAGS.data_dir, + FLAGS.max_phoneme_seq_len, + FLAGS.batch_size, + FLAGS.max_wave_len, + "gta", + ) + ckpt_fn = FLAGS.ckpt_dir / "acoustic_latest_ckpt.pickle" + print("Resuming from latest checkpoint at", ckpt_fn) + with open(ckpt_fn, "rb") as f: + dic = pickle.load(f) + _, params, aux, rng, _ = ( + dic["step"], + dic["params"], + dic["aux"], + dic["rng"], + dic["optim_state"], + ) + + tr = tqdm(data_iter) + for names, batch in tr: + lengths = batch.wav_lengths + predicted_mel = forward_fn(params, aux, rng, batch) + mel = jax.device_get(predicted_mel) + for idx, fn in enumerate(names): + file = out_dir / f"{fn}.npy" + tr.write(f"saving to file {file}") + l = lengths[idx] // (FLAGS.n_fft // 4) + np.save(file, mel[idx, :l].T) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser.add_argument("-o", "--output-dir", type=Path, default="gta") + generate_gta(parser.parse_args().output_dir) diff --git a/vietTTS/nat/model.py b/vietTTS/nat/model.py new file mode 100644 index 0000000000000000000000000000000000000000..0a15205d992318987c4ca760f8db836b6e65f04a --- /dev/null +++ b/vietTTS/nat/model.py @@ -0,0 +1,169 @@ +import haiku as hk +import jax +import jax.numpy as jnp +from jax.numpy import ndarray + +from .config import FLAGS, AcousticInput, DurationInput + + +class TokenEncoder(hk.Module): + """Encode phonemes/text to vector""" + + def __init__(self, vocab_size, lstm_dim, dropout_rate, is_training=True): + super().__init__() + self.is_training = is_training + self.embed = hk.Embed(vocab_size, lstm_dim) + self.conv1 = hk.Conv1D(lstm_dim, 3, padding="SAME") + self.conv2 = hk.Conv1D(lstm_dim, 3, padding="SAME") + self.conv3 = hk.Conv1D(lstm_dim, 3, padding="SAME") + self.bn1 = hk.BatchNorm(True, True, 0.9) + self.bn2 = hk.BatchNorm(True, True, 0.9) + self.bn3 = hk.BatchNorm(True, True, 0.9) + self.lstm_fwd = hk.LSTM(lstm_dim) + self.lstm_bwd = hk.ResetCore(hk.LSTM(lstm_dim)) + self.dropout_rate = dropout_rate + + def __call__(self, x, lengths): + x = self.embed(x) + x = jax.nn.relu(self.bn1(self.conv1(x), is_training=self.is_training)) + if self.is_training: + x = hk.dropout(hk.next_rng_key(), self.dropout_rate, x) + x = jax.nn.relu(self.bn2(self.conv2(x), is_training=self.is_training)) + if self.is_training: + x = hk.dropout(hk.next_rng_key(), self.dropout_rate, x) + x = jax.nn.relu(self.bn3(self.conv3(x), is_training=self.is_training)) + if self.is_training: + x = hk.dropout(hk.next_rng_key(), self.dropout_rate, x) + B, L, _ = x.shape + mask = jnp.arange(0, L)[None, :] >= (lengths[:, None] - 1) + h0c0_fwd = self.lstm_fwd.initial_state(B) + new_hx_fwd, _ = hk.dynamic_unroll(self.lstm_fwd, x, h0c0_fwd, time_major=False) + x_bwd, mask_bwd = jax.tree_map(lambda x: jnp.flip(x, axis=1), (x, mask)) + h0c0_bwd = self.lstm_bwd.initial_state(B) + new_hx_bwd, _ = hk.dynamic_unroll( + self.lstm_bwd, (x_bwd, mask_bwd), h0c0_bwd, time_major=False + ) + x = jnp.concatenate((new_hx_fwd, jnp.flip(new_hx_bwd, axis=1)), axis=-1) + return x + + +class DurationModel(hk.Module): + """Duration model of phonemes.""" + + def __init__(self, is_training=True): + super().__init__() + self.is_training = is_training + self.encoder = TokenEncoder( + FLAGS.vocab_size, + FLAGS.duration_lstm_dim, + FLAGS.duration_embed_dropout_rate, + is_training, + ) + self.projection = hk.Sequential( + [hk.Linear(FLAGS.duration_lstm_dim), jax.nn.gelu, hk.Linear(1)] + ) + + def __call__(self, inputs: DurationInput): + x = self.encoder(inputs.phonemes, inputs.lengths) + x = jnp.squeeze(self.projection(x), axis=-1) + x = jax.nn.softplus(x) + return x + + +class AcousticModel(hk.Module): + """Predict melspectrogram from aligned phonemes""" + + def __init__(self, is_training=True): + super().__init__() + self.is_training = is_training + self.encoder = TokenEncoder( + FLAGS.vocab_size, FLAGS.acoustic_encoder_dim, 0.5, is_training + ) + self.decoder = hk.deep_rnn_with_skip_connections( + [hk.LSTM(FLAGS.acoustic_decoder_dim), hk.LSTM(FLAGS.acoustic_decoder_dim)] + ) + self.projection = hk.Linear(FLAGS.mel_dim) + + # prenet + self.prenet_fc1 = hk.Linear(256, with_bias=False) + self.prenet_fc2 = hk.Linear(256, with_bias=False) + # posnet + self.postnet_convs = [hk.Conv1D(FLAGS.postnet_dim, 5) for _ in range(4)] + self.postnet_convs.append(hk.Conv1D(FLAGS.mel_dim, 5)) + self.postnet_bns = [hk.BatchNorm(True, True, 0.9) for _ in range(4)] + [None] + + def prenet(self, x, dropout=0.5): + x = jax.nn.relu(self.prenet_fc1(x)) + x = hk.dropout(hk.next_rng_key(), dropout, x) + x = jax.nn.relu(self.prenet_fc2(x)) + x = hk.dropout(hk.next_rng_key(), dropout, x) + return x + + def upsample(self, x, durations, L): + ruler = jnp.arange(0, L)[None, :] # B, L + end_pos = jnp.cumsum(durations, axis=1) + mid_pos = end_pos - durations / 2 # B, T + + d2 = jnp.square((mid_pos[:, None, :] - ruler[:, :, None])) / 10.0 + w = jax.nn.softmax(-d2, axis=-1) + hk.set_state("attn", w[0]) + x = jnp.einsum("BLT,BTD->BLD", w, x) + return x + + def postnet(self, mel: ndarray) -> ndarray: + x = mel + for conv, bn in zip(self.postnet_convs, self.postnet_bns): + x = conv(x) + if bn is not None: + x = bn(x, is_training=self.is_training) + x = jnp.tanh(x) + x = hk.dropout(hk.next_rng_key(), 0.5, x) if self.is_training else x + return x + + def inference(self, tokens, durations, n_frames): + B, L = tokens.shape + lengths = jnp.array([L], dtype=jnp.int32) + x = self.encoder(tokens, lengths) + x = self.upsample(x, durations, n_frames) + + def loop_fn(inputs, state): + cond = inputs + prev_mel, hxcx = state + prev_mel = self.prenet(prev_mel) + x = jnp.concatenate((cond, prev_mel), axis=-1) + x, new_hxcx = self.decoder(x, hxcx) + x = self.projection(x) + return x, (x, new_hxcx) + + state = ( + jnp.zeros((B, FLAGS.mel_dim), dtype=jnp.float32), + self.decoder.initial_state(B), + ) + x, _ = hk.dynamic_unroll(loop_fn, x, state, time_major=False) + residual = self.postnet(x) + return x + residual + + def __call__(self, inputs: AcousticInput): + x = self.encoder(inputs.phonemes, inputs.lengths) + x = self.upsample(x, inputs.durations, inputs.mels.shape[1]) + mels = self.prenet(inputs.mels) + x = jnp.concatenate((x, mels), axis=-1) + B, L, _ = x.shape + hx = self.decoder.initial_state(B) + + def zoneout_decoder(inputs, prev_state): + x, mask = inputs + x, state = self.decoder(x, prev_state) + state = jax.tree_map( + lambda m, s1, s2: s1 * m + s2 * (1 - m), mask, prev_state, state + ) + return x, state + + mask = jax.tree_map( + lambda x: jax.random.bernoulli(hk.next_rng_key(), 0.1, (B, L, x.shape[-1])), + hx, + ) + x, _ = hk.dynamic_unroll(zoneout_decoder, (x, mask), hx, time_major=False) + x = self.projection(x) + residual = self.postnet(x) + return x, x + residual diff --git a/vietTTS/nat/text2mel.py b/vietTTS/nat/text2mel.py new file mode 100644 index 0000000000000000000000000000000000000000..288e0dd25242804d1219304f72d51df6f6b7a5c7 --- /dev/null +++ b/vietTTS/nat/text2mel.py @@ -0,0 +1,117 @@ +import pickle +from argparse import ArgumentParser +from pathlib import Path + +import haiku as hk +import jax +import jax.numpy as jnp +import matplotlib.pyplot as plt +import numpy as np + +from .config import FLAGS, DurationInput +from .data_loader import load_phonemes_set +from .model import AcousticModel, DurationModel + + +def load_lexicon(fn): + lines = open(fn, "r").readlines() + lines = [l.lower().strip().split("\t") for l in lines] + return dict(lines) + + +def predict_duration(tokens): + def fwd_(x): + return DurationModel(is_training=False)(x) + + forward_fn = jax.jit(hk.transform_with_state(fwd_).apply) + with open(FLAGS.ckpt_dir / "duration_latest_ckpt.pickle", "rb") as f: + dic = pickle.load(f) + x = DurationInput( + np.array(tokens, dtype=np.int32)[None, :], + np.array([len(tokens)], dtype=np.int32), + None, + ) + return forward_fn(dic["params"], dic["aux"], dic["rng"], x)[0] + + +def text2tokens(text, lexicon_fn): + phonemes = load_phonemes_set() + lexicon = load_lexicon(lexicon_fn) + + words = text.strip().lower().split() + tokens = [FLAGS.sil_index] + for word in words: + if word in FLAGS.special_phonemes: + tokens.append(phonemes.index(word)) + elif word in lexicon: + p = lexicon[word] + p = p.split() + p = [phonemes.index(pp) for pp in p] + tokens.extend(p) + tokens.append(FLAGS.word_end_index) + else: + for p in word: + if p in phonemes: + tokens.append(phonemes.index(p)) + tokens.append(FLAGS.word_end_index) + tokens.append(FLAGS.sil_index) # silence + return tokens + + +def predict_mel(tokens, durations): + ckpt_fn = FLAGS.ckpt_dir / "acoustic_latest_ckpt.pickle" + with open(ckpt_fn, "rb") as f: + dic = pickle.load(f) + last_step, params, aux, rng, optim_state = ( + dic["step"], + dic["params"], + dic["aux"], + dic["rng"], + dic["optim_state"], + ) + + @hk.transform_with_state + def forward(tokens, durations, n_frames): + net = AcousticModel(is_training=False) + return net.inference(tokens, durations, n_frames) + + durations = durations * FLAGS.sample_rate / (FLAGS.n_fft // 4) + n_frames = int(jnp.sum(durations).item()) + predict_fn = jax.jit(forward.apply, static_argnums=[5]) + tokens = np.array(tokens, dtype=np.int32)[None, :] + return predict_fn(params, aux, rng, tokens, durations, n_frames)[0] + + +def text2mel( + text: str, lexicon_fn=FLAGS.data_dir / "lexicon.txt", silence_duration: float = -1.0 +): + tokens = text2tokens(text, lexicon_fn) + durations = predict_duration(tokens) + durations = jnp.where( + np.array(tokens)[None, :] == FLAGS.sil_index, + jnp.clip(durations, a_min=silence_duration, a_max=None), + durations, + ) + durations = jnp.where( + np.array(tokens)[None, :] == FLAGS.word_end_index, 0.0, durations + ) + mels = predict_mel(tokens, durations) + if tokens[-1] == FLAGS.sil_index: + end_silence = durations[0, -1].item() + silence_frame = int(end_silence * FLAGS.sample_rate / (FLAGS.n_fft // 4)) + mels = mels[:, : (mels.shape[1] - silence_frame)] + return mels + + +if __name__ == "__main__": + parser = ArgumentParser() + parser.add_argument("--text", type=str, required=True) + parser.add_argument("--output", type=Path, required=True) + args = parser.parse_args() + mel = text2mel(args.text) + plt.figure(figsize=(10, 5)) + plt.imshow(mel[0].T, origin="lower", aspect="auto") + plt.savefig(str(args.output)) + plt.close() + mel = jax.device_get(mel) + mel.tofile("clip.mel") diff --git a/vietTTS/nat/utils.py b/vietTTS/nat/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..2f8477d26f0537515b6e890fec8f2133b0ed84d5 --- /dev/null +++ b/vietTTS/nat/utils.py @@ -0,0 +1,31 @@ +import pickle +from pathlib import Path + +from tabulate import tabulate + + +def load_latest_ckpt(ckpt_dir: Path): + ckpt = ckpt_dir / "duration_latest_ckpt.pickle" + if not ckpt.exists(): + return None + print("Loading latest checkpoint from file", ckpt) + with open(ckpt, "rb") as f: + dic = pickle.load(f) + return dic["step"], dic["params"], dic["aux"], dic["rng"], dic["optim_state"] + + +def save_ckpt(step, params, aux, rng, optim_state, ckpt_dir: Path): + dic = { + "step": step, + "params": params, + "aux": aux, + "rng": rng, + "optim_state": optim_state, + } + with open(ckpt_dir / "duration_latest_ckpt.pickle", "wb") as f: + pickle.dump(dic, f) + + +def print_flags(flags): + values = [(k, v) for k, v in flags.items() if not k.startswith("_")] + print(tabulate(values)) diff --git a/vietTTS/nat/zero_silence_segments.py b/vietTTS/nat/zero_silence_segments.py new file mode 100644 index 0000000000000000000000000000000000000000..7099c85ac0aed887a28a3f3e3c8d5a299244eec8 --- /dev/null +++ b/vietTTS/nat/zero_silence_segments.py @@ -0,0 +1,31 @@ +from argparse import ArgumentParser +from pathlib import Path + +import numpy as np +from scipy.io import wavfile +from textgrid import TextGrid +from tqdm.auto import tqdm + +from .config import FLAGS + +parser = ArgumentParser() + +parser.add_argument("-o", "--output-dir", type=Path, required=True) +args = parser.parse_args() + +files = sorted(FLAGS.data_dir.glob("*.TextGrid")) +for fn in tqdm(files): + tg = TextGrid.fromFile(str(fn.resolve())) + wav_fn = FLAGS.data_dir / f"{fn.stem}.wav" + sr, y = wavfile.read(wav_fn) + y = np.copy(y) + for phone in tg[1]: + mark = phone.mark.strip().lower() + if len(mark) == 0: + mark = "sil" + if mark in FLAGS.special_phonemes: + l = int(phone.minTime * sr) + r = int(phone.maxTime * sr) + y[l:r] = 0 + out_file = args.output_dir / f"{fn.stem}.wav" + wavfile.write(out_file, sr, y) diff --git a/vietTTS/synthesizer.py b/vietTTS/synthesizer.py new file mode 100644 index 0000000000000000000000000000000000000000..ea3c6b5e5772e7afd55fddd513253437ecbc75a6 --- /dev/null +++ b/vietTTS/synthesizer.py @@ -0,0 +1,39 @@ +import re +import unicodedata +from argparse import ArgumentParser +from pathlib import Path + +import soundfile as sf + +from .hifigan.mel2wave import mel2wave +from .nat.config import FLAGS +from .nat.text2mel import text2mel + +parser = ArgumentParser() +parser.add_argument("--text", type=str) +parser.add_argument("--output", default="clip.wav", type=Path) +parser.add_argument("--sample-rate", default=16000, type=int) +parser.add_argument("--silence-duration", default=-1, type=float) +parser.add_argument("--lexicon-file", default=None) +args = parser.parse_args() + + +def nat_normalize_text(text): + text = unicodedata.normalize("NFKC", text) + text = text.lower().strip() + sil = FLAGS.special_phonemes[FLAGS.sil_index] + text = re.sub(r"[\n.,:]+", f" {sil} ", text) + text = text.replace('"', " ") + text = re.sub(r"\s+", " ", text) + text = re.sub(r"[.,:;?!]+", f" {sil} ", text) + text = re.sub("[ ]+", " ", text) + text = re.sub(f"( {sil}+)+ ", f" {sil} ", text) + return text.strip() + + +text = nat_normalize_text(args.text) +print("Normalized text input:", text) +mel = text2mel(text, args.lexicon_file, args.silence_duration) +wave = mel2wave(mel) +print("writing output to file", args.output) +sf.write(str(args.output), wave, samplerate=args.sample_rate)