commit 0c21f263a7673938aa6c76ebb02d9dfa7f6721e9 Author: litingting Date: Sat Jan 17 14:28:08 2026 +0800 init diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..30f581c --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,93 @@ +import java.io.FileInputStream +import java.util.Date +import java.text.SimpleDateFormat +import java.util.Properties +import kotlin.apply + +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") + id("io.objectbox") + id("plugin.resTools") +} +val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) +val keystorePropertiesFile = file("keystore.properties") +val keystoreProperties = Properties().apply { + load(FileInputStream(keystorePropertiesFile)) +} + +android { + namespace = "com.fun.wave.pranksounds" + compileSdk = 36 + defaultConfig { + applicationId = "com.fun.wave.pranksounds" + minSdk = 24 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + setProperty("archivesBaseName", "Fun Prank Sounds_V" + versionName + "(${versionCode})_$timestamp") + testInstrumentationRunner = "androidx.sounds.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + + signingConfigs { + create("release") { + storeFile = file(keystoreProperties["keystoreFile"] as String) + storePassword = keystoreProperties["key_store_password"] as String + keyAlias = keystoreProperties["key_alias"] as String + keyPassword = keystoreProperties["key_password"] as String + } + } + + buildTypes { + release { + isMinifyEnabled = true + signingConfig = signingConfigs.getByName("release") + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + viewBinding = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.4.3" + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} +resConfig { + new_prefix = "better_" // 资源前缀 + old_prefix = "" // 老前缀,可为''空字符串 + // === below use default + // resFolderPath 资源目录 + // srcFolderPath 源代码目录 + // manifestFilePath 清单文件目录 +} +dependencies { +implementation("androidx.appcompat:appcompat:1.7.1") + implementation("com.google.android.material:material:1.13.0") + implementation("androidx.constraintlayout:constraintlayout:2.2.1") + implementation("androidx.legacy:legacy-support-v4:1.0.0") + implementation("androidx.recyclerview:recyclerview:1.4.0") + implementation ("com.github.bumptech.glide:glide:5.0.5") + implementation ("com.airbnb.android:lottie:6.7.1") + implementation("androidx.activity:activity:1.12.1") + implementation("com.airbnb.android:lottie:6.7.1") + + +} \ No newline at end of file diff --git a/app/keystore.properties b/app/keystore.properties new file mode 100644 index 0000000..de0b7b6 --- /dev/null +++ b/app/keystore.properties @@ -0,0 +1,6 @@ +app_name=Prank Sound App +package_name=com.light.prank.sound.app +keystoreFile=PrankSoundApp +key_alias=PrankSoundAppkey0 +key_store_password=PrankSoundApp +key_password=PrankSoundApp \ No newline at end of file diff --git a/app/objectbox-models/default.json b/app/objectbox-models/default.json new file mode 100644 index 0000000..41b6a65 --- /dev/null +++ b/app/objectbox-models/default.json @@ -0,0 +1,169 @@ +{ + "_note1": "KEEP THIS FILE! Check it into a version control system (VCS) like git.", + "_note2": "ObjectBox manages crucial IDs for your object model. See docs for details.", + "_note3": "If you have VCS merge conflicts, you must resolve them according to ObjectBox docs.", + "entities": [ + { + "id": "13:7824910208781978737", + "lastPropertyId": "7:8857830758367360123", + "name": "PrankBean", + "properties": [ + { + "id": "1:6047917390232111500", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:4623783959485819277", + "name": "name", + "type": 9 + }, + { + "id": "3:7692086498868210194", + "name": "covert", + "type": 9 + }, + { + "id": "4:2825018824026239987", + "name": "audioUrl", + "type": 9 + }, + { + "id": "5:8932557144992099091", + "name": "isLike", + "type": 1 + }, + { + "id": "6:5962978559603145119", + "name": "isCustomization", + "type": 1 + }, + { + "id": "7:8857830758367360123", + "name": "colorIndex", + "type": 5 + } + ], + "relations": [] + }, + { + "id": "14:87710518712999501", + "lastPropertyId": "3:1835392782982996208", + "name": "SoundsWrapper", + "properties": [ + { + "id": "1:6200994814248403217", + "name": "id", + "type": 6, + "flags": 1 + }, + { + "id": "2:6932511964128134026", + "name": "name", + "type": 9 + }, + { + "id": "3:1835392782982996208", + "name": "covert", + "type": 9 + } + ], + "relations": [ + { + "id": "9:8982482320798399131", + "name": "prankBeanList", + "targetId": "13:7824910208781978737" + } + ] + } + ], + "lastEntityId": "14:87710518712999501", + "lastIndexId": "0:0", + "lastRelationId": "9:8982482320798399131", + "lastSequenceId": "0:0", + "modelVersion": 5, + "modelVersionParserMinimum": 5, + "retiredEntityUids": [ + 6644187494744704837, + 5451755925324613900, + 5341528467384834198, + 8669262289368091330, + 8810616757821398748, + 6372494608185382462, + 260548638537148495, + 6171058126503557976, + 8085616393527895261, + 8739827070759887179, + 6925743302808159345, + 4787339686156620592 + ], + "retiredIndexUids": [], + "retiredPropertyUids": [ + 3737650329028529369, + 4763378658873693443, + 125364974873863130, + 2528835553105827913, + 4125097520975656265, + 1927156637783361412, + 6438478261519714898, + 2535158628950494443, + 4963029281587776266, + 8017263761729239946, + 3918234626049153042, + 4840800811073356695, + 930394402218217369, + 1357489842440803099, + 783114452691941347, + 881748992619560888, + 95077662452914291, + 7000351314398811626, + 3982750000194227585, + 5235585844249440522, + 3371160825837869454, + 9088572167887595053, + 2294045821758826971, + 6190783800393335475, + 6856939928119969590, + 9041548896743223717, + 4243540562679615259, + 3106056562243875264, + 7411940719916723671, + 8627564250033438412, + 2362105308234412259, + 6967435104198349134, + 9068611668884650878, + 1871289416013564443, + 146773896596794310, + 5478293265216175724, + 5188652570119820578, + 6461488128394318327, + 1026277688866110674, + 2521498030617118564, + 2583438008647218971, + 731259648768476447, + 5851268731306509989, + 7559103671740386544, + 5195394224802633518, + 7729663788422230782, + 7713392402430065102, + 161854929172988279, + 4329094194233611546, + 469180437797582293, + 2566506951489034336, + 9129679095050664868, + 8225212046296577339, + 2106199083066446849 + ], + "retiredRelationUids": [ + 4497042841980461487, + 5723529287069432111, + 8439944504818566677, + 6781268415547019296, + 2600628166471439351, + 6610744321567014290, + 3875887204039397939, + 3485786768338944717 + ], + "version": 1 +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..4428e3a --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,51 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile +-useuniqueclassmembernames +-keepattributes SourceFile,LineNumberTable + +-keepclassmembers class * implements java.io.Serializable { + +static final long serialVersionUID; + +private static final java.io.ObjectStreamField[] serialPersistentFields; + +private void writeObject(java.io.ObjectOutputStream); + +private void readObject(java.io.ObjectInputStream); + +java.lang.Object writeReplace(); + +java.lang.Object readResolve(); + +} + + +# 保留Processor类,这些类用于在编译时生成ObjectBox需要的代码 +-keep @io.objectbox.annotation.processor.Processor class * { + *; +} + +# 保留ObjectBox的关键方法和构造函数 +-keepclassmembers class * extends io.objectbox.Box { + (...); + ; +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..adf64b0 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/prank.json b/app/src/main/assets/prank.json new file mode 100644 index 0000000..7539667 --- /dev/null +++ b/app/src/main/assets/prank.json @@ -0,0 +1,3791 @@ +[ + + + { + "categoryId": "625f83491fea07887e619068", + "categoryName": "Door Bell", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Door Bell.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Door Bell/funny_doorbell_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Door Bell.png", + "title": "Door Bell 10" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906a", + "categoryName": "Gun", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Gun.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gun/gun_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gun.png", + "title": "Gun 13" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906c", + "categoryName": "Laughing \u0026 Clapping", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Laughing \u0026 clapping.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing _ Clapping/laughing_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing \u0026 clapping.png", + "title": "Laughing \u0026 Clapping 8" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906d", + "categoryName": "Man Cough", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Man Cough.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Cough/funny_man_cough_strong_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Cough.png", + "title": "Man Cough 6" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906e", + "categoryName": "Man Sneeze", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Man Sneeze.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Man Sneeze/funny_man_sneeze_strong_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Man Sneeze.png", + "title": "Man Sneeze 6" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906f", + "categoryName": "Police", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Police.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Police/funny_police_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Police.png", + "title": "Police 6" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd42", + "categoryName": "Cuckoo Clock", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Cuckoo Clock.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock01.png", + "title": "Cuckoo Clock 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock02.png", + "title": "Cuckoo Clock 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock03.png", + "title": "Cuckoo Clock 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock04.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock04.png", + "title": "Cuckoo Clock 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock05.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock05.png", + "title": "Cuckoo Clock 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock06.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock06.png", + "title": "Cuckoo Clock 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock07.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock07.png", + "title": "Cuckoo Clock 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock08.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock08.png", + "title": "Cuckoo Clock 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock09.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock09.png", + "title": "Cuckoo Clock 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock10.png", + "title": "Cuckoo Clock 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock11.png", + "title": "Cuckoo Clock 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock12.png", + "title": "Cuckoo Clock 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock13.png", + "title": "Cuckoo Clock 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock14.png", + "title": "Cuckoo Clock 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock15.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock15.png", + "title": "Cuckoo Clock 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Cuckoo Clock/Cuckoo Clock16.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Cuckoo Clock/Cuckoo Clock16.png", + "title": "Cuckoo Clock 16" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd43", + "categoryName": "Fireworks", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Fireworks.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Fireworks Rocket01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Fireworks Rocket01.png", + "title": "Fireworks 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Fireworks Rocket02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Fireworks Rocket02.png", + "title": "Fireworks 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Fireworks01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Fireworks01.png", + "title": "Fireworks 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Fireworks02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Fireworks02.png", + "title": "Fireworks 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Fireworks03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Fireworks03.png", + "title": "Fireworks 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Kisspng fireworks cake.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Kisspng fireworks cake.png", + "title": "Fireworks 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Paper fireworks01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Paper fireworks01.png", + "title": "Fireworks 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Paper fireworks02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Paper fireworks02.png", + "title": "Fireworks 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Sparkler Fireworks01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Sparkler Fireworks01.png", + "title": "Fireworks 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Sparkler Fireworks02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Sparkler Fireworks02.png", + "title": "Fireworks 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Tet fireworks01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Tet fireworks01.png", + "title": "Fireworks 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Tet fireworks02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Tet fireworks02.png", + "title": "Fireworks 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fireworks/Tet fireworks03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fireworks/Tet fireworks03.png", + "title": "Fireworks 14" + } + ] + }, + { + "categoryId": "625f83491fea07887e619069", + "categoryName": "Fart Sound", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Fart Sound.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_dj_initial.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_dj_short.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_15.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_fart_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Sound.png", + "title": "Fart Sound 17" + } + ] + }, + { + "categoryId": "625f83491fea07887e61906b", + "categoryName": "Hair Clipper", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Hair Clipper.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Clipper/hairclipper_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Clipper.png", + "title": "Hair Clipper 12" + } + ] + }, + { + "categoryId": "625f83491fea07887e619064", + "categoryName": "Baby Sneeze", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Baby Sneeze.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby Sneeze/funny_baby_sneeze_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby Sneeze.png", + "title": "Baby Sneeze 6" + } + ] + }, + { + "categoryId": "625f83491fea07887e619065", + "categoryName": "Breaking", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Breaking.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Breaking/breaking_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Breaking.png", + "title": "Breaking 10" + } + ] + }, + { + "categoryId": "625f83491fea07887e619063", + "categoryName": "Airhorn", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Airhorn.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Airhorn/funny_airhorn_13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Airhorn.png", + "title": "Airhorn 13" + } + ] + }, + { + "categoryId": "625f83491fea07887e619071", + "categoryName": "Toilet Flushing", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Toilet Flushing.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Toilet Flushing/toiletflushing_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Toilet Flushing.png", + "title": "Toilet Flushing 7" + } + ] + }, + { + "categoryId": "625f83491fea07887e619072", + "categoryName": "Woman Cough", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Woman Cough.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Cough/funny_woman_cough_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Cough.png", + "title": "Woman Cough 6" + } + ] + }, + { + "categoryId": "625f83491fea07887e619073", + "categoryName": "Woman Sneeze", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Woman Sneeze.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Woman Sneeze/funny_woman_sneeze_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Woman Sneeze.png", + "title": "Woman Sneeze 6" + } + ] + }, + { + "categoryId": "6260b076d7ddc35b5bd96175", + "categoryName": "Fart Song", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Fart Song.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fart/fart_song_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fart Song.png", + "title": "Fart Song 12" + } + ] + }, + { + "categoryId": "62be51874d4edd56b588d54d", + "categoryName": "Hair Dryer", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Hair Dryer.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Hair Dryer/Hair_dryer_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Hair Dryer.png", + "title": "Hair Dryer 10" + } + ] + }, + { + "categoryId": "62be51cc4d4edd56b588d54e", + "categoryName": "Scissors", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Scissors.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Scissor/Scissors_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Scissors.png", + "title": "Scissors 10" + } + ] + }, + { + "categoryId": "62be51f84d4edd56b588d54f", + "categoryName": "Stun Gun", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Stun Gun.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Stun gun/Stun_gun_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Stun Gun.png", + "title": "Stun Gun 10" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d802", + "categoryName": "Animal Sound", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Animal Sound.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Bear.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Beer.png", + "title": "Animal Sound 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Bee.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Bee.png", + "title": "Animal Sound 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Buffalo 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Buffalo.png", + "title": "Animal Sound 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Cat 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Cat.png", + "title": "Animal Sound 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Crocodile 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Crocodile.png", + "title": "Animal Sound 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Dog.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Dog.png", + "title": "Animal Sound 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Hippo 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Hippo.png", + "title": "Animal Sound 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Horse.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Horse.png", + "title": "Animal Sound 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Lion.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Lion.png", + "title": "Animal Sound 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Monkey 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Monkey.png", + "title": "Animal Sound 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Parrot.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Parrot.png", + "title": "Animal Sound 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Pig.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Pig.png", + "title": "Animal Sound 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Retired 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Retired.png", + "title": "Animal Sound 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Snake.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Snake.png", + "title": "Animal Sound 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Squirrel.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Squirrel.png", + "title": "Animal Sound 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Animal Sound/Tiger.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Animal Sound/Tiger.png", + "title": "Animal Sound 16" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d803", + "categoryName": "Business \u0026 Office", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Business \u0026 Office.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Air Conditioning.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/air conditioning.png", + "title": "Business \u0026 Office 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Clock.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/Clock.png", + "title": "Business \u0026 Office 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Elevator Bell.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/elevator.png", + "title": "Business \u0026 Office 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Fax Machine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/Fax machine.png", + "title": "Business \u0026 Office 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Fire Bell.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/fire bell.png", + "title": "Business \u0026 Office 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Fire Extinguisher.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/fire extinguisher.png", + "title": "Business \u0026 Office 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/keyboard 2.wav", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/keyboard.png", + "title": "Business \u0026 Office 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Loudspeaker.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/loudspeaker.png", + "title": "Business \u0026 Office 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Mouse.wav", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/Mouse.png", + "title": "Business \u0026 Office 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Paper.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/Paper.png", + "title": "Business \u0026 Office 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Pen.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/Pen.png", + "title": "Business \u0026 Office 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Printer.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/printer.png", + "title": "Business \u0026 Office 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Projector Film.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/projector.png", + "title": "Business \u0026 Office 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Scissors.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/scissors.png", + "title": "Business \u0026 Office 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Stapler.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/stapler.png", + "title": "Business \u0026 Office 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Business \u0026 Office/Wired Phone.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Business \u0026 Office/wired phone.png", + "title": "Business \u0026 Office 16" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d804", + "categoryName": "Doors", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Doors.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Bankdoor.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Bankdoor.png", + "title": "Doors 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Car door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Car door.png", + "title": "Doors 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Door Wrought Iron Window House.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Door Wrought Iron Window House.png", + "title": "Doors 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Garage door 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/garage door 1.png", + "title": "Doors 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Garage door 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/garage door 2.png", + "title": "Doors 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Glass Door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Glass door.png", + "title": "Doors 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Hatch door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/hatch door.png", + "title": "Doors 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Hollow metal door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Hollow metal door.png", + "title": "Doors 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Metal Door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Metal door.png", + "title": "Doors 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Prison door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/prison door.png", + "title": "Doors 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Submarine door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/submarine door.png", + "title": "Doors 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Warehouse door.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/warehouse door.png", + "title": "Doors 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Window wood.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Window wood.png", + "title": "Doors 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Window.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Window.png", + "title": "Doors 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Wood door 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Wood door 1.png", + "title": "Doors 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Doors/Wood door 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Doors/Wood door 2.png", + "title": "Doors 16" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d80a", + "categoryName": "Tools", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Tools.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Axe.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Axe.png", + "title": "Tools 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Demolition Hammer.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Demolition Hammer.png", + "title": "Tools 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Drill.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Drill.png", + "title": "Tools 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Fire sprinkle.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Fire sprinkle.png", + "title": "Tools 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Hammer.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Hamme.png", + "title": "Tools 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Hand drill.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Hand drill.png", + "title": "Tools 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Nailing Machine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/nailing machine.png", + "title": "Tools 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Pipe Wrench.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Pipe Wrench.png", + "title": "Tools 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Saw Machine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Saw machine.png", + "title": "Tools 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Saw.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/Saw.png", + "title": "Tools 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Smooth Polishing Machine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/smooth polishing machine.png", + "title": "Tools 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Tape Measure.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/tape measure.png", + "title": "Tools 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Water Pump.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/water pump.png", + "title": "Tools 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Welder Machine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/welder machine.png", + "title": "Tools 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Tools/Wrench.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Tools/wrench.png", + "title": "Tools 15" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd33", + "categoryName": "Blowing Nose", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Blowing nose.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose01.png", + "title": "Blowing Nose 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose02.png", + "title": "Blowing Nose 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose03.png", + "title": "Blowing Nose 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose04.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose04.png", + "title": "Blowing Nose 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose05.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose05.png", + "title": "Blowing Nose 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose06.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose06.png", + "title": "Blowing Nose 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose07.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose07.png", + "title": "Blowing Nose 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose08.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose08.png", + "title": "Blowing Nose 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose09.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose09.png", + "title": "Blowing Nose 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose10.png", + "title": "Blowing Nose 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose11.png", + "title": "Blowing Nose 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose12.png", + "title": "Blowing Nose 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose13.png", + "title": "Blowing Nose 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Blowing nose/Blowing nose14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Blowing nose/Blowing nose14.png", + "title": "Blowing Nose 14" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd34", + "categoryName": "Boom", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Boom.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/atom bomb.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/atom bomb.png", + "title": "Boom 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Bomb.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Bomb.png", + "title": "Boom 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Cannon Car.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Cannon Car.png", + "title": "Boom 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Fire In The Hole.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Fire In The Hole.png", + "title": "Boom 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Firework.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Firework.png", + "title": "Boom 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Flashbang.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Flashbang.png", + "title": "Boom 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Grenade.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Grenade.png", + "title": "Boom 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Molotov.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Molotov.png", + "title": "Boom 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Rocket gun.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Rocket gun.png", + "title": "Boom 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/shooting tank.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/shooting tank.png", + "title": "Boom 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Smoke Grenade.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Smoke Grenade.png", + "title": "Boom 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/stink bomb.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/stink bomb.png", + "title": "Boom 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Throwing flash.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Throwing flash.png", + "title": "Boom 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Throwing smoke.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Throwing smoke.png", + "title": "Boom 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Boom/Time Bomb.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Boom/Time Bomb.png", + "title": "Boom 16" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd35", + "categoryName": "Clocking", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Clocking.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking01.png", + "title": "Clocking 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking02.png", + "title": "Clocking 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking03.png", + "title": "Clocking 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking04.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking04.png", + "title": "Clocking 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking05.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking05.png", + "title": "Clocking 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking06.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking06.png", + "title": "Clocking 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking07.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking07.png", + "title": "Clocking 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking08.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking08.png", + "title": "Clocking 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking09.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking09.png", + "title": "Clocking 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking10.png", + "title": "Clocking 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking11.png", + "title": "Clocking 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking12.png", + "title": "Clocking 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking13.png", + "title": "Clocking 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Clocking/Clocking14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Clocking/Clocking14.png", + "title": "Clocking 14" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd36", + "categoryName": "Fun Anime", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Fun Anime.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Air.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Air.png", + "title": "Fun Anime 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Arigatou.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Arigatou.png", + "title": "Fun Anime 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Cook.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Cook.png", + "title": "Fun Anime 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Eh- Eh- Eh.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Eh- Eh- Eh.png", + "title": "Fun Anime 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Fire.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Fire.png", + "title": "Fun Anime 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Goku saiyan scream.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Goku saiyan scream.png", + "title": "Fun Anime 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Haki.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Haki.png", + "title": "Fun Anime 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Muda muda muda.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Muda muda muda.png", + "title": "Fun Anime 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Nani.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Nani.png", + "title": "Fun Anime 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Ora Ora Ora.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Ora Ora Ora.png", + "title": "Fun Anime 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/stone.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/stone.png", + "title": "Fun Anime 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Stop time.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Stop time.png", + "title": "Fun Anime 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Thunder.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Thunder.png", + "title": "Fun Anime 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Water.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Water.png", + "title": "Fun Anime 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Fun Anime/Wow.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Fun Anime/Wow.png", + "title": "Fun Anime 15" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd37", + "categoryName": "Gurgting", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Gurgling.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/baby boy washing mouth.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/baby boy washing mouth.png", + "title": "Gurgting 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/baby girl washing mouth.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/baby girl washing mouth.png", + "title": "Gurgting 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/boy washing mouth.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/boy washing mouth.png", + "title": "Gurgting 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/drink water.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/drink water.png", + "title": "Gurgting 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/expectorate.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/expectorate.png", + "title": "Gurgting 6" + }, + + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/soap bubbles.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/soap bubbles.png", + "title": "Gurgting 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/washing face.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/washing face.png", + "title": "Gurgting 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Gurgting/Woman washing mouth.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Gurgting/Woman washing mouth.png", + "title": "Gurgting 12" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd38", + "categoryName": "Snoring", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Snoring.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring01.png", + "title": "Snoring 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring02.png", + "title": "Snoring 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring03.png", + "title": "Snoring 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring04.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring04.png", + "title": "Snoring 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring05.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring05.png", + "title": "Snoring 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring06.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring06.png", + "title": "Snoring 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring07.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring07.png", + "title": "Snoring 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring08.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring08.png", + "title": "Snoring 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring09.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring09.png", + "title": "Snoring 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring10.png", + "title": "Snoring 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring11.png", + "title": "Snoring 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring12.png", + "title": "Snoring 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring13.png", + "title": "Snoring 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snoring/Snoring14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snoring/Snoring14.png", + "title": "Snoring 14" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d805", + "categoryName": "Meme sound 1", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 1.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Ain_t Nobody Got Time.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Ain_t Nobody Got Time.jpg", + "title": "Meme sound 1 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Alert.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Alert.jpg", + "title": "Meme sound 1 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Applause.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Applause.jpg", + "title": "Meme sound 1 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Astronomia.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Astronomia.jpg", + "title": "Meme sound 1 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/ba ba boi.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/ba ba boi.jpg", + "title": "Meme sound 1 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Ba Dum Tss.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Ba Dum Tss.jpg", + "title": "Meme sound 1 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Ba Dun Dun.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Ba Dun Dun.jpg", + "title": "Meme sound 1 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Bass Boosted.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Bass Boosted.jpg", + "title": "Meme sound 1 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/BIBLETHUMP (sad violin).mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/BIBLETHUMP (sad violin).jpg", + "title": "Meme sound 1 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Crazy Kid Get Noscoped.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Crazy Kid Get Noscoped.jpg", + "title": "Meme sound 1 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Crickets Silence.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Crickets Silence.jpg", + "title": "Meme sound 1 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Damaged coda.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Damaged coda.jpg", + "title": "Meme sound 1 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Damn Daniel.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Damn Daniel.jpg", + "title": "Meme sound 1 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Damn.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Damn.jpg", + "title": "Meme sound 1 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Dancing polish Cow.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Dancing polish cow.jpg", + "title": "Meme sound 1 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Deez Nuts.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Deez Nuts.jpg", + "title": "Meme sound 1 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Dial Up Internet.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Dial Up Internet.jpg", + "title": "Meme sound 1 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Dip Dip Potato Chip.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Dip Dip Potato Chip.jpg", + "title": "Meme sound 1 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 1/Dont Click.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 1/Dont click.jpg", + "title": "Meme sound 1 19" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d806", + "categoryName": "Meme sound 2", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 2.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/DOOR STUCK! DOOR STUCK!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/DOOR STUCK! DOOR STUCK!.jpg", + "title": "Meme sound 2 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Driected by Robert B.Weide.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Driected by Robert B.Weide.jpg", + "title": "Meme sound 2 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/E Girl You heard me.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/E Girl You heard me.jpg", + "title": "Meme sound 2 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Epic Victory.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Epic Victory.jpg", + "title": "Meme sound 2 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/EZ - Easy.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/EZ - Easy.jpg", + "title": "Meme sound 2 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Falcon Punch.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Falcon Punch.jpg", + "title": "Meme sound 2 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Falling Whistle.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Falling Whistle.jpg", + "title": "Meme sound 2 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/FBI! Open up!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/FBI! Open up!.jpg", + "title": "Meme sound 2 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/flightreacts 50 laughs.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/flightreacts 50 laughs.jpg", + "title": "Meme sound 2 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Funny Burp.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Funny Burp.jpg", + "title": "Meme sound 2 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Funny Cartoon Running.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Funny Cartoon Running.jpg", + "title": "Meme sound 2 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Funny Fart.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Funny Fart.jpg", + "title": "Meme sound 2 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Funny Laughs.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Funny Laughs.jpg", + "title": "Meme sound 2 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Funny Troll Guns.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Funny Troll Guns.jpg", + "title": "Meme sound 2 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Google.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Google.jpg", + "title": "Meme sound 2 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Hey It_s Corona Time.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Hey It_s Corona Time.jpg", + "title": "Meme sound 2 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Hey What Happen.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Hey What Happen.jpg", + "title": "Meme sound 2 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Hey, that_s pretty good!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Hey, that_s pretty good!.jpg", + "title": "Meme sound 2 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/His Name Is JOHN CENA.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/His Name Is JOHN CENA.jpg", + "title": "Meme sound 2 20" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 2/Holy Moly.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 2/Holy Moly.jpg", + "title": "Meme sound 2 21" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d807", + "categoryName": "Meme sound 3", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 3.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/I Believe I Can OOF.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/I Believe I Can OOF.jpg", + "title": "Meme sound 3 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Illuminati Confirmed.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Illuminati Confirmed.jpg", + "title": "Meme sound 3 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/It_s Just a Prank.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/It_s Just a Prank.jpg", + "title": "Meme sound 3 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/It_s Me Mario.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/It_s Me Mario.jpg", + "title": "Meme sound 3 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/It_s Over 9000.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/It_s Over 9000.jpg", + "title": "Meme sound 3 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/KO - Street Fighter.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/KO - Street Fighter.jpg", + "title": "Meme sound 3 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Kung Fu Shout.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Kung Fu Shout.jpg", + "title": "Meme sound 3 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Laughing Crowd.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Laughing Crowd.jpg", + "title": "Meme sound 3 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Lol.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Lol.jpg", + "title": "Meme sound 3 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Lonely Wind.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Lonely Wind.jpg", + "title": "Meme sound 3 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Mario Kart Race Start.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Mario Kart Race Start.jpg", + "title": "Meme sound 3 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Meme Triggered.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Meme Triggered.jpg", + "title": "Meme sound 3 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Minecraft Drinking.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Minecraft Drinking.jpg", + "title": "Meme sound 3 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Minecraft Pickaxe.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Minecraft Pickaxe.jpg", + "title": "Meme sound 3 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Mission Failed.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Mission Failed.jpg", + "title": "Meme sound 3 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Nani Omae wa mou shindeiru.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Nani Omae wa mou shindeiru.jpg", + "title": "Meme sound 3 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Noo!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Noo!.jpg", + "title": "Meme sound 3 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Oh My God.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Oh My God.jpg", + "title": "Meme sound 3 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Oh No No No.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Oh No No No.jpg", + "title": "Meme sound 3 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 3/Oh no tik tok.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 3/Oh no tik tok.jpg", + "title": "Meme sound 3 20" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d808", + "categoryName": "Meme sound 4", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 4.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/OHHHH.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/OHHHH.jpg", + "title": "Meme sound 4 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Ok.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Ok.jpg", + "title": "Meme sound 4 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Old Movie Projector.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Old Movie Projector.jpg", + "title": "Meme sound 4 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Onii-Chan Padoru.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Onii-Chan Padoru.jpg", + "title": "Meme sound 4 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/OOF Roblox.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/OOF Roblox.jpg", + "title": "Meme sound 4 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Oof!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Oof!.jpg", + "title": "Meme sound 4 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Peppa pig YEET.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Peppa pig YEET.jpg", + "title": "Meme sound 4 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/PewDiePie Hmm.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/PewDiePie Hmm.jpg", + "title": "Meme sound 4 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Pewdiepie WOW.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Pewdiepie WOW.jpg", + "title": "Meme sound 4 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Phone Vibrating.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Phone Vibrating.jpg", + "title": "Meme sound 4 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Punch.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Punch.jpg", + "title": "Meme sound 4 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/RKO Outta Nowhere.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/RKO Outta Nowhere.jpg", + "title": "Meme sound 4 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Say What.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Say What.jpg", + "title": "Meme sound 4 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Sike That_s The Wrong Number.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Sike That_s The Wrong Number.jpg", + "title": "Meme sound 4 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Slap.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Slap.jpg", + "title": "Meme sound 4 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Sniper Shot - MW2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Sniper Shot - MW2.jpg", + "title": "Meme sound 4 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Sorry Bro.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Sorry Bro.jpg", + "title": "Meme sound 4 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Stop Fuking Lying.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Stop Fuking Lying.jpg", + "title": "Meme sound 4 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 4/Suspense.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 4/Suspense.jpg", + "title": "Meme sound 4 19" + } + ] + }, + { + "categoryId": "636b8e5415831ec42fc7d809", + "categoryName": "Meme sound 5", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 5.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Tadaa Vanoss Gaming.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Tadaa Vanoss Gaming.jpg", + "title": "Meme sound 5 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Take The L.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Take The L.jpg", + "title": "Meme sound 5 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/That Was Legitness.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/That Was Legitness.jpg", + "title": "Meme sound 5 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/The Duck Song.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/The Duck Song.jpg", + "title": "Meme sound 5 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Titanic Flute Fail.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Titanic Flute Fail.jpg", + "title": "Meme sound 5 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Troll Bell.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Troll Bell.jpg", + "title": "Meme sound 5 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Troll Kids.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Troll Kids.jpg", + "title": "Meme sound 5 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Two Hours Later.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Two Hours Later.jpg", + "title": "Meme sound 5 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Where The Fuk I Am.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Where The Fuk I Am.jpg", + "title": "Meme sound 5 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Wii Theme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Wii Theme.jpg", + "title": "Meme sound 5 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Windows Earrape.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Windows Earrape.jpg", + "title": "Meme sound 5 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Windows Error.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Windows Error.jpg", + "title": "Meme sound 5 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/WTF Boom.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/WTF Boom.jpg", + "title": "Meme sound 5 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/WTF.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/WTF.jpg", + "title": "Meme sound 5 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/WWE Crazy OMG Moments.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/WWE Crazy OMG Moments.jpg", + "title": "Meme sound 5 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/YEEET.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/YEEET.jpg", + "title": "Meme sound 5 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Yes.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Yes.jpg", + "title": "Meme sound 5 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/You_re the last one. Complete the mission.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/You_re the last one. Complete the mission.jpg", + "title": "Meme sound 5 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Yup.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Yup.jpg", + "title": "Meme sound 5 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 5/Zombie Death.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 5/Zombie Death.jpg", + "title": "Meme sound 5 20" + } + ] + }, + { + "categoryId": "636dc88cf512f266a311768d", + "categoryName": "Meme sound 6", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Meme sound 6.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/2000 Years Later.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/2000 Years Later.jpg", + "title": "Meme sound 6 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/ANOTHER ONE.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/ANOTHER ONE.jpg", + "title": "Meme sound 6 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Angry Gamer.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Angry Gamer.jpg", + "title": "Meme sound 6 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Are You Stupid.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Are You Stupid.jpg", + "title": "Meme sound 6 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Autism Attack.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Autism Attack.jpg", + "title": "Meme sound 6 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Crowd clapping.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Crowd clapping.jpg", + "title": "Meme sound 6 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Crying.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Crying.jpg", + "title": "Meme sound 6 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/DAMN.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/DAMN.jpg", + "title": "Meme sound 6 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Do it! Just Do It!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Do it! Just Do It!.jpg", + "title": "Meme sound 6 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Epic black man crying.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Epic black man crying.jpg", + "title": "Meme sound 6 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/GTA Mission Passed.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/GTA Mission Passed.jpg", + "title": "Meme sound 6 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Hi Okay.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Hi Okay.jpg", + "title": "Meme sound 6 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/I Don_t Know.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/I Don_t Know.jpg", + "title": "Meme sound 6 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/I feel good.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/I feel good.jpg", + "title": "Meme sound 6 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Jonah laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Jonah laughing.jpg", + "title": "Meme sound 6 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Lion Laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Lion Laughing.jpg", + "title": "Meme sound 6 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/MONKEY LAUGHING.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/MONKEY LAUGHING.jpg", + "title": "Meme sound 6 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/NO GOD! NO GOD, PLEASE NO.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/NO GOD! NO GOD, PLEASE NO.jpg", + "title": "Meme sound 6 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Nani Omae wa mou shindeiru.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Nani Omae wa mou shindeiru.jpg", + "title": "Meme sound 6 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Nice.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Nice.jpg", + "title": "Meme sound 6 20" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Nicolas Cage laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Nicolas Cage laughing.jpg", + "title": "Meme sound 6 21" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Oh Hell No.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Oh Hell No.jpg", + "title": "Meme sound 6 22" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Radiotv Censor.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Radiotv Censor.jpg", + "title": "Meme sound 6 23" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Really Nigga.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Really Nigga.jpg", + "title": "Meme sound 6 24" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/SERIOUSLY WTF.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/SERIOUSLY WTF.jpg", + "title": "Meme sound 6 25" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Silent laugh.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Silent laugh.jpg", + "title": "Meme sound 6 26" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Smoke Weed every Day.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Smoke Weed every Day.jpg", + "title": "Meme sound 6 27" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Squirrel Shout.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Squirrel Shout.jpg", + "title": "Meme sound 6 28" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Stop It, Get Some Help.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Stop It, Get Some Help.jpg", + "title": "Meme sound 6 29" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Surprise.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Surprise.jpg", + "title": "Meme sound 6 30" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/WHAT.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/WHAT.jpg", + "title": "Meme sound 6 31" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/Wait A Minute, Who Are You.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/Wait A Minute, Who Are You.jpg", + "title": "Meme sound 6 32" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/What_s wrong with you.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/What_s wrong with you.jpg", + "title": "Meme sound 6 33" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Meme sound 6/oh my god wow.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Meme sound 6/oh my god wow.jpg", + "title": "Meme sound 6 34" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd47", + "categoryName": "Anime meme", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Anime Meme.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Ahoy.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Ahoy.png", + "title": "Anime meme 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Anta Baka.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Anta Baka.png", + "title": "Anime meme 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Ara Ara.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Ara Ara.png", + "title": "Anime meme 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Deadman Anime.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Deadman Anime.png", + "title": "Anime meme 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Ehe te nandayo.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Ehe te nandayo.png", + "title": "Anime meme 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Hayai.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Hayai.png", + "title": "Anime meme 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/IIIIIIIHHHHHHHHHÁÁÁÁÁÁÁÁÁÁ!!!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/IIIIIIIHHHHHHHHHÁÁÁÁÁÁÁÁÁÁ!!!.png", + "title": "Anime meme 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Mario.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Mario.png", + "title": "Anime meme 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Nande.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Nande.png", + "title": "Anime meme 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Nani-Yasen.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Nani-Yasen.png", + "title": "Anime meme 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Nico Nico Nii.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Nico Nico Nii.png", + "title": "Anime meme 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Nyanpasu.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Nyanpasu.png", + "title": "Anime meme 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Onii chan.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Onii chan.png", + "title": "Anime meme 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Pikachu.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Pikachu.png", + "title": "Anime meme 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Rero rero.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Rero rero.png", + "title": "Anime meme 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Senpai.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Senpai.png", + "title": "Anime meme 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Tuturu_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Tuturu.png", + "title": "Anime meme 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Anime meme/Uwu Uwu.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Anime meme/Uwu Uwu.png", + "title": "Anime meme 18" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd48", + "categoryName": "Baby sound meme", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Baby sound meme.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Autotune Baby.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Autotune Baby.png", + "title": "Baby sound meme 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/baby crying.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/baby crying.png", + "title": "Baby sound meme 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Baby Groot.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Baby Groot.png", + "title": "Baby sound meme 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Baby Screaming Meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Baby Screaming Meme.png", + "title": "Baby sound meme 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Baby.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Baby.png", + "title": "Baby sound meme 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Cute Korean Baby.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Cute Korean Baby.png", + "title": "Baby sound meme 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Guten Morgen!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Guten Morgen!.png", + "title": "Baby sound meme 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Hasta la Vista, baby. Shotgun..mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Hasta la Vista, baby. Shotgun..png", + "title": "Baby sound meme 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Hello Baby Girl.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Hello Baby Girl.png", + "title": "Baby sound meme 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/KICK THE BABY.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/KICK THE BABY.png", + "title": "Baby sound meme 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Mario Paint Baby.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Mario Paint Baby.png", + "title": "Baby sound meme 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Not The Momma!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Not The Momma!.png", + "title": "Baby sound meme 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/Oh Baby A Triple! Sound.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/Oh Baby A Triple! Sound.png", + "title": "Baby sound meme 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Baby sound meme/The Baby Elephant from The Jungle Book.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Baby sound meme/The Baby Elephant from The Jungle Book.png", + "title": "Baby sound meme 14" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd49", + "categoryName": "Laughing meme", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Laughing meme.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/baby laughing meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/baby laughing meme.png", + "title": "Laughing meme 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/broteam laugh.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/broteam laugh.png", + "title": "Laughing meme 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/Flaky singing and Nutty laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/Flaky singing and Nutty laughing _3.png", + "title": "Laughing meme 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/frog laughing meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/frog laughing meme.png", + "title": "Laughing meme 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/Haha funny laugh.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/Haha funny laugh.png", + "title": "Laughing meme 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/laughing chihuahua meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/laughing chihuahua meme.png", + "title": "Laughing meme 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/Ninja laughing meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/Ninja laughing meme.png", + "title": "Laughing meme 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/PewDiePie Laugh.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/PewDiePie Laugh.png", + "title": "Laughing meme 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/Silly Screaming Laughter.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/Silly Screaming Laughter.png", + "title": "Laughing meme 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/That one mischievous guy laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/That one mischievous guy laughing.png", + "title": "Laughing meme 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/YAAAYY CHILDREN!!!!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/YAAAYY CHILDREN!!!!.png", + "title": "Laughing meme 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Laughing meme/You_ve got a whole lot to learn!.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Laughing meme/You\u0027ve got a whole lot to learn!.png", + "title": "Laughing meme 12" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd50", + "categoryName": "Video effect", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Video effect.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/AUGHHHHH.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/AUGHHHHH.png", + "title": "Video effect 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Bing Chilling.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Bing Chilling.png", + "title": "Video effect 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Chuck Noris Yell.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Chuck Noris Yell.png", + "title": "Video effect 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Doge Bonk.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Doge Bonk.png", + "title": "Video effect 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Funny sound.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Funny sound.png", + "title": "Video effect 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Gotcha bitch.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Gotcha bitch.png", + "title": "Video effect 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Hello-Minion.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Hello-Minion.png", + "title": "Video effect 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Instagram Thud.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Instagram Thud.png", + "title": "Video effect 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Okay.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Okay.png", + "title": "Video effect 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Pew Pew.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Pew Pew.png", + "title": "Video effect 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Shocking.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Shocking.png", + "title": "Video effect 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Sudden Suspense.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Sudden Suspense.png", + "title": "Video effect 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/This Is Bullshit.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/This Is Bullshit.png", + "title": "Video effect 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/What bottom text meme.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/What bottom text meme.png", + "title": "Video effect 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Windows XP Error.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Windows XP Error.png", + "title": "Video effect 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/WowJustin.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/WowJustin.png", + "title": "Video effect 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/WTFFFF.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/WTFFFF.png", + "title": "Video effect 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Video Effect/Yeet.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Video Effect/Yeet.png", + "title": "Video effect 18" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd40", + "categoryName": "Church Bell", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Church Bell.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 1.png", + "title": "Church Bell 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 10.png", + "title": "Church Bell 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 11.png", + "title": "Church Bell 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 12.png", + "title": "Church Bell 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 13.png", + "title": "Church Bell 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 14.png", + "title": "Church Bell 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 2.png", + "title": "Church Bell 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 3.png", + "title": "Church Bell 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 4.png", + "title": "Church Bell 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 5.png", + "title": "Church Bell 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 6.png", + "title": "Church Bell 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 7.png", + "title": "Church Bell 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 8.png", + "title": "Church Bell 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Church Bell/Church Bell 9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Church Bell/Church Bell 9.png", + "title": "Church Bell 14" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd44", + "categoryName": "Santa Claus", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Santa Claus.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 1.png", + "title": "Santa Claus 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 10.png", + "title": "Santa Claus 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 11.png", + "title": "Santa Claus 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 12.png", + "title": "Santa Claus 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 13.png", + "title": "Santa Claus 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 14.png", + "title": "Santa Claus 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 2.png", + "title": "Santa Claus 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 3.png", + "title": "Santa Claus 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 4.png", + "title": "Santa Claus 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 5.png", + "title": "Santa Claus 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 6.png", + "title": "Santa Claus 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 7.png", + "title": "Santa Claus 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 8.png", + "title": "Santa Claus 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Santa Claus/Santa Claus 9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Santa Claus/Santa Claus 9.png", + "title": "Santa Claus 14" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd45", + "categoryName": "Sleigh bell", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Sleigh bell.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 1.png", + "title": "Sleigh bell 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 10.png", + "title": "Sleigh bell 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 11.png", + "title": "Sleigh bell 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 12.png", + "title": "Sleigh bell 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 2.png", + "title": "Sleigh bell 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 3.png", + "title": "Sleigh bell 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 4.png", + "title": "Sleigh bell 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 5.png", + "title": "Sleigh bell 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 6.png", + "title": "Sleigh bell 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 7.png", + "title": "Sleigh bell 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 8.png", + "title": "Sleigh bell 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Sleigh bell/Sleigh bell 9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Sleigh bell/Sleigh bell 9.png", + "title": "Sleigh bell 12" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd46", + "categoryName": "Snowball", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Snowball.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 1.png", + "title": "Snowball 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 10.png", + "title": "Snowball 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 2.png", + "title": "Snowball 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 3.png", + "title": "Snowball 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 4.png", + "title": "Snowball 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 5.png", + "title": "Snowball 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 6.png", + "title": "Snowball 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 7.png", + "title": "Snowball 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 8.png", + "title": "Snowball 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Snowball/Snowball 9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Snowball/Snowball 9.png", + "title": "Snowball 10" + } + ] + }, + { + "categoryId": "636dc40571a30811c821fd41", + "categoryName": "Countdown", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Countdown.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown01.png", + "title": "Countdown 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown02.png", + "title": "Countdown 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown03.png", + "title": "Countdown 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown04.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown04.png", + "title": "Countdown 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown05.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown05.png", + "title": "Countdown 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown06.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown06.png", + "title": "Countdown 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown07.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown07.png", + "title": "Countdown 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown08.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown08.png", + "title": "Countdown 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown09.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown09.png", + "title": "Countdown 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown10.png", + "title": "Countdown 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown11.png", + "title": "Countdown 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown12.png", + "title": "Countdown 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown13.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown13.png", + "title": "Countdown 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown14.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown14.png", + "title": "Countdown 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown15.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown15.png", + "title": "Countdown 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Countdown/Countdown16.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Countdown/Countdown16.png", + "title": "Countdown 16" + } + ] + }, + + { + "categoryId": "636dc40571a30811c821fd39", + "categoryName": "Champagne", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Champagne.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Beer foam.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Beer foam.png", + "title": "Champagne 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Beer.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Beer.png", + "title": "Champagne 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Bottle shake.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Bottle shake.png", + "title": "Champagne 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Champagne01.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Champagne01.png", + "title": "Champagne 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Champagne02.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Champagne02.png", + "title": "Champagne 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Champagne03.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Champagne03.png", + "title": "Champagne 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Cheers.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Cheers.png", + "title": "Champagne 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Clap wine bottles.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Clap wine bottles.png", + "title": "Champagne 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Drinking alcohol.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Drinking alcohol.png", + "title": "Champagne 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Girl drink.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Girl drink.png", + "title": "Champagne 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Ice bucket.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Ice bucket.png", + "title": "Champagne 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Ice.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Ice.png", + "title": "Champagne 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Man drink.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Man drink.png", + "title": "Champagne 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Pour wine.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Pour wine.png", + "title": "Champagne 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Tongs.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Tongs.png", + "title": "Champagne 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Champagne/Touch cup.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Champagne/Touch cup.png", + "title": "Champagne 16" + } + ] + }, + { + "categoryId": "64b617f06d7b94ebbe2a20fa", + "categoryName": "Siren Head", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/20230718/SIREN HEAD.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Alarm clock head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Alarm clock head.png", + "title": "Siren Head 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Bell Head Siren.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Bell Head Siren.png", + "title": "Siren Head 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Bellringer head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Bellringer head.png", + "title": "Siren Head 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Bulb head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Bulb head.png", + "title": "Siren Head 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Camera head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Camera head.png", + "title": "Siren Head 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Classic 10 head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Classic 10 head.png", + "title": "Siren Head 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Eye head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Eye head.png", + "title": "Siren Head 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Fire alarm head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Fire alarm head.png", + "title": "Siren Head 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Horn siren head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Horn siren head.png", + "title": "Siren Head 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Horror toilet head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Horror toilet head.png", + "title": "Siren Head 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Knife head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Knife head.png", + "title": "Siren Head 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Lamp head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Lamp head.png", + "title": "Siren Head 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Noodle head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Noodle head.png", + "title": "Siren Head 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Palette head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Palette head.png", + "title": "Siren Head 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Poo head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Poo head.png", + "title": "Siren Head 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Poop head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Poop head.png", + "title": "Siren Head 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Pumpkin head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Pumpkin head.png", + "title": "Siren Head 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Radio head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Radio head.png", + "title": "Siren Head 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Seashell head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Seashell head.png", + "title": "Siren Head 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Siren Head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Siren Head.png", + "title": "Siren Head 20" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Siren tongue.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Siren tongue.png", + "title": "Siren Head 21" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Skull Head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Skull Head.png", + "title": "Siren Head 22" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Snowman head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Snowman head.png", + "title": "Siren Head 23" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Teeth head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Teeth head.png", + "title": "Siren Head 24" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Thunderbolt head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Thunderbolt head.png", + "title": "Siren Head 25" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Toilet head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Toilet head.png", + "title": "Siren Head 26" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Toilet paper head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Toilet paper head.png", + "title": "Siren Head 27" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Tombstone head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Tombstone head.png", + "title": "Siren Head 28" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/Trafic light head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/Trafic light head.png", + "title": "Siren Head 29" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/20230718/Siren Head/TV head.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/SIREN HEAD/TV head.png", + "title": "Siren Head 30" + } + ] + }, + { + "categoryId": "625f83491fea07887e619066", + "categoryName": "Burp", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Burp.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_10.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_11.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_12.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Burp/funny_burp_9.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Burp.png", + "title": "Burp 12" + } + ] + }, + { + "categoryId": "625f83491fea07887e619067", + "categoryName": "Car", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Car.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 1" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 2" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carengine_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 6" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_1.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_2.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_3.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 9" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_4.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_5.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 11" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_6.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_7.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Car/funny_carhorn_8.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Car.png", + "title": "Car 14" + } + ] + }, + { + "categoryId": "634e0d283a35295ff1e9d782", + "categoryName": "Halloween", + "categoryUrl": "https://prank-sound-abi.pranksound.com/icons/icon-categories/Halloween.png", + "list": [ + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Creepy crime.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Creepy crime.png", + "title": "Halloween 3" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Creepydoor.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Creepydoor.png", + "title": "Halloween 4" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Evil laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Evil laughing.png", + "title": "Halloween 5" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Halloween impact.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Halloween impact.png", + "title": "Halloween 7" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Halloween.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Halloween.png", + "title": "Halloween 8" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Jump scare.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Jump scare.png", + "title": "Halloween 10" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Little secrets.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Little secrets.png", + "title": "Halloween 12" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Murder of crows.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Murder of crows.png", + "title": "Halloween 13" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Pumpkin laughing.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Pumpkin laughing.png", + "title": "Halloween 14" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Scary night.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Scary night.png", + "title": "Halloween 15" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Spooky ambience.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Spooky ambience.png", + "title": "Halloween 16" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Spooky wind.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Spooky wind.png", + "title": "Halloween 17" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Strange lullaby.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Strange lullaby.png", + "title": "Halloween 18" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/Witch.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/Witch.png", + "title": "Halloween 19" + }, + { + "mp3Url": "https://prank-sound-abi.pranksound.com/sounds/Halloween/You cant see me.mp3", + "preUrl": "https://prank-sound-abi.pranksound.com/icons/icon-sounds/Halloween/You cant see me.png", + "title": "Halloween 20" + } + ] + } +] \ No newline at end of file diff --git a/app/src/main/assets/pranks.ttf b/app/src/main/assets/pranks.ttf new file mode 100644 index 0000000..23e4502 Binary files /dev/null and b/app/src/main/assets/pranks.ttf differ diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..d78256d Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/fun/wave/pranksounds/activity/AcCategoryList.java b/app/src/main/java/com/fun/wave/pranksounds/activity/AcCategoryList.java new file mode 100644 index 0000000..dd742f0 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/activity/AcCategoryList.java @@ -0,0 +1,62 @@ +package com.fun.wave.pranksounds.activity; + +import android.content.Intent; +import android.view.View; + +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.wave.pranksounds.dataListener.SoundsWrapper; +import com.fun.wave.pranksounds.utils.MyItemSpace; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.fun.wave.pranksounds.dataListener.OnClickItemListener; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.pranksounds.databinding.AcCategoryListBinding; + +public class AcCategoryList extends BaseActivity implements View.OnClickListener, OnClickItemListener { + + + private SoundsWrapper data; + private int colorIndex; + + + + @Override + protected void init() { + data = (SoundsWrapper) getIntent().getSerializableExtra(MyUtils.KEY_LIST_DATA); + colorIndex = getIntent().getIntExtra(MyUtils.KEY_LIST_COLOR_POS,0); + viewBind.categoryName.setText(data.getName()); + onList(); + viewBind.back.setOnClickListener(this); + } + + @Override + protected AcCategoryListBinding initViewBinding() { + return AcCategoryListBinding.inflate(getLayoutInflater()); + } + + private void onList() { + MyItemSpace itemHelper = new MyItemSpace(5, 5, 0); + viewBind.listRecycler.addItemDecoration(itemHelper); + viewBind.listRecycler.setLayoutManager(new GridLayoutManager(this, 2)); + AdapterCategoryList adapterCategoryList = new AdapterCategoryList(this, data.getPrankBeanList(),0,this); + viewBind.listRecycler.setAdapter(adapterCategoryList); + adapterCategoryList.setColorIndex(colorIndex); + } + + @Override + public void onClick(View v) { + if(v.equals(viewBind.back)){ + finish(); + } + + } + + @Override + public void onClickSoundsListener(PrankBean data) { + Intent intent = new Intent(this, AcPlayPranks.class); + intent.putExtra(MyUtils.KEY_PLAY_DATA, data); + intent.putExtra(MyUtils.KEY_LIST_COLOR_POS, colorIndex); + startActivity(intent); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/activity/AcMain.java b/app/src/main/java/com/fun/wave/pranksounds/activity/AcMain.java new file mode 100644 index 0000000..ae6a095 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/activity/AcMain.java @@ -0,0 +1,255 @@ +package com.fun.wave.pranksounds.activity; + + +import android.Manifest; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.net.Uri; +import android.os.Build; +import android.view.View; +import android.widget.Toast; + +import androidx.activity.result.ActivityResultCallback; +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.fragment.app.Fragment; +import androidx.viewpager2.adapter.FragmentStateAdapter; +import androidx.viewpager2.widget.ViewPager2; + +import com.fun.pranksounds.R; +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.wave.pranksounds.custom.AcRecording; +import com.fun.wave.pranksounds.custom.AcSave; +import com.fun.wave.pranksounds.custom.FragmentCustom; +import com.fun.pranksounds.databinding.AcMainBinding; +import com.fun.pranksounds.databinding.TabItemLayoutBinding; +import com.fun.wave.pranksounds.like.FragmentLike; +import com.fun.wave.pranksounds.main.FragmentMain; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.google.android.material.tabs.TabLayout; +import com.google.android.material.tabs.TabLayoutMediator; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class AcMain extends BaseActivity { + + + private ActivityResultLauncher audioPickerLauncher; + + private ActivityResultLauncher requestRecordAudioLauncher; + + private ActivityResultLauncher requestStorePermissionsLauncher; + + @Override + protected void init() { + initVp2(); + initImport(); + viewBind.importLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onClickTimer(0); + } + }); + viewBind.recordLayout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onClickTimer(1); + } + }); + + } + + private void initImport() { + requestRecordAudioLauncher = registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + isGranted -> { + if (isGranted) { + intentRecordAudio(); + } else { + Toast.makeText(AcMain.this, "Recording permission denied", Toast.LENGTH_SHORT).show(); + } + } + ); + + requestStorePermissionsLauncher = registerForActivityResult( + new ActivityResultContracts.RequestMultiplePermissions(), + new ActivityResultCallback>() { + @Override + public void onActivityResult(Map result) { + Boolean isGranted = true; + for (Map.Entry entry : result.entrySet()) { + String permission = entry.getKey(); + isGranted = entry.getValue(); + if (!entry.getValue()) { + isGranted = false; + } + + } + if (isGranted) { + importAudio(); + } else { + Toast.makeText(AcMain.this, getString(R.string.permission_denied), Toast.LENGTH_SHORT).show(); + } + } + } + ); + audioPickerLauncher = registerForActivityResult(new ActivityResultContracts.GetContent(), + new ActivityResultCallback() { + @Override + public void onActivityResult(Uri uri) { + // Handle the returned Uri + if (uri != null) { + long duration = MyUtils.getAudioDuration(AcMain.this, uri); + Intent intent = new Intent(AcMain.this, AcSave.class); + intent.putExtra(AcSave.KEY_Path, uri.toString()); +// intent.putExtra(AcSave.KEY_Time, duration); + startActivity(intent); + } + } + }); + } + + @Override + protected AcMainBinding initViewBinding() { + return AcMainBinding.inflate(getLayoutInflater()); + } + + private void intentRecordAudio() { + Intent intent = new Intent(AcMain.this, AcRecording.class); + startActivity(intent); + } + + private void initVp2() { + List fragmentList = new ArrayList<>(); + fragmentList.add(FragmentMain.newInstance()); + fragmentList.add(FragmentLike.newInstance()); + fragmentList.add(FragmentCustom.newInstance()); + viewBind.vp2.setAdapter(new FragmentStateAdapter(this) { + @NonNull + @Override + public Fragment createFragment(int position) { + return fragmentList.get(position); + } + + @Override + public int getItemCount() { + return fragmentList.size(); + } + }); + + viewBind.vp2.setOrientation(ViewPager2.ORIENTATION_HORIZONTAL); + new TabLayoutMediator(viewBind.bottomTab, viewBind.vp2, new TabLayoutMediator.TabConfigurationStrategy() { + @Override + public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) { + TabItemLayoutBinding inflate = TabItemLayoutBinding.inflate(getLayoutInflater()); + tab.setCustomView(inflate.getRoot()); + switch (position) { + case 0 -> { + inflate.imageTab.setImageResource(R.drawable.tab_prank); + inflate.getRoot().animate() + .scaleX(1.7f) + .scaleY(1.7f) + .setDuration(200) + .start(); + } + case 1 -> inflate.imageTab.setImageResource(R.drawable.tab_collection); + case 2 -> inflate.imageTab.setImageResource(R.drawable.tab_mine); + } + + + } + }).attach(); + viewBind.bottomTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { + @Override + public void onTabSelected(TabLayout.Tab tab) { + View customView = tab.getCustomView(); + if (customView != null) { + customView.animate() + .scaleX(1.7f) + .scaleY(1.7f) + .setDuration(200) + .start(); + } + + } + + @Override + public void onTabUnselected(TabLayout.Tab tab) { + View customView = tab.getCustomView(); + if (customView != null) { + View view = customView.findViewById(R.id.image_tab); + customView.animate() + .scaleX(1f) + .scaleY(1f) + .setDuration(200) + .start(); + } + } + + @Override + public void onTabReselected(TabLayout.Tab tab) { + + } + }); + + + } + + @Override + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults); + if (requestCode == MyUtils.REQUEST_READ_STORAGE_PERMISSION) { + if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + importAudio(); + } else { + Toast.makeText(this, getString(R.string.permission_fail), Toast.LENGTH_SHORT).show(); + } + } + } + + private void importAudio() { + Intent intent = new Intent(Intent.ACTION_GET_CONTENT); + intent.setType("audio/*"); + audioPickerLauncher.launch("audio/*"); + } + + public void onClickTimer(int type) { + switch (type) { + case 0: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission(AcMain.this, MyUtils.permission_read_audio[0]) + != PackageManager.PERMISSION_GRANTED) { + requestStorePermissionsLauncher.launch(MyUtils.permission_read_audio); + } else { + importAudio(); + } + } else { + if (ContextCompat.checkSelfPermission(AcMain.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED || + ContextCompat.checkSelfPermission(AcMain.this, Manifest.permission.READ_EXTERNAL_STORAGE) + != PackageManager.PERMISSION_GRANTED) { + requestStorePermissionsLauncher.launch(MyUtils.permission_store); + } else { + importAudio(); + } + } + break; + case 1: + checkAndRequestAudioPermission(); + break; + } + } + + private void checkAndRequestAudioPermission() { + if (ContextCompat.checkSelfPermission(AcMain.this, MyUtils.permission_record_audio) + != PackageManager.PERMISSION_GRANTED) { + requestRecordAudioLauncher.launch(MyUtils.permission_record_audio); + } else { + intentRecordAudio(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/activity/AcPlayPranks.java b/app/src/main/java/com/fun/wave/pranksounds/activity/AcPlayPranks.java new file mode 100644 index 0000000..d5a6e48 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/activity/AcPlayPranks.java @@ -0,0 +1,245 @@ +package com.fun.wave.pranksounds.activity; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.os.CountDownTimer; +import android.view.View; + +import androidx.recyclerview.widget.LinearLayoutManager; + +import com.bumptech.glide.Glide; +import com.fun.wave.pranksounds.utils.PopupClock; +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.wave.pranksounds.utils.MyItemSpace; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; +import com.fun.wave.pranksounds.dataListener.OnClickItemListener; +import com.fun.wave.pranksounds.dataListener.OnClickTimerListener; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.pranksounds.R; +import com.fun.pranksounds.databinding.AcPlayPranksBinding; + +import java.io.IOException; +import java.util.List; + +public class AcPlayPranks extends BaseActivity implements View.OnClickListener, OnClickTimerListener, OnClickItemListener { + + + + private PrankBean PrankBean; + private PopupClock popupClock; + + private MediaPlayer mediaPlayer; + private BroadcastReceiver volumeReceiver; + private CountDownTimer countDownTimer; + private int color; + private boolean isPause = false; + + + + @Override + protected void init() { + PrankBean = (PrankBean) getIntent().getSerializableExtra(MyUtils.KEY_PLAY_DATA); + color = getIntent().getIntExtra(MyUtils.KEY_LIST_COLOR_POS,0); + initAudio(); + String covert = PrankBean.getCovert(); + if (covert != null && !covert.isEmpty()) { + Glide.with(this).load(covert) + .placeholder(R.drawable.image_sounds) + .into(viewBind.image); + } else { + Glide.with(this).load(R.drawable.image_sounds) + .into(viewBind.image); + } + viewBind.name.setText(PrankBean.getName()); + viewBind.back.setOnClickListener(this); + viewBind.btnPlay.setOnClickListener(this); + viewBind.imLike.setOnClickListener(this); + viewBind.imLoop.setOnClickListener(this); + viewBind.imTimer.setOnClickListener(this); + MyUtils.setVolume(this, viewBind.seekbar); + + initLike(); + loadMore(); + volumeReceiver(); + } + + @Override + protected AcPlayPranksBinding initViewBinding() { + return AcPlayPranksBinding.inflate(getLayoutInflater()); + } + + private void stopCountDown() { + if (countDownTimer != null) { + countDownTimer.cancel(); + } + } + private void startCountDown(long time) { + stopCountDown(); + countDownTimer = new CountDownTimer(time, 1000) { + @Override + public void onTick(long millisUntilFinished) { + } + @Override + public void onFinish() { + popupClock.setOffSelected(); + if (!mediaPlayer.isPlaying()) { + viewBind.btnPlay.setSelected(true); + mediaPlayer.start(); + isPause = false; + viewBind.rippleView.startRipple(); + } + } + }; + countDownTimer.start(); + } + private void volumeReceiver() { + volumeReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { + AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + int currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC); + if (viewBind.seekbar.getProgress() != currentVolume) { + viewBind.seekbar.setProgress(currentVolume); + } + + } + } + }; + IntentFilter filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); + registerReceiver(volumeReceiver, filter); + } + private void initLike() { + boolean b = ObjectBoxMan.checkLike(PrankBean); + viewBind.imLike.setSelected(b); + } + private void loadMore() { + List more = ObjectBoxMan.getMore(); + MyItemSpace itemHelper = new MyItemSpace(0, 0, (int) MyUtils.dpToPx(3)); + AdapterCategoryList adapterCategoryList = new AdapterCategoryList(this, more, 1, this); + viewBind.moreRecycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)); + viewBind.moreRecycler.setAdapter(adapterCategoryList); + viewBind.moreRecycler.addItemDecoration(itemHelper); + adapterCategoryList.setColorIndex(color); + } + + private void initAudio() { + showPlayBtn(false); + mediaPlayer = new MediaPlayer(); + try { + mediaPlayer.reset(); + mediaPlayer.setDataSource(PrankBean.getAudioUrl()); + mediaPlayer.prepareAsync(); + mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { + @Override + public void onPrepared(MediaPlayer mp) { + showPlayBtn(true); + } + }); + + mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { + @Override + public void onCompletion(MediaPlayer mp) { + viewBind.btnPlay.setSelected(false); + viewBind.rippleView.stopRipple(); + isPause = false; + } + }); + } catch (IOException ioException) { + showPlayBtn(true); + } + } + + private void showPlayBtn(boolean showBtn) { + if (showBtn) { + viewBind.btnPlay.setVisibility(View.VISIBLE); + viewBind.playLoading.setVisibility(View.GONE); + } else { + viewBind.btnPlay.setVisibility(View.GONE); + viewBind.playLoading.setVisibility(View.VISIBLE); + } + } + + + @Override + public void onClick(View v) { + if (v.equals(viewBind.back)) { + finish(); + } else if (v.equals(viewBind.btnPlay)) { + boolean selected = viewBind.btnPlay.isSelected(); + if (selected) { + if (mediaPlayer.isPlaying()) { + mediaPlayer.pause(); + viewBind.rippleView.pauseRipple(); + isPause = true; + } + } else { + if (!mediaPlayer.isPlaying()) { + if(isPause){ + viewBind.rippleView.resumeRipple(); + }else { + viewBind.rippleView.startRipple(); + } + mediaPlayer.start(); + isPause = false; + } + } + viewBind.btnPlay.setSelected(!selected); + + } else if (v.equals(viewBind.imLike)) { + viewBind.imLike.setSelected(!viewBind.imLike.isSelected()); + boolean selected = viewBind.imLike.isSelected(); + if (selected) { + PrankBean.setColorIndex(color); + ObjectBoxMan.addLike(PrankBean); + } else { + ObjectBoxMan.removeLike(PrankBean); + } + } else if (v.equals(viewBind.imLoop)) { + viewBind.imLoop.setSelected(!viewBind.imLoop.isSelected()); + mediaPlayer.setLooping(viewBind.imLoop.isSelected()); + } else if (v.equals(viewBind.imTimer)) { + if (popupClock == null) { + popupClock = new PopupClock(AcPlayPranks.this, this); + } + popupClock.showTop(viewBind.imTimer); + } + + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mediaPlayer.isPlaying()) { + mediaPlayer.stop(); + } + isPause = false; + mediaPlayer.release(); + mediaPlayer = null; + stopCountDown(); + } + + @Override + public void onClickTimerListener(long time) { + popupClock.hide(); + if (time == -1) { + stopCountDown(); + } else { + startCountDown(time); + } + + } + + @Override + public void onClickSoundsListener(PrankBean data) { + Intent intent = new Intent(this, AcPlayPranks.class); + intent.putExtra(MyUtils.KEY_PLAY_DATA, data); + startActivity(intent); + finish(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/activity/AcSplashUi.java b/app/src/main/java/com/fun/wave/pranksounds/activity/AcSplashUi.java new file mode 100644 index 0000000..dc7ad75 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/activity/AcSplashUi.java @@ -0,0 +1,51 @@ +package com.fun.wave.pranksounds.activity; + +import android.content.Intent; +import android.os.CountDownTimer; + + +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.pranksounds.databinding.AcSplashUiBinding; + +public class AcSplashUi extends BaseActivity { + + private CountDownTimer countDownTimer; + @Override + protected void init() { + long time = 1200; + countDownTimer = new CountDownTimer(time, 50) { + @Override + public void onFinish() { + welcomeMain(); + } + + @Override + public void onTick(long millisUntilFinished) { + int progress = (int) ((time - millisUntilFinished) * 100 / time); + viewBind.loadingPb.setProgress(progress); + } + }; + countDownTimer.start(); + } + + @Override + protected AcSplashUiBinding initViewBinding() { + return AcSplashUiBinding.inflate(getLayoutInflater()); + } + + private void welcomeMain() { + viewBind.loadingPb.setProgress(100); + Intent intent = new Intent(this, AcMain.class); + startActivity(intent); + finish(); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + if (countDownTimer != null) { + countDownTimer.cancel(); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/activity/AdapterCategoryList.java b/app/src/main/java/com/fun/wave/pranksounds/activity/AdapterCategoryList.java new file mode 100644 index 0000000..3d56b71 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/activity/AdapterCategoryList.java @@ -0,0 +1,82 @@ +package com.fun.wave.pranksounds.activity; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.RelativeLayout; + +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.wave.pranksounds.dataListener.OnClickItemListener; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.fun.pranksounds.databinding.CategoryListAdapterBinding; + +import java.util.List; + +public class AdapterCategoryList extends RecyclerView.Adapter { + private final List mValues; + private Context mCon; + private int type; + private OnClickItemListener mListener; + private int colorIndex; + + public void setColorIndex(int colorIndex) { + this.colorIndex = colorIndex; + } + + public AdapterCategoryList(Context context, List items, int mType, OnClickItemListener listener) { + mValues = items; + this.mCon = context; + type = mType; + mListener = listener; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + return new ViewHolder(CategoryListAdapterBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + } + + + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + holder.vb.relative.setBackground(ContextCompat.getDrawable(mCon, MyUtils.childBgs[colorIndex])); + PrankBean PrankBean = mValues.get(position); + String covert = PrankBean.getCovert(); + Glide.with(mCon).load(covert).into(holder.vb.image); + holder.vb.name.setText(PrankBean.getName()); + holder.vb.getRoot().setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + mListener.onClickSoundsListener(PrankBean); + } + }); + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + private CategoryListAdapterBinding vb; + + public ViewHolder(CategoryListAdapterBinding binding) { + super(binding.getRoot()); + vb = binding; + ViewGroup.LayoutParams layoutParams = vb.relative.getLayoutParams(); + if (type == 0) { + layoutParams.width = RelativeLayout.LayoutParams.MATCH_PARENT; + vb.name.setMaxLines(2); + } else { + layoutParams.width = (int) MyUtils.dpToPx(130); + vb.name.setMaxLines(1); + } + vb.relative.setLayoutParams(layoutParams); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/base/BaseActivity.java b/app/src/main/java/com/fun/wave/pranksounds/base/BaseActivity.java new file mode 100644 index 0000000..38b30a8 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/base/BaseActivity.java @@ -0,0 +1,39 @@ +package com.fun.wave.pranksounds.base; + +import android.os.Bundle; +import android.view.View; + +import androidx.activity.EdgeToEdge; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.graphics.Insets; +import androidx.core.view.ViewCompat; +import androidx.core.view.WindowInsetsCompat; +import androidx.viewbinding.ViewBinding; + +public abstract class BaseActivity extends AppCompatActivity { + + + protected T viewBind; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + EdgeToEdge.enable(this); + viewBind = initViewBinding(); + setContentView(viewBind.getRoot()); + ViewCompat.setOnApplyWindowInsetsListener(getRootView(), (v, insets) -> { + Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); + return insets; + }); + init(); + } + + protected abstract void init(); + + protected View getRootView() { + return viewBind.getRoot(); + } + protected abstract T initViewBinding(); +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/custom/AcRecording.java b/app/src/main/java/com/fun/wave/pranksounds/custom/AcRecording.java new file mode 100644 index 0000000..eb43d6f --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/custom/AcRecording.java @@ -0,0 +1,98 @@ +package com.fun.wave.pranksounds.custom; + +import android.content.Intent; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; +import android.view.View; + +import com.fun.pranksounds.R; +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.pranksounds.databinding.AcRecordingBinding; +import com.fun.wave.pranksounds.utils.MyRecorderUtils; +import com.fun.wave.pranksounds.utils.OnUpdateRecordingTime; + +public class AcRecording extends BaseActivity { + private Handler handler = new Handler(Looper.getMainLooper()); + + private boolean isCreate = false; + + private MyRecorderUtils myRecorderUtils; + + @Override + protected void init() { + myRecorderUtils = new MyRecorderUtils(this, handler, new OnUpdateRecordingTime() { + @Override + public void onUpdateTime(long time) { + + int milliseconds = (int) (time % 1000) / 10; + int seconds = (int) (time / 1000) % 60; + int minutes = (int) (time / (1000 * 60)) % 60; + viewBind.audioTime.setText(String.format("%02d : %02d : %02d", minutes, seconds, milliseconds)); + } + }); + viewBind.audioTime.setText(R.string.time_init); + initEvent(); + } + + @Override + protected AcRecordingBinding initViewBinding() { + return AcRecordingBinding.inflate(getLayoutInflater()); + } + + private void initEvent() { + viewBind.back.setOnClickListener(v -> finish()); + viewBind.viewBtnStart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createSound(true); + } + }); + + viewBind.viewPause.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + createSound(false); + } + }); + } + + private void createSound(Boolean isStop) { + if (!isCreate) { + myRecorderUtils.startRecording(); + viewBind.lottieView.playAnimation(); + viewBind.viewPause.setSelected(true); + isCreate = true; + } else { + if (isStop) { + viewBind.lottieView.cancelAnimation(); + viewBind.viewPause.setSelected(false); + myRecorderUtils.stopRecording(); + Intent intent = new Intent(AcRecording.this, AcSave.class); +// intent.putExtra(AcSave.KEY_Time, elapsedTime); + intent.putExtra(AcSave.KEY_Path, myRecorderUtils.getTempFileName()); + intent.putExtra(AcSave.KEY_import, 1); + startActivity(intent); + finish(); + } else { + Log.d("================","--"+myRecorderUtils.isRecording()); + if (myRecorderUtils.isRecording()) { + viewBind.viewPause.setSelected(false); + myRecorderUtils.pauseRecording(); + viewBind.lottieView.pauseAnimation(); + } else { + viewBind.viewPause.setSelected(true); + myRecorderUtils.resumeRecording(); + viewBind.lottieView.resumeAnimation(); + } + } + + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + myRecorderUtils.stopRecording(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/custom/AcSave.java b/app/src/main/java/com/fun/wave/pranksounds/custom/AcSave.java new file mode 100644 index 0000000..1b16a21 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/custom/AcSave.java @@ -0,0 +1,215 @@ +package com.fun.wave.pranksounds.custom; + +import android.annotation.SuppressLint; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.media.AudioAttributes; +import android.media.MediaPlayer; +import android.net.Uri; +import android.os.Handler; +import android.os.SystemClock; +import android.text.TextUtils; +import android.util.Log; +import android.widget.Toast; + +import com.fun.wave.pranksounds.base.BaseActivity; +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.pranksounds.R; +import com.fun.pranksounds.databinding.AcSaveBinding; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class AcSave extends BaseActivity { + + private String path; + + private MediaPlayer mediaPlayer; + private Handler handler = new Handler(); + private Runnable timeUpdater; + private long startTime; + private long elapsedTime; + + + + public static String KEY_Path = "KEY_path"; + public static String KEY_import = "flag"; + + + + + @Override + protected void init() { + viewBind.audioTime.setText(R.string.time_init); + initData(); + initEvent(); + } + + @Override + protected AcSaveBinding initViewBinding() { + return AcSaveBinding.inflate(getLayoutInflater()); + } + + private void togglePrank() throws IOException { + if (viewBind.imPlayBtn.isSelected()) { + initMediaPlayer(); + } else { + stopPrank(); + } + } + + private void stopPrank() { + handler.removeCallbacks(timeUpdater); + if (mediaPlayer != null) { + mediaPlayer.release(); + mediaPlayer = null; + } + } + + private void initMediaPlayer() { + if (mediaPlayer == null) { + mediaPlayer = new MediaPlayer(); + mediaPlayer.setAudioAttributes( + new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .setUsage(AudioAttributes.USAGE_MEDIA) + .build()); + try { + mediaPlayer.setDataSource(path); + } catch (Exception ex) { + + } + mediaPlayer.setOnPreparedListener(mp -> { + mediaPlayer.start(); + startTimer(); + }); + mediaPlayer.setOnCompletionListener(mp -> { + viewBind.imPlayBtn.setSelected(false); + handler.removeCallbacks(timeUpdater); + }); + mediaPlayer.prepareAsync(); + } else { + mediaPlayer.start(); + startTimer(); + } + + } + + + private void startTimer() { + if (timeUpdater == null) { + timeUpdater = new Runnable() { + @SuppressLint("DefaultLocale") + @Override + public void run() { + if (mediaPlayer != null && mediaPlayer.isPlaying()) { + long currentTime = SystemClock.elapsedRealtime(); + elapsedTime = currentTime - startTime; + int milliseconds = (int) (elapsedTime % 1000) / 10; + int seconds = (int) (elapsedTime / 1000) % 60; + int minutes = (int) (elapsedTime / (1000 * 60)) % 60; + viewBind.audioTime.setText(String.format("%02d : %02d : %02d", minutes, seconds, milliseconds)); + handler.postDelayed(this, 10); + } + + } + }; + } + startTime = SystemClock.elapsedRealtime(); + handler.post(timeUpdater); + } + + private void initEvent() { + viewBind.back.setOnClickListener(v -> finish()); + viewBind.imPlayBtn.setOnClickListener(v -> { + viewBind.imPlayBtn.setSelected(!viewBind.imPlayBtn.isSelected()); + try { + togglePrank(); + } catch (IOException e) { + Log.e("SaveActivity", "Error toggling prank", e); + } + }); + viewBind.save.setOnClickListener(v -> { + String name = viewBind.saveEdit.getText().toString().trim(); + boolean b = ObjectBoxMan.checkName(name); + if (!TextUtils.isEmpty(name)) { + if(!b){ + viewBind.saveEdit.setText(""); + Toast.makeText(AcSave.this, getString(R.string.name_hint), Toast.LENGTH_SHORT).show(); + return; + } + saveData(name); + Toast.makeText(AcSave.this, getString(R.string.save_tips), Toast.LENGTH_SHORT).show(); + finish(); + } else { + Toast.makeText(AcSave.this, getString(R.string.save_tip), Toast.LENGTH_SHORT).show(); + } + }); + } + + private void saveData(String name) { + File cacheDir = getCacheDir(); + File sourceFile = new File(path); + File destinationFile = new File(cacheDir, name + ".mp3"); + + if (sourceFile.renameTo(destinationFile)) { + PrankBean mydata = new PrankBean(); + mydata.setLike(false); + mydata.setName(name); + mydata.setCustomization(true); + mydata.setAudioUrl(destinationFile.getAbsolutePath()); + ObjectBoxMan.getBoxBean().put(mydata); + } else { + Log.e("SaveActivity", "Failed to rename file"); + } + } + + + private String readFileFromUri(Context context, Uri uri) { + ContentResolver contentResolver = context.getContentResolver(); + try (InputStream inputStream = contentResolver.openInputStream(uri); + FileOutputStream outputStream = new FileOutputStream(new File(getCacheDir(), "temp_audio_file.mp3"))) { + + if (inputStream == null) { + Log.e("SaveActivity", "Input stream is null"); + return null; + } + byte[] buffer = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + return new File(getCacheDir(), "temp_audio_file.mp3").getAbsolutePath(); + } catch (IOException e) { + Log.e("SaveActivity", "Error reading file from URI", e); + return null; + } + } + + private void initData() { + Intent intent = getIntent(); + + int importFlag = intent.getIntExtra(KEY_import, 0); + + if (importFlag == 1) { + path = intent.getStringExtra(KEY_Path); + Log.e("zzj", "save path is" + path); + } else { + String uriPath = intent.getStringExtra(KEY_Path); + Uri uri = Uri.parse(uriPath); + path = readFileFromUri(this, uri); + } + } + + + + @Override + protected void onDestroy() { + super.onDestroy(); + stopPrank(); + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/custom/FragmentCustom.java b/app/src/main/java/com/fun/wave/pranksounds/custom/FragmentCustom.java new file mode 100644 index 0000000..e1f3c11 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/custom/FragmentCustom.java @@ -0,0 +1,76 @@ +package com.fun.wave.pranksounds.custom; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.pranksounds.databinding.FragmentCustomBinding; +import com.fun.wave.pranksounds.like.AdapterLike; +import com.fun.wave.pranksounds.utils.MyItemSpace; + +import java.util.List; + + +public class FragmentCustom extends Fragment { + + private FragmentCustomBinding binding; + private AdapterLike adapter; + public FragmentCustom() { + + } + + public static FragmentCustom newInstance() { + FragmentCustom fragment = new FragmentCustom(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentCustomBinding.inflate(getLayoutInflater()); + MyItemSpace itemHelper = new MyItemSpace(7, 7, 7); + binding.recyclerImport.addItemDecoration(itemHelper); + binding.recyclerImport.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + List all = ObjectBoxMan.getAllCustomization(); + adapter = new AdapterLike(requireContext(), all, true); + updateEmpty(all); + binding.recyclerImport.setAdapter(adapter); + return binding.getRoot(); + } + + + public void refresh() { + if (adapter != null) { + List all = ObjectBoxMan.getAllCustomization(); + adapter.updateData(all); + updateEmpty(all); + } + + } + + + @Override + public void onResume() { + super.onResume(); + refresh(); + } + private void updateEmpty(List data) { + if (data.isEmpty()) { + binding.layoutEmpty.setVisibility(View.VISIBLE); + } else { + binding.layoutEmpty.setVisibility(View.GONE); + } + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/dataListener/ObjectBoxMan.java b/app/src/main/java/com/fun/wave/pranksounds/dataListener/ObjectBoxMan.java new file mode 100644 index 0000000..c58bf34 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/dataListener/ObjectBoxMan.java @@ -0,0 +1,83 @@ +package com.fun.wave.pranksounds.dataListener; + +import android.content.Context; + +import java.util.Collections; +import java.util.List; + +import io.objectbox.Box; +import io.objectbox.BoxStore; +import io.objectbox.query.Query; + +public class ObjectBoxMan { + + private static BoxStore store; + + public static void init(Context context) { + store = MyObjectBox.builder() + .androidContext(context) + .build(); + } + + public static Box getBoxBean() { + return store.boxFor(PrankBean.class); + } + + public static List getAllLike() { + Query query = ObjectBoxMan.getBoxBean().query(PrankBean_.isLike.equal(true)).build(); + List data = query.find(); + query.close(); + return data; + } + + public static List getAllCustomization() { + Query query = ObjectBoxMan.getBoxBean().query(PrankBean_.isCustomization.equal(true)).build(); + List data = query.find(); + query.close(); + return data; + } + + + public static List getMore() { + Query query = ObjectBoxMan.getBoxBean().query(PrankBean_.isCustomization.equal(false)).build(); + List data = query.find(); + query.close(); + Collections.shuffle(data); + return data.subList(0, 11); + } + public static boolean checkLike(PrankBean PrankBean) { + Query query = ObjectBoxMan.getBoxBean().query(PrankBean_.name.equal(PrankBean.getName()).and(PrankBean_.isLike.equal(true))).build(); + PrankBean data = query.findFirst(); + query.close(); + if (data != null) { + return data.isLike(); + } else { + return false; + } + + } + + public static boolean checkName(String name) { + Query query = ObjectBoxMan.getBoxBean().query(PrankBean_.name.equal(name)).build(); + PrankBean data = query.findFirst(); + query.close(); + if (data != null) { + return false; + } else { + return true; + } + + } + + public static void addLike(PrankBean PrankBean) { + PrankBean.setLike(true); + ObjectBoxMan.getBoxBean().put(PrankBean); + } + + public static void removeLike(PrankBean PrankBean) { + PrankBean.setLike(false); + ObjectBoxMan.getBoxBean().put(PrankBean); + + } + +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickItemListener.java b/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickItemListener.java new file mode 100644 index 0000000..d821e30 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickItemListener.java @@ -0,0 +1,6 @@ +package com.fun.wave.pranksounds.dataListener; + +public interface OnClickItemListener { + + void onClickSoundsListener(PrankBean data); +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickTimerListener.java b/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickTimerListener.java new file mode 100644 index 0000000..5834018 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/dataListener/OnClickTimerListener.java @@ -0,0 +1,6 @@ +package com.fun.wave.pranksounds.dataListener; + +public interface OnClickTimerListener { + + void onClickTimerListener(long time); +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/dataListener/PrankBean.java b/app/src/main/java/com/fun/wave/pranksounds/dataListener/PrankBean.java new file mode 100644 index 0000000..106da78 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/dataListener/PrankBean.java @@ -0,0 +1,78 @@ +package com.fun.wave.pranksounds.dataListener; + + +import java.io.Serializable; + +import io.objectbox.annotation.Entity; +import io.objectbox.annotation.Id; + +@Entity +public class PrankBean implements Serializable { + @Id + private long id; + + private String name; + private String covert; + + private String audioUrl; + private boolean isLike; + + private boolean isCustomization; + private int colorIndex; + + public int getColorIndex() { + return colorIndex; + } + + public void setColorIndex(int colorIndex) { + this.colorIndex = colorIndex; + } + + public boolean isCustomization() { + return isCustomization; + } + + public void setCustomization(boolean customization) { + isCustomization = customization; + } + + public boolean isLike() { + return isLike; + } + + public void setLike(boolean like) { + isLike = like; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCovert() { + return covert; + } + + public void setCovert(String covert) { + this.covert = covert; + } + + public String getAudioUrl() { + return audioUrl; + } + + public void setAudioUrl(String audioUrl) { + this.audioUrl = audioUrl; + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/dataListener/SoundsWrapper.java b/app/src/main/java/com/fun/wave/pranksounds/dataListener/SoundsWrapper.java new file mode 100644 index 0000000..9a90776 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/dataListener/SoundsWrapper.java @@ -0,0 +1,50 @@ +package com.fun.wave.pranksounds.dataListener; + +import java.io.Serializable; +import java.util.List; + +import io.objectbox.annotation.Entity; +import io.objectbox.annotation.Id; + + +@Entity +public class SoundsWrapper implements Serializable { + @Id + private long id; + private String name; + private String covert; + + private List prankBeanList; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getCovert() { + return covert; + } + + public void setCovert(String covert) { + this.covert = covert; + } + + public List getPrankBeanList() { + return prankBeanList; + } + + public void setInfoList(List prankBeanList) { + this.prankBeanList = prankBeanList; + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/like/AdapterLike.java b/app/src/main/java/com/fun/wave/pranksounds/like/AdapterLike.java new file mode 100644 index 0000000..ee06d54 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/like/AdapterLike.java @@ -0,0 +1,126 @@ +package com.fun.wave.pranksounds.like; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.wave.pranksounds.activity.AcPlayPranks; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.fun.pranksounds.R; +import com.fun.pranksounds.databinding.LikeAdapterBinding; + +import java.io.File; +import java.util.List; + + +public class AdapterLike extends RecyclerView.Adapter { + + private List mValues; + private Context mCOn; + private boolean showDelete = false; + + + + public AdapterLike(Context context, List items, boolean showDelete) { + mValues = items; + mCOn = context; + this.showDelete = showDelete; + + } + + public void updateData(List items) { + mValues = items; + notifyDataSetChanged(); + } + + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + return new ViewHolder(LikeAdapterBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + + + + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + PrankBean PrankBean = mValues.get(position); + holder.vb.ttvName.setText(PrankBean.getName()); + int colorIndex = PrankBean.getColorIndex(); + holder.vb.layout.setBackground(ContextCompat.getDrawable(mCOn, MyUtils.childBgs[colorIndex])); + if (PrankBean.isCustomization()) { + Glide.with(mCOn).load(R.drawable.image_sounds).into(holder.vb.image); + } else { + Glide.with(mCOn).load(PrankBean.getCovert()).into(holder.vb.image); + } + + if (showDelete) { + holder.vb.view.setVisibility(View.GONE); + if(mValues.size()%2==0){ + if(position == mValues.size()-1||position == mValues.size()-2){ + holder.vb.view.setVisibility(View.VISIBLE); + } + }else { + if (position == mValues.size() - 1) { + holder.vb.view.setVisibility(View.VISIBLE); + } + } + holder.vb.imDelete.setVisibility(View.VISIBLE); + holder.vb.imDelete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + ObjectBoxMan.getBoxBean().remove(PrankBean); + String audioUrl = PrankBean.getAudioUrl(); + int pos = holder.getBindingAdapterPosition(); + mValues.remove(pos); + notifyItemRemoved(pos); + File file = new File(audioUrl); + if (file.exists()) { + file.delete(); + } + + } + }); + } else { + holder.vb.imDelete.setVisibility(View.GONE); + } + + + holder.vb.layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mCOn, AcPlayPranks.class); + intent.putExtra(MyUtils.KEY_PLAY_DATA, PrankBean); + intent.putExtra(MyUtils.KEY_LIST_COLOR_POS, colorIndex); + mCOn.startActivity(intent); + } + }); + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + + public LikeAdapterBinding vb; + + public ViewHolder(LikeAdapterBinding binding) { + super(binding.getRoot()); + vb = binding; + } + + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/like/FragmentLike.java b/app/src/main/java/com/fun/wave/pranksounds/like/FragmentLike.java new file mode 100644 index 0000000..99ea6cd --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/like/FragmentLike.java @@ -0,0 +1,86 @@ +package com.fun.wave.pranksounds.like; + +import android.os.Bundle; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.fun.wave.pranksounds.utils.MyItemSpace; +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.pranksounds.databinding.FragmentLikeBinding; + +import java.util.List; + + +public class FragmentLike extends Fragment { + + private AdapterLike adapter; + + public FragmentLike() { + } + + @SuppressWarnings("unused") + public static FragmentLike newInstance() { + FragmentLike fragment = new FragmentLike(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + private FragmentLikeBinding collectBinding; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + collectBinding = FragmentLikeBinding.inflate(getLayoutInflater()); + RecyclerView recyclerView = collectBinding.list; + recyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + List all = ObjectBoxMan.getAllLike(); + if(all.size()==0){ + collectBinding.layoutEmpty.setVisibility(View.VISIBLE); + collectBinding.list.setVisibility(View.GONE); + }else { + collectBinding.layoutEmpty.setVisibility(View.GONE); + collectBinding.list.setVisibility(View.VISIBLE); + } + adapter = new AdapterLike(requireContext(), all,false); + MyItemSpace itemHelper = new MyItemSpace(7, 7, 7); + recyclerView.addItemDecoration(itemHelper); + recyclerView.setAdapter(adapter); + + return collectBinding.getRoot(); + } + + + @Override + public void onResume() { + super.onResume(); + Log.d("------------------","-------like--onResume"); + refresh(); + } + + public void refresh() { + if (adapter != null) { + List all = ObjectBoxMan.getAllLike(); + if(all.size()==0){ + collectBinding.layoutEmpty.setVisibility(View.VISIBLE); + collectBinding.list.setVisibility(View.GONE); + }else { + collectBinding.layoutEmpty.setVisibility(View.GONE); + collectBinding.list.setVisibility(View.VISIBLE); + } + adapter.updateData(all); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/main/AdapterMain.java b/app/src/main/java/com/fun/wave/pranksounds/main/AdapterMain.java new file mode 100644 index 0000000..07e7636 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/main/AdapterMain.java @@ -0,0 +1,81 @@ +package com.fun.wave.pranksounds.main; + +import android.content.Context; +import android.content.Intent; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.RecyclerView; + +import com.bumptech.glide.Glide; +import com.fun.wave.pranksounds.activity.AcCategoryList; +import com.fun.wave.pranksounds.dataListener.SoundsWrapper; +import com.fun.wave.pranksounds.utils.MyUtils; +import com.fun.pranksounds.databinding.MainAdapterBinding; + +import java.util.List; + + +public class AdapterMain extends RecyclerView.Adapter { + + private final List mValues; + + private Context mCon; + + + public AdapterMain(Context context, List items) { + mValues = items; + this.mCon = context; + } + + @Override + public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + + return new ViewHolder(MainAdapterBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); + + } + + @Override + public void onBindViewHolder(final ViewHolder holder, int position) { + int absoluteAdapterPosition = holder.getAbsoluteAdapterPosition(); + int i = absoluteAdapterPosition % 6; + holder.vb.relative.setBackground(ContextCompat.getDrawable(mCon, MyUtils.bgs[i])); + SoundsWrapper soundsWrapper = mValues.get(absoluteAdapterPosition); + String covert = soundsWrapper.getCovert(); + Glide.with(mCon).load(covert).into(holder.vb.image); + holder.vb.name.setText(soundsWrapper.getName()); + holder.vb.relative.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(mCon, AcCategoryList.class); + intent.putExtra(MyUtils.KEY_LIST_DATA, soundsWrapper); + intent.putExtra(MyUtils.KEY_LIST_COLOR_POS, i); + mCon.startActivity(intent); + } + }); + if(absoluteAdapterPosition == mValues.size()-1||absoluteAdapterPosition == mValues.size()-2){ + holder.vb.view.setVisibility(View.VISIBLE); + }else { + holder.vb.view.setVisibility(View.GONE); + } + + } + + @Override + public int getItemCount() { + return mValues.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + + private MainAdapterBinding vb; + + public ViewHolder(MainAdapterBinding binding) { + super(binding.getRoot()); + vb = binding; + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/main/FragmentMain.java b/app/src/main/java/com/fun/wave/pranksounds/main/FragmentMain.java new file mode 100644 index 0000000..c1ae132 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/main/FragmentMain.java @@ -0,0 +1,62 @@ +package com.fun.wave.pranksounds.main; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; + +import com.fun.wave.pranksounds.utils.App; +import com.fun.wave.pranksounds.utils.MyItemSpace; +import com.fun.pranksounds.databinding.FragmentMainBinding; + +import java.util.Collections; + + +public class FragmentMain extends Fragment { + + + private FragmentMainBinding binding; + + + + + public FragmentMain() { + } + + @SuppressWarnings("unused") + public static FragmentMain newInstance() { + FragmentMain fragment = new FragmentMain(); + Bundle args = new Bundle(); + fragment.setArguments(args); + return fragment; + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + binding = FragmentMainBinding.inflate(inflater); + + MyItemSpace itemHelper = new MyItemSpace(15, 15, 7); + binding.recyclerView.addItemDecoration(itemHelper); + binding.recyclerView.setLayoutManager(new GridLayoutManager(requireContext(), 2)); + Collections.shuffle(App.bean); + binding.recyclerView.setAdapter(new AdapterMain(requireContext(), App.bean )); + + + + return binding.getRoot(); + } + + + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/App.java b/app/src/main/java/com/fun/wave/pranksounds/utils/App.java new file mode 100644 index 0000000..fb3f570 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/App.java @@ -0,0 +1,54 @@ +package com.fun.wave.pranksounds.utils; + +import android.app.Application; +import android.content.res.AssetManager; +import android.graphics.Typeface; + +import com.fun.wave.pranksounds.dataListener.SoundsWrapper; +import com.fun.wave.pranksounds.dataListener.PrankBean; + +import com.fun.wave.pranksounds.dataListener.ObjectBoxMan; + +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class App extends Application { + + public static App app; + public static Typeface defaultFont; + public static List bean; + private List prankBeanList; + + @Override + public void onCreate() { + super.onCreate(); + app = this; + AssetManager assets = getAssets(); + defaultFont = Typeface.createFromAsset(assets, "pranks.ttf"); + ObjectBoxMan.init(this); + if (bean != null) + return; + try { + prankBeanList = new ArrayList<>(); + InputStream open = getAssets().open("prank.json"); + String string = MyUtils.getString(open); + if (!string.isEmpty()) { + bean = MyUtils.getBean(string); + for (SoundsWrapper category:bean){ + for (PrankBean prankBean1 : category.getPrankBeanList()) { + prankBean1.setLike(false); + prankBeanList.add(prankBean1); + + } + } + } + Collections.shuffle(prankBeanList); + ObjectBoxMan.getBoxBean().put(prankBeanList); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/CustomRippleView.kt b/app/src/main/java/com/fun/wave/pranksounds/utils/CustomRippleView.kt new file mode 100644 index 0000000..9c021e3 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/CustomRippleView.kt @@ -0,0 +1,122 @@ +package com.`fun`.wave.pranksounds.utils + +import android.animation.ValueAnimator +import android.content.Context +import android.graphics.Canvas +import android.graphics.Color +import android.graphics.Paint +import android.util.AttributeSet +import android.view.View +import androidx.core.animation.doOnEnd + +class CustomRippleView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null +) : View(context, attrs) { + + private val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply { + color = Color.parseColor("#FFFFFF") + style = Paint.Style.FILL + } + + private val ripples = mutableListOf() + private val maxRadius = 200f + private val rippleDuration = 1000L + private val rippleDelay = 300L + + private var curisRunning = false + private var isPaused = false + + private val rippleRunnable = object : Runnable { + override fun run() { + if (!curisRunning || isPaused) return + val ripple = Ripple() + ripples.add(ripple) + ripple.start() + postDelayed(this, rippleDelay) + } + } + + fun startRipple() { + if (curisRunning) return + curisRunning = true + isPaused = false + post(rippleRunnable) + } + + fun stopRipple() { + curisRunning = false + isPaused = false + removeCallbacks(rippleRunnable) + ripples.forEach { it.cancel() } + ripples.clear() + invalidate() + } + + fun pauseRipple() { + isPaused = true + ripples.forEach { it.pause() } + removeCallbacks(rippleRunnable) + } + + fun resumeRipple() { + if (!curisRunning || !isPaused) return + isPaused = false + ripples.forEach { it.resume() } + post(rippleRunnable) + } + + override fun onDraw(canvas: Canvas) { + super.onDraw(canvas) + val centerX = width / 2f + val centerY = height / 2f + val iterator = ripples.iterator() + while (iterator.hasNext()) { + val ripple = iterator.next() + if (!ripple.isRunning) { + iterator.remove() + continue + } + paint.alpha = (255 * (1 - ripple.progress)).toInt() + canvas.drawCircle(centerX, centerY, maxRadius * ripple.progress, paint) + } + if (ripples.isNotEmpty()) invalidate() + } + + inner class Ripple { + var progress = 0f + var isRunning = true + private var animator: ValueAnimator? = null + + fun start() { + animator = ValueAnimator.ofFloat(0f, 1f).apply { + duration = rippleDuration + addUpdateListener { + progress = it.animatedValue as Float + invalidate() + } + doOnEnd { + this@Ripple.isRunning = false + } + start() + } + } + + fun pause() { + if (animator?.isRunning == true) { + animator?.pause() + } + } + + fun resume() { + if (animator?.isPaused == true) { + animator?.resume() + } + } + + fun cancel() { + animator?.cancel() + isRunning = false + } + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/MyItemSpace.java b/app/src/main/java/com/fun/wave/pranksounds/utils/MyItemSpace.java new file mode 100644 index 0000000..871e755 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/MyItemSpace.java @@ -0,0 +1,74 @@ +package com.fun.wave.pranksounds.utils; + +import android.graphics.Rect; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; +import androidx.recyclerview.widget.StaggeredGridLayoutManager; + + +public class MyItemSpace extends RecyclerView.ItemDecoration { + + private int v, h, ex; + + public MyItemSpace(int v, int h, int ex) { + this.v = Math.round(dpToPx(v)); + this.h = Math.round(dpToPx(h)); + this.ex = Math.round(dpToPx(ex)); + } + + @Override + public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) { + super.getItemOffsets(outRect, view, parent, state); + int spanCount = 1; + int spanSize = 1; + int spanIndex = 0; + + int childAdapterPosition = parent.getChildAdapterPosition(view); + RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); + if (layoutManager instanceof StaggeredGridLayoutManager) { + StaggeredGridLayoutManager staggeredGridLayoutManager = (StaggeredGridLayoutManager) layoutManager; + StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = staggeredGridLayoutManager.getSpanCount(); + if (layoutParams.isFullSpan()) { + spanSize = spanCount; + } + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof GridLayoutManager) { + GridLayoutManager gridLayoutManager = (GridLayoutManager) layoutManager; + GridLayoutManager.LayoutParams layoutParams = (GridLayoutManager.LayoutParams) view.getLayoutParams(); + spanCount = gridLayoutManager.getSpanCount(); + spanSize = gridLayoutManager.getSpanSizeLookup().getSpanSize(childAdapterPosition); + spanIndex = layoutParams.getSpanIndex(); + } else if (layoutManager instanceof LinearLayoutManager) { + outRect.left = v; + outRect.right = v; + outRect.bottom = h; + } + + if (spanSize == spanCount) { + outRect.left = v + ex; + outRect.right = v + ex; + outRect.bottom = h; + + } else { + int itemAllSpacing = (v * (spanCount + 1) + ex * 2) / spanCount; + int left = v * (spanIndex + 1) - itemAllSpacing * spanIndex + ex; + int right = itemAllSpacing - left; + outRect.left = left; + outRect.right = right; + outRect.bottom = h; + + } + + } + + + public static float dpToPx(float dpValue) { + float density = App.app.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/MyRecorderUtils.java b/app/src/main/java/com/fun/wave/pranksounds/utils/MyRecorderUtils.java new file mode 100644 index 0000000..2ccfecb --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/MyRecorderUtils.java @@ -0,0 +1,122 @@ +package com.fun.wave.pranksounds.utils; + +import android.content.Context; +import android.media.MediaRecorder; +import android.os.Handler; +import android.util.Log; + +import java.io.File; +import java.io.IOException; + + +public class MyRecorderUtils { + private MediaRecorder mediaRecorder; + private String tempFileName; + private boolean isRecording = false; + private boolean isPaused = false; + + private long startTime = 0L; + private long pauseTime = 0L; + private long totalPauseTime = 0L; + + + private Runnable updateRunnable; + private Handler mHandler; + public MyRecorderUtils(Context context, Handler handler,OnUpdateRecordingTime listener) { + mHandler = handler; + File dir = context.getCacheDir(); + File file = new File(dir, "temp_audio.mp3"); + tempFileName = file.getAbsolutePath(); + updateRunnable = new Runnable() { + @Override + public void run() { + if (!isRecording || isPaused) return; + + long currentTime = System.currentTimeMillis(); + long recordTime = currentTime - startTime - totalPauseTime; + listener.onUpdateTime(recordTime); + handler.postDelayed(updateRunnable, 1000); + } + }; + } + public void startTimer() { + startTime = System.currentTimeMillis(); + totalPauseTime = 0L; + isRecording = true; + isPaused = false; + mHandler.post(updateRunnable); + } + public void pauseTimer() { + pauseTime = System.currentTimeMillis(); + isPaused = true; + isRecording = false; + } + public void resumeTimer() { + totalPauseTime += System.currentTimeMillis() - pauseTime; + isPaused = false; + isRecording = true; + mHandler.post(updateRunnable); + } + public void stopTimer() { + isRecording = false; + isPaused = false; + mHandler.removeCallbacks(updateRunnable); + } + + + public boolean isRecording() { + return isRecording; + } + + public void startRecording() { + if (isRecording) return; + mediaRecorder = new MediaRecorder(); + mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); + mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); + mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); + mediaRecorder.setOutputFile(tempFileName); + Log.d("================","=========startRecording"); + try { + mediaRecorder.prepare(); + mediaRecorder.start(); + startTimer(); + } catch (IOException e) { + e.printStackTrace(); + } + } + public void resumeRecording() { + if (!isRecording && isPaused) { + mediaRecorder.resume(); + Log.d("================","=========resume"); + resumeTimer(); + } + + } + public void pauseRecording() { + if (isRecording && !isPaused) { + Log.d("================","=========pauseRecording"); + mediaRecorder.pause(); + pauseTimer(); + + } + + } + + public void stopRecording() { + if (!isRecording) return; + try { + Log.d("================","=========stopRecording"); + mediaRecorder.stop(); + } catch (IllegalStateException e) { + e.printStackTrace(); + } finally { + stopTimer(); + mediaRecorder.release(); + mediaRecorder = null; + } + } + + public String getTempFileName() { + return tempFileName; + } +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/MyTv.java b/app/src/main/java/com/fun/wave/pranksounds/utils/MyTv.java new file mode 100644 index 0000000..95957a4 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/MyTv.java @@ -0,0 +1,35 @@ +package com.fun.wave.pranksounds.utils; + + + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; + +import androidx.annotation.Nullable; + +import com.fun.pranksounds.R; + + +public class MyTv extends androidx.appcompat.widget.AppCompatTextView { + + + public MyTv(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + initAttrs(context,attrs); + } + + + private void initAttrs(Context context, AttributeSet attrs){ + TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyTV); + boolean aBoolean = typedArray.getBoolean(R.styleable.MyTV_apply_font,false); + if(aBoolean){ + MyUtils.initFont(this); + } + + typedArray.recycle(); + } + + + +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/MyUtils.java b/app/src/main/java/com/fun/wave/pranksounds/utils/MyUtils.java new file mode 100644 index 0000000..5674e0f --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/MyUtils.java @@ -0,0 +1,172 @@ +package com.fun.wave.pranksounds.utils; + +import android.Manifest; +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.media.AudioManager; +import android.media.MediaMetadataRetriever; +import android.net.Uri; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.SeekBar; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import com.fun.wave.pranksounds.dataListener.PrankBean; +import com.fun.wave.pranksounds.dataListener.SoundsWrapper; +import com.fun.pranksounds.R; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.List; + +public class MyUtils { + + public static int[] bgs = new int[]{R.drawable.main_item_bg,R.drawable.main_item_bg,R.drawable.main_item_bg,R.drawable.main_item_bg, + R.drawable.main_item_bg,R.drawable.main_item_bg}; + + public static int[] childBgs = new int[]{R.drawable.main_item_bg,R.drawable.main_item_bg,R.drawable.main_item_bg,R.drawable.main_item_bg, + R.drawable.main_item_bg,R.drawable.main_item_bg}; + + + public static final String KEY_LIST_COLOR_POS = "list_page_color_pos"; + public static final String KEY_LIST_DATA = "list_page_data"; + public static final String KEY_PLAY_DATA = "play_page_data"; + + + public static final int REQUEST_READ_STORAGE_PERMISSION = 5; + + + public static String[] permission_read_audio = {Manifest.permission.READ_MEDIA_AUDIO}; + + public static String permission_record_audio = Manifest.permission.RECORD_AUDIO; + public static String[] permission_store = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}; + + + public static void initFont(TextView tv) { + tv.setTypeface(App.defaultFont); + } + public static void setStatusBarTextColor(Activity activity, boolean dark) { + Window window = activity.getWindow(); + View decor = window.getDecorView(); + if (dark) { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } else { + decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); + } + window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); + } + + public static String getString(InputStream input) { + try { + char[] charArray = new char[input.available()]; + int count = 0; + StringWriter stringWriter = new StringWriter(); + InputStreamReader inputStreamReader = new InputStreamReader(input); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader); + while ((count = bufferedReader.read(charArray)) != -1) { + stringWriter.write(charArray, 0, count); + } + return stringWriter.toString(); + } catch (IOException exception) { + return ""; + } + + } + + public static void setVolume(Context context, SeekBar seekBar) { + AudioManager audioManager = (AudioManager)context.getSystemService(AppCompatActivity.AUDIO_SERVICE); + int maxVolume = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); + seekBar.setMax(maxVolume); + seekBar.setProgress(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC)); + seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { + @Override + public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { + audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); + } + + @Override + public void onStartTrackingTouch(SeekBar seekBar) { + + } + + @Override + public void onStopTrackingTouch(SeekBar seekBar) { + + } + }); + } + public static List getBean(String str) { + + try { + List data = new ArrayList(); + JSONArray jsonArray = new JSONArray(str); + + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject it = jsonArray.getJSONObject(i); + JSONArray listArray = it.getJSONArray("list"); + List list = new ArrayList<>(); + for (int k = 0; k < listArray.length(); k++) { + JSONObject listBean = listArray.getJSONObject(k); + PrankBean PrankBean = new PrankBean(); + PrankBean.setAudioUrl(listBean.getString("mp3Url")); + PrankBean.setCovert(listBean.getString("preUrl")); + PrankBean.setName(listBean.getString("title")); + list.add(PrankBean); + } + + SoundsWrapper newBean = new SoundsWrapper(); + newBean.setCovert(it.getString("categoryUrl")); + newBean.setInfoList(list); + newBean.setName(it.getString("categoryName")); + data.add(newBean); + + } + + return data; + } catch (JSONException jo) { + return null; + } + } + + + public static long getAudioDuration(Context context, Uri uri) { + MediaMetadataRetriever retriever = new MediaMetadataRetriever(); + long duration = 0; + + try { + ContentResolver contentResolver = context.getContentResolver(); + retriever.setDataSource(context, uri); + String time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION); + duration = Long.parseLong(time); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + retriever.release(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + return duration; + } + public static float dpToPx(float dpValue) { + float density = App.app.getResources().getDisplayMetrics().density; + return density * dpValue + 0.5f; + } + +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/OnUpdateRecordingTime.java b/app/src/main/java/com/fun/wave/pranksounds/utils/OnUpdateRecordingTime.java new file mode 100644 index 0000000..02b0996 --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/OnUpdateRecordingTime.java @@ -0,0 +1,6 @@ +package com.fun.wave.pranksounds.utils; + +public interface OnUpdateRecordingTime { + + void onUpdateTime(long time); +} diff --git a/app/src/main/java/com/fun/wave/pranksounds/utils/PopupClock.java b/app/src/main/java/com/fun/wave/pranksounds/utils/PopupClock.java new file mode 100644 index 0000000..3df5c3d --- /dev/null +++ b/app/src/main/java/com/fun/wave/pranksounds/utils/PopupClock.java @@ -0,0 +1,103 @@ +package com.fun.wave.pranksounds.utils; + +import android.app.Activity; +import android.graphics.drawable.BitmapDrawable; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.widget.PopupWindow; + +import com.fun.wave.pranksounds.dataListener.OnClickTimerListener; +import com.fun.pranksounds.databinding.PopupClockBinding; + +public class PopupClock implements View.OnClickListener { + private PopupClockBinding binding; + private PopupWindow popupWindow; + private OnClickTimerListener mListener; + + public PopupClock(Activity context, OnClickTimerListener listener) { + mListener = listener; + binding = PopupClockBinding.inflate(context.getLayoutInflater()); + popupWindow = new PopupWindow(binding.getRoot(), ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + popupWindow.setBackgroundDrawable(new BitmapDrawable()); + popupWindow.setOutsideTouchable(true); + popupWindow.setFocusable(true); + binding.tvOff.setSelected(true); + binding.tvOff.setOnClickListener(this); + binding.tv15s.setOnClickListener(this); + binding.tv30s.setOnClickListener(this); + binding.tv1m.setOnClickListener(this); + binding.tv5m.setOnClickListener(this); + } + + public void showTop(View view) { + + int[] location = new int[2]; + view.getLocationOnScreen(location); + + int x = location[0]; + int y = location[1]; + + + int popupHeight = popupWindow.getHeight(); + int height = view.getHeight(); + int width = view.getWidth(); + Log.d("-------------", "--------x=" + x + "---y=" + y + "----popupHeight=" + popupHeight); +// popupWindow.showAtLocation(view, Gravity.NO_GRAVITY, x-30, y - popupHeight+height); + popupWindow.showAsDropDown(view, -50, + 0, + Gravity.NO_GRAVITY); + } + + private void setSelected(MyTv tv) { + int childCount = binding.layoutTime.getChildCount(); + for (int i = 0; i < childCount; i++) { + View child = binding.layoutTime.getChildAt(i); + if (child instanceof MyTv) { + MyTv tvTimer = (MyTv) child; + if (tvTimer.equals(tv)) { + tvTimer.setSelected(true); + } else { + tvTimer.setSelected(false); + } + System.out.println("TextView: " + tvTimer.getText()); + } + } + + } + public void hide() { + popupWindow.dismiss(); + + } + public void setOffSelected() { + setSelected(binding.tvOff); + + } + + @Override + public void onClick(View v) { + if (v instanceof MyTv) { + MyTv v1 = (MyTv) v; + String string = v1.getText().toString(); + switch (string){ + case "off": + mListener.onClickTimerListener(-1); + break; + case "15 sec": + mListener.onClickTimerListener(15*1000L); + break; + case "30 sec": + mListener.onClickTimerListener(30*1000L); + break; + case "1 min": + mListener.onClickTimerListener(60*1000L); + break; + case "5 min": + mListener.onClickTimerListener(5*60*1000L); + break; + } + setSelected(v1); + } + } +} diff --git a/app/src/main/res/color/seletor_color_timer.xml b/app/src/main/res/color/seletor_color_timer.xml new file mode 100644 index 0000000..17fe57f --- /dev/null +++ b/app/src/main/res/color/seletor_color_timer.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/background.png b/app/src/main/res/drawable/background.png new file mode 100644 index 0000000..806e31a Binary files /dev/null and b/app/src/main/res/drawable/background.png differ diff --git a/app/src/main/res/drawable/btn_record.xml b/app/src/main/res/drawable/btn_record.xml new file mode 100644 index 0000000..fcbf52e --- /dev/null +++ b/app/src/main/res/drawable/btn_record.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/drawable_back_00.xml b/app/src/main/res/drawable/drawable_back_00.xml new file mode 100644 index 0000000..f53206f --- /dev/null +++ b/app/src/main/res/drawable/drawable_back_00.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/drawable_bg_btn.xml b/app/src/main/res/drawable/drawable_bg_btn.xml new file mode 100644 index 0000000..32f17e5 --- /dev/null +++ b/app/src/main/res/drawable/drawable_bg_btn.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_bg_edittext.xml b/app/src/main/res/drawable/drawable_bg_edittext.xml new file mode 100644 index 0000000..fb9f590 --- /dev/null +++ b/app/src/main/res/drawable/drawable_bg_edittext.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_bg_timer.xml b/app/src/main/res/drawable/drawable_bg_timer.xml new file mode 100644 index 0000000..629af86 --- /dev/null +++ b/app/src/main/res/drawable/drawable_bg_timer.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_delete.xml b/app/src/main/res/drawable/drawable_delete.xml new file mode 100644 index 0000000..d24154a --- /dev/null +++ b/app/src/main/res/drawable/drawable_delete.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/drawable_image_empty.xml b/app/src/main/res/drawable/drawable_image_empty.xml new file mode 100644 index 0000000..b1ba883 --- /dev/null +++ b/app/src/main/res/drawable/drawable_image_empty.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/drawable_layer_sounds.xml b/app/src/main/res/drawable/drawable_layer_sounds.xml new file mode 100644 index 0000000..59e9363 --- /dev/null +++ b/app/src/main/res/drawable/drawable_layer_sounds.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_loop_0.xml b/app/src/main/res/drawable/drawable_loop_0.xml new file mode 100644 index 0000000..7f26215 --- /dev/null +++ b/app/src/main/res/drawable/drawable_loop_0.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/drawable_loop_1.xml b/app/src/main/res/drawable/drawable_loop_1.xml new file mode 100644 index 0000000..f894900 --- /dev/null +++ b/app/src/main/res/drawable/drawable_loop_1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/drawable_looper.xml b/app/src/main/res/drawable/drawable_looper.xml new file mode 100644 index 0000000..86e4f88 --- /dev/null +++ b/app/src/main/res/drawable/drawable_looper.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_pause.xml b/app/src/main/res/drawable/drawable_pause.xml new file mode 100644 index 0000000..803b0f8 --- /dev/null +++ b/app/src/main/res/drawable/drawable_pause.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/app/src/main/res/drawable/drawable_play.xml b/app/src/main/res/drawable/drawable_play.xml new file mode 100644 index 0000000..a2c0ef5 --- /dev/null +++ b/app/src/main/res/drawable/drawable_play.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/drawable_play_like_0.xml b/app/src/main/res/drawable/drawable_play_like_0.xml new file mode 100644 index 0000000..23a8b4d --- /dev/null +++ b/app/src/main/res/drawable/drawable_play_like_0.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/drawable_red_like.xml b/app/src/main/res/drawable/drawable_red_like.xml new file mode 100644 index 0000000..672bb31 --- /dev/null +++ b/app/src/main/res/drawable/drawable_red_like.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/drawable_thumb.xml b/app/src/main/res/drawable/drawable_thumb.xml new file mode 100644 index 0000000..c13cb1b --- /dev/null +++ b/app/src/main/res/drawable/drawable_thumb.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/drawable_timer_1.xml b/app/src/main/res/drawable/drawable_timer_1.xml new file mode 100644 index 0000000..523b444 --- /dev/null +++ b/app/src/main/res/drawable/drawable_timer_1.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/drawable_volume_white.xml b/app/src/main/res/drawable/drawable_volume_white.xml new file mode 100644 index 0000000..b0f7f2b --- /dev/null +++ b/app/src/main/res/drawable/drawable_volume_white.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/drawable_welcome_pb.xml b/app/src/main/res/drawable/drawable_welcome_pb.xml new file mode 100644 index 0000000..5c93dad --- /dev/null +++ b/app/src/main/res/drawable/drawable_welcome_pb.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/icon_import.xml b/app/src/main/res/drawable/icon_import.xml new file mode 100644 index 0000000..1f83c13 --- /dev/null +++ b/app/src/main/res/drawable/icon_import.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/icon_pause.xml b/app/src/main/res/drawable/icon_pause.xml new file mode 100644 index 0000000..0414a00 --- /dev/null +++ b/app/src/main/res/drawable/icon_pause.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_play.xml b/app/src/main/res/drawable/icon_play.xml new file mode 100644 index 0000000..07df22f --- /dev/null +++ b/app/src/main/res/drawable/icon_play.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/icon_record.xml b/app/src/main/res/drawable/icon_record.xml new file mode 100644 index 0000000..761b8bf --- /dev/null +++ b/app/src/main/res/drawable/icon_record.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/drawable/image_sounds.xml b/app/src/main/res/drawable/image_sounds.xml new file mode 100644 index 0000000..cd3967a --- /dev/null +++ b/app/src/main/res/drawable/image_sounds.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/main_item_bg.xml b/app/src/main/res/drawable/main_item_bg.xml new file mode 100644 index 0000000..2683718 --- /dev/null +++ b/app/src/main/res/drawable/main_item_bg.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/selector_home_button.xml b/app/src/main/res/drawable/selector_home_button.xml new file mode 100644 index 0000000..4c778e6 --- /dev/null +++ b/app/src/main/res/drawable/selector_home_button.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_like.xml b/app/src/main/res/drawable/selector_like.xml new file mode 100644 index 0000000..a00c4fb --- /dev/null +++ b/app/src/main/res/drawable/selector_like.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_play.xml b/app/src/main/res/drawable/selector_play.xml new file mode 100644 index 0000000..e883b6f --- /dev/null +++ b/app/src/main/res/drawable/selector_play.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selector_recording_pause.xml b/app/src/main/res/drawable/selector_recording_pause.xml new file mode 100644 index 0000000..74de2ce --- /dev/null +++ b/app/src/main/res/drawable/selector_recording_pause.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/tab_collection.xml b/app/src/main/res/drawable/tab_collection.xml new file mode 100644 index 0000000..208ed10 --- /dev/null +++ b/app/src/main/res/drawable/tab_collection.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/drawable/tab_mine.xml b/app/src/main/res/drawable/tab_mine.xml new file mode 100644 index 0000000..0a4d006 --- /dev/null +++ b/app/src/main/res/drawable/tab_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/tab_prank.xml b/app/src/main/res/drawable/tab_prank.xml new file mode 100644 index 0000000..b0d4b03 --- /dev/null +++ b/app/src/main/res/drawable/tab_prank.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/welcome_icon.png b/app/src/main/res/drawable/welcome_icon.png new file mode 100644 index 0000000..91288e2 Binary files /dev/null and b/app/src/main/res/drawable/welcome_icon.png differ diff --git a/app/src/main/res/layout/ac_category_list.xml b/app/src/main/res/layout/ac_category_list.xml new file mode 100644 index 0000000..aeda1c9 --- /dev/null +++ b/app/src/main/res/layout/ac_category_list.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ac_main.xml b/app/src/main/res/layout/ac_main.xml new file mode 100644 index 0000000..d468059 --- /dev/null +++ b/app/src/main/res/layout/ac_main.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ac_play_pranks.xml b/app/src/main/res/layout/ac_play_pranks.xml new file mode 100644 index 0000000..14f68aa --- /dev/null +++ b/app/src/main/res/layout/ac_play_pranks.xml @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ac_recording.xml b/app/src/main/res/layout/ac_recording.xml new file mode 100644 index 0000000..d0ce0a0 --- /dev/null +++ b/app/src/main/res/layout/ac_recording.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ac_save.xml b/app/src/main/res/layout/ac_save.xml new file mode 100644 index 0000000..45110df --- /dev/null +++ b/app/src/main/res/layout/ac_save.xml @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/ac_splash_ui.xml b/app/src/main/res/layout/ac_splash_ui.xml new file mode 100644 index 0000000..e5fa9c1 --- /dev/null +++ b/app/src/main/res/layout/ac_splash_ui.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/category_list_adapter.xml b/app/src/main/res/layout/category_list_adapter.xml new file mode 100644 index 0000000..d0e5156 --- /dev/null +++ b/app/src/main/res/layout/category_list_adapter.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/fragment_custom.xml b/app/src/main/res/layout/fragment_custom.xml new file mode 100644 index 0000000..5aabdc5 --- /dev/null +++ b/app/src/main/res/layout/fragment_custom.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_like.xml b/app/src/main/res/layout/fragment_like.xml new file mode 100644 index 0000000..3bb5ea4 --- /dev/null +++ b/app/src/main/res/layout/fragment_like.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..1a34a09 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/app/src/main/res/layout/like_adapter.xml b/app/src/main/res/layout/like_adapter.xml new file mode 100644 index 0000000..4c39e00 --- /dev/null +++ b/app/src/main/res/layout/like_adapter.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/main_adapter.xml b/app/src/main/res/layout/main_adapter.xml new file mode 100644 index 0000000..52187dd --- /dev/null +++ b/app/src/main/res/layout/main_adapter.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/popup_clock.xml b/app/src/main/res/layout/popup_clock.xml new file mode 100644 index 0000000..5c229d4 --- /dev/null +++ b/app/src/main/res/layout/popup_clock.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/tab_item_layout.xml b/app/src/main/res/layout/tab_item_layout.xml new file mode 100644 index 0000000..004a2bf --- /dev/null +++ b/app/src/main/res/layout/tab_item_layout.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..4ae7d12 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..4ae7d12 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..6748ca6 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp new file mode 100644 index 0000000..89a9e11 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..89a9e11 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..baab016 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..5193231 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp new file mode 100644 index 0000000..b496190 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..b496190 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..39ff964 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..047e1d0 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..1a09e62 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..1a09e62 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..2ac5832 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..42a8e30 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..0f702ba Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..0f702ba Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..ef4d7de Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..35a6128 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp new file mode 100644 index 0000000..1c34f1f Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..1c34f1f Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..2091c5b Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/raw/sounds_recoding.json b/app/src/main/res/raw/sounds_recoding.json new file mode 100644 index 0000000..563343f --- /dev/null +++ b/app/src/main/res/raw/sounds_recoding.json @@ -0,0 +1 @@ +{"v":"4.8.0","meta":{"g":"LottieFiles AE 3.5.2","a":"","k":"","d":"","tc":""},"fr":30,"ip":30,"op":60,"w":250,"h":80,"nm":"Voice02","ddd":0,"assets":[{"id":"comp_0","layers":[{"ddd":0,"ind":1,"ty":4,"nm":"Shape Layer 8","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[51,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[7,7],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.019607843137,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-137,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Shape Layer 7","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[36,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[3.5,3.5],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.019607843137,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-137,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"Shape Layer 5","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[111.25,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[{"s":[7,50],"t":30,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,47.562],"t":31,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,41.246],"t":32,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,34.221],"t":33,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,28.156],"t":34,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,23.232],"t":35,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,19.282],"t":36,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,16.119],"t":37,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,13.595],"t":38,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.598],"t":39,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,10.042],"t":40,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.86],"t":41,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.003],"t":42,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.428],"t":43,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.103],"t":44,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":45,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":50,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,12.306],"t":51,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,22.779],"t":52,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,31.44],"t":53,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,37.718],"t":54,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,42.215],"t":55,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,45.402],"t":56,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,47.592],"t":57,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,48.997],"t":58,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,49.764],"t":59,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}}]},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.021276595546,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-122,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Shape Layer 4","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[96.25,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[{"s":[7,21.345],"t":30,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,17.854],"t":31,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,15.059],"t":32,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,12.828],"t":33,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.063],"t":34,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,9.688],"t":35,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.644],"t":36,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.886],"t":37,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.379],"t":38,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.091],"t":39,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":40,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":45,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.689],"t":46,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,20.944],"t":47,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,28.598],"t":48,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,34.146],"t":49,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,38.12],"t":50,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,40.937],"t":51,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,42.872],"t":52,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,44.114],"t":53,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,44.791],"t":54,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,45],"t":55,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,42.846],"t":56,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,37.264],"t":57,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,31.056],"t":58,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,25.696],"t":59,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}}]},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.021276595546,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-122,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Shape Layer 3","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[81.25,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[{"s":[7,9.334],"t":30,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.428],"t":31,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.77],"t":32,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.329],"t":33,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.079],"t":34,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":35,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":40,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.072],"t":41,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,19.109],"t":42,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,25.757],"t":43,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,30.574],"t":44,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,34.025],"t":45,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,36.471],"t":46,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,38.152],"t":47,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,39.23],"t":48,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,39.819],"t":49,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,40],"t":50,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,38.129],"t":51,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,33.282],"t":52,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,27.891],"t":53,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,23.236],"t":54,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,19.457],"t":55,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,16.426],"t":56,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,13.998],"t":57,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,12.061],"t":58,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,10.529],"t":59,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}}]},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.021276595546,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-122,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"Shape Layer 2","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[66.25,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[{"s":[7,7.059],"t":30,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":31,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":36,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.178],"t":37,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,18.676],"t":38,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,24.43],"t":39,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,28.426],"t":40,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,31.174],"t":41,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,33.019],"t":42,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,34.182],"t":43,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,34.809],"t":44,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,35],"t":45,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,33.604],"t":46,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,29.879],"t":47,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,25.549],"t":48,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,21.691],"t":49,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,18.497],"t":50,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,15.896],"t":51,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,13.783],"t":52,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,12.069],"t":53,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,10.687],"t":54,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,9.583],"t":55,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.716],"t":56,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.053],"t":57,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.57],"t":58,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.244],"t":59,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}}]},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.021276595546,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-122,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"Shape Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[51.25,41,0],"ix":2},"a":{"a":0,"k":[-122,3.5,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"k":[{"s":[7,7],"t":30,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,9.838],"t":31,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,15.44],"t":32,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,20.073],"t":33,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,23.431],"t":34,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,25.836],"t":35,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,27.541],"t":36,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,28.712],"t":37,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,29.463],"t":38,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,29.874],"t":39,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,30],"t":40,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,28.696],"t":41,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,25.318],"t":42,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,21.56],"t":43,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,18.316],"t":44,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,15.682],"t":45,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,13.569],"t":46,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,11.878],"t":47,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,10.528],"t":48,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,9.459],"t":49,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,8.627],"t":50,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.995],"t":51,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.537],"t":52,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.229],"t":53,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7.055],"t":54,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}},{"s":[7,7],"t":55,"i":{"x":[1,1],"y":[1,1]},"o":{"x":[0,0],"y":[0,0]}}]},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":5,"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0.021276595546,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-122,3.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":300,"st":0,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Adjustment Layer 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[125,40,0],"ix":2},"a":{"a":0,"k":[125,40,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":0,"nm":"Voice Shape02","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[176,40,0],"ix":2},"a":{"a":0,"k":[60,40,0],"ix":1},"s":{"a":0,"k":[-100,100,100],"ix":6}},"ao":0,"w":120,"h":80,"ip":0,"op":300,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":0,"nm":"Voice Shape02","refId":"comp_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[73.5,40,0],"ix":2},"a":{"a":0,"k":[60,40,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":120,"h":80,"ip":0,"op":300,"st":0,"bm":0}],"markers":[{"tm":31,"cm":"1","dr":0},{"tm":60,"cm":"2","dr":0}]} \ No newline at end of file diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml new file mode 100644 index 0000000..3e55230 --- /dev/null +++ b/app/src/main/res/values/attrs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..c5f878f --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,26 @@ + + + + #FF000000 + #FFFFFFFF + + + #2C2C2C + #E6CBCCCC + #CECECE + #FA666B + #F0333A + #cccccc + #7B7B7C + + #FA6502 + #33000000 + #FDE38E + + #EDB7C1 + #07377B + #00000000 + #DE7AFD + + #80000000 + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..8fdb4e4 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,29 @@ + + Fun Prank Sounds + No audio has been added to your favorites yet. + No custom audio has been imported or created yet. + Play a Prank + Countdown to Prank + off + 15 sec + 30 sec + 1 min + 5 min + Recording + Favorite + + Please enter the content + Successfully save + Permission denied. Cannot access audio files. + Give your created sound a name + Save Sound + Recording Audio + Save + 00 : 00 : 00 + An audio with the same name already exists! + Import Audio + recommendation + Welcome to Fun Prank Sounds + Permission denied + sounds + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..f39b2ee --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/test/java/com/prank/funny/audio/sounds/ExampleUnitTest.kt b/app/src/test/java/com/prank/funny/audio/sounds/ExampleUnitTest.kt new file mode 100644 index 0000000..c1b41a5 --- /dev/null +++ b/app/src/test/java/com/prank/funny/audio/sounds/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package com.prank.funny.audio.sounds + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit sounds, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 0000000..7cb4045 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,21 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +plugins { + id("com.android.application") version "8.9.1" apply false + id("org.jetbrains.kotlin.android") version "2.0.0" apply false +} + +buildscript { + + + repositories { + mavenCentral() + // Note: 2.9.0 and older are available on jcenter() + } + + dependencies { + // Android Gradle Plugin 4.1.0 or later supported. +// classpath("com.android.tools.build:gradle:8.1.0") + classpath("io.objectbox:objectbox-gradle-plugin:5.0.1") + classpath ("io.github.jiayuliang1314:ResTools:1.0.5") + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..3c5031e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,23 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app's APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..b097524 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Fri Jan 09 11:47:33 CST 2026 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 0000000..bf52cdb --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,21 @@ +pluginManagement { + repositories { + google() + mavenCentral() + gradlePluginPortal() + + + } +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + + } +} + +rootProject.name = "Fun Prank Sounds" +include(":app") + \ No newline at end of file