diff --git a/assets/change_voice/audio/boy.mp3 b/assets/audio/boy.mp3
similarity index 100%
rename from assets/change_voice/audio/boy.mp3
rename to assets/audio/boy.mp3
diff --git a/assets/change_voice/audio/child.mp3 b/assets/audio/child.mp3
similarity index 100%
rename from assets/change_voice/audio/child.mp3
rename to assets/audio/child.mp3
diff --git a/assets/change_voice/audio/elder.mp3 b/assets/audio/elder.mp3
similarity index 100%
rename from assets/change_voice/audio/elder.mp3
rename to assets/audio/elder.mp3
diff --git a/assets/change_voice/audio/girl.mp3 b/assets/audio/girl.mp3
similarity index 100%
rename from assets/change_voice/audio/girl.mp3
rename to assets/audio/girl.mp3
diff --git a/assets/change_voice/audio/man.mp3 b/assets/audio/man.mp3
similarity index 100%
rename from assets/change_voice/audio/man.mp3
rename to assets/audio/man.mp3
diff --git a/assets/change_voice/audio/monsters.mp3 b/assets/audio/monsters.mp3
similarity index 100%
rename from assets/change_voice/audio/monsters.mp3
rename to assets/audio/monsters.mp3
diff --git a/assets/change_voice/audio/robot.wav b/assets/audio/robot.wav
similarity index 100%
rename from assets/change_voice/audio/robot.wav
rename to assets/audio/robot.wav
diff --git a/assets/change_voice/audio/sexy.mp3 b/assets/audio/sexy.mp3
similarity index 100%
rename from assets/change_voice/audio/sexy.mp3
rename to assets/audio/sexy.mp3
diff --git a/assets/change_voice/audio/woman.mp3 b/assets/audio/woman.mp3
similarity index 100%
rename from assets/change_voice/audio/woman.mp3
rename to assets/audio/woman.mp3
diff --git a/assets/change_voice/audio/rapper.jpeg b/assets/change_voice/audio/rapper.jpeg
deleted file mode 100755
index 63a0e84..0000000
Binary files a/assets/change_voice/audio/rapper.jpeg and /dev/null differ
diff --git a/assets/change_voice/audio/rapper.mp3 b/assets/change_voice/audio/rapper.mp3
deleted file mode 100644
index c3c1e6c..0000000
Binary files a/assets/change_voice/audio/rapper.mp3 and /dev/null differ
diff --git a/assets/change_voice/images/2.0x/about.png b/assets/images/change_voice/2.0x/about.png
similarity index 100%
rename from assets/change_voice/images/2.0x/about.png
rename to assets/images/change_voice/2.0x/about.png
diff --git a/assets/change_voice/images/2.0x/arrow_down_back.png b/assets/images/change_voice/2.0x/arrow_down_back.png
similarity index 100%
rename from assets/change_voice/images/2.0x/arrow_down_back.png
rename to assets/images/change_voice/2.0x/arrow_down_back.png
diff --git a/assets/change_voice/images/2.0x/bnb1_selected.png b/assets/images/change_voice/2.0x/bnb1_selected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb1_selected.png
rename to assets/images/change_voice/2.0x/bnb1_selected.png
diff --git a/assets/change_voice/images/2.0x/bnb1_unselected.png b/assets/images/change_voice/2.0x/bnb1_unselected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb1_unselected.png
rename to assets/images/change_voice/2.0x/bnb1_unselected.png
diff --git a/assets/change_voice/images/2.0x/bnb2_selected.png b/assets/images/change_voice/2.0x/bnb2_selected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb2_selected.png
rename to assets/images/change_voice/2.0x/bnb2_selected.png
diff --git a/assets/change_voice/images/2.0x/bnb2_unselected.png b/assets/images/change_voice/2.0x/bnb2_unselected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb2_unselected.png
rename to assets/images/change_voice/2.0x/bnb2_unselected.png
diff --git a/assets/change_voice/images/2.0x/bnb3_selected.png b/assets/images/change_voice/2.0x/bnb3_selected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb3_selected.png
rename to assets/images/change_voice/2.0x/bnb3_selected.png
diff --git a/assets/change_voice/images/2.0x/bnb3_unselected.png b/assets/images/change_voice/2.0x/bnb3_unselected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb3_unselected.png
rename to assets/images/change_voice/2.0x/bnb3_unselected.png
diff --git a/assets/change_voice/images/2.0x/bnb4_selected.png b/assets/images/change_voice/2.0x/bnb4_selected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb4_selected.png
rename to assets/images/change_voice/2.0x/bnb4_selected.png
diff --git a/assets/change_voice/images/2.0x/bnb4_unselected.png b/assets/images/change_voice/2.0x/bnb4_unselected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/bnb4_unselected.png
rename to assets/images/change_voice/2.0x/bnb4_unselected.png
diff --git a/assets/change_voice/images/2.0x/change_voice_bg.png b/assets/images/change_voice/2.0x/change_voice_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/change_voice_bg.png
rename to assets/images/change_voice/2.0x/change_voice_bg.png
diff --git a/assets/change_voice/images/2.0x/change_voice_item_frame.png b/assets/images/change_voice/2.0x/change_voice_item_frame.png
similarity index 100%
rename from assets/change_voice/images/2.0x/change_voice_item_frame.png
rename to assets/images/change_voice/2.0x/change_voice_item_frame.png
diff --git a/assets/change_voice/images/2.0x/change_voice_item_selected.png b/assets/images/change_voice/2.0x/change_voice_item_selected.png
similarity index 100%
rename from assets/change_voice/images/2.0x/change_voice_item_selected.png
rename to assets/images/change_voice/2.0x/change_voice_item_selected.png
diff --git a/assets/change_voice/images/2.0x/favorite.png b/assets/images/change_voice/2.0x/favorite.png
similarity index 100%
rename from assets/change_voice/images/2.0x/favorite.png
rename to assets/images/change_voice/2.0x/favorite.png
diff --git a/assets/change_voice/images/2.0x/home_bg.png b/assets/images/change_voice/2.0x/home_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/home_bg.png
rename to assets/images/change_voice/2.0x/home_bg.png
diff --git a/assets/change_voice/images/2.0x/home_bnb_bg.png b/assets/images/change_voice/2.0x/home_bnb_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/home_bnb_bg.png
rename to assets/images/change_voice/2.0x/home_bnb_bg.png
diff --git a/assets/change_voice/images/2.0x/icon_chevron_right.png b/assets/images/change_voice/2.0x/icon_chevron_right.png
similarity index 100%
rename from assets/change_voice/images/2.0x/icon_chevron_right.png
rename to assets/images/change_voice/2.0x/icon_chevron_right.png
diff --git a/assets/change_voice/images/2.0x/more.png b/assets/images/change_voice/2.0x/more.png
similarity index 100%
rename from assets/change_voice/images/2.0x/more.png
rename to assets/images/change_voice/2.0x/more.png
diff --git a/assets/change_voice/images/2.0x/not_favorite.png b/assets/images/change_voice/2.0x/not_favorite.png
similarity index 100%
rename from assets/change_voice/images/2.0x/not_favorite.png
rename to assets/images/change_voice/2.0x/not_favorite.png
diff --git a/assets/change_voice/images/2.0x/not_played.png b/assets/images/change_voice/2.0x/not_played.png
similarity index 100%
rename from assets/change_voice/images/2.0x/not_played.png
rename to assets/images/change_voice/2.0x/not_played.png
diff --git a/assets/change_voice/images/2.0x/not_played1.png b/assets/images/change_voice/2.0x/not_played1.png
similarity index 100%
rename from assets/change_voice/images/2.0x/not_played1.png
rename to assets/images/change_voice/2.0x/not_played1.png
diff --git a/assets/change_voice/images/2.0x/play_sound_bg.png b/assets/images/change_voice/2.0x/play_sound_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/play_sound_bg.png
rename to assets/images/change_voice/2.0x/play_sound_bg.png
diff --git a/assets/change_voice/images/2.0x/playing.png b/assets/images/change_voice/2.0x/playing.png
similarity index 100%
rename from assets/change_voice/images/2.0x/playing.png
rename to assets/images/change_voice/2.0x/playing.png
diff --git a/assets/change_voice/images/2.0x/playing1.png b/assets/images/change_voice/2.0x/playing1.png
similarity index 100%
rename from assets/change_voice/images/2.0x/playing1.png
rename to assets/images/change_voice/2.0x/playing1.png
diff --git a/assets/change_voice/images/2.0x/privacy.png b/assets/images/change_voice/2.0x/privacy.png
similarity index 100%
rename from assets/change_voice/images/2.0x/privacy.png
rename to assets/images/change_voice/2.0x/privacy.png
diff --git a/assets/change_voice/images/2.0x/settings_bg.png b/assets/images/change_voice/2.0x/settings_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/settings_bg.png
rename to assets/images/change_voice/2.0x/settings_bg.png
diff --git a/assets/change_voice/images/2.0x/subtract.png b/assets/images/change_voice/2.0x/subtract.png
similarity index 100%
rename from assets/change_voice/images/2.0x/subtract.png
rename to assets/images/change_voice/2.0x/subtract.png
diff --git a/assets/change_voice/images/2.0x/the_monster.png b/assets/images/change_voice/2.0x/the_monster.png
similarity index 100%
rename from assets/change_voice/images/2.0x/the_monster.png
rename to assets/images/change_voice/2.0x/the_monster.png
diff --git a/assets/change_voice/images/2.0x/the_monster1.png b/assets/images/change_voice/2.0x/the_monster1.png
similarity index 100%
rename from assets/change_voice/images/2.0x/the_monster1.png
rename to assets/images/change_voice/2.0x/the_monster1.png
diff --git a/assets/change_voice/images/2.0x/the_monster2.png b/assets/images/change_voice/2.0x/the_monster2.png
similarity index 100%
rename from assets/change_voice/images/2.0x/the_monster2.png
rename to assets/images/change_voice/2.0x/the_monster2.png
diff --git a/assets/change_voice/images/2.0x/upload_method_bg.png b/assets/images/change_voice/2.0x/upload_method_bg.png
similarity index 100%
rename from assets/change_voice/images/2.0x/upload_method_bg.png
rename to assets/images/change_voice/2.0x/upload_method_bg.png
diff --git a/assets/change_voice/images/2.0x/upload_pick.png b/assets/images/change_voice/2.0x/upload_pick.png
similarity index 100%
rename from assets/change_voice/images/2.0x/upload_pick.png
rename to assets/images/change_voice/2.0x/upload_pick.png
diff --git a/assets/change_voice/images/2.0x/upload_record_sound.png b/assets/images/change_voice/2.0x/upload_record_sound.png
similarity index 100%
rename from assets/change_voice/images/2.0x/upload_record_sound.png
rename to assets/images/change_voice/2.0x/upload_record_sound.png
diff --git a/assets/change_voice/images/2.0x/user_agreement.png b/assets/images/change_voice/2.0x/user_agreement.png
similarity index 100%
rename from assets/change_voice/images/2.0x/user_agreement.png
rename to assets/images/change_voice/2.0x/user_agreement.png
diff --git a/assets/change_voice/images/2.0x/voice_change.png b/assets/images/change_voice/2.0x/voice_change.png
similarity index 100%
rename from assets/change_voice/images/2.0x/voice_change.png
rename to assets/images/change_voice/2.0x/voice_change.png
diff --git a/assets/change_voice/images/2.0x/voice_default.png b/assets/images/change_voice/2.0x/voice_default.png
similarity index 100%
rename from assets/change_voice/images/2.0x/voice_default.png
rename to assets/images/change_voice/2.0x/voice_default.png
diff --git a/assets/change_voice/images/3.0x/about.png b/assets/images/change_voice/3.0x/about.png
similarity index 100%
rename from assets/change_voice/images/3.0x/about.png
rename to assets/images/change_voice/3.0x/about.png
diff --git a/assets/change_voice/images/3.0x/arrow_down_back.png b/assets/images/change_voice/3.0x/arrow_down_back.png
similarity index 100%
rename from assets/change_voice/images/3.0x/arrow_down_back.png
rename to assets/images/change_voice/3.0x/arrow_down_back.png
diff --git a/assets/change_voice/images/3.0x/bnb1_selected.png b/assets/images/change_voice/3.0x/bnb1_selected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb1_selected.png
rename to assets/images/change_voice/3.0x/bnb1_selected.png
diff --git a/assets/change_voice/images/3.0x/bnb1_unselected.png b/assets/images/change_voice/3.0x/bnb1_unselected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb1_unselected.png
rename to assets/images/change_voice/3.0x/bnb1_unselected.png
diff --git a/assets/change_voice/images/3.0x/bnb2_selected.png b/assets/images/change_voice/3.0x/bnb2_selected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb2_selected.png
rename to assets/images/change_voice/3.0x/bnb2_selected.png
diff --git a/assets/change_voice/images/3.0x/bnb2_unselected.png b/assets/images/change_voice/3.0x/bnb2_unselected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb2_unselected.png
rename to assets/images/change_voice/3.0x/bnb2_unselected.png
diff --git a/assets/change_voice/images/3.0x/bnb3_selected.png b/assets/images/change_voice/3.0x/bnb3_selected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb3_selected.png
rename to assets/images/change_voice/3.0x/bnb3_selected.png
diff --git a/assets/change_voice/images/3.0x/bnb3_unselected.png b/assets/images/change_voice/3.0x/bnb3_unselected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb3_unselected.png
rename to assets/images/change_voice/3.0x/bnb3_unselected.png
diff --git a/assets/change_voice/images/3.0x/bnb4_selected.png b/assets/images/change_voice/3.0x/bnb4_selected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb4_selected.png
rename to assets/images/change_voice/3.0x/bnb4_selected.png
diff --git a/assets/change_voice/images/3.0x/bnb4_unselected.png b/assets/images/change_voice/3.0x/bnb4_unselected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/bnb4_unselected.png
rename to assets/images/change_voice/3.0x/bnb4_unselected.png
diff --git a/assets/change_voice/images/3.0x/change_voice_bg.png b/assets/images/change_voice/3.0x/change_voice_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/change_voice_bg.png
rename to assets/images/change_voice/3.0x/change_voice_bg.png
diff --git a/assets/change_voice/images/3.0x/change_voice_item_frame.png b/assets/images/change_voice/3.0x/change_voice_item_frame.png
similarity index 100%
rename from assets/change_voice/images/3.0x/change_voice_item_frame.png
rename to assets/images/change_voice/3.0x/change_voice_item_frame.png
diff --git a/assets/change_voice/images/3.0x/change_voice_item_selected.png b/assets/images/change_voice/3.0x/change_voice_item_selected.png
similarity index 100%
rename from assets/change_voice/images/3.0x/change_voice_item_selected.png
rename to assets/images/change_voice/3.0x/change_voice_item_selected.png
diff --git a/assets/change_voice/images/3.0x/favorite.png b/assets/images/change_voice/3.0x/favorite.png
similarity index 100%
rename from assets/change_voice/images/3.0x/favorite.png
rename to assets/images/change_voice/3.0x/favorite.png
diff --git a/assets/change_voice/images/3.0x/home_bg.png b/assets/images/change_voice/3.0x/home_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/home_bg.png
rename to assets/images/change_voice/3.0x/home_bg.png
diff --git a/assets/change_voice/images/3.0x/home_bnb_bg.png b/assets/images/change_voice/3.0x/home_bnb_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/home_bnb_bg.png
rename to assets/images/change_voice/3.0x/home_bnb_bg.png
diff --git a/assets/change_voice/images/3.0x/icon_chevron_right.png b/assets/images/change_voice/3.0x/icon_chevron_right.png
similarity index 100%
rename from assets/change_voice/images/3.0x/icon_chevron_right.png
rename to assets/images/change_voice/3.0x/icon_chevron_right.png
diff --git a/assets/change_voice/images/3.0x/more.png b/assets/images/change_voice/3.0x/more.png
similarity index 100%
rename from assets/change_voice/images/3.0x/more.png
rename to assets/images/change_voice/3.0x/more.png
diff --git a/assets/change_voice/images/3.0x/not_favorite.png b/assets/images/change_voice/3.0x/not_favorite.png
similarity index 100%
rename from assets/change_voice/images/3.0x/not_favorite.png
rename to assets/images/change_voice/3.0x/not_favorite.png
diff --git a/assets/change_voice/images/3.0x/not_played.png b/assets/images/change_voice/3.0x/not_played.png
similarity index 100%
rename from assets/change_voice/images/3.0x/not_played.png
rename to assets/images/change_voice/3.0x/not_played.png
diff --git a/assets/change_voice/images/3.0x/not_played1.png b/assets/images/change_voice/3.0x/not_played1.png
similarity index 100%
rename from assets/change_voice/images/3.0x/not_played1.png
rename to assets/images/change_voice/3.0x/not_played1.png
diff --git a/assets/change_voice/images/3.0x/play_sound_bg.png b/assets/images/change_voice/3.0x/play_sound_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/play_sound_bg.png
rename to assets/images/change_voice/3.0x/play_sound_bg.png
diff --git a/assets/change_voice/images/3.0x/playing.png b/assets/images/change_voice/3.0x/playing.png
similarity index 100%
rename from assets/change_voice/images/3.0x/playing.png
rename to assets/images/change_voice/3.0x/playing.png
diff --git a/assets/change_voice/images/3.0x/playing1.png b/assets/images/change_voice/3.0x/playing1.png
similarity index 100%
rename from assets/change_voice/images/3.0x/playing1.png
rename to assets/images/change_voice/3.0x/playing1.png
diff --git a/assets/change_voice/images/3.0x/privacy.png b/assets/images/change_voice/3.0x/privacy.png
similarity index 100%
rename from assets/change_voice/images/3.0x/privacy.png
rename to assets/images/change_voice/3.0x/privacy.png
diff --git a/assets/change_voice/images/3.0x/settings_bg.png b/assets/images/change_voice/3.0x/settings_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/settings_bg.png
rename to assets/images/change_voice/3.0x/settings_bg.png
diff --git a/assets/change_voice/images/3.0x/subtract.png b/assets/images/change_voice/3.0x/subtract.png
similarity index 100%
rename from assets/change_voice/images/3.0x/subtract.png
rename to assets/images/change_voice/3.0x/subtract.png
diff --git a/assets/change_voice/images/3.0x/the_monster.png b/assets/images/change_voice/3.0x/the_monster.png
similarity index 100%
rename from assets/change_voice/images/3.0x/the_monster.png
rename to assets/images/change_voice/3.0x/the_monster.png
diff --git a/assets/change_voice/images/3.0x/the_monster1.png b/assets/images/change_voice/3.0x/the_monster1.png
similarity index 100%
rename from assets/change_voice/images/3.0x/the_monster1.png
rename to assets/images/change_voice/3.0x/the_monster1.png
diff --git a/assets/change_voice/images/3.0x/the_monster2.png b/assets/images/change_voice/3.0x/the_monster2.png
similarity index 100%
rename from assets/change_voice/images/3.0x/the_monster2.png
rename to assets/images/change_voice/3.0x/the_monster2.png
diff --git a/assets/change_voice/images/3.0x/upload_method_bg.png b/assets/images/change_voice/3.0x/upload_method_bg.png
similarity index 100%
rename from assets/change_voice/images/3.0x/upload_method_bg.png
rename to assets/images/change_voice/3.0x/upload_method_bg.png
diff --git a/assets/change_voice/images/3.0x/upload_pick.png b/assets/images/change_voice/3.0x/upload_pick.png
similarity index 100%
rename from assets/change_voice/images/3.0x/upload_pick.png
rename to assets/images/change_voice/3.0x/upload_pick.png
diff --git a/assets/change_voice/images/3.0x/upload_record_sound.png b/assets/images/change_voice/3.0x/upload_record_sound.png
similarity index 100%
rename from assets/change_voice/images/3.0x/upload_record_sound.png
rename to assets/images/change_voice/3.0x/upload_record_sound.png
diff --git a/assets/change_voice/images/3.0x/user_agreement.png b/assets/images/change_voice/3.0x/user_agreement.png
similarity index 100%
rename from assets/change_voice/images/3.0x/user_agreement.png
rename to assets/images/change_voice/3.0x/user_agreement.png
diff --git a/assets/change_voice/images/3.0x/voice_change.png b/assets/images/change_voice/3.0x/voice_change.png
similarity index 100%
rename from assets/change_voice/images/3.0x/voice_change.png
rename to assets/images/change_voice/3.0x/voice_change.png
diff --git a/assets/change_voice/images/3.0x/voice_default.png b/assets/images/change_voice/3.0x/voice_default.png
similarity index 100%
rename from assets/change_voice/images/3.0x/voice_default.png
rename to assets/images/change_voice/3.0x/voice_default.png
diff --git a/assets/change_voice/images/about.png b/assets/images/change_voice/about.png
similarity index 100%
rename from assets/change_voice/images/about.png
rename to assets/images/change_voice/about.png
diff --git a/assets/change_voice/images/arrow_down_back.png b/assets/images/change_voice/arrow_down_back.png
similarity index 100%
rename from assets/change_voice/images/arrow_down_back.png
rename to assets/images/change_voice/arrow_down_back.png
diff --git a/assets/change_voice/images/bnb1_selected.png b/assets/images/change_voice/bnb1_selected.png
similarity index 100%
rename from assets/change_voice/images/bnb1_selected.png
rename to assets/images/change_voice/bnb1_selected.png
diff --git a/assets/change_voice/images/bnb1_unselected.png b/assets/images/change_voice/bnb1_unselected.png
similarity index 100%
rename from assets/change_voice/images/bnb1_unselected.png
rename to assets/images/change_voice/bnb1_unselected.png
diff --git a/assets/change_voice/images/bnb2_selected.png b/assets/images/change_voice/bnb2_selected.png
similarity index 100%
rename from assets/change_voice/images/bnb2_selected.png
rename to assets/images/change_voice/bnb2_selected.png
diff --git a/assets/change_voice/images/bnb2_unselected.png b/assets/images/change_voice/bnb2_unselected.png
similarity index 100%
rename from assets/change_voice/images/bnb2_unselected.png
rename to assets/images/change_voice/bnb2_unselected.png
diff --git a/assets/change_voice/images/bnb3_selected.png b/assets/images/change_voice/bnb3_selected.png
similarity index 100%
rename from assets/change_voice/images/bnb3_selected.png
rename to assets/images/change_voice/bnb3_selected.png
diff --git a/assets/change_voice/images/bnb3_unselected.png b/assets/images/change_voice/bnb3_unselected.png
similarity index 100%
rename from assets/change_voice/images/bnb3_unselected.png
rename to assets/images/change_voice/bnb3_unselected.png
diff --git a/assets/change_voice/images/bnb4_selected.png b/assets/images/change_voice/bnb4_selected.png
similarity index 100%
rename from assets/change_voice/images/bnb4_selected.png
rename to assets/images/change_voice/bnb4_selected.png
diff --git a/assets/change_voice/images/bnb4_unselected.png b/assets/images/change_voice/bnb4_unselected.png
similarity index 100%
rename from assets/change_voice/images/bnb4_unselected.png
rename to assets/images/change_voice/bnb4_unselected.png
diff --git a/assets/change_voice/images/voice_change.png b/assets/images/change_voice/change_voice.png
similarity index 100%
rename from assets/change_voice/images/voice_change.png
rename to assets/images/change_voice/change_voice.png
diff --git a/assets/change_voice/images/change_voice_bg.png b/assets/images/change_voice/change_voice_bg.png
similarity index 100%
rename from assets/change_voice/images/change_voice_bg.png
rename to assets/images/change_voice/change_voice_bg.png
diff --git a/assets/change_voice/images/change_voice_item_frame.png b/assets/images/change_voice/change_voice_item_frame.png
similarity index 100%
rename from assets/change_voice/images/change_voice_item_frame.png
rename to assets/images/change_voice/change_voice_item_frame.png
diff --git a/assets/change_voice/images/change_voice_item_selected.png b/assets/images/change_voice/change_voice_item_selected.png
similarity index 100%
rename from assets/change_voice/images/change_voice_item_selected.png
rename to assets/images/change_voice/change_voice_item_selected.png
diff --git a/assets/images/change_voice/cover/DIY.jpeg b/assets/images/change_voice/cover/DIY.jpeg
new file mode 100755
index 0000000..b3fecd9
Binary files /dev/null and b/assets/images/change_voice/cover/DIY.jpeg differ
diff --git a/assets/images/change_voice/cover/Fast.jpeg b/assets/images/change_voice/cover/Fast.jpeg
new file mode 100755
index 0000000..09526dd
Binary files /dev/null and b/assets/images/change_voice/cover/Fast.jpeg differ
diff --git a/assets/images/change_voice/cover/Flash.jpeg b/assets/images/change_voice/cover/Flash.jpeg
new file mode 100755
index 0000000..18dca3a
Binary files /dev/null and b/assets/images/change_voice/cover/Flash.jpeg differ
diff --git a/assets/images/change_voice/cover/Original.jpeg b/assets/images/change_voice/cover/Original.jpeg
new file mode 100755
index 0000000..fb53c2a
Binary files /dev/null and b/assets/images/change_voice/cover/Original.jpeg differ
diff --git a/assets/images/change_voice/cover/Slow.jpeg b/assets/images/change_voice/cover/Slow.jpeg
new file mode 100755
index 0000000..4c01fae
Binary files /dev/null and b/assets/images/change_voice/cover/Slow.jpeg differ
diff --git a/assets/change_voice/audio/boy.jpeg b/assets/images/change_voice/cover/boy.jpeg
similarity index 100%
rename from assets/change_voice/audio/boy.jpeg
rename to assets/images/change_voice/cover/boy.jpeg
diff --git a/assets/change_voice/audio/child.png b/assets/images/change_voice/cover/child.png
similarity index 100%
rename from assets/change_voice/audio/child.png
rename to assets/images/change_voice/cover/child.png
diff --git a/assets/change_voice/audio/elder.png b/assets/images/change_voice/cover/elder.png
similarity index 100%
rename from assets/change_voice/audio/elder.png
rename to assets/images/change_voice/cover/elder.png
diff --git a/assets/change_voice/audio/girl.jpeg b/assets/images/change_voice/cover/girl.jpeg
similarity index 100%
rename from assets/change_voice/audio/girl.jpeg
rename to assets/images/change_voice/cover/girl.jpeg
diff --git a/assets/change_voice/audio/man.png b/assets/images/change_voice/cover/man.png
similarity index 100%
rename from assets/change_voice/audio/man.png
rename to assets/images/change_voice/cover/man.png
diff --git a/assets/change_voice/audio/monsters.png b/assets/images/change_voice/cover/monsters.png
similarity index 100%
rename from assets/change_voice/audio/monsters.png
rename to assets/images/change_voice/cover/monsters.png
diff --git a/assets/change_voice/audio/robot.jpeg b/assets/images/change_voice/cover/robot.jpeg
similarity index 100%
rename from assets/change_voice/audio/robot.jpeg
rename to assets/images/change_voice/cover/robot.jpeg
diff --git a/assets/change_voice/audio/sexy.jpeg b/assets/images/change_voice/cover/sexy.jpeg
similarity index 100%
rename from assets/change_voice/audio/sexy.jpeg
rename to assets/images/change_voice/cover/sexy.jpeg
diff --git a/assets/change_voice/audio/woman.png b/assets/images/change_voice/cover/woman.png
similarity index 100%
rename from assets/change_voice/audio/woman.png
rename to assets/images/change_voice/cover/woman.png
diff --git a/assets/change_voice/images/favorite.png b/assets/images/change_voice/favorite.png
similarity index 100%
rename from assets/change_voice/images/favorite.png
rename to assets/images/change_voice/favorite.png
diff --git a/assets/change_voice/images/home_bg.png b/assets/images/change_voice/home_bg.png
similarity index 100%
rename from assets/change_voice/images/home_bg.png
rename to assets/images/change_voice/home_bg.png
diff --git a/assets/change_voice/images/home_bnb_bg.png b/assets/images/change_voice/home_bnb_bg.png
similarity index 100%
rename from assets/change_voice/images/home_bnb_bg.png
rename to assets/images/change_voice/home_bnb_bg.png
diff --git a/assets/change_voice/images/icon_chevron_right.png b/assets/images/change_voice/icon_chevron_right.png
similarity index 100%
rename from assets/change_voice/images/icon_chevron_right.png
rename to assets/images/change_voice/icon_chevron_right.png
diff --git a/assets/change_voice/images/img_error.png b/assets/images/change_voice/img_error.png
similarity index 100%
rename from assets/change_voice/images/img_error.png
rename to assets/images/change_voice/img_error.png
diff --git a/assets/change_voice/images/img_placeholder.png b/assets/images/change_voice/img_placeholder.png
similarity index 100%
rename from assets/change_voice/images/img_placeholder.png
rename to assets/images/change_voice/img_placeholder.png
diff --git a/assets/change_voice/images/more.png b/assets/images/change_voice/more.png
similarity index 100%
rename from assets/change_voice/images/more.png
rename to assets/images/change_voice/more.png
diff --git a/assets/change_voice/images/not_favorite.png b/assets/images/change_voice/not_favorite.png
similarity index 100%
rename from assets/change_voice/images/not_favorite.png
rename to assets/images/change_voice/not_favorite.png
diff --git a/assets/change_voice/images/not_played.png b/assets/images/change_voice/not_played.png
similarity index 100%
rename from assets/change_voice/images/not_played.png
rename to assets/images/change_voice/not_played.png
diff --git a/assets/change_voice/images/not_played1.png b/assets/images/change_voice/not_played1.png
similarity index 100%
rename from assets/change_voice/images/not_played1.png
rename to assets/images/change_voice/not_played1.png
diff --git a/assets/change_voice/images/play_sound_bg.png b/assets/images/change_voice/play_sound_bg.png
similarity index 100%
rename from assets/change_voice/images/play_sound_bg.png
rename to assets/images/change_voice/play_sound_bg.png
diff --git a/assets/change_voice/images/playing.png b/assets/images/change_voice/playing.png
similarity index 100%
rename from assets/change_voice/images/playing.png
rename to assets/images/change_voice/playing.png
diff --git a/assets/change_voice/images/playing1.png b/assets/images/change_voice/playing1.png
similarity index 100%
rename from assets/change_voice/images/playing1.png
rename to assets/images/change_voice/playing1.png
diff --git a/assets/change_voice/images/privacy.png b/assets/images/change_voice/privacy.png
similarity index 100%
rename from assets/change_voice/images/privacy.png
rename to assets/images/change_voice/privacy.png
diff --git a/assets/change_voice/images/settings_bg.png b/assets/images/change_voice/settings_bg.png
similarity index 100%
rename from assets/change_voice/images/settings_bg.png
rename to assets/images/change_voice/settings_bg.png
diff --git a/assets/change_voice/images/subtract.png b/assets/images/change_voice/subtract.png
similarity index 100%
rename from assets/change_voice/images/subtract.png
rename to assets/images/change_voice/subtract.png
diff --git a/assets/change_voice/images/the_monster.png b/assets/images/change_voice/the_monster.png
similarity index 100%
rename from assets/change_voice/images/the_monster.png
rename to assets/images/change_voice/the_monster.png
diff --git a/assets/change_voice/images/the_monster1.png b/assets/images/change_voice/the_monster1.png
similarity index 100%
rename from assets/change_voice/images/the_monster1.png
rename to assets/images/change_voice/the_monster1.png
diff --git a/assets/change_voice/images/the_monster2.png b/assets/images/change_voice/the_monster2.png
similarity index 100%
rename from assets/change_voice/images/the_monster2.png
rename to assets/images/change_voice/the_monster2.png
diff --git a/assets/change_voice/images/upload_method_bg.png b/assets/images/change_voice/upload_method_bg.png
similarity index 100%
rename from assets/change_voice/images/upload_method_bg.png
rename to assets/images/change_voice/upload_method_bg.png
diff --git a/assets/change_voice/images/upload_pick.png b/assets/images/change_voice/upload_pick.png
similarity index 100%
rename from assets/change_voice/images/upload_pick.png
rename to assets/images/change_voice/upload_pick.png
diff --git a/assets/change_voice/images/upload_record_sound.png b/assets/images/change_voice/upload_record_sound.png
similarity index 100%
rename from assets/change_voice/images/upload_record_sound.png
rename to assets/images/change_voice/upload_record_sound.png
diff --git a/assets/change_voice/images/user_agreement.png b/assets/images/change_voice/user_agreement.png
similarity index 100%
rename from assets/change_voice/images/user_agreement.png
rename to assets/images/change_voice/user_agreement.png
diff --git a/assets/change_voice/images/voice_default.png b/assets/images/change_voice/voice_default.png
similarity index 100%
rename from assets/change_voice/images/voice_default.png
rename to assets/images/change_voice/voice_default.png
diff --git a/assets/images/musicoo/bnb1_selected.png b/assets/images/musicoo/bnb1_selected.png
new file mode 100755
index 0000000..81c05cd
Binary files /dev/null and b/assets/images/musicoo/bnb1_selected.png differ
diff --git a/assets/images/musicoo/bnb1_unselected.png b/assets/images/musicoo/bnb1_unselected.png
new file mode 100755
index 0000000..2b60980
Binary files /dev/null and b/assets/images/musicoo/bnb1_unselected.png differ
diff --git a/assets/images/musicoo/bnb2_selected.png b/assets/images/musicoo/bnb2_selected.png
new file mode 100755
index 0000000..63d255c
Binary files /dev/null and b/assets/images/musicoo/bnb2_selected.png differ
diff --git a/assets/images/musicoo/bnb2_unselected.png b/assets/images/musicoo/bnb2_unselected.png
new file mode 100755
index 0000000..b4c3a81
Binary files /dev/null and b/assets/images/musicoo/bnb2_unselected.png differ
diff --git a/assets/images/musicoo/bnb3_selected.png b/assets/images/musicoo/bnb3_selected.png
new file mode 100755
index 0000000..a3a04ec
Binary files /dev/null and b/assets/images/musicoo/bnb3_selected.png differ
diff --git a/assets/images/musicoo/bnb3_unselected.png b/assets/images/musicoo/bnb3_unselected.png
new file mode 100755
index 0000000..a676cf0
Binary files /dev/null and b/assets/images/musicoo/bnb3_unselected.png differ
diff --git a/ios/Podfile b/ios/Podfile
index 11dbbce..582b84f 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -56,6 +56,9 @@ post_install do |installer|
## dart: PermissionGroup.mediaLibrary
'PERMISSION_MEDIA_LIBRARY=1',
+
+ ## dart: PermissionGroup.appTrackingTransparency
+ 'PERMISSION_APP_TRACKING_TRANSPARENCY=1',
]
end
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 35e7292..2b4524a 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -32,6 +32,8 @@
We need access to the photo library to pick audio files.
NSAppleMusicUsageDescription
We need to access the device media library to select audio files.
+ NSUserTrackingUsageDescription
+ We need your permission to access the advertising identifier to provide better ad services.
UIApplicationSupportsIndirectInputEvents
UILaunchStoryboardName
diff --git a/lib/components/private/my_voice_item.dart b/lib/components/private/my_voice_item.dart
index bf75769..9daa011 100644
--- a/lib/components/private/my_voice_item.dart
+++ b/lib/components/private/my_voice_item.dart
@@ -33,7 +33,7 @@ class MyVoiceItem extends StatelessWidget {
children: [
ClipOval(
child: Image.asset(
- ObjUtil.isNotEmptyStr(item.cover) ? item.cover! : Assets.imagesVoiceDefault,
+ ObjUtil.isNotEmptyStr(item.cover) ? item.cover! : Assets.changeVoiceVoiceDefault,
width: 52.w,
height: 52.w,
fit: BoxFit.cover,
@@ -80,7 +80,7 @@ class MyVoiceItem extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(6).w,
child: Image.asset(
- Assets.imagesMore,
+ Assets.changeVoiceMore,
width: 32.w,
height: 32.w,
),
diff --git a/lib/data/app_config.dart b/lib/data/app_config.dart
new file mode 100644
index 0000000..00c92b1
--- /dev/null
+++ b/lib/data/app_config.dart
@@ -0,0 +1,11 @@
+// Author: fengshengxiong
+// Date: 2024/6/13
+// Description: 全局配置
+
+import 'package:tone_snap/data/enum/app_side_enum.dart';
+
+class AppConfig {
+ /// 当前App展示的一面
+ static const AppSideEnum appSideEnum = AppSideEnum.sideA;
+}
+
diff --git a/lib/data/enum/app_side_enum.dart b/lib/data/enum/app_side_enum.dart
new file mode 100644
index 0000000..5c0441d
--- /dev/null
+++ b/lib/data/enum/app_side_enum.dart
@@ -0,0 +1,24 @@
+// Author: fengshengxiong
+// Date: 2024/6/13
+// Description: App类型(A/B)面
+
+enum AppSideEnum {
+ sideA(type: 0),
+ sideB(type: 1);
+
+ const AppSideEnum({
+ required this.type,
+ });
+
+ final int type;
+}
+
+extension AppSideEnumExtension on AppSideEnum {
+ static AppSideEnum getEnum(int? type) {
+ if (type == AppSideEnum.sideA.type) {
+ return AppSideEnum.sideA;
+ } else {
+ return AppSideEnum.sideB;
+ }
+ }
+}
\ No newline at end of file
diff --git a/lib/data/models/voice_model.dart b/lib/data/models/voice_model.dart
index 0fd57c5..5773d49 100644
--- a/lib/data/models/voice_model.dart
+++ b/lib/data/models/voice_model.dart
@@ -8,10 +8,6 @@ import 'package:hive/hive.dart';
part 'voice_model.g.dart';
-VoiceModel voiceModelFromJson(String str) => VoiceModel.fromJson(json.decode(str));
-
-String voiceModelToJson(VoiceModel data) => json.encode(data.toJson());
-
@HiveType(typeId: 0)
class VoiceModel extends HiveObject {
@HiveField(0)
@@ -29,6 +25,10 @@ class VoiceModel extends HiveObject {
this.cover,
});
+ VoiceModel voiceModelFromJson(String str) => VoiceModel.fromJson(json.decode(str));
+
+ String voiceModelToJson(VoiceModel data) => json.encode(data.toJson());
+
VoiceModel copyWith({
String? name,
String? path,
diff --git a/lib/generated/assets.dart b/lib/generated/assets.dart
index f235a1e..d5668da 100644
--- a/lib/generated/assets.dart
+++ b/lib/generated/assets.dart
@@ -2,64 +2,73 @@
class Assets {
Assets._();
- static const String audioBoy = 'assets/change_voice/audio/boy.mp3';
- static const String audioChild = 'assets/change_voice/audio/child.mp3';
- static const String audioElder = 'assets/change_voice/audio/elder.mp3';
- static const String audioGirl = 'assets/change_voice/audio/girl.mp3';
- static const String audioMan = 'assets/change_voice/audio/man.mp3';
- static const String audioMonsters = 'assets/change_voice/audio/monsters.mp3';
- static const String audioRapper = 'assets/change_voice/audio/rapper.mp3';
- static const String audioRobot = 'assets/change_voice/audio/robot.wav';
- static const String audioSexy = 'assets/change_voice/audio/sexy.mp3';
- static const String audioWoman = 'assets/change_voice/audio/woman.mp3';
- static const String changeVoiceAudioBoy = 'assets/change_voice/audio/boy.jpeg';
- static const String changeVoiceAudioChild = 'assets/change_voice/audio/child.png';
- static const String changeVoiceAudioElder = 'assets/change_voice/audio/elder.png';
- static const String changeVoiceAudioGirl = 'assets/change_voice/audio/girl.jpeg';
- static const String changeVoiceAudioMan = 'assets/change_voice/audio/man.png';
- static const String changeVoiceAudioMonsters = 'assets/change_voice/audio/monsters.png';
- static const String changeVoiceAudioRapper = 'assets/change_voice/audio/rapper.jpeg';
- static const String changeVoiceAudioRobot = 'assets/change_voice/audio/robot.jpeg';
- static const String changeVoiceAudioSexy = 'assets/change_voice/audio/sexy.jpeg';
- static const String changeVoiceAudioWoman = 'assets/change_voice/audio/woman.png';
+ static const String audioBoy = 'assets/audio/boy.mp3';
+ static const String audioChild = 'assets/audio/child.mp3';
+ static const String audioElder = 'assets/audio/elder.mp3';
+ static const String audioGirl = 'assets/audio/girl.mp3';
+ static const String audioMan = 'assets/audio/man.mp3';
+ static const String audioMonsters = 'assets/audio/monsters.mp3';
+ static const String audioRobot = 'assets/audio/robot.wav';
+ static const String audioSexy = 'assets/audio/sexy.mp3';
+ static const String audioWoman = 'assets/audio/woman.mp3';
+ static const String changeVoiceAbout = 'assets/images/change_voice/about.png';
+ static const String changeVoiceArrowDownBack = 'assets/images/change_voice/arrow_down_back.png';
+ static const String changeVoiceBnb1Selected = 'assets/images/change_voice/bnb1_selected.png';
+ static const String changeVoiceBnb1Unselected = 'assets/images/change_voice/bnb1_unselected.png';
+ static const String changeVoiceBnb2Selected = 'assets/images/change_voice/bnb2_selected.png';
+ static const String changeVoiceBnb2Unselected = 'assets/images/change_voice/bnb2_unselected.png';
+ static const String changeVoiceBnb3Selected = 'assets/images/change_voice/bnb3_selected.png';
+ static const String changeVoiceBnb3Unselected = 'assets/images/change_voice/bnb3_unselected.png';
+ static const String changeVoiceBnb4Selected = 'assets/images/change_voice/bnb4_selected.png';
+ static const String changeVoiceBnb4Unselected = 'assets/images/change_voice/bnb4_unselected.png';
+ static const String changeVoiceChangeVoice = 'assets/images/change_voice/change_voice.png';
+ static const String changeVoiceChangeVoiceBg = 'assets/images/change_voice/change_voice_bg.png';
+ static const String changeVoiceChangeVoiceItemFrame = 'assets/images/change_voice/change_voice_item_frame.png';
+ static const String changeVoiceChangeVoiceItemSelected = 'assets/images/change_voice/change_voice_item_selected.png';
+ static const String changeVoiceFavorite = 'assets/images/change_voice/favorite.png';
+ static const String changeVoiceHomeBg = 'assets/images/change_voice/home_bg.png';
+ static const String changeVoiceHomeBnbBg = 'assets/images/change_voice/home_bnb_bg.png';
+ static const String changeVoiceIconChevronRight = 'assets/images/change_voice/icon_chevron_right.png';
+ static const String changeVoiceImgError = 'assets/images/change_voice/img_error.png';
+ static const String changeVoiceImgPlaceholder = 'assets/images/change_voice/img_placeholder.png';
+ static const String changeVoiceMore = 'assets/images/change_voice/more.png';
+ static const String changeVoiceNotFavorite = 'assets/images/change_voice/not_favorite.png';
+ static const String changeVoiceNotPlayed = 'assets/images/change_voice/not_played.png';
+ static const String changeVoiceNotPlayed1 = 'assets/images/change_voice/not_played1.png';
+ static const String changeVoicePlaySoundBg = 'assets/images/change_voice/play_sound_bg.png';
+ static const String changeVoicePlaying = 'assets/images/change_voice/playing.png';
+ static const String changeVoicePlaying1 = 'assets/images/change_voice/playing1.png';
+ static const String changeVoicePrivacy = 'assets/images/change_voice/privacy.png';
+ static const String changeVoiceSettingsBg = 'assets/images/change_voice/settings_bg.png';
+ static const String changeVoiceSubtract = 'assets/images/change_voice/subtract.png';
+ static const String changeVoiceTheMonster = 'assets/images/change_voice/the_monster.png';
+ static const String changeVoiceTheMonster1 = 'assets/images/change_voice/the_monster1.png';
+ static const String changeVoiceTheMonster2 = 'assets/images/change_voice/the_monster2.png';
+ static const String changeVoiceUploadMethodBg = 'assets/images/change_voice/upload_method_bg.png';
+ static const String changeVoiceUploadPick = 'assets/images/change_voice/upload_pick.png';
+ static const String changeVoiceUploadRecordSound = 'assets/images/change_voice/upload_record_sound.png';
+ static const String changeVoiceUserAgreement = 'assets/images/change_voice/user_agreement.png';
+ static const String changeVoiceVoiceDefault = 'assets/images/change_voice/voice_default.png';
+ static const String coverBoy = 'assets/images/change_voice/cover/boy.jpeg';
+ static const String coverChild = 'assets/images/change_voice/cover/child.png';
+ static const String coverDIY = 'assets/images/change_voice/cover/DIY.jpeg';
+ static const String coverElder = 'assets/images/change_voice/cover/elder.png';
+ static const String coverFast = 'assets/images/change_voice/cover/Fast.jpeg';
+ static const String coverFlash = 'assets/images/change_voice/cover/Flash.jpeg';
+ static const String coverGirl = 'assets/images/change_voice/cover/girl.jpeg';
+ static const String coverMan = 'assets/images/change_voice/cover/man.png';
+ static const String coverMonsters = 'assets/images/change_voice/cover/monsters.png';
+ static const String coverOriginal = 'assets/images/change_voice/cover/Original.jpeg';
+ static const String coverRobot = 'assets/images/change_voice/cover/robot.jpeg';
+ static const String coverSexy = 'assets/images/change_voice/cover/sexy.jpeg';
+ static const String coverSlow = 'assets/images/change_voice/cover/Slow.jpeg';
+ static const String coverWoman = 'assets/images/change_voice/cover/woman.png';
static const String iconAppIcon = 'assets/icon/app_icon.jpeg';
- static const String imagesAbout = 'assets/change_voice/images/about.png';
- static const String imagesArrowDownBack = 'assets/change_voice/images/arrow_down_back.png';
- static const String imagesBnb1Selected = 'assets/change_voice/images/bnb1_selected.png';
- static const String imagesBnb1Unselected = 'assets/change_voice/images/bnb1_unselected.png';
- static const String imagesBnb2Selected = 'assets/change_voice/images/bnb2_selected.png';
- static const String imagesBnb2Unselected = 'assets/change_voice/images/bnb2_unselected.png';
- static const String imagesBnb3Selected = 'assets/change_voice/images/bnb3_selected.png';
- static const String imagesBnb3Unselected = 'assets/change_voice/images/bnb3_unselected.png';
- static const String imagesBnb4Selected = 'assets/change_voice/images/bnb4_selected.png';
- static const String imagesBnb4Unselected = 'assets/change_voice/images/bnb4_unselected.png';
- static const String imagesChangeVoiceBg = 'assets/change_voice/images/change_voice_bg.png';
- static const String imagesChangeVoiceItemFrame = 'assets/change_voice/images/change_voice_item_frame.png';
- static const String imagesChangeVoiceItemSelected = 'assets/change_voice/images/change_voice_item_selected.png';
- static const String imagesFavorite = 'assets/change_voice/images/favorite.png';
- static const String imagesHomeBg = 'assets/change_voice/images/home_bg.png';
- static const String imagesHomeBnbBg = 'assets/change_voice/images/home_bnb_bg.png';
- static const String imagesIconChevronRight = 'assets/change_voice/images/icon_chevron_right.png';
- static const String imagesImgError = 'assets/change_voice/images/img_error.png';
- static const String imagesImgPlaceholder = 'assets/change_voice/images/img_placeholder.png';
- static const String imagesMore = 'assets/change_voice/images/more.png';
- static const String imagesNotFavorite = 'assets/change_voice/images/not_favorite.png';
- static const String imagesNotPlayed = 'assets/change_voice/images/not_played.png';
- static const String imagesNotPlayed1 = 'assets/change_voice/images/not_played1.png';
- static const String imagesPlaySoundBg = 'assets/change_voice/images/play_sound_bg.png';
- static const String imagesPlaying = 'assets/change_voice/images/playing.png';
- static const String imagesPlaying1 = 'assets/change_voice/images/playing1.png';
- static const String imagesPrivacy = 'assets/change_voice/images/privacy.png';
- static const String imagesSettingsBg = 'assets/change_voice/images/settings_bg.png';
- static const String imagesSubtract = 'assets/change_voice/images/subtract.png';
- static const String imagesTheMonster = 'assets/change_voice/images/the_monster.png';
- static const String imagesTheMonster1 = 'assets/change_voice/images/the_monster1.png';
- static const String imagesTheMonster2 = 'assets/change_voice/images/the_monster2.png';
- static const String imagesUploadMethodBg = 'assets/change_voice/images/upload_method_bg.png';
- static const String imagesUploadPick = 'assets/change_voice/images/upload_pick.png';
- static const String imagesUploadRecordSound = 'assets/change_voice/images/upload_record_sound.png';
- static const String imagesUserAgreement = 'assets/change_voice/images/user_agreement.png';
- static const String imagesVoiceChange = 'assets/change_voice/images/voice_change.png';
- static const String imagesVoiceDefault = 'assets/change_voice/images/voice_default.png';
+ static const String musicooBnb1Selected = 'assets/images/musicoo/bnb1_selected.png';
+ static const String musicooBnb1Unselected = 'assets/images/musicoo/bnb1_unselected.png';
+ static const String musicooBnb2Selected = 'assets/images/musicoo/bnb2_selected.png';
+ static const String musicooBnb2Unselected = 'assets/images/musicoo/bnb2_unselected.png';
+ static const String musicooBnb3Selected = 'assets/images/musicoo/bnb3_selected.png';
+ static const String musicooBnb3Unselected = 'assets/images/musicoo/bnb3_unselected.png';
}
diff --git a/lib/main.dart b/lib/main.dart
index 4450d82..3299393 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -5,7 +5,10 @@ import 'package:flutter/services.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
+import 'package:permission_handler/permission_handler.dart';
import 'package:tone_snap/components/base_easyloading.dart';
+import 'package:tone_snap/data/app_config.dart';
+import 'package:tone_snap/data/enum/app_side_enum.dart';
import 'package:tone_snap/data/storage/hive_storage.dart';
import 'package:tone_snap/res/themes/app_themes.dart';
import 'package:tone_snap/res/values/strings.dart';
@@ -13,10 +16,16 @@ import 'package:tone_snap/routes/app_pages.dart';
import 'package:tone_snap/routes/app_routes.dart';
import 'package:tone_snap/utils/file_util.dart';
import 'package:tone_snap/utils/local_path_util.dart';
+import 'package:tone_snap/utils/permission_util.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
+ if (Platform.isIOS) {
+ // 请求 App Tracking Transparency 权限
+ await PermissionUtil.checkPermission([Permission.appTrackingTransparency], showDialog: false);
+ }
+
// 初始化Hive
await initHive();
@@ -55,11 +64,11 @@ class MyApp extends StatelessWidget {
return GetMaterialApp(
title: appName,
debugShowCheckedModeBanner: false,
- theme: appTheme,
- darkTheme: appTheme,
- themeMode: ThemeMode.light,
+ theme: AppConfig.appSideEnum == AppSideEnum.sideB ? musicooAppTheme : changeVoiceAppTheme,
+ darkTheme: AppConfig.appSideEnum == AppSideEnum.sideB ? musicooAppTheme : changeVoiceAppTheme,
+ themeMode: ThemeMode.dark,
+ initialRoute: AppConfig.appSideEnum == AppSideEnum.sideB ? AppRoutes.initial : AppRoutes.changeVoiceInitial,
getPages: AppPages.routes,
- initialRoute: AppRoutes.initial,
builder: (context, widget) {
BaseEasyLoading.initGlobalConfig();
widget = easyLoading(context, widget);
diff --git a/lib/modules/voice/home/home_binding.dart b/lib/modules/musicoo/home/home_binding.dart
similarity index 69%
rename from lib/modules/voice/home/home_binding.dart
rename to lib/modules/musicoo/home/home_binding.dart
index dd3bed3..0905989 100644
--- a/lib/modules/voice/home/home_binding.dart
+++ b/lib/modules/musicoo/home/home_binding.dart
@@ -1,5 +1,6 @@
import 'package:get/get.dart';
-import 'package:tone_snap/modules/voice/home/home_controller.dart';
+
+import 'home_controller.dart';
class HomeBinding extends Bindings {
@override
diff --git a/lib/modules/musicoo/home/home_controller.dart b/lib/modules/musicoo/home/home_controller.dart
new file mode 100644
index 0000000..9f5a6fc
--- /dev/null
+++ b/lib/modules/musicoo/home/home_controller.dart
@@ -0,0 +1,5 @@
+import 'package:get/get.dart';
+
+class HomeController extends GetxController {
+
+}
diff --git a/lib/modules/musicoo/home/home_view.dart b/lib/modules/musicoo/home/home_view.dart
new file mode 100644
index 0000000..9043e7d
--- /dev/null
+++ b/lib/modules/musicoo/home/home_view.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+import 'home_controller.dart';
+
+class HomeView extends GetView {
+ const HomeView({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ final controller = Get.find();
+
+ return Container();
+ }
+}
diff --git a/lib/modules/voice/initial/initial_binding.dart b/lib/modules/musicoo/initial/initial_binding.dart
similarity index 67%
rename from lib/modules/voice/initial/initial_binding.dart
rename to lib/modules/musicoo/initial/initial_binding.dart
index b32ef02..0f64e36 100644
--- a/lib/modules/voice/initial/initial_binding.dart
+++ b/lib/modules/musicoo/initial/initial_binding.dart
@@ -1,5 +1,5 @@
import 'package:get/get.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/musicoo/initial/initial_controller.dart';
class InitialBinding extends Bindings {
@override
diff --git a/lib/modules/musicoo/initial/initial_controller.dart b/lib/modules/musicoo/initial/initial_controller.dart
new file mode 100644
index 0000000..b6551af
--- /dev/null
+++ b/lib/modules/musicoo/initial/initial_controller.dart
@@ -0,0 +1,50 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+import 'package:tone_snap/generated/assets.dart';
+import 'package:tone_snap/modules/musicoo/home/home_view.dart';
+import 'package:tone_snap/modules/musicoo/me/me_view.dart';
+import 'package:tone_snap/modules/musicoo/search_music/search_music_view.dart';
+
+class InitialController extends GetxController {
+ static InitialController get to => Get.find();
+ late PageController pageController;
+ final pages = [
+ PageItem([Assets.musicooBnb1Unselected, Assets.musicooBnb1Selected], const HomeView()),
+ PageItem([Assets.musicooBnb2Unselected, Assets.musicooBnb2Selected], const SearchMusicView()),
+ PageItem([Assets.musicooBnb3Unselected, Assets.musicooBnb3Selected], const MeView()),
+ ];
+ var currentIndex = 0.obs;
+
+ @override
+ void onInit() {
+ super.onInit();
+ pageController = PageController(initialPage: currentIndex.value);
+ }
+
+ @override
+ void onClose() {
+ pageController.dispose();
+ super.onClose();
+ }
+
+ Future onBottomAppBarItemChanged(int index) async {
+ // if (index == 1) {
+ // await PlayerController.to.stopPlay();
+ // Get.toNamed(AppRoutes.uploadMethod);
+ // } else {
+ // if (index == 2) _refreshMe();
+ // currentIndex.value = index;
+ // pageController.jumpToPage(index);
+ // }
+ currentIndex.value = index;
+ pageController.jumpToPage(index);
+ }
+}
+
+class PageItem {
+ late final List icons;
+ late final StatelessWidget widget;
+
+ PageItem(this.icons, this.widget);
+}
+
diff --git a/lib/modules/musicoo/initial/initial_view.dart b/lib/modules/musicoo/initial/initial_view.dart
new file mode 100644
index 0000000..b62503e
--- /dev/null
+++ b/lib/modules/musicoo/initial/initial_view.dart
@@ -0,0 +1,54 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_screenutil/flutter_screenutil.dart';
+import 'package:get/get.dart';
+import 'package:tone_snap/components/keep_alive_wrapper.dart';
+import 'package:tone_snap/modules/musicoo/initial/initial_controller.dart';
+
+class InitialView extends GetView {
+ const InitialView({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ body: Column(
+ children: [
+ Expanded(
+ child: PageView(
+ physics: const NeverScrollableScrollPhysics(),
+ controller: controller.pageController,
+ children: controller.pages.map((e) => KeepAliveWrapper(child: e.widget)).toList(),
+ ),
+ ),
+ ],
+ ),
+ bottomNavigationBar: _buildBottomAppBar(),
+ );
+ }
+
+ BottomAppBar _buildBottomAppBar() {
+ return BottomAppBar(
+ height: kBottomNavigationBarHeight,
+ padding: EdgeInsets.zero,
+ color: Colors.transparent,
+ child: SizedBox(
+ height: double.infinity,
+ child: Row(
+ children: controller.pages.asMap().entries.map((e) {
+ return Expanded(
+ child: GestureDetector(
+ onTap: () => controller.onBottomAppBarItemChanged(e.key),
+ child: Obx(() {
+ return Image.asset(
+ e.value.icons[controller.currentIndex.value == e.key ? 1 : 0],
+ width: controller.currentIndex.value == e.key ? 36.w : 28.w,
+ height: controller.currentIndex.value == e.key ? 36.w : 28.w,
+ );
+ }),
+ ),
+ );
+ }).toList(),
+ ),
+ ),
+ );
+ }
+}
diff --git a/lib/modules/voice/me/me_binding.dart b/lib/modules/musicoo/me/me_binding.dart
similarity index 69%
rename from lib/modules/voice/me/me_binding.dart
rename to lib/modules/musicoo/me/me_binding.dart
index 37bd0ec..f0135d6 100644
--- a/lib/modules/voice/me/me_binding.dart
+++ b/lib/modules/musicoo/me/me_binding.dart
@@ -1,5 +1,6 @@
import 'package:get/get.dart';
-import 'package:tone_snap/modules/voice/me/me_controller.dart';
+
+import 'me_controller.dart';
class MeBinding extends Bindings {
@override
diff --git a/lib/modules/musicoo/me/me_controller.dart b/lib/modules/musicoo/me/me_controller.dart
new file mode 100644
index 0000000..8666234
--- /dev/null
+++ b/lib/modules/musicoo/me/me_controller.dart
@@ -0,0 +1,5 @@
+import 'package:get/get.dart';
+
+class MeController extends GetxController {
+
+}
diff --git a/lib/modules/musicoo/me/me_view.dart b/lib/modules/musicoo/me/me_view.dart
new file mode 100644
index 0000000..e037294
--- /dev/null
+++ b/lib/modules/musicoo/me/me_view.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+import 'me_controller.dart';
+
+class MeView extends GetView {
+ const MeView({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ final controller = Get.find();
+
+ return Container();
+ }
+}
diff --git a/lib/modules/musicoo/search_music/search_music_binding.dart b/lib/modules/musicoo/search_music/search_music_binding.dart
new file mode 100644
index 0000000..bf3c06c
--- /dev/null
+++ b/lib/modules/musicoo/search_music/search_music_binding.dart
@@ -0,0 +1,10 @@
+import 'package:get/get.dart';
+
+import 'search_music_controller.dart';
+
+class SearchMusicBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => SearchMusicController());
+ }
+}
diff --git a/lib/modules/musicoo/search_music/search_music_controller.dart b/lib/modules/musicoo/search_music/search_music_controller.dart
new file mode 100644
index 0000000..e6e4993
--- /dev/null
+++ b/lib/modules/musicoo/search_music/search_music_controller.dart
@@ -0,0 +1,5 @@
+import 'package:get/get.dart';
+
+class SearchMusicController extends GetxController {
+
+}
diff --git a/lib/modules/musicoo/search_music/search_music_view.dart b/lib/modules/musicoo/search_music/search_music_view.dart
new file mode 100644
index 0000000..07cf49e
--- /dev/null
+++ b/lib/modules/musicoo/search_music/search_music_view.dart
@@ -0,0 +1,15 @@
+import 'package:flutter/material.dart';
+import 'package:get/get.dart';
+
+import 'search_music_controller.dart';
+
+class SearchMusicView extends GetView {
+ const SearchMusicView({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ final controller = Get.find();
+
+ return Container();
+ }
+}
diff --git a/lib/modules/voice/change_voice/change_voice_controller.dart b/lib/modules/voice/change_voice/change_voice_controller.dart
index 6ee2e8e..fc2701c 100644
--- a/lib/modules/voice/change_voice/change_voice_controller.dart
+++ b/lib/modules/voice/change_voice/change_voice_controller.dart
@@ -1,5 +1,3 @@
-import 'dart:io';
-
import 'package:ffmpeg_kit_flutter_audio/ffmpeg_kit.dart';
import 'package:ffmpeg_kit_flutter_audio/ffmpeg_session.dart';
import 'package:ffmpeg_kit_flutter_audio/return_code.dart';
@@ -9,28 +7,36 @@ import 'package:tone_snap/controllers/player_controller.dart';
import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/data/storage/my_voice_data.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/routes/app_routes.dart';
import 'package:tone_snap/utils/date_util.dart';
import 'package:tone_snap/utils/file_util.dart';
import 'package:tone_snap/utils/local_path_util.dart';
import 'package:tone_snap/utils/log_print.dart';
-import 'package:tone_snap/utils/num_util.dart';
import 'package:tone_snap/utils/obj_util.dart';
class ChangeVoiceController extends GetxController {
var timberList = [
- Timber('Child', Assets.changeVoiceAudioChild, 1.3, 1.1),
- Timber('Boy', Assets.changeVoiceAudioBoy, 1.2, 1.1),
- Timber('Man', Assets.changeVoiceAudioMan, 0.9, 1.1),
- Timber('Elder', Assets.changeVoiceAudioElder, 0.8, 1.1),
- // Timber('Rapper', Assets.changeVoiceAudioRapper, 1.0, 1.0),
- Timber('Robot', Assets.changeVoiceAudioRobot, 1.0, 1.5),
- Timber('Girl', Assets.changeVoiceAudioGirl, 1.5, 1.1),
- Timber('Sexy', Assets.changeVoiceAudioSexy, 0.85, 1.1),
- Timber('Woman', Assets.changeVoiceAudioWoman, 1.1, 1.1),
- Timber('Monsters', Assets.changeVoiceAudioMonsters, 0.7, 1.1),
+ // Timber('Child', Assets.coverChild, 1.3, 1.1),
+ // Timber('Boy', Assets.coverBoy, 1.2, 1.1),
+ // Timber('Man', Assets.coverMan, 0.9, 1.1),
+ // Timber('Elder', Assets.coverElder, 0.75, 1.333),
+ // Timber('Robot', Assets.coverRobot, 1.0, 1.5),
+ // Timber('Girl', Assets.coverGirl, 1.5, 0.6667),
+ // Timber('Sexy', Assets.coverSexy, 1.25, 0.8),
+ // Timber('Woman', Assets.coverWoman, 1.25, 0.8),
+ // Timber('Monsters', Assets.coverMonsters, 0.7, 1.1),
+
+ Timber('Original', Assets.coverOriginal, 1.0, 1.0, check: true),
+ Timber('Fast', Assets.coverFast, 1.0, 1.5),
+ Timber('Slow', Assets.coverSlow, 1.0, 0.5),
+ Timber('Flash', Assets.coverFlash, 1.0, 2.0),
+ Timber('Baby', Assets.coverChild, 1.3, 0.76),
+ Timber('Robot', Assets.coverRobot, 1.0, 1.25),
+ Timber('Monsters', Assets.coverMonsters, 0.60, 1.1),
+ Timber('DIY', Assets.coverDIY, 1.0, 1.0),
].obs;
+ var currentIndex = 0.obs;
final playerController = PlayerController.to;
var toneValue = 1.0.obs;
var soundSpeedValue = 1.0.obs;
@@ -40,25 +46,28 @@ class ChangeVoiceController extends GetxController {
void onInit() {
super.onInit();
filePath = Get.arguments;
- playerController.setFilePath(filePath);
+ // playerController.setFilePath(filePath);
}
@override
void onClose() async {
- if (Platform.isAndroid) await playerController.setPitch(1.0);
- await playerController.setSpeed(1.0);
- playerController.stopPlay();
+ // if (Platform.isAndroid) await playerController.setPitch(1.0);
+ // await playerController.setSpeed(1.0);
+ // playerController.stopPlay();
super.onClose();
}
void onTapItem(Timber item, int index) {
for (var e in timberList) {
- e == item ? item.check = !item.check : e.check = false;
+ // e == item ? item.check = !item.check : e.check = false;
+ e.check = false;
}
+ item.check = true;
+ currentIndex.value = index;
toneValue.value = item.check ? item.tone : 1.0;
soundSpeedValue.value = item.check ? item.soundSpeed : 1.0;
- if (Platform.isAndroid) playerController.setPitch(toneValue.value);
- playerController.setSpeed(soundSpeedValue.value);
+ // if (Platform.isAndroid) playerController.setPitch(toneValue.value);
+ // playerController.setSpeed(soundSpeedValue.value);
timberList.refresh();
}
@@ -71,22 +80,22 @@ class ChangeVoiceController extends GetxController {
}
}
- void onChanged(double value, int i) {
- var item = timberList.firstWhereOrNull((e) => e.check);
- if (i == 0) {
+ void onChanged(double value, int type) {
+ // var item = timberList.firstWhereOrNull((e) => e.check);
+ if (type == 0) {
toneValue.value = value;
- if (Platform.isAndroid) playerController.setPitch(toneValue.value);
- if (item?.tone.toString() != NumUtil.formatNum(value)) {
- item?.check = false;
- timberList.refresh();
- }
+ // if (Platform.isAndroid) playerController.setPitch(toneValue.value);
+ // if (item?.tone.toString() != NumUtil.formatNum(value)) {
+ // item?.check = false;
+ // timberList.refresh();
+ // }
} else {
soundSpeedValue.value = value;
- playerController.setSpeed(soundSpeedValue.value);
- if (item?.soundSpeed.toString() != NumUtil.formatNum(value)) {
- item?.check = false;
- timberList.refresh();
- }
+ // playerController.setSpeed(soundSpeedValue.value);
+ // if (item?.soundSpeed.toString() != NumUtil.formatNum(value)) {
+ // item?.check = false;
+ // timberList.refresh();
+ // }
}
}
@@ -107,16 +116,16 @@ class ChangeVoiceController extends GetxController {
String fileName = '${DateUtil.getNowTimeStr().replaceAll(' ', '_')}_output.mp3';
String outputPath = '${outputDir.path}/$fileName';
- var timber = timberList.firstWhereOrNull((e) => e.check);
var filter = "";
- if (timber != null) {
- int index = timberList.indexOf(timber);
- // Rapper
- // filter = ",aecho=0.8:0.88:60:0.4,areverb=50:50:100:100:0.5:0.5";
- if (index == 4) filter = ",afftdn=nf=-30";
- }
+ // var timber = timberList.firstWhereOrNull((e) => e.check);
+ // if (timber != null) {
+ // int index = timberList.indexOf(timber);
+ // if (index == 5) filter = ",afftdn=nf=-30";
+ // }
- // 获取采样率
+ if (currentIndex.value == 5) filter = ",afftdn=nf=-30,aecho=0.8:0.88:60:0.4";
+
+ // 获取原始采样率
String sampleRate = await _getSampleRate() ?? '24000';
// 构建 FFmpeg 命令
@@ -134,8 +143,8 @@ class ChangeVoiceController extends GetxController {
BaseEasyLoading.toast('Save successful');
// 回到首页-我的页面
- Get.until((route) => route.settings.name == AppRoutes.initial);
- InitialController.to.onBottomAppBarItemChanged(2);
+ Get.until((route) => route.settings.name == AppRoutes.changeVoiceInitial);
+ VoiceInitialController.to.onBottomAppBarItemChanged(2);
} catch (e) {
BaseEasyLoading.toast('Save failed');
}
diff --git a/lib/modules/voice/change_voice/change_voice_view.dart b/lib/modules/voice/change_voice/change_voice_view.dart
index 049565f..2241a4b 100644
--- a/lib/modules/voice/change_voice/change_voice_view.dart
+++ b/lib/modules/voice/change_voice/change_voice_view.dart
@@ -1,5 +1,3 @@
-import 'dart:io';
-
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
@@ -21,7 +19,7 @@ class ChangeVoiceView extends StatelessWidget {
return Stack(
children: [
Image.asset(
- Assets.imagesChangeVoiceBg,
+ Assets.changeVoiceChangeVoiceBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
@@ -39,7 +37,7 @@ class ChangeVoiceView extends StatelessWidget {
SizedBox(height: 20.h),
_buildSlider(context, 1),
SizedBox(height: 20.h),
- _buildPlayer(),
+ // _buildPlayer(),
_buildSave(),
],
),
@@ -101,7 +99,7 @@ class ChangeVoiceView extends StatelessWidget {
maintainAnimation: true,
maintainSize: true,
child: Image.asset(
- Assets.imagesChangeVoiceItemFrame,
+ Assets.changeVoiceChangeVoiceItemFrame,
width: 78.w,
height: 78.w,
fit: BoxFit.fill,
@@ -122,7 +120,7 @@ class ChangeVoiceView extends StatelessWidget {
right: 0.w,
bottom: 0.h,
child: Image.asset(
- Assets.imagesChangeVoiceItemSelected,
+ Assets.changeVoiceChangeVoiceItemSelected,
width: 23.w,
height: 23.w,
fit: BoxFit.fill,
@@ -147,73 +145,55 @@ class ChangeVoiceView extends StatelessWidget {
);
}
- Widget _buildSlider(BuildContext context, int i) {
+ Widget _buildSlider(BuildContext context, int type) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24).w,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
- Row(
- children: [
- Text(
- i == 0 ? 'Tone' : 'Sound speed',
- style: TextStyle(
- color: Colors.white,
- fontSize: 20.sp,
- fontWeight: FontWeight.w700,
- ),
- ),
- Expanded(
- child: Visibility(
- visible: i == 0 && Platform.isIOS,
- child: Text(
- ' (Only take effect after saving)',
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- color: Colors.white,
- fontSize: 12.sp,
- ),
- ),
- ),
- ),
- ],
+ Text(
+ type == 0 ? 'Tone' : 'Sound speed',
+ style: TextStyle(
+ color: Colors.white,
+ fontSize: 20.sp,
+ fontWeight: FontWeight.w700,
+ ),
),
SizedBox(height: 16.h),
Row(
children: [
Expanded(
- child: SliderTheme(
- data: SliderTheme.of(context).copyWith(
- activeTrackColor: const Color(0x33000000),
- inactiveTrackColor: const Color(0x33000000),
- trackShape: RoundRectSliderTrackShape(
- trackHeight: 20.h,
- trackRadius: 12.r,
+ child: Obx(() {
+ return SliderTheme(
+ data: SliderTheme.of(context).copyWith(
+ activeTrackColor: const Color(0x33000000),
+ inactiveTrackColor: const Color(0x33000000),
+ trackShape: RoundRectSliderTrackShape(
+ trackHeight: 20.h,
+ trackRadius: 12.r,
+ ),
+ thumbShape: RoundRectSliderThumbShape(
+ thumbWidth: 32.w,
+ thumbHeight: 44.h,
+ thumbRadius: 12.r,
+ thumbColor: controller.currentIndex.value == controller.timberList.length - 1 ? Colors.black : const Color(0x33000000),
+ ),
),
- thumbColor: Colors.black,
- thumbShape: RoundRectSliderThumbShape(
- thumbWidth: 32.w,
- thumbHeight: 44.h,
- thumbRadius: 12.r,
- ),
- ),
- child: Obx(() {
- return Slider(
+ child: Slider(
min: 0.5,
max: 2,
- value: i == 0 ? controller.toneValue.value : controller.soundSpeedValue.value,
- onChanged: (value) => controller.onChanged(value, i),
- );
- }),
- ),
+ value: type == 0 ? controller.toneValue.value : controller.soundSpeedValue.value,
+ onChanged: controller.currentIndex.value == controller.timberList.length - 1 ? (value) => controller.onChanged(value, type) : null,
+ ),
+ );
+ }),
),
SizedBox(width: 20.w),
Obx(() {
return SizedBox(
width: 40.w,
child: Text(
- i == 0 ? NumUtil.formatNum(controller.toneValue.value) : NumUtil.formatNum(controller.soundSpeedValue.value),
+ type == 0 ? NumUtil.formatNum(controller.toneValue.value) : NumUtil.formatNum(controller.soundSpeedValue.value),
style: TextStyle(
color: const Color(0x73000000),
fontSize: 16.sp,
@@ -243,7 +223,7 @@ class ChangeVoiceView extends StatelessWidget {
child: Center(
child: Obx(() {
return Image.asset(
- controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1,
+ controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1,
width: 29.w,
height: 29.w,
);
diff --git a/lib/modules/voice/favourite/favourite_controller.dart b/lib/modules/voice/favourite/favourite_controller.dart
index 3747906..dfdcac9 100644
--- a/lib/modules/voice/favourite/favourite_controller.dart
+++ b/lib/modules/voice/favourite/favourite_controller.dart
@@ -6,7 +6,7 @@ import 'package:tone_snap/components/dialog/rename_dialog.dart';
import 'package:tone_snap/components/view_state_widget.dart';
import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/data/storage/favorite_data.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/routes/app_routes.dart';
class FavouriteController extends GetxController {
@@ -32,7 +32,7 @@ class FavouriteController extends GetxController {
}
void onTapItem(VoiceModel item) {
- InitialController.to.currentPlayVoiceModel.value = item;
+ VoiceInitialController.to.currentPlayVoiceModel.value = item;
Get.toNamed(AppRoutes.playSound, arguments: item);
}
@@ -47,8 +47,8 @@ class FavouriteController extends GetxController {
voiceList.refresh();
// 若 item 和当前正播放的 item 是同个对象,则需要同步修改
- if (item.path == InitialController.to.currentPlayVoiceModel.value?.path) {
- InitialController.to.currentPlayVoiceModel.update((e) => e?.name = value);
+ if (item.path == VoiceInitialController.to.currentPlayVoiceModel.value?.path) {
+ VoiceInitialController.to.currentPlayVoiceModel.update((e) => e?.name = value);
}
},
),
@@ -67,8 +67,8 @@ class FavouriteController extends GetxController {
BaseEasyLoading.toast('Removed');
// 若 item 和当前正播放的 item 是同个对象,则需要同步修改
- if (item.path == InitialController.to.currentPlayVoiceModel.value?.path) {
- InitialController.to.isFavourite.value = false;
+ if (item.path == VoiceInitialController.to.currentPlayVoiceModel.value?.path) {
+ VoiceInitialController.to.isFavourite.value = false;
}
_refreshList();
},
diff --git a/lib/modules/voice/my_voice/my_voice_controller.dart b/lib/modules/voice/my_voice/my_voice_controller.dart
index 8a7811c..6509186 100644
--- a/lib/modules/voice/my_voice/my_voice_controller.dart
+++ b/lib/modules/voice/my_voice/my_voice_controller.dart
@@ -6,7 +6,7 @@ import 'package:tone_snap/components/dialog/rename_dialog.dart';
import 'package:tone_snap/components/view_state_widget.dart';
import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/data/storage/my_voice_data.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/routes/app_routes.dart';
class MyVoiceController extends GetxController {
@@ -32,7 +32,7 @@ class MyVoiceController extends GetxController {
}
void onTapItem(VoiceModel item) {
- InitialController.to.currentPlayVoiceModel.value = item;
+ VoiceInitialController.to.currentPlayVoiceModel.value = item;
Get.toNamed(AppRoutes.playSound, arguments: item);
}
@@ -47,8 +47,8 @@ class MyVoiceController extends GetxController {
voiceList.refresh();
// 若 item 和当前正播放的 item 是同个对象,则需要同步改名
- if (identical(item, InitialController.to.currentPlayVoiceModel.value)) {
- InitialController.to.currentPlayVoiceModel.update((e) => e?.name = value);
+ if (identical(item, VoiceInitialController.to.currentPlayVoiceModel.value)) {
+ VoiceInitialController.to.currentPlayVoiceModel.update((e) => e?.name = value);
}
},
),
diff --git a/lib/modules/voice/play_sound/play_sound_controller.dart b/lib/modules/voice/play_sound/play_sound_controller.dart
index def9b71..49853a6 100644
--- a/lib/modules/voice/play_sound/play_sound_controller.dart
+++ b/lib/modules/voice/play_sound/play_sound_controller.dart
@@ -3,7 +3,7 @@ import 'dart:async';
import 'package:get/get.dart';
import 'package:tone_snap/controllers/player_controller.dart';
import 'package:tone_snap/data/models/voice_model.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/routes/app_routes.dart';
class PlaySoundController extends GetxController {
@@ -17,12 +17,15 @@ class PlaySoundController extends GetxController {
}
@override
- void onReady() async {
+ void onReady() {
super.onReady();
- InitialController.to.isFavourite.value = InitialController.to.getIsFavouriteModel() != null;
+ VoiceInitialController.to.isFavourite.value = VoiceInitialController.to.getIsFavouriteModel() != null;
if (playerController.filePath != voiceModel.path || playerController.isCompleted.value) {
- await playerController.setFilePath(voiceModel.path);
- await playerController.startPlay();
+ Future.delayed(const Duration(milliseconds: 200), () async {
+ // 初始化操作
+ await playerController.setFilePath(voiceModel.path);
+ await playerController.startPlay();
+ });
}
}
diff --git a/lib/modules/voice/play_sound/play_sound_view.dart b/lib/modules/voice/play_sound/play_sound_view.dart
index d94d63e..7f6fcbb 100644
--- a/lib/modules/voice/play_sound/play_sound_view.dart
+++ b/lib/modules/voice/play_sound/play_sound_view.dart
@@ -4,8 +4,8 @@ import 'package:get/get.dart';
import 'package:tone_snap/components/my_marquee_text.dart';
import 'package:tone_snap/components/navigation_bar/base_appbar.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
import 'package:tone_snap/modules/voice/play_sound/play_sound_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/utils/obj_util.dart';
class PlaySoundView extends StatelessWidget {
@@ -19,7 +19,7 @@ class PlaySoundView extends StatelessWidget {
alignment: Alignment.center,
children: [
Image.asset(
- Assets.imagesPlaySoundBg,
+ Assets.changeVoicePlaySoundBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
@@ -56,7 +56,7 @@ class PlaySoundView extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(10).w,
child: Image.asset(
- Assets.imagesArrowDownBack,
+ Assets.changeVoiceArrowDownBack,
width: 24.w,
height: 24.w,
),
@@ -76,7 +76,7 @@ class PlaySoundView extends StatelessWidget {
child: FittedBox(
fit: BoxFit.none,
child: Image.asset(
- Assets.imagesVoiceDefault,
+ Assets.changeVoiceVoiceDefault,
width: 200.w,
height: 200.w,
fit: BoxFit.contain,
@@ -174,7 +174,7 @@ class PlaySoundView extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
children: [
GestureDetector(
- onTap: InitialController.to.onTapFavourite,
+ onTap: VoiceInitialController.to.onTapFavourite,
child: ClipOval(
child: Container(
width: 52.w,
@@ -182,7 +182,7 @@ class PlaySoundView extends StatelessWidget {
color: Colors.black,
child: Obx(() {
return Image.asset(
- InitialController.to.isFavourite.value ? Assets.imagesFavorite : Assets.imagesNotFavorite,
+ VoiceInitialController.to.isFavourite.value ? Assets.changeVoiceFavorite : Assets.changeVoiceNotFavorite,
width: 28.w,
height: 28.w,
);
@@ -200,7 +200,7 @@ class PlaySoundView extends StatelessWidget {
color: Colors.black,
child: Obx(() {
return Image.asset(
- controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1,
+ controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1,
width: 38.w,
height: 38.w,
);
@@ -217,7 +217,7 @@ class PlaySoundView extends StatelessWidget {
height: 52.w,
color: Colors.black,
child: Image.asset(
- Assets.imagesVoiceChange,
+ Assets.changeVoiceChangeVoice,
width: 28.w,
height: 28.w,
),
diff --git a/lib/modules/voice/settings/settings_binding.dart b/lib/modules/voice/settings/settings_binding.dart
deleted file mode 100644
index 3dcae3b..0000000
--- a/lib/modules/voice/settings/settings_binding.dart
+++ /dev/null
@@ -1,9 +0,0 @@
-import 'package:get/get.dart';
-import 'package:tone_snap/modules/voice/settings/settings_controller.dart';
-
-class SettingsBinding extends Bindings {
- @override
- void dependencies() {
- Get.lazyPut(() => SettingsController());
- }
-}
diff --git a/lib/modules/voice/upload_method/upload_mothod_controller.dart b/lib/modules/voice/upload_method/upload_mothod_controller.dart
index b99b080..278869e 100644
--- a/lib/modules/voice/upload_method/upload_mothod_controller.dart
+++ b/lib/modules/voice/upload_method/upload_mothod_controller.dart
@@ -1,11 +1,11 @@
import 'dart:io';
-import 'package:device_info_plus/device_info_plus.dart';
import 'package:file_picker/file_picker.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:tone_snap/components/base_easyloading.dart';
import 'package:tone_snap/routes/app_routes.dart';
+import 'package:tone_snap/utils/device_info_util.dart';
import 'package:tone_snap/utils/permission_util.dart';
class UploadMethodController extends GetxController {
@@ -17,9 +17,8 @@ class UploadMethodController extends GetxController {
void openFilePicker() async {
Permission permission;
if (Platform.isAndroid) {
- DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
- AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
- if (androidInfo.version.sdkInt >= 33) {
+ int sdkInt = await DeviceInfoUtil.getAndroidSDKInt();
+ if (sdkInt >= 33) {
permission = Permission.audio;
} else {
permission = Permission.storage;
diff --git a/lib/modules/voice/upload_method/upload_mothod_view.dart b/lib/modules/voice/upload_method/upload_mothod_view.dart
index 9102121..abb2966 100644
--- a/lib/modules/voice/upload_method/upload_mothod_view.dart
+++ b/lib/modules/voice/upload_method/upload_mothod_view.dart
@@ -21,7 +21,7 @@ class UploadMethodView extends StatelessWidget {
return Stack(
children: [
Image.asset(
- Assets.imagesUploadMethodBg,
+ Assets.changeVoiceUploadMethodBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
@@ -37,7 +37,7 @@ class UploadMethodView extends StatelessWidget {
GestureDetector(
onTap: controller.goRecordSound,
child: Image.asset(
- Assets.imagesUploadRecordSound,
+ Assets.changeVoiceUploadRecordSound,
width: 122.w,
height: 122.w,
),
@@ -51,7 +51,7 @@ class UploadMethodView extends StatelessWidget {
GestureDetector(
onTap: controller.openFilePicker,
child: Image.asset(
- Assets.imagesUploadPick,
+ Assets.changeVoiceUploadPick,
width: 122.w,
height: 122.w,
),
diff --git a/lib/modules/voice/voice_home/voice_home_binding.dart b/lib/modules/voice/voice_home/voice_home_binding.dart
new file mode 100644
index 0000000..1b55b4d
--- /dev/null
+++ b/lib/modules/voice/voice_home/voice_home_binding.dart
@@ -0,0 +1,9 @@
+import 'package:get/get.dart';
+import 'package:tone_snap/modules/voice/voice_home/voice_home_controller.dart';
+
+class VoiceHomeBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => VoiceHomeController());
+ }
+}
diff --git a/lib/modules/voice/home/home_controller.dart b/lib/modules/voice/voice_home/voice_home_controller.dart
similarity index 57%
rename from lib/modules/voice/home/home_controller.dart
rename to lib/modules/voice/voice_home/voice_home_controller.dart
index 73c48b8..679ca30 100644
--- a/lib/modules/voice/home/home_controller.dart
+++ b/lib/modules/voice/voice_home/voice_home_controller.dart
@@ -3,27 +3,26 @@ import 'package:tone_snap/components/base_easyloading.dart';
import 'package:tone_snap/controllers/player_controller.dart';
import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
import 'package:tone_snap/routes/app_routes.dart';
-class HomeController extends GetxController {
- static HomeController get to => Get.find();
+class VoiceHomeController extends GetxController {
+ static VoiceHomeController get to => Get.find();
var playerController = PlayerController.to;
var voiceList = [
- VoiceModel(name: 'Child', path: Assets.audioChild, cover: Assets.changeVoiceAudioChild),
- VoiceModel(name: 'Boy', path: Assets.audioBoy, cover: Assets.changeVoiceAudioBoy),
- VoiceModel(name: 'Man', path: Assets.audioMan, cover: Assets.changeVoiceAudioMan),
- VoiceModel(name: 'Elder', path: Assets.audioElder, cover: Assets.changeVoiceAudioElder),
- // VoiceModel(name: 'Rapper', path: Assets.audioRapper, cover: Assets.changeVoiceAudioRapper),
- VoiceModel(name: 'Robot', path: Assets.audioRobot, cover: Assets.changeVoiceAudioRobot),
- VoiceModel(name: 'Girl', path: Assets.audioGirl, cover: Assets.changeVoiceAudioGirl),
- VoiceModel(name: 'Sexy', path: Assets.audioSexy, cover: Assets.changeVoiceAudioSexy),
- VoiceModel(name: 'Woman', path: Assets.audioWoman, cover: Assets.changeVoiceAudioWoman),
- VoiceModel(name: 'Monsters', path: Assets.audioMonsters, cover: Assets.changeVoiceAudioMonsters),
+ VoiceModel(name: 'Baby', path: Assets.audioChild, cover: Assets.coverChild),
+ VoiceModel(name: 'Boy', path: Assets.audioBoy, cover: Assets.coverBoy),
+ VoiceModel(name: 'Man', path: Assets.audioMan, cover: Assets.coverMan),
+ VoiceModel(name: 'Elder', path: Assets.audioElder, cover: Assets.coverElder),
+ VoiceModel(name: 'Robot', path: Assets.audioRobot, cover: Assets.coverRobot),
+ VoiceModel(name: 'Girl', path: Assets.audioGirl, cover: Assets.coverGirl),
+ VoiceModel(name: 'Sexy', path: Assets.audioSexy, cover: Assets.coverSexy),
+ VoiceModel(name: 'Woman', path: Assets.audioWoman, cover: Assets.coverWoman),
+ VoiceModel(name: 'Monsters', path: Assets.audioMonsters, cover: Assets.coverMonsters),
];
void onTapItem(VoiceModel item) {
- InitialController.to.currentPlayVoiceModel.value = item;
+ VoiceInitialController.to.currentPlayVoiceModel.value = item;
Get.toNamed(AppRoutes.playSound, arguments: item);
}
@@ -31,18 +30,18 @@ class HomeController extends GetxController {
if (isPlayItem(item)) {
await playerController.pausePlay();
} else {
- if (!identical(item, InitialController.to.currentPlayVoiceModel.value)) {
+ if (!identical(item, VoiceInitialController.to.currentPlayVoiceModel.value)) {
BaseEasyLoading.loading();
await playerController.setFilePath(item.path);
BaseEasyLoading.dismiss();
- InitialController.to.currentPlayVoiceModel.value = item;
- InitialController.to.isFavourite.value = InitialController.to.getIsFavouriteModel() != null;
+ VoiceInitialController.to.currentPlayVoiceModel.value = item;
+ VoiceInitialController.to.isFavourite.value = VoiceInitialController.to.getIsFavouriteModel() != null;
}
await playerController.startPlay();
}
}
bool isPlayItem(VoiceModel item) {
- return playerController.isPlaying.value && identical(InitialController.to.currentPlayVoiceModel.value, item);
+ return playerController.isPlaying.value && identical(VoiceInitialController.to.currentPlayVoiceModel.value, item);
}
}
\ No newline at end of file
diff --git a/lib/modules/voice/home/home_view.dart b/lib/modules/voice/voice_home/voice_home_view.dart
similarity index 90%
rename from lib/modules/voice/home/home_view.dart
rename to lib/modules/voice/voice_home/voice_home_view.dart
index c907683..016bc6b 100644
--- a/lib/modules/voice/home/home_view.dart
+++ b/lib/modules/voice/voice_home/voice_home_view.dart
@@ -6,19 +6,19 @@ import 'package:tone_snap/components/my_marquee_text.dart';
import 'package:tone_snap/components/private/head_label.dart';
import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/home/home_controller.dart';
+import 'package:tone_snap/modules/voice/voice_home/voice_home_controller.dart';
import 'package:tone_snap/utils/obj_util.dart';
-class HomeView extends GetView {
- const HomeView({super.key});
+class VoiceHomeView extends GetView {
+ const VoiceHomeView({super.key});
@override
Widget build(BuildContext context) {
- Get.find();
+ Get.find();
return Column(
children: [
HeadLabel(
- assets: Assets.imagesTheMonster,
+ assets: Assets.changeVoiceTheMonster,
width: 208.w,
height: 43.h,
),
@@ -60,7 +60,7 @@ class HomeView extends GetView {
maintainAnimation: true,
maintainSize: true,
child: Image.asset(
- Assets.imagesSubtract,
+ Assets.changeVoiceSubtract,
width: 100.w,
height: 100.w,
fit: BoxFit.fill,
@@ -99,7 +99,7 @@ class HomeView extends GetView {
return GestureDetector(
onTap: () => controller.onTapPlayBarPlay(item),
child: Image.asset(
- controller.isPlayItem(item) ? Assets.imagesPlaying : Assets.imagesNotPlayed,
+ controller.isPlayItem(item) ? Assets.changeVoicePlaying : Assets.changeVoiceNotPlayed,
width: 30.w,
height: 30.w,
),
diff --git a/lib/modules/voice/voice_initial/voice_initial_binding.dart b/lib/modules/voice/voice_initial/voice_initial_binding.dart
new file mode 100644
index 0000000..2dd6827
--- /dev/null
+++ b/lib/modules/voice/voice_initial/voice_initial_binding.dart
@@ -0,0 +1,9 @@
+import 'package:get/get.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
+
+class VoiceInitialBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => VoiceInitialController());
+ }
+}
diff --git a/lib/modules/voice/initial/initial_controller.dart b/lib/modules/voice/voice_initial/voice_initial_controller.dart
similarity index 76%
rename from lib/modules/voice/initial/initial_controller.dart
rename to lib/modules/voice/voice_initial/voice_initial_controller.dart
index ffb62ea..7d7fa07 100644
--- a/lib/modules/voice/initial/initial_controller.dart
+++ b/lib/modules/voice/voice_initial/voice_initial_controller.dart
@@ -5,21 +5,20 @@ import 'package:tone_snap/data/models/voice_model.dart';
import 'package:tone_snap/data/storage/favorite_data.dart';
import 'package:tone_snap/generated/assets.dart';
import 'package:tone_snap/modules/voice/favourite/favourite_controller.dart';
-import 'package:tone_snap/modules/voice/home/home_view.dart';
-import 'package:tone_snap/modules/voice/me/me_controller.dart';
-import 'package:tone_snap/modules/voice/me/me_view.dart';
import 'package:tone_snap/modules/voice/my_voice/my_voice_controller.dart';
-import 'package:tone_snap/modules/voice/settings/settings_view.dart';
+import 'package:tone_snap/modules/voice/voice_home/voice_home_view.dart';
+import 'package:tone_snap/modules/voice/voice_me/voice_me_view.dart';
+import 'package:tone_snap/modules/voice/voice_settings/voice_settings_view.dart';
import 'package:tone_snap/routes/app_routes.dart';
-class InitialController extends GetxController {
- static InitialController get to => Get.find();
+class VoiceInitialController extends GetxController {
+ static VoiceInitialController get to => Get.find();
late PageController pageController;
final pages = [
- PageItem([Assets.imagesBnb1Selected, Assets.imagesBnb1Unselected], const HomeView()),
- PageItem([Assets.imagesBnb2Selected, Assets.imagesBnb2Unselected], Container()),
- PageItem([Assets.imagesBnb3Selected, Assets.imagesBnb3Unselected], const MeView()),
- PageItem([Assets.imagesBnb4Selected, Assets.imagesBnb4Unselected], const SettingsView()),
+ PageItem([Assets.changeVoiceBnb1Selected, Assets.changeVoiceBnb1Unselected], const VoiceHomeView()),
+ PageItem([Assets.changeVoiceBnb2Selected, Assets.changeVoiceBnb2Unselected], Container()),
+ PageItem([Assets.changeVoiceBnb3Selected, Assets.changeVoiceBnb3Unselected], const VoiceMeView()),
+ PageItem([Assets.changeVoiceBnb4Selected, Assets.changeVoiceBnb4Unselected], const VoiceSettingsView()),
];
var currentIndex = 0.obs;
Rx currentPlayVoiceModel = Rx(null);
diff --git a/lib/modules/voice/initial/initial_view.dart b/lib/modules/voice/voice_initial/voice_initial_view.dart
similarity index 90%
rename from lib/modules/voice/initial/initial_view.dart
rename to lib/modules/voice/voice_initial/voice_initial_view.dart
index 1d9bf91..9f5a959 100644
--- a/lib/modules/voice/initial/initial_view.dart
+++ b/lib/modules/voice/voice_initial/voice_initial_view.dart
@@ -4,12 +4,12 @@ import 'package:get/get.dart';
import 'package:tone_snap/components/keep_alive_wrapper.dart';
import 'package:tone_snap/components/my_marquee_text.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/initial/initial_controller.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_controller.dart';
-class InitialView extends StatelessWidget {
- InitialView({super.key});
+class VoiceInitialView extends StatelessWidget {
+ VoiceInitialView({super.key});
- final controller = Get.find();
+ final controller = Get.find();
@override
Widget build(BuildContext context) {
@@ -22,7 +22,7 @@ class InitialView extends StatelessWidget {
Stack(
children: [
Image.asset(
- Assets.imagesHomeBg,
+ Assets.changeVoiceHomeBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
@@ -30,7 +30,7 @@ class InitialView extends StatelessWidget {
Positioned(
bottom: 0,
child: Image.asset(
- Assets.imagesHomeBnbBg,
+ Assets.changeVoiceHomeBnbBg,
width: 1.sw,
height: 222.h,
fit: BoxFit.fill,
@@ -40,13 +40,13 @@ class InitialView extends StatelessWidget {
),
Container(),
Image.asset(
- Assets.imagesUploadMethodBg,
+ Assets.changeVoiceUploadMethodBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
),
Image.asset(
- Assets.imagesSettingsBg,
+ Assets.changeVoiceSettingsBg,
width: 1.sw,
height: 1.sh,
fit: BoxFit.fill,
@@ -126,7 +126,7 @@ class InitialView extends StatelessWidget {
return GestureDetector(
onTap: controller.onTapFavourite,
child: Image.asset(
- controller.isFavourite.value ? Assets.imagesFavorite : Assets.imagesNotFavorite,
+ controller.isFavourite.value ? Assets.changeVoiceFavorite : Assets.changeVoiceNotFavorite,
width: 28.w,
height: 28.w,
),
@@ -136,7 +136,7 @@ class InitialView extends StatelessWidget {
GestureDetector(
onTap: controller.togglePlayback,
child: Image.asset(
- controller.playerController.isPlaying.value ? Assets.imagesPlaying1 : Assets.imagesNotPlayed1,
+ controller.playerController.isPlaying.value ? Assets.changeVoicePlaying1 : Assets.changeVoiceNotPlayed1,
width: 38.w,
height: 38.w,
),
diff --git a/lib/modules/voice/voice_me/voice_me_binding.dart b/lib/modules/voice/voice_me/voice_me_binding.dart
new file mode 100644
index 0000000..89dab6f
--- /dev/null
+++ b/lib/modules/voice/voice_me/voice_me_binding.dart
@@ -0,0 +1,9 @@
+import 'package:get/get.dart';
+import 'package:tone_snap/modules/voice/voice_me/voice_me_controller.dart';
+
+class VoiceMeBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => VoiceMeController());
+ }
+}
diff --git a/lib/modules/voice/me/me_controller.dart b/lib/modules/voice/voice_me/voice_me_controller.dart
similarity index 87%
rename from lib/modules/voice/me/me_controller.dart
rename to lib/modules/voice/voice_me/voice_me_controller.dart
index 15328e2..2767b07 100644
--- a/lib/modules/voice/me/me_controller.dart
+++ b/lib/modules/voice/voice_me/voice_me_controller.dart
@@ -3,7 +3,7 @@ import 'package:get/get.dart';
import 'package:tone_snap/modules/voice/favourite/favourite_view.dart';
import 'package:tone_snap/modules/voice/my_voice/my_voice_view.dart';
-class MeController extends GetxController with GetTickerProviderStateMixin {
+class VoiceMeController extends GetxController with GetTickerProviderStateMixin {
late TabController tabController;
final labels = ['My Voice', 'Favourite'];
final pages = [const MyVoiceView(), const FavouriteView()];
diff --git a/lib/modules/voice/me/me_view.dart b/lib/modules/voice/voice_me/voice_me_view.dart
similarity index 87%
rename from lib/modules/voice/me/me_view.dart
rename to lib/modules/voice/voice_me/voice_me_view.dart
index 84bc53a..78296e4 100644
--- a/lib/modules/voice/me/me_view.dart
+++ b/lib/modules/voice/voice_me/voice_me_view.dart
@@ -5,19 +5,19 @@ import 'package:tone_snap/components/keep_alive_wrapper.dart';
import 'package:tone_snap/components/my_custom_indicator.dart';
import 'package:tone_snap/components/private/head_label.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/me/me_controller.dart';
+import 'package:tone_snap/modules/voice/voice_me/voice_me_controller.dart';
-class MeView extends GetView {
- const MeView({super.key});
+class VoiceMeView extends GetView {
+ const VoiceMeView({super.key});
@override
Widget build(BuildContext context) {
- Get.find();
+ Get.find();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
HeadLabel(
- assets: Assets.imagesTheMonster1,
+ assets: Assets.changeVoiceTheMonster1,
width: 135.w,
height: 51.h,
),
diff --git a/lib/modules/voice/voice_settings/voice_settings_binding.dart b/lib/modules/voice/voice_settings/voice_settings_binding.dart
new file mode 100644
index 0000000..3b4a4de
--- /dev/null
+++ b/lib/modules/voice/voice_settings/voice_settings_binding.dart
@@ -0,0 +1,9 @@
+import 'package:get/get.dart';
+import 'package:tone_snap/modules/voice/voice_settings/voice_settings_controller.dart';
+
+class VoiceSettingsBinding extends Bindings {
+ @override
+ void dependencies() {
+ Get.lazyPut(() => VoiceSettingsController());
+ }
+}
diff --git a/lib/modules/voice/settings/settings_controller.dart b/lib/modules/voice/voice_settings/voice_settings_controller.dart
similarity index 80%
rename from lib/modules/voice/settings/settings_controller.dart
rename to lib/modules/voice/voice_settings/voice_settings_controller.dart
index d42c227..998ffee 100644
--- a/lib/modules/voice/settings/settings_controller.dart
+++ b/lib/modules/voice/voice_settings/voice_settings_controller.dart
@@ -2,9 +2,9 @@ import 'package:get/get.dart';
import 'package:tone_snap/generated/assets.dart';
import 'package:tone_snap/routes/app_routes.dart';
-class SettingsController extends GetxController {
+class VoiceSettingsController extends GetxController {
final options = ['About', 'Privacy Policy', 'User Agreement'];
- final optionIcons = [Assets.imagesAbout, Assets.imagesPrivacy, Assets.imagesUserAgreement];
+ final optionIcons = [Assets.changeVoiceAbout, Assets.changeVoicePrivacy, Assets.changeVoiceUserAgreement];
void onTapItem(int index) async {
if (index == 0) {
diff --git a/lib/modules/voice/settings/settings_view.dart b/lib/modules/voice/voice_settings/voice_settings_view.dart
similarity index 82%
rename from lib/modules/voice/settings/settings_view.dart
rename to lib/modules/voice/voice_settings/voice_settings_view.dart
index d36830a..c3189cf 100644
--- a/lib/modules/voice/settings/settings_view.dart
+++ b/lib/modules/voice/voice_settings/voice_settings_view.dart
@@ -3,20 +3,19 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:get/get.dart';
import 'package:tone_snap/components/private/head_label.dart';
import 'package:tone_snap/generated/assets.dart';
-import 'package:tone_snap/modules/voice/settings/settings_controller.dart';
-import 'package:tone_snap/res/themes/app_sizes.dart';
+import 'package:tone_snap/modules/voice/voice_settings/voice_settings_controller.dart';
-class SettingsView extends GetView{
- const SettingsView({super.key});
+class VoiceSettingsView extends GetView{
+ const VoiceSettingsView({super.key});
@override
Widget build(BuildContext context) {
- Get.find();
+ Get.find();
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
HeadLabel(
- assets: Assets.imagesTheMonster2,
+ assets: Assets.changeVoiceTheMonster2,
width: 155.w,
height: 51.h,
),
@@ -60,7 +59,7 @@ class SettingsView extends GetView{
),
),
),
- Image.asset(Assets.imagesIconChevronRight),
+ Image.asset(Assets.changeVoiceIconChevronRight),
],
),
),
diff --git a/lib/res/themes/app_colors.dart b/lib/res/themes/app_colors.dart
index 776ada4..6857842 100644
--- a/lib/res/themes/app_colors.dart
+++ b/lib/res/themes/app_colors.dart
@@ -5,4 +5,7 @@
import 'package:flutter/material.dart';
/// 种子颜色
-const seedColor = Color(0xFF000000);
\ No newline at end of file
+const changeVoiceSeedColor = Color(0xFF000000);
+
+/// 种子颜色
+const musicooSeedColor = Color(0xFF80F988);
\ No newline at end of file
diff --git a/lib/res/themes/app_themes.dart b/lib/res/themes/app_themes.dart
index 1c613a8..b304a02 100644
--- a/lib/res/themes/app_themes.dart
+++ b/lib/res/themes/app_themes.dart
@@ -6,14 +6,24 @@ import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:tone_snap/res/themes/app_colors.dart';
-/// 主题
-ThemeData appTheme = ThemeData.dark(useMaterial3: true).copyWith(
- colorScheme: ColorScheme.fromSeed(seedColor: seedColor, primary: seedColor),
- appBarTheme: const AppBarTheme(color: seedColor),
- scaffoldBackgroundColor: seedColor,
+ThemeData changeVoiceAppTheme = ThemeData.dark(useMaterial3: true).copyWith(
+ colorScheme: ColorScheme.fromSeed(seedColor: changeVoiceSeedColor),
+ appBarTheme: const AppBarTheme(color: changeVoiceSeedColor),
+ scaffoldBackgroundColor: changeVoiceSeedColor,
scrollbarTheme: ScrollbarThemeData(
thumbVisibility: WidgetStateProperty.all(false),
thumbColor: WidgetStateProperty.all(Colors.white),
radius: Radius.circular(8.r),
),
-);
\ No newline at end of file
+);
+
+ThemeData musicooAppTheme = ThemeData.dark(useMaterial3: true).copyWith(
+ colorScheme: ColorScheme.fromSeed(seedColor: musicooSeedColor),
+ appBarTheme: const AppBarTheme(color: Color(0xFF151718)),
+ scaffoldBackgroundColor: const Color(0xFF151718),
+ scrollbarTheme: ScrollbarThemeData(
+ thumbVisibility: WidgetStateProperty.all(false),
+ thumbColor: WidgetStateProperty.all(Colors.white),
+ radius: Radius.circular(8.r),
+ ),
+);
diff --git a/lib/routes/app_pages.dart b/lib/routes/app_pages.dart
index 0354eb7..3840a99 100644
--- a/lib/routes/app_pages.dart
+++ b/lib/routes/app_pages.dart
@@ -4,23 +4,26 @@
import 'package:flutter/animation.dart';
import 'package:get/get.dart';
+import 'package:tone_snap/modules/musicoo/home/home_binding.dart';
+import 'package:tone_snap/modules/musicoo/initial/initial_binding.dart';
+import 'package:tone_snap/modules/musicoo/initial/initial_view.dart';
+import 'package:tone_snap/modules/musicoo/me/me_binding.dart';
+import 'package:tone_snap/modules/musicoo/search_music/search_music_binding.dart';
import 'package:tone_snap/modules/voice/about/about_binding.dart';
import 'package:tone_snap/modules/voice/about/about_view.dart';
import 'package:tone_snap/modules/voice/change_voice/change_voice_binding.dart';
import 'package:tone_snap/modules/voice/change_voice/change_voice_view.dart';
-import 'package:tone_snap/modules/voice/favourite/favourite_binding.dart';
-import 'package:tone_snap/modules/voice/home/home_binding.dart';
-import 'package:tone_snap/modules/voice/initial/initial_binding.dart';
-import 'package:tone_snap/modules/voice/initial/initial_view.dart';
-import 'package:tone_snap/modules/voice/me/me_binding.dart';
-import 'package:tone_snap/modules/voice/my_voice/my_voice_binding.dart';
import 'package:tone_snap/modules/voice/play_sound/play_sound_binding.dart';
import 'package:tone_snap/modules/voice/play_sound/play_sound_view.dart';
import 'package:tone_snap/modules/voice/record_sound/record_sound_binding.dart';
import 'package:tone_snap/modules/voice/record_sound/record_sound_view.dart';
-import 'package:tone_snap/modules/voice/settings/settings_binding.dart';
import 'package:tone_snap/modules/voice/upload_method/upload_mothod_binding.dart';
import 'package:tone_snap/modules/voice/upload_method/upload_mothod_view.dart';
+import 'package:tone_snap/modules/voice/voice_home/voice_home_binding.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_binding.dart';
+import 'package:tone_snap/modules/voice/voice_initial/voice_initial_view.dart';
+import 'package:tone_snap/modules/voice/voice_me/voice_me_binding.dart';
+import 'package:tone_snap/modules/voice/voice_settings/voice_settings_binding.dart';
import 'package:tone_snap/modules/web_page/web_page_binding.dart';
import 'package:tone_snap/modules/web_page/web_page_view.dart';
import 'package:tone_snap/routes/app_routes.dart';
@@ -29,15 +32,16 @@ class AppPages {
AppPages._();
static final routes = [
+ /// change_voice
GetPage(
- name: AppRoutes.initial,
- page: () => InitialView(),
- bindings: [InitialBinding(), HomeBinding(), MeBinding(), SettingsBinding()],
+ name: AppRoutes.changeVoiceInitial,
+ page: () => VoiceInitialView(),
+ bindings: [VoiceInitialBinding(), VoiceHomeBinding(), VoiceMeBinding(), VoiceSettingsBinding()],
),
GetPage(
name: AppRoutes.uploadMethod,
page: () => UploadMethodView(),
- binding: UploadMethodBinding()
+ binding: UploadMethodBinding(),
),
GetPage(
name: AppRoutes.recordSound,
@@ -53,6 +57,7 @@ class AppPages {
name: AppRoutes.playSound,
page: () => PlaySoundView(),
binding: PlaySoundBinding(),
+ transitionDuration: const Duration(milliseconds: 200),
transition: Transition.downToUp,
curve: Curves.easeIn,
),
@@ -71,5 +76,12 @@ class AppPages {
page: () => WebPageView(),
binding: WebPageBinding(),
),
+
+ /// musicoo
+ GetPage(
+ name: AppRoutes.initial,
+ page: () => const InitialView(),
+ bindings: [InitialBinding(), HomeBinding(), SearchMusicBinding(), MeBinding()],
+ ),
];
}
diff --git a/lib/routes/app_routes.dart b/lib/routes/app_routes.dart
index 80be0fa..292e230 100644
--- a/lib/routes/app_routes.dart
+++ b/lib/routes/app_routes.dart
@@ -5,9 +5,8 @@
class AppRoutes {
AppRoutes._();
- // static const splash = '/';
- static const initial = '/';
- // static const initial = '/initial';
+ /// change_voice
+ static const changeVoiceInitial = '/voiceInitial';
static const uploadMethod = '/upload_method';
static const recordSound = '/record_sound';
static const changeVoice = '/change_voice';
@@ -15,4 +14,8 @@ class AppRoutes {
static const about = '/about';
static const privacy = '/privacy';
static const terms = '/terms';
+
+ /// musicoo
+ // static const splash = '/';
+ static const initial = '/initial';
}
diff --git a/lib/utils/device_info_util.dart b/lib/utils/device_info_util.dart
index d8c3698..ae922cf 100644
--- a/lib/utils/device_info_util.dart
+++ b/lib/utils/device_info_util.dart
@@ -6,16 +6,16 @@ import 'package:device_info_plus/device_info_plus.dart';
class DeviceInfoUtil {
/// 获取当前Android设备的系统版本
- static Future getAndroidSystemVersion() async {
+ static Future getAndroidSDKInt() async {
DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
- AndroidDeviceInfo androidDeviceInfo = await deviceInfoPlugin.androidInfo;
- return androidDeviceInfo.version.sdkInt;
+ AndroidDeviceInfo androidInfo = await deviceInfoPlugin.androidInfo;
+ return androidInfo.version.sdkInt;
}
- /// 获取当前iOS设备的系统版本
- static Future getIOSSystemVersion() async {
- DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
- IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo;
- return iosDeviceInfo.systemVersion;
- }
+ // /// 获取当前iOS设备的系统版本
+ // static Future getIOSSystemVersion() async {
+ // DeviceInfoPlugin deviceInfoPlugin = DeviceInfoPlugin();
+ // IosDeviceInfo iosDeviceInfo = await deviceInfoPlugin.iosInfo;
+ // return iosDeviceInfo.systemVersion;
+ // }
}
diff --git a/lib/utils/permission_util.dart b/lib/utils/permission_util.dart
index 6a67c6f..4ca653c 100644
--- a/lib/utils/permission_util.dart
+++ b/lib/utils/permission_util.dart
@@ -11,7 +11,7 @@ import 'package:tone_snap/components/dialog/remind_dialog.dart';
class PermissionUtil {
/// 检测是否有权限
/// [permissionList] 权限申请列表
- static Future checkPermission(List permissionList) async {
+ static Future checkPermission(List permissionList, {bool showDialog = true}) async {
// 一个新待申请权限列表
List newPermissionList = [];
// 遍历当前权限申请列表
@@ -29,7 +29,7 @@ class PermissionUtil {
switch (permissionStatus) {
// 拒绝状态
case PermissionStatus.denied:
- _showFailedDialog(newPermissionList);
+ if (showDialog) _showFailedDialog(newPermissionList);
return false;
// 允许状态
case PermissionStatus.granted:
@@ -39,7 +39,7 @@ class PermissionUtil {
case PermissionStatus.provisional:
case PermissionStatus.restricted:
case PermissionStatus.permanentlyDenied:
- _showFailedDialog(newPermissionList, isPermanentlyDenied: true);
+ if (showDialog) _showFailedDialog(newPermissionList, isPermanentlyDenied: true);
break;
}
} else {
diff --git a/pubspec.yaml b/pubspec.yaml
index 9f80cbe..c2bff96 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -16,7 +16,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix.
-version: 1.0.2+5
+version: 1.0.2+8
environment:
sdk: '>=3.4.1 <4.0.0'
@@ -120,12 +120,16 @@ flutter:
# To add assets to your application, add an assets section, like this:
assets:
+ - assets/audio/
- assets/icon/
- - assets/change_voice/
- - assets/change_voice/images/
- - assets/change_voice/images/2.0x/
- - assets/change_voice/images/3.0x/
- - assets/change_voice/audio/
+ - assets/images/
+ - assets/images/change_voice/
+ - assets/images/change_voice/2.0x/
+ - assets/images/change_voice/3.0x/
+ - assets/images/change_voice/cover/
+ - assets/images/musicoo/
+ - assets/images/musicoo/2.0x/
+ - assets/images/musicoo/3.0x/
# An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware