commit e69d866fe6543b09b61d09345da4d81d704826f9 Author: yuqian Date: Wed Dec 17 14:43:26 2025 +0800 接入tradplus 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/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..f9d1d0a --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..639c779 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/migrations.xml b/.idea/migrations.xml new file mode 100644 index 0000000..f8051a6 --- /dev/null +++ b/.idea/migrations.xml @@ -0,0 +1,10 @@ + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b2c751a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file 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..3c3aa55 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,71 @@ +import java.text.SimpleDateFormat +import java.util.Date + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + id("kotlin-kapt") + id("kotlin-parcelize") +} + +android { + namespace = "com.design.mischiefgo" + compileSdk { + version = release(36) + } + val timeStamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) + defaultConfig { + applicationId = "com.design.mischiefgo" + minSdk = 26 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + setProperty( + "archivesBaseName", + "Mischief_Go_V" + versionName + "_${versionCode}$timeStamp" + ) + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + buildFeatures{ + viewBinding = true + } +} + +dependencies { + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.material) + implementation(libs.androidx.activity) + implementation(libs.androidx.constraintlayout) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + + implementation("com.github.bumptech.glide:glide:4.16.0") + // Room components + implementation("androidx.room:room-runtime:2.7.2") + kapt("androidx.room:room-compiler:2.7.2") + implementation("androidx.room:room-ktx:2.7.2") + // 其他相关依赖 + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.2") + implementation("androidx.activity:activity-ktx:1.10.1") + implementation("com.google.android.flexbox:flexbox:3.0.0") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# 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 \ No newline at end of file diff --git a/app/release/Mischief_Go_V1.0_112_10_13_46-release.apk b/app/release/Mischief_Go_V1.0_112_10_13_46-release.apk new file mode 100644 index 0000000..14e3a05 Binary files /dev/null and b/app/release/Mischief_Go_V1.0_112_10_13_46-release.apk differ diff --git a/app/release/Mischief_Go_V1.0_112_10_13_59-release.aab b/app/release/Mischief_Go_V1.0_112_10_13_59-release.aab new file mode 100644 index 0000000..b04f8c6 Binary files /dev/null and b/app/release/Mischief_Go_V1.0_112_10_13_59-release.aab differ diff --git a/app/release/baselineProfiles/0/Mischief_Go_V1.0_112_10_13_46-release.dm b/app/release/baselineProfiles/0/Mischief_Go_V1.0_112_10_13_46-release.dm new file mode 100644 index 0000000..579ce18 Binary files /dev/null and b/app/release/baselineProfiles/0/Mischief_Go_V1.0_112_10_13_46-release.dm differ diff --git a/app/release/baselineProfiles/1/Mischief_Go_V1.0_112_10_13_46-release.dm b/app/release/baselineProfiles/1/Mischief_Go_V1.0_112_10_13_46-release.dm new file mode 100644 index 0000000..79b5985 Binary files /dev/null and b/app/release/baselineProfiles/1/Mischief_Go_V1.0_112_10_13_46-release.dm differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json new file mode 100644 index 0000000..5892bda --- /dev/null +++ b/app/release/output-metadata.json @@ -0,0 +1,37 @@ +{ + "version": 3, + "artifactType": { + "type": "APK", + "kind": "Directory" + }, + "applicationId": "com.design.mischiefgo", + "variantName": "release", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "attributes": [], + "versionCode": 1, + "versionName": "1.0", + "outputFile": "Mischief_Go_V1.0_112_10_13_46-release.apk" + } + ], + "elementType": "File", + "baselineProfiles": [ + { + "minApi": 28, + "maxApi": 30, + "baselineProfiles": [ + "baselineProfiles/1/Mischief_Go_V1.0_112_10_13_46-release.dm" + ] + }, + { + "minApi": 31, + "maxApi": 2147483647, + "baselineProfiles": [ + "baselineProfiles/0/Mischief_Go_V1.0_112_10_13_46-release.dm" + ] + } + ], + "minSdkVersionForDexing": 26 +} \ No newline at end of file diff --git a/app/src/androidTest/java/com/design/mischiefgo/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/design/mischiefgo/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..fe1a3f9 --- /dev/null +++ b/app/src/androidTest/java/com/design/mischiefgo/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.design.mischiefgo + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.design.mischiefgo", appContext.packageName) + } +} \ 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..51019f4 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/assets/lato_regular.ttf b/app/src/main/assets/lato_regular.ttf new file mode 100644 index 0000000..bb2e887 Binary files /dev/null and b/app/src/main/assets/lato_regular.ttf differ 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/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png new file mode 100644 index 0000000..dd95d3c Binary files /dev/null and b/app/src/main/ic_launcher-playstore.png differ diff --git a/app/src/main/java/com/design/mischiefgo/NewApp.kt b/app/src/main/java/com/design/mischiefgo/NewApp.kt new file mode 100644 index 0000000..1cee8bf --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/NewApp.kt @@ -0,0 +1,53 @@ +package com.design.mischiefgo + +import android.app.Application +import android.graphics.Typeface +import android.util.Log +import com.design.mischiefgo.entity.AppDataBase +import com.design.mischiefgo.entity.Usual +import com.design.mischiefgo.ut.CommonUtil +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.io.IOException +import java.util.Collections; + +class NewApp : Application() { + companion object { + lateinit var app: NewApp + lateinit var typeface: Typeface + var usuals: List? = null + } + + override fun onCreate() { + super.onCreate() + app = this + CoroutineScope(Dispatchers.IO).launch { + initializeDatabase() + } + } + private fun initializeDatabase() { + val database = AppDataBase.getDatabase(this) + val infoDao = database.infoDao() + + try { + typeface = Typeface.createFromAsset(assets, "lato_regular.ttf") + val open = assets.open("prank.json") + val string = CommonUtil.getString(open) + + if (string.isNotEmpty()) { + usuals = CommonUtil.getUsual(string) + Collections.shuffle(usuals) + + usuals?.forEach { category -> + Log.d("Database", "处理分类: ${category.name}") + // 使用Room的suspend函数或确保在IO线程 + infoDao.insertAll(category.infolist) + } + Log.d("Database", "数据库初始化完成") + } + } catch (e: IOException) { + Log.e("Database", "初始化失败", e) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/entity/AppDataBase.kt b/app/src/main/java/com/design/mischiefgo/entity/AppDataBase.kt new file mode 100644 index 0000000..a3c10f6 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/entity/AppDataBase.kt @@ -0,0 +1,23 @@ +package com.design.mischiefgo.entity + +import android.content.Context +import androidx.room.Database +import androidx.room.Room +import androidx.room.RoomDatabase +@Database(entities = [Duplicate::class], version = 1, exportSchema = false) +abstract class AppDataBase:RoomDatabase() { + abstract fun infoDao():DuplicateDao + companion object{ + @Volatile + private var INSTANCE:AppDataBase?=null + + fun getDatabase(context:Context):AppDataBase{ + return INSTANCE?: synchronized(this){ + INSTANCE?:createDatabase(context).also { INSTANCE=it } + } + } + private fun createDatabase(context: Context):AppDataBase{ + return Room.databaseBuilder(context.applicationContext,AppDataBase::class.java,"sound_database").fallbackToDestructiveMigration().build() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/entity/DuplicateDao.kt b/app/src/main/java/com/design/mischiefgo/entity/DuplicateDao.kt new file mode 100644 index 0000000..f2d66ad --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/entity/DuplicateDao.kt @@ -0,0 +1,52 @@ +package com.design.mischiefgo.entity + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query + +@Dao +interface DuplicateDao { + + @Insert(onConflict = OnConflictStrategy.IGNORE) + suspend fun insert(duplicate: Duplicate): Long + @Delete + suspend fun delete(duplicate: Duplicate): Int + @Query("SELECT * FROM duplicate") + suspend fun selectAll(): List + + @Insert(onConflict = OnConflictStrategy.IGNORE) + fun insertAll(infos: List): List + + //使用索引优化查询 + @Query("SELECT * FROM duplicate WHERE isLike = 1 ORDER BY id ASC") + fun getAllLike(): List + + @Query("SELECT * FROM duplicate WHERE isCustomization = 1 ORDER BY id ASC") + fun getAllCustomization(): List + + // 高效的随机查询(使用SQLite的随机函数) + @Query(""" + SELECT * FROM duplicate + WHERE isCustomization = 0 + ORDER BY RANDOM() + LIMIT 11 + """) + suspend fun getMoreEfficient(): List + + // 使用EXISTS进行存在性检查(更高效) + @Query("SELECT EXISTS(SELECT 1 FROM duplicate WHERE name = :name AND isLike = 1)") + suspend fun checkLikeExists(name: String): Boolean + + @Query("SELECT EXISTS(SELECT 1 FROM duplicate WHERE name = :name)") + suspend fun checkNameExists(name: String): Boolean + + + @Query("UPDATE duplicate SET isLike = :isLike WHERE name = :name") + suspend fun updateLikeStatus(name: String, isLike: Boolean): Int + + + @Query("UPDATE duplicate SET isLike = 0 WHERE name = :name") + suspend fun removeLike(name: String) +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/entity/DuplicateRepository.kt b/app/src/main/java/com/design/mischiefgo/entity/DuplicateRepository.kt new file mode 100644 index 0000000..684cb60 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/entity/DuplicateRepository.kt @@ -0,0 +1,47 @@ +package com.design.mischiefgo.entity + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class DuplicateRepository(private val infoDao: DuplicateDao){ + // 获取所有点赞项 + fun getAllLike():List = infoDao.getAllLike() + suspend fun getAll(): List = infoDao.selectAll() + + // 获取所有自定义项 + fun getAllCustomization(): List = infoDao.getAllCustomization() + + // 获取高效随机数据 + suspend fun getMoreEfficient(): List = withContext(Dispatchers.IO) { + infoDao.getMoreEfficient() + } + + // 检查点赞存在性 + suspend fun checkLikeExists(name: String): Boolean = withContext(Dispatchers.IO) { + infoDao.checkLikeExists(name) + } + + // 检查名称存在性 + suspend fun checkNameExists(name: String): Boolean = withContext(Dispatchers.IO) { + infoDao.checkNameExists(name) + } + + // 添加点赞 + suspend fun updateLikeStatus(name: String, isLike: Boolean) = withContext(Dispatchers.IO) { + infoDao.updateLikeStatus(name, isLike) + } + // 移除点赞 + suspend fun removeLike(name: String) = withContext(Dispatchers.IO) { + infoDao.removeLike(name) + } + + // 插入单个项目 + suspend fun insert(duplicate: Duplicate): Long = withContext(Dispatchers.IO) { + infoDao.insert(duplicate) + } + + // 删除项目 + suspend fun delete(duplicate: Duplicate): Int = withContext(Dispatchers.IO) { + infoDao.delete(duplicate) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/entity/MainViewModel.kt b/app/src/main/java/com/design/mischiefgo/entity/MainViewModel.kt new file mode 100644 index 0000000..c2d6abd --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/entity/MainViewModel.kt @@ -0,0 +1,185 @@ +package com.design.mischiefgo.entity + +import android.app.Application +import android.util.Log +import androidx.lifecycle.AndroidViewModel +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +class MainViewModel(application: Application) : AndroidViewModel(application){ + private val repository: DuplicateRepository by lazy { + val dao = AppDataBase.getDatabase(application).infoDao() + DuplicateRepository(dao) + } + // 使用LiveData暴露状态 + private val _likeItems = MutableLiveData>() + var likeItems: LiveData> = _likeItems + + private val _customItems = MutableLiveData>() + val customItems: LiveData> = _customItems + + private val _randomItems = MutableLiveData>() + val randomItems: LiveData> = _randomItems + + private val _nonCustomCount = MutableLiveData() + val nonCustomCount: LiveData = _nonCustomCount + + // 加载状态 + private val _isLoading = MutableLiveData() + val isLoading: LiveData = _isLoading + + // 错误处理 + private val _errorMessage = MutableLiveData() + val errorMessage: LiveData = _errorMessage + + init { + loadInitialData() + } + + // 初始化加载数据 + private fun loadInitialData() { + loadLikeItems() + loadCustomItems() +// loadRandomItems() + } + fun debugDatabase() { + viewModelScope.launch(Dispatchers.IO) { + try { + val duplicate = repository.getAll() + Log.d("DB_DEBUG", "总记录数: ${duplicate.size}") + duplicate.take(5).forEach { infoitem -> + Log.d("DB_DEBUG", "Paper[${infoitem.id}]: " + + "cat=${infoitem.name}, " + + "imId=${infoitem.audioUrl}, ") + } + } catch (e: Exception) { + Log.e("DB_DEBUG", "查询失败", e) + } + } + } + + // 加载随机项目 + fun loadRandomItems() { + _isLoading.value = true + viewModelScope.launch(Dispatchers.IO) { + try { + val items = repository.getMoreEfficient() + _randomItems.postValue(items) + } catch (e: Exception) { + _errorMessage.postValue("Failed to load random items: ${e.message}") + } finally { + _isLoading.postValue(false) + } + } + } + // 显式加载点赞项(可用于手动刷新) + fun loadLikeItems() { + _isLoading.postValue(true) + viewModelScope.launch(Dispatchers.IO) { + try { + val likes = repository.getAllLike() + _likeItems.postValue(likes) + Log.d("DB_DEBUG", "点赞记录数: ${likes.size}") + } catch (e: Exception) { + _errorMessage.postValue("Failed to load like items: ${e.message}") + } finally { + _isLoading.postValue(false) + } + } + } + // 显式加载上传项(可用于手动刷新) + fun loadCustomItems() { + _isLoading.postValue(true) + viewModelScope.launch(Dispatchers.IO) { + try { + val customs = repository.getAllCustomization() + _customItems.postValue(customs) + } catch (e: Exception) { + _errorMessage.postValue("Failed to load customs items: ${e.message}") + } finally { + _isLoading.postValue(false) + } + } + } + + // 更新点赞状态 + fun updateLikeStatus(name: String, isLike: Boolean) { + viewModelScope.launch(Dispatchers.IO) { + try { + repository.updateLikeStatus(name, isLike) + // 根据需求刷新相应的列表 + if (isLike) { + loadLikeItems() // 如果是点赞,刷新点赞列表 + } else { + loadLikeItems() // 如果是取消点赞,也刷新点赞列表 + // 或者如果当前在某个特定页面,也可以刷新该页面的列表 + } + } catch (e: Exception) { + _errorMessage.postValue("Failed to update like status: ${e.message}") + } + } + } + + + // 检查是否点赞 + fun checkLikeStatus(name: String, callback: (Boolean) -> Unit) { + viewModelScope.launch(Dispatchers.IO) { + try { + val isLiked = repository.checkLikeExists(name) + callback(isLiked) + } catch (e: Exception) { + _errorMessage.postValue("Failed to check like status: ${e.message}") + callback(false) + } + } + } + // 检查是否已存在 + fun checkSaveStatus(name: String, callback: (Boolean) -> Unit) { + viewModelScope.launch(Dispatchers.IO) { + try { + Log.d("DB_DEBUG", "检查是否已存在: $name") + val isSaved = repository.checkNameExists(name) + Log.d("DB_DEBUG", "是否已存在: $isSaved") + callback(isSaved) + } catch (e: Exception) { + _errorMessage.postValue("Failed to check save status: ${e.message}") + callback(false) + } + } + } + + // 插入自定义 + fun insertItem(duplicate: Duplicate) { + viewModelScope.launch(Dispatchers.IO) { + try { + val itemToInsert = duplicate.copy(isCustomization = true) + repository.insert(itemToInsert) + loadCustomItems() + // 依赖数据库观察者自动更新UI + } catch (e: Exception) { + _errorMessage.postValue("Failed to insert item: ${e.message}") + } + } + } + + // 删除自定义 + fun deleteItem(duplicate: Duplicate) { + viewModelScope.launch(Dispatchers.IO) { + try { + repository.delete(duplicate) + loadCustomItems() + loadLikeItems() + // 依赖数据库观察者自动更新UI + } catch (e: Exception) { + _errorMessage.postValue("Failed to delete item: ${e.message}") + } + } + } + // 清除错误消息 + fun clearErrorMessage() { + _errorMessage.value = "" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/entity/setdata.kt b/app/src/main/java/com/design/mischiefgo/entity/setdata.kt new file mode 100644 index 0000000..73015d6 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/entity/setdata.kt @@ -0,0 +1,28 @@ +package com.design.mischiefgo.entity + +import android.os.Parcelable +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.Index +import androidx.room.PrimaryKey +import kotlinx.parcelize.Parcelize +@Parcelize +@Entity(tableName = "usual") +data class Usual( + @PrimaryKey(autoGenerate = true) var id: Int = 0, + @ColumnInfo(name = "name") var name:String="", + @ColumnInfo(name = "convert") var convert:String="", + @ColumnInfo(name="infolist") var infolist:List = arrayListOf() +): Parcelable + +@Parcelize +@Entity(tableName = "duplicate",indices = [Index(value = ["name"], unique = true)]) +data class Duplicate( + @PrimaryKey(autoGenerate = true) var id: Int = 0, + @ColumnInfo(name = "name") var name: String = "", + @ColumnInfo(name = "convert") var convert: String = "", + @ColumnInfo(name = "audioUrl") var audioUrl: String = "", + @ColumnInfo(name = "isLike") var isLike: Boolean = false, + @ColumnInfo(name = "isCustomization") var isCustomization: Boolean = false, + @ColumnInfo(name = "colorIndex") var colorIndex: Int = 0 +):Parcelable diff --git a/app/src/main/java/com/design/mischiefgo/ui/AdShowActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/AdShowActivity.kt new file mode 100644 index 0000000..b2ff6cd --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/AdShowActivity.kt @@ -0,0 +1,50 @@ +package com.design.mischiefgo.ui + +import android.content.Intent +import android.os.Bundle +import android.os.CountDownTimer +import android.os.Handler +import androidx.appcompat.app.AppCompatActivity +import com.design.mischiefgo.databinding.ActivityAdShowBinding +import com.design.mischiefgo.ut.EvenTopUtils + +class AdShowActivity : AppCompatActivity() { + private lateinit var binding : ActivityAdShowBinding + private var handler: Handler = Handler() + private var countDownTimer: CountDownTimer? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + binding = ActivityAdShowBinding.inflate(layoutInflater) + setContentView(binding.root) + handler.postDelayed({ + val intent= Intent( + this@AdShowActivity, + NavigationActivity::class.java + ) + startActivity(intent) + finish() + }, 4000) + countDownTimer = object : CountDownTimer(4000, 100) { + override fun onTick(millisUntilFinished: Long) { + val progress = ((4000 - millisUntilFinished) / 4000f * 100).toInt() + binding.loadingPb.progress = progress + } + + override fun onFinish() { + binding.loadingPb.progress = 100 + } + }.start() + } + + override fun onDestroy() { + super.onDestroy() + handler.removeCallbacksAndMessages(null) + + if (countDownTimer != null) { + countDownTimer!!.cancel() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/ListenSoundActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/ListenSoundActivity.kt new file mode 100644 index 0000000..b0aa962 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/ListenSoundActivity.kt @@ -0,0 +1,84 @@ +package com.design.mischiefgo.ui + +import android.content.Intent +import android.os.Bundle +import android.os.Handler +import android.os.SystemClock +import androidx.appcompat.app.AppCompatActivity +import com.design.mischiefgo.R +import com.design.mischiefgo.databinding.ActivityListenSoundBinding +import com.design.mischiefgo.ut.StartPlayUtil +import com.design.mischiefgo.ut.EvenTopUtils + +class ListenSoundActivity : AppCompatActivity() { + private var binding: ActivityListenSoundBinding? = null + private var startTime: Long = 0 + private var elapsedTime: Long = 0 + private val handler = Handler() + private var runnable: Runnable? = null + private var isCreate = false + + private var record: StartPlayUtil? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + binding = ActivityListenSoundBinding.inflate(layoutInflater) + setContentView(binding!!.root) + record = StartPlayUtil(this) + binding!!.audioTime.setText(R.string.time_init) + + initClick() + } + + private fun initClick() { + binding!!.back.setOnClickListener { finish() } + binding!!.imMic.setOnClickListener { + binding!!.imMic.isSelected = !binding!!.imMic.isSelected + binding!!.audioTint.text=getString(R.string.click_to_finish) + initDuplicate() + } + } + + private fun initDuplicate() { + if (!isCreate) { + record?.startRecording() + isCreate = true + runnable = object : Runnable { + override fun run() { + val currentTime = SystemClock.elapsedRealtime() + elapsedTime = currentTime - startTime + val milliseconds = (elapsedTime % 1000).toInt() / 10 + val seconds = (elapsedTime / 1000).toInt() % 60 + val minutes = (elapsedTime / (1000 * 60)).toInt() % 60 + binding!!.audioTime.text = + String.format("%02d : %02d : %02d", minutes, seconds, milliseconds) + handler.postDelayed(this, 10) + } + } + startTime = SystemClock.elapsedRealtime() + handler.post(runnable as Runnable) + } else { + record?.stopRecording() + + handler.removeCallbacks(runnable!!) + val intent = Intent( + this@ListenSoundActivity, + SaveToLocalActivity::class.java + ) + intent.putExtra(SaveToLocalActivity.KEY_Time, elapsedTime) + intent.putExtra(SaveToLocalActivity.KEY_Path, record?.getTempFileName()) + intent.putExtra(SaveToLocalActivity.KEY_import, 1) + startActivity(intent) + finish() + } + } + + override fun onDestroy() { + super.onDestroy() + if(runnable!=null){ + handler.removeCallbacks(runnable!!) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/NavigationActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/NavigationActivity.kt new file mode 100644 index 0000000..2accfa6 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/NavigationActivity.kt @@ -0,0 +1,111 @@ +package com.design.mischiefgo.ui + +import android.os.Bundle +import android.util.Log +import android.view.View +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.Fragment +import com.design.mischiefgo.databinding.ActivityNavigationBinding +import com.design.mischiefgo.ut.EvenTopUtils + +class NavigationActivity : AppCompatActivity() { + private lateinit var binding: ActivityNavigationBinding +// private val mainViewModel:MainViewModel by viewModels() + private var isFragmentTransitionRunning=false + private var lastClickTime=0L + private val CLICK_THROTTLE=300L + + private val showFragment by lazy{ YellowCenterFragment() } + private val collFragment by lazy{ YellowEndFragment() } + private val recordFragment by lazy{ YellowStartFragment() } + private var currentFragment: Fragment?=null + + private sealed class Tab { + data object Show:Tab() + data object Collect:Tab() + data object Record:Tab() + + } + private var currentTab:Tab=Tab.Record + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + binding= ActivityNavigationBinding.inflate(layoutInflater) + setContentView(binding.root) + initViews() + } + + private fun initViews() { + switchFragment(Tab.Show) + binding.llCategory.setOnClickListener { handleTabClick(Tab.Show) } + binding.llRecord.setOnClickListener { handleTabClick(Tab.Record) } + binding.llCollect.setOnClickListener { handleTabClick(Tab.Collect) } + } + + private fun switchFragment(tab: Tab) { + if (isFragmentTransitionRunning || currentTab == tab) return + val targetFragment = when (tab) { + is Tab.Show -> showFragment + is Tab.Collect -> collFragment + is Tab.Record -> recordFragment + } + Log.d("MainViewActivity", "switchFragment: $tab") + if (binding.fragmentIn.id == View.NO_ID) return + Log.d("MainViewActivity", "switchFragment: $tab") + updateTabUI(tab) + performFragmentTransaction(targetFragment, tab) + } + private fun updateTabUI(tab: Tab) { +// val defaultColor = getColor(R.color.white) +// val selectColor = getColor(R.color.text_blue) + + binding.imgCategory.isSelected = tab is Tab.Show + binding.llCategory.isSelected = tab is Tab.Show + binding.ltHome.visibility= if (tab is Tab.Show) View.VISIBLE else View.GONE + binding.imgCollect.isSelected = tab is Tab.Collect + binding.llCollect.isSelected = tab is Tab.Collect + binding.ltFavorite.visibility= if (tab is Tab.Collect) View.VISIBLE else View.GONE + binding.imgRecord.isSelected = tab is Tab.Record + binding.llRecord.isSelected = tab is Tab.Record + binding.ltRecord.visibility= if (tab is Tab.Record) View.VISIBLE else View.GONE + } + + private fun performFragmentTransaction(targetFragment: Fragment, tab: Tab) { + isFragmentTransitionRunning = true + + supportFragmentManager.beginTransaction().apply { + setCustomAnimations( + android.R.anim.fade_in, + android.R.anim.fade_out + ) + + currentFragment?.takeIf { it.isAdded }?.let { + hide(it) + } + + if (targetFragment.isAdded) { + show(targetFragment) + } else { + add(binding.fragmentIn.id, targetFragment, targetFragment::class.java.simpleName) + } + + setReorderingAllowed(true) + commit() + } + + currentFragment = targetFragment + currentTab = tab + isFragmentTransitionRunning = false + } + + private fun handleTabClick(tab: Tab) { + val currentTime = System.currentTimeMillis() + if (currentTime - lastClickTime > CLICK_THROTTLE) { + switchFragment(tab) + lastClickTime = currentTime + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/SaveToLocalActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/SaveToLocalActivity.kt new file mode 100644 index 0000000..5b3e155 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/SaveToLocalActivity.kt @@ -0,0 +1,247 @@ +package com.design.mischiefgo.ui + +import android.annotation.SuppressLint +import android.content.Context +import android.media.AudioAttributes +import android.media.MediaPlayer +import android.net.Uri +import android.os.Bundle +import android.os.Handler +import android.os.SystemClock +import android.text.TextUtils +import android.util.Log +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.lifecycle.ViewModelProvider +import com.design.mischiefgo.R +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.entity.MainViewModel +import java.io.File +import java.io.FileOutputStream +import java.io.IOException +import androidx.core.net.toUri +import com.design.mischiefgo.databinding.ActivitySaveToLocalBinding +import com.design.mischiefgo.ut.EvenTopUtils + +class SaveToLocalActivity : AppCompatActivity() { + private lateinit var binding: ActivitySaveToLocalBinding + private var path: String? = null + + private var mediaPlayer: MediaPlayer? = null + private val handler = Handler() + private var timeUpdater: Runnable? = null + private var startTime: Long = 0 + private var elapsedTime: Long = 0 + private lateinit var viewModel: MainViewModel + private var audioDuration: Long = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + binding = ActivitySaveToLocalBinding.inflate(layoutInflater) + setContentView(binding.root) + viewModel = ViewModelProvider(this)[MainViewModel::class.java] + binding.audioTime.setText(R.string.time_init) + initData() + initEvent() + + } + + @Throws(IOException::class) + private fun togglePrank() { + if (binding.btnPlay.isSelected) { + initMediaPlayer() + } else { + stopPlay() + } + } + + private fun stopPlay() { + if (timeUpdater != null) { + handler.removeCallbacks(timeUpdater!!) + } + if (mediaPlayer != null) { + mediaPlayer!!.release() + mediaPlayer = null + } + } + + private fun initMediaPlayer() { + if (mediaPlayer == null) { + mediaPlayer = MediaPlayer() + mediaPlayer!!.setAudioAttributes( + AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) + .setUsage(AudioAttributes.USAGE_MEDIA) + .build() + ) + try { + mediaPlayer!!.setDataSource(path) + } catch (_: Exception) { + } + mediaPlayer!!.setOnPreparedListener { mp: MediaPlayer? -> + mediaPlayer!!.start() + beginTimer() + } + mediaPlayer!!.setOnCompletionListener { mp: MediaPlayer? -> + binding.btnPlay.isSelected = false + handler.removeCallbacks(timeUpdater!!) + } + mediaPlayer!!.prepareAsync() + } else { + mediaPlayer!!.start() + beginTimer() + } + } + + + private fun beginTimer() { + if (timeUpdater == null) { + timeUpdater = object : Runnable { + @SuppressLint("DefaultLocale") + override fun run() { + if (mediaPlayer != null && mediaPlayer!!.isPlaying) { + val currentTime = SystemClock.elapsedRealtime() + elapsedTime = currentTime - startTime + val milliseconds = (elapsedTime % 1000).toInt() / 10 + val seconds = (elapsedTime / 1000).toInt() % 60 + val minutes = (elapsedTime / (1000 * 60)).toInt() % 60 + binding.audioTime.text = + String.format( + "%02d : %02d : %02d", + minutes, + seconds, + milliseconds + ) + handler.postDelayed(this, 10) + } + } + } + } + startTime = SystemClock.elapsedRealtime() + handler.post(timeUpdater!!) + } + + private fun initEvent() { + binding.back.setOnClickListener { finish() } + binding.audioTimeLayout.setOnClickListener { + binding.btnPlay.isSelected = !binding.btnPlay.isSelected + try { + togglePrank() + } catch (e: IOException) { + Log.e("SaveActivity", "Error toggling prank", e) + } + } + + binding.save.setOnClickListener { + val name = binding.saveEdit.text.toString().trim() + viewModel.checkSaveStatus(name, callback = { isSave -> + runOnUiThread { + // 1. 先检查Activity是否即将销毁,避免在已销毁的Activity上操作 + if (isFinishing || isDestroyed) { + return@runOnUiThread + } + if (TextUtils.isEmpty(name)) { + Toast.makeText( + this@SaveToLocalActivity, + getString(R.string.save_tip), // 空名称提示 + Toast.LENGTH_SHORT + ).show() + return@runOnUiThread + } + + if (isSave) { + binding.saveEdit.setText("") + Toast.makeText( + this@SaveToLocalActivity, // 使用显式的 this@ActivityName + getString(R.string.name_hint), // 名称已存在提示 + Toast.LENGTH_SHORT + ).show() + } else { + saveData(name) + Toast.makeText( + this@SaveToLocalActivity, + getString(R.string.save_tips), // 保存成功提示 + Toast.LENGTH_SHORT + ).show() + finish() + } + } + }) + } + + } + + private fun saveData(name: String) { + val cacheDir = cacheDir + val sourceFile = File(path) + val destinationFile = File(cacheDir, "$name.mp3") + + if (sourceFile.renameTo(destinationFile)) { + val mydata = Duplicate() + mydata.isLike = false + mydata.name = name + mydata.isCustomization = true + mydata.audioUrl = destinationFile.absolutePath + viewModel.insertItem(mydata) + } else { + Log.e("SaveActivity", "Failed to rename file") + } + } + + + private fun readFileFromUri(context: Context, uri: Uri): String? { + val contentResolver = context.contentResolver + try { + contentResolver.openInputStream(uri).use { inputStream -> + FileOutputStream( + File( + cacheDir, "temp_audio_file.mp3" + ) + ).use { outputStream -> + if (inputStream == null) { + Log.e("SaveActivity", "Input stream is null") + return null + } + val buffer = ByteArray(1024) + var bytesRead: Int + while ((inputStream.read(buffer).also { bytesRead = it }) != -1) { + outputStream.write(buffer, 0, bytesRead) + } + return File(cacheDir, "temp_audio_file.mp3").absolutePath + } + } + } catch (e: IOException) { + Log.e("SaveActivity", "Error reading file from URI", e) + return null + } + } + + private fun initData() { + val intent = intent + audioDuration = intent.getLongExtra(KEY_Time, 0) + val importFlag = intent.getIntExtra(KEY_import, 0) + + if (importFlag == 1) { + path = intent.getStringExtra(KEY_Path) + Log.e("zzj", "save path is$path") + } else { + val uriPath = intent.getStringExtra(KEY_Path) + val uri = uriPath!!.toUri() + path = readFileFromUri(this, uri) + } + } + + + override fun onDestroy() { + super.onDestroy() + stopPlay() + } + + companion object { + var KEY_Time: String = "KEY_time" + var KEY_Path: String = "KEY_path" + var KEY_import: String = "flag" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/TypeInActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/TypeInActivity.kt new file mode 100644 index 0000000..348359d --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/TypeInActivity.kt @@ -0,0 +1,43 @@ +package com.design.mischiefgo.ui + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import androidx.recyclerview.widget.GridLayoutManager +import com.design.mischiefgo.ut.RandomAdapter +import com.design.mischiefgo.entity.Usual +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import com.design.mischiefgo.databinding.ActivityTypeInBinding +import com.design.mischiefgo.ut.EvenTopUtils + +class TypeInActivity : AppCompatActivity() { + private lateinit var binding: ActivityTypeInBinding + private lateinit var data: Usual + + companion object { + const val KEY_LIST_DATA = "list_data" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityTypeInBinding.inflate(layoutInflater) + setContentView(binding.root) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + data = intent.getParcelableExtra(KEY_LIST_DATA)!! + initView() + } + + private fun initView() { + Glide.with(this) + .load(data.convert) + .apply(RequestOptions.circleCropTransform()) + .into(binding.image) + binding.title.text = data.name + val adapter = RandomAdapter() + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager = GridLayoutManager(this, 3) + adapter.setList(data.infolist) + binding.back.setOnClickListener { finish() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/UseSoundActivity.kt b/app/src/main/java/com/design/mischiefgo/ui/UseSoundActivity.kt new file mode 100644 index 0000000..d35343e --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/UseSoundActivity.kt @@ -0,0 +1,251 @@ +package com.design.mischiefgo.ui + +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.Bundle +import android.os.CountDownTimer +import android.util.Log +import android.view.View +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.isVisible +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.design.mischiefgo.ut.CommonUtil +import com.design.mischiefgo.R +import com.design.mischiefgo.ut.RandomAdapter +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.entity.MainViewModel +import com.design.mischiefgo.ut.OnMoreClickListener +import com.design.mischiefgo.ut.SoundListener +import com.bumptech.glide.Glide +import com.bumptech.glide.load.resource.bitmap.CircleCrop +import com.design.mischiefgo.databinding.ActivityUseSoundBinding +import com.design.mischiefgo.ut.ChooseTimeFragment +import com.design.mischiefgo.ut.EvenTopUtils +import java.io.IOException + +class UseSoundActivity : AppCompatActivity(), OnMoreClickListener, + SoundListener { + private lateinit var binding: ActivityUseSoundBinding + private lateinit var data: Duplicate + private lateinit var viewModel: MainViewModel + private var mediaPlayer: MediaPlayer? = null + private var countDownTimer: CountDownTimer? = null + private lateinit var popView: ChooseTimeFragment + private lateinit var volumeReceiver: BroadcastReceiver + + companion object { + const val KEY_LIST_DATA = "list_data" + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + EvenTopUtils.setStatusBar(this.window) + EvenTopUtils.setLightStatusBar(this.window, true) + binding = ActivityUseSoundBinding.inflate(layoutInflater) + data = intent.getParcelableExtra(KEY_LIST_DATA)!! + setContentView(binding.root) + viewModel = ViewModelProvider(this)[MainViewModel::class.java] + popView = ChooseTimeFragment(this, this) + initView() + initAudio() + initClick() + setVolumeReceiver() + + } + + private fun setVolumeReceiver() { + volumeReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + if (intent.action == "android.media.VOLUME_CHANGED_ACTION") { + val audioManager = + context.getSystemService(Context.AUDIO_SERVICE) as AudioManager + val currentVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC) + if (binding.seekbar.progress != currentVolume) { + binding.seekbar.progress = currentVolume + } + } + } + } + + val filter = IntentFilter("android.media.VOLUME_CHANGED_ACTION") + registerReceiver(volumeReceiver, filter) + } + + private fun initClick() { + //播放按钮 + binding.layoutPlay.setOnClickListener { + val playing = binding.playing.isVisible + if (playing) { + if (mediaPlayer?.isPlaying == true) { + mediaPlayer?.pause() + showLoading(1) + } + } else { + if (!mediaPlayer?.isPlaying!!) { + mediaPlayer?.start() + showLoading(2) + } + } + } + //弹出倒计时 + binding.imTimer.setOnClickListener { + popView.showTop(binding.imTimer) + } + //like + binding.imLike.setOnClickListener { + val isSelected = binding.imLike.isSelected + if(isSelected){ + viewModel.updateLikeStatus(data.name,false) + }else{ + viewModel.updateLikeStatus(data.name,true) + } + binding.imLike.isSelected = !isSelected + + } + } + + private fun initAudio() { + showLoading(0) + mediaPlayer = MediaPlayer() + try { + mediaPlayer?.reset() + mediaPlayer?.setDataSource(data.audioUrl) + mediaPlayer?.prepareAsync() + mediaPlayer?.setOnPreparedListener { showLoading(1) } + mediaPlayer?.setOnCompletionListener { showLoading(1) } + } catch (ioException: IOException) { + showLoading(0) + Toast.makeText(this, "----------prepare fail", Toast.LENGTH_SHORT).show() + } + } + + private fun initView() { + //设置音量 + CommonUtil.setVolume(this, binding.seekbar) + binding.title.text = data.name + binding.back.setOnClickListener { finish() } + binding.imLoop.setOnClickListener { + binding.imLoop.setSelected(!binding.imLoop.isSelected) + mediaPlayer!!.isLooping = binding.imLoop.isSelected + } + val convert = data.convert + if (convert.isEmpty()) { + Glide.with(this).load(R.drawable.music_default_copy).transform(CircleCrop()) + .into(binding.imgRecord) + } else { + Glide.with(this).load(data.convert).error(R.drawable.music_default_copy) + .placeholder(R.drawable.music_default_copy).transform(CircleCrop()) + .into(binding.imgRecord) + } + + val adapter = RandomAdapter() + adapter.setListener(this) + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager = + LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false) + //more + viewModel.randomItems.observe(this@UseSoundActivity) { randomItems -> + // 更新UI + Log.d("TAG", "initView: $randomItems") + adapter.setList(randomItems, 1) + adapter.notifyDataSetChanged() + } + viewModel.loadRandomItems() + +// like + viewModel.checkLikeStatus(data.name, callback = { isLike -> + run { + binding.imLike.isSelected = isLike + } + }) +// + } + + private fun showLoading(type: Int) { + when (type) { + 0 -> {//加载中 + binding.playLoading.visibility = View.VISIBLE + binding.toPlay.visibility = View.GONE + binding.playing.visibility = View.GONE + } + + 1 -> {//可播放 + binding.playLoading.visibility = View.GONE + binding.toPlay.visibility = View.VISIBLE + binding.playing.visibility = View.GONE + } + + 2 -> {//播放中 + binding.playLoading.visibility = View.GONE + binding.toPlay.visibility = View.GONE + binding.playing.visibility = View.VISIBLE + } + } + } + + private fun stopCountDown() { + countDownTimer?.cancel() + + } + + private fun startCountDown(time: Long) { + stopCountDown() + countDownTimer = object : CountDownTimer(time, 1000) { + override fun onTick(millisUntilFinished: Long) { + } + + override fun onFinish() { + popView.setOffSelected() + binding.imTimer.isSelected = false + if (!mediaPlayer?.isPlaying!!) { + showLoading(2) + mediaPlayer?.start() + } + } + } + countDownTimer?.start() + } + + + override fun onDestroy() { + super.onDestroy() + if (mediaPlayer?.isPlaying == true) { + mediaPlayer?.stop() + } + mediaPlayer?.release() + stopCountDown() + if (::popView.isInitialized) { + popView.hide() + } + } + + override fun onMoreClick(duplicate: Duplicate) { + val intent = Intent(this, UseSoundActivity::class.java) + intent.putExtra(KEY_LIST_DATA, duplicate) + startActivity(intent) + finish() + + } + + override fun onClickTimerListener(time: Long) { + runOnUiThread { + popView.hide() + if (time == -1L) { + Log.d("TAG", "onClickTimerListener: $time") + binding.imTimer.isSelected = false + stopCountDown() + } else { + binding.imTimer.isSelected = true + startCountDown(time) + } + } + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/YellowCenterFragment.kt b/app/src/main/java/com/design/mischiefgo/ui/YellowCenterFragment.kt new file mode 100644 index 0000000..cf76ec7 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/YellowCenterFragment.kt @@ -0,0 +1,45 @@ +package com.design.mischiefgo.ui + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.StaggeredGridLayoutManager +import com.design.mischiefgo.databinding.FragmentYellowCenterBinding +import com.design.mischiefgo.NewApp +import com.design.mischiefgo.ut.YellowCenterAdapter +import com.design.mischiefgo.entity.MainViewModel + + +class YellowCenterFragment : Fragment() { + private lateinit var binding: FragmentYellowCenterBinding + private lateinit var viewModel: MainViewModel + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + binding = FragmentYellowCenterBinding.inflate(inflater, container, false) + viewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java] + initView() + return binding.root + } + + private fun initView() { + val adapter = YellowCenterAdapter() + binding.recyclerView.adapter=adapter + val flexboxLayoutManager = StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL) + + binding.recyclerView.layoutManager=flexboxLayoutManager + +// viewModel.randomItems.observe(viewLifecycleOwner) { randomItems -> +// // 更新UI +// adapter.setList(randomItems) +// } +// viewModel.loadRandomItems() + viewModel.debugDatabase() + NewApp.usuals?.let { adapter.setList(it) } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/YellowEndFragment.kt b/app/src/main/java/com/design/mischiefgo/ui/YellowEndFragment.kt new file mode 100644 index 0000000..b7b0098 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/YellowEndFragment.kt @@ -0,0 +1,61 @@ +package com.design.mischiefgo.ui + +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.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.design.mischiefgo.databinding.FragmentYellowEndBinding +import com.design.mischiefgo.ut.StartAndEndAdapter +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.entity.MainViewModel +import com.design.mischiefgo.ut.OnMoreClickListener + +class YellowEndFragment : Fragment(),OnMoreClickListener { + private lateinit var binding: FragmentYellowEndBinding + private lateinit var viewModel: MainViewModel + private lateinit var adapter: StartAndEndAdapter + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + // Inflate the layout for this fragment + binding = FragmentYellowEndBinding.inflate(inflater, container, false) + viewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java] + initView() + return binding.root + } + + override fun onResume() { + super.onResume() + viewModel.loadLikeItems() + } + + private fun initView() { + adapter = StartAndEndAdapter() + adapter.setListener(this) + viewModel.likeItems.observe(viewLifecycleOwner){likeList -> + Log.d("CollectFragment", "initView: $likeList") + if(likeList.isEmpty()){ + binding.emptyView.visibility=View.VISIBLE + binding.recyclerView.visibility=View.GONE + }else{ + binding.emptyView.visibility=View.GONE + binding.recyclerView.visibility=View.VISIBLE + adapter.setList(likeList,0) + adapter.notifyDataSetChanged() + } + } + + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager=LinearLayoutManager(requireContext(),LinearLayoutManager.VERTICAL,false) + } + + override fun onMoreClick(duplicate: Duplicate) { + viewModel.updateLikeStatus(duplicate.name,false) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ui/YellowStartFragment.kt b/app/src/main/java/com/design/mischiefgo/ui/YellowStartFragment.kt new file mode 100644 index 0000000..fbe6b9f --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ui/YellowStartFragment.kt @@ -0,0 +1,188 @@ +package com.design.mischiefgo.ui + +import android.Manifest +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import android.os.Build +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher +import androidx.activity.result.contract.ActivityResultContracts.GetContent +import androidx.activity.result.contract.ActivityResultContracts.RequestMultiplePermissions +import androidx.activity.result.contract.ActivityResultContracts.RequestPermission +import androidx.core.content.ContextCompat +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.recyclerview.widget.LinearLayoutManager +import com.design.mischiefgo.databinding.FragmentYellowStartBinding +import com.design.mischiefgo.ut.CommonUtil +import com.design.mischiefgo.ut.StartAndEndAdapter +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.entity.MainViewModel +import com.design.mischiefgo.ut.OnMoreClickListener + +class YellowStartFragment : Fragment(),OnMoreClickListener{ + private lateinit var binding: FragmentYellowStartBinding + private lateinit var viewModel: MainViewModel + private lateinit var adapter: StartAndEndAdapter + private var permission_read_audio: Array = arrayOf(Manifest.permission.READ_MEDIA_AUDIO) + private var permission_record_audio: String = Manifest.permission.RECORD_AUDIO + private var permission_store: Array = arrayOf( + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) + private lateinit var requestStorePermissionsLauncher: ActivityResultLauncher> + private lateinit var requestRecordAudioLauncher: ActivityResultLauncher + private lateinit var audioPickerLauncher: ActivityResultLauncher + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + // Inflate the layout for this fragment + binding = FragmentYellowStartBinding.inflate(inflater, container, false) + viewModel = ViewModelProvider(requireActivity())[MainViewModel::class.java] + initView() + return binding.root + } + + override fun onResume() { + super.onResume() + viewModel.loadCustomItems() + } + private fun initView() { + adapter = StartAndEndAdapter() + adapter.setListener(this) + viewModel.customItems.observe(viewLifecycleOwner){customList -> + Log.d("CustomFragment", "initView: $customList") + if(customList.isEmpty()){ + binding.emptyView.visibility=View.VISIBLE + binding.recyclerView.visibility=View.GONE + }else{ + binding.emptyView.visibility=View.GONE + binding.recyclerView.visibility=View.VISIBLE + adapter.setList(customList,1) + adapter.notifyDataSetChanged() + } + } + binding.recyclerView.adapter = adapter + binding.recyclerView.layoutManager= + LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL,false) + binding.recordImg.setOnClickListener { + selectBtnClick(1) + } + binding.diyImg.setOnClickListener { + selectBtnClick(0) + } + requestRecordAudioLauncher = registerForActivityResult( + RequestPermission() + ) { isGranted: Boolean -> + if (isGranted) { + intentRecordAudio() + } else { + Toast.makeText(requireContext(), "Recording permission denied", Toast.LENGTH_SHORT) + .show() + } + } + + requestStorePermissionsLauncher = + registerForActivityResult, Map>( + RequestMultiplePermissions() + ) { result -> + var isGranted = true + for ((_, value) in result) { + isGranted = value + if (!value) { + isGranted = false + } + } + if (isGranted) { + importFromLocal() + } else { + Toast.makeText(requireContext(), " permits denied", Toast.LENGTH_SHORT) + .show() + } + } + audioPickerLauncher = registerForActivityResult( + GetContent() + ) { uri -> // Handle the returned Uri + + if (uri != null) { + Log.d("---------", "========uri=$uri") + val duration: Long = CommonUtil.getAudioDuration(requireContext(), uri) + val intent = Intent( + requireContext(), + SaveToLocalActivity::class.java + ) + intent.putExtra(SaveToLocalActivity.KEY_Path, uri.toString()) + intent.putExtra(SaveToLocalActivity.KEY_Time, duration) + startActivity(intent) + } + } + } + + override fun onMoreClick(duplicate: Duplicate) { + viewModel.deleteItem(duplicate) + } + + fun selectBtnClick(type: Int) { + if(type == 0){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + if (ContextCompat.checkSelfPermission( + requireContext(), + permission_read_audio[0] + ) + != PackageManager.PERMISSION_GRANTED + ) { + requestStorePermissionsLauncher.launch(permission_read_audio) + // ActivityCompat.requestPermissions(requireActivity(), ConstValues.permission_read_audio, +// ConstValues.REQUEST_READ_STORAGE_PERMISSION); + } else { + importFromLocal() + } + } else { + if ((ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.WRITE_EXTERNAL_STORAGE + ) + != PackageManager.PERMISSION_GRANTED) || + (ContextCompat.checkSelfPermission( + requireContext(), + Manifest.permission.READ_EXTERNAL_STORAGE + ) + != PackageManager.PERMISSION_GRANTED) + ) { + requestStorePermissionsLauncher.launch(permission_store) + // ActivityCompat.requestPermissions(requireActivity(), ConstValues.permission_store, ConstValues.REQUEST_READ_STORAGE_PERMISSION); + } else { + importFromLocal() + } + } + } + else{ + checkAndRequestAudioPermission() + } + } + private fun importFromLocal() { + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.setType("audio/*") + audioPickerLauncher.launch("audio/*") + } + private fun checkAndRequestAudioPermission() { + if (ContextCompat.checkSelfPermission(requireContext(), permission_record_audio) + != PackageManager.PERMISSION_GRANTED + ) { + requestRecordAudioLauncher.launch(permission_record_audio) + } else { + intentRecordAudio() + } + } + private fun intentRecordAudio() { + val intent = Intent(requireContext(), ListenSoundActivity::class.java) + startActivity(intent) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ut/ChooseTimeFragment.kt b/app/src/main/java/com/design/mischiefgo/ut/ChooseTimeFragment.kt new file mode 100644 index 0000000..b16c8a9 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/ChooseTimeFragment.kt @@ -0,0 +1,85 @@ +package com.design.mischiefgo.ut + +import android.app.Activity +import android.graphics.Color +import android.util.Log +import android.view.Gravity +import android.view.View +import android.view.ViewGroup +import android.widget.PopupWindow +import com.design.mischiefgo.databinding.FragChooseTimeBinding + +class ChooseTimeFragment(context: Activity, private val mListener: SoundListener) : View.OnClickListener { + + private val binding: FragChooseTimeBinding = FragChooseTimeBinding.inflate(context.layoutInflater) + private val popupWindow: PopupWindow = PopupWindow( + binding.root, + ViewGroup.LayoutParams.WRAP_CONTENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + + init { + popupWindow.isOutsideTouchable = true + popupWindow.isFocusable = true + binding.tvOff.isSelected = true + binding.tvOff.setOnClickListener(this) + binding.tv15s.setOnClickListener(this) + binding.tv30s.setOnClickListener(this) + binding.tv1m.setOnClickListener(this) + binding.tv5m.setOnClickListener(this) + } + + fun showTop(view: View) { + val location = IntArray(2) + view.getLocationOnScreen(location) + + val x = location[0] + val y = location[1] + + val popupHeight = popupWindow.height + val height = view.height + val width = view.width + Log.d("-------------", "--------x=$x---y=$y----popupHeight=$popupHeight") + + popupWindow.showAsDropDown(view, -50, 0, Gravity.NO_GRAVITY) + } + + private fun setSelected(tv: DefaultTextView) { + val childCount = binding.layoutTime.childCount + for (i in 0 until childCount) { + val child = binding.layoutTime.getChildAt(i) + if (child is DefaultTextView) { + if (child == tv) { + child.isSelected = true + child.setTextColor(Color.WHITE) + } else { + child.isSelected = false +// child.setTextColor(Color.parseColor("#3b3664")) + } + println("TextView: ${child.text}") + } + } + } + + fun hide() { + popupWindow.dismiss() + } + + fun setOffSelected() { + setSelected(binding.tvOff) + } + + override fun onClick(v: View) { + if (v is DefaultTextView) { + val string = v.text.toString() + when (string) { + "off" -> mListener.onClickTimerListener(-1) + "15 sec" -> mListener.onClickTimerListener(15 * 1000L) + "30 sec" -> mListener.onClickTimerListener(30 * 1000L) + "1 min" -> mListener.onClickTimerListener(60 * 1000L) + "5 min" -> mListener.onClickTimerListener(5 * 60 * 1000L) + } + setSelected(v) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ut/CommonUtil.kt b/app/src/main/java/com/design/mischiefgo/ut/CommonUtil.kt new file mode 100644 index 0000000..382ce46 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/CommonUtil.kt @@ -0,0 +1,108 @@ +package com.design.mischiefgo.ut + +import android.content.Context +import android.media.AudioManager +import android.media.MediaMetadataRetriever +import android.net.Uri +import android.widget.SeekBar +import androidx.appcompat.app.AppCompatActivity +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.entity.Usual +import org.json.JSONArray +import org.json.JSONException +import java.io.BufferedReader +import java.io.IOException +import java.io.InputStream +import java.io.InputStreamReader +import java.io.StringWriter + +object CommonUtil { + fun getString(input: InputStream): String { + try { + val charArray = CharArray(input.available()) + var count: Int + val stringWriter = StringWriter() + val inputStreamReader = InputStreamReader(input) + val bufferedReader = BufferedReader(inputStreamReader) + while ((bufferedReader.read(charArray).also { count = it }) != -1) { + stringWriter.write(charArray, 0, count) + } + return stringWriter.toString() + } catch (exception: IOException) { + return "" + } + } + fun getUsual(str: String?): List? { + try { + val data: MutableList = ArrayList() + val jsonArray = JSONArray(str) + + for (i in 0.. = ArrayList() + for (k in 0..() { + private lateinit var context:Context + private var type:Int=0 + private var infoList :List = arrayListOf() + private lateinit var listener: OnMoreClickListener + + companion object { + private const val VIEW_TYPE_1 = 1 + private const val VIEW_TYPE_2 = 2 + } + + // 第一个 ViewHolder + class ViewHolder1(val binding: ItemNoRandomBinding): RecyclerView.ViewHolder(binding.root) + + // 第二个 ViewHolder + class ViewHolder2(val binding: ItemRandomBinding): RecyclerView.ViewHolder(binding.root) + + override fun getItemViewType(position: Int): Int { + return if (type != 0) VIEW_TYPE_2 else VIEW_TYPE_1 + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + context = parent.context + return when (viewType) { + VIEW_TYPE_1 -> { + val binding = ItemNoRandomBinding.inflate(LayoutInflater.from(context), parent, false) + ViewHolder1(binding) + } + VIEW_TYPE_2 -> { + val binding = ItemRandomBinding.inflate(LayoutInflater.from(context), parent, false) + ViewHolder2(binding) + } + else -> throw IllegalArgumentException("Invalid view type") + } + } + + override fun getItemCount(): Int { + return infoList.size + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + val duplicate = infoList[position] + val covert: String = duplicate.convert + Log.d("covert",covert) + + when (holder) { + is ViewHolder1 -> { + // 使用 ItemShowDetail1Binding 的布局 + Glide.with(context).load(covert).into(holder.binding.image) + holder.binding.title.text = duplicate.name + holder.binding.imgCard.setOnClickListener { + val intent = Intent(context, UseSoundActivity::class.java) + intent.putExtra(UseSoundActivity.KEY_LIST_DATA, duplicate) + context.startActivity(intent) + } + } + is ViewHolder2 -> { + // 使用 ItemShowDetail2Binding 的布局 + Glide.with(context).load(covert).into(holder.binding.image) +// holder.binding.title.text = duplicate.name + holder.binding.imgCard.setOnClickListener { + listener.onMoreClick(duplicate) + } + } + } + } + + fun setList(list: List, setType: Int = 0) { + this.infoList = list + this.type = setType + notifyDataSetChanged() + } + + fun setListener(listener: OnMoreClickListener) { + this.listener = listener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ut/SoundListener.kt b/app/src/main/java/com/design/mischiefgo/ut/SoundListener.kt new file mode 100644 index 0000000..2ad8246 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/SoundListener.kt @@ -0,0 +1,5 @@ +package com.design.mischiefgo.ut + +interface SoundListener { + fun onClickTimerListener(time: Long) +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ut/StartAndEndAdapter.kt b/app/src/main/java/com/design/mischiefgo/ut/StartAndEndAdapter.kt new file mode 100644 index 0000000..ff4509a --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/StartAndEndAdapter.kt @@ -0,0 +1,74 @@ +package com.design.mischiefgo.ut + +import android.content.Context +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.design.mischiefgo.R +import com.design.mischiefgo.entity.Duplicate +import com.design.mischiefgo.ui.UseSoundActivity +import com.bumptech.glide.Glide +import com.design.mischiefgo.databinding.ItemStartAndEndBinding + +class StartAndEndAdapter: RecyclerView.Adapter() { + private lateinit var context:Context + private var infoList :List = arrayListOf() + private var type:Int=0 + private lateinit var listener:OnMoreClickListener + + class SelfViewHolder(val binding: ItemStartAndEndBinding): RecyclerView.ViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SelfViewHolder { + context=parent.context + val binding=ItemStartAndEndBinding.inflate(LayoutInflater.from(context),parent,false) + return SelfViewHolder(binding) + } + override fun getItemCount(): Int { + return infoList.size + } + override fun onBindViewHolder(holder: SelfViewHolder, position: Int) { + if (position == itemCount - 1) { + holder.binding.vBottom.visibility = View.VISIBLE + } else { + holder.binding.vBottom.visibility = View.GONE + } + val myInfo = infoList[position] + val covert: String = myInfo.convert + Log.d("covert",covert+"typre$type") + if(type==0){ + Glide.with(context).load(covert).placeholder(R.drawable.music_default_copy).error(R.drawable.music_default_copy).into(holder.binding.ivImage) + holder.binding.imgLike.setImageDrawable(context.getDrawable(R.drawable.punctate_selector)) + holder.binding.imgLike.isSelected=true + holder.binding.tint.visibility=View.VISIBLE + if(myInfo.isCustomization){ + holder.binding.tint.text="resource:upload" + }else{ + holder.binding.tint.text="resource:original" + } + + }else{ + Glide.with(context).load(R.drawable.music_default_copy).placeholder(R.drawable.music_default_copy).error(R.drawable.music_default_copy).into(holder.binding.ivImage) + holder.binding.imgLike.setImageDrawable(context.getDrawable(R.drawable.remove_any_small)) + holder.binding.tint.visibility=View.GONE + } + holder.binding.tvTitle.text = myInfo.name + holder.binding.imgLike.setOnClickListener { + this.listener.onMoreClick(myInfo) + } + holder.binding.item.setOnClickListener { + val intent = Intent(context, UseSoundActivity::class.java) + intent.putExtra(UseSoundActivity.KEY_LIST_DATA, myInfo) + context.startActivity(intent) + } + } + fun setList(list: List,type:Int){ + this.type=type + this.infoList=list + } + fun setListener(listener: OnMoreClickListener){ + this.listener=listener + } +} \ No newline at end of file diff --git a/app/src/main/java/com/design/mischiefgo/ut/StartPlayUtil.kt b/app/src/main/java/com/design/mischiefgo/ut/StartPlayUtil.kt new file mode 100644 index 0000000..fb6d0c6 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/StartPlayUtil.kt @@ -0,0 +1,66 @@ +package com.design.mischiefgo.ut + +import android.content.Context +import android.media.MediaRecorder +import java.io.File +import java.io.IOException + + +class StartPlayUtil(context: Context) { + private var mediaRecorder: MediaRecorder? = null + private val tempFileName: String + private val fileName: String? = null + private var isRecording = false + + init { + val dir = context.cacheDir + val file = File(dir, "temp_audio.mp3") + tempFileName = file.absolutePath + } + + + fun startRecording() { + if (isRecording) return + mediaRecorder = MediaRecorder() + mediaRecorder!!.setAudioSource(MediaRecorder.AudioSource.MIC) + mediaRecorder!!.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP) + mediaRecorder!!.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB) + mediaRecorder!!.setOutputFile(tempFileName) + + try { + mediaRecorder!!.prepare() + mediaRecorder!!.start() + isRecording = true + } catch (e: IOException) { + e.printStackTrace() + } + } + + fun stopRecording() { + if (!isRecording || mediaRecorder == null) return + + try { + // 只有在录制状态下才能调用stop + mediaRecorder?.stop() + } catch (e: IllegalStateException) { + e.printStackTrace() + } catch (e: RuntimeException) { + e.printStackTrace() + } finally { + releaseMediaRecorder() + isRecording = false + } + } + private fun releaseMediaRecorder() { + try { + mediaRecorder?.release() + } catch (e: Exception) { + e.printStackTrace() + } finally { + mediaRecorder = null + } + } + fun getTempFileName(): String { + return tempFileName + } +} diff --git a/app/src/main/java/com/design/mischiefgo/ut/YellowCenterAdapter.kt b/app/src/main/java/com/design/mischiefgo/ut/YellowCenterAdapter.kt new file mode 100644 index 0000000..c0244f8 --- /dev/null +++ b/app/src/main/java/com/design/mischiefgo/ut/YellowCenterAdapter.kt @@ -0,0 +1,45 @@ +package com.design.mischiefgo.ut + +import android.content.Context +import android.content.Intent +import android.util.Log +import android.view.LayoutInflater +import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView +import com.design.mischiefgo.entity.Usual +import com.design.mischiefgo.databinding.ItemYellowCenterBinding +import com.design.mischiefgo.ui.TypeInActivity +import com.bumptech.glide.Glide + +class YellowCenterAdapter: RecyclerView.Adapter() { + private lateinit var context:Context + private var beanList :List = arrayListOf() + + + class DoubleViewHolder(val binding: ItemYellowCenterBinding): RecyclerView.ViewHolder(binding.root) + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DoubleViewHolder { + context=parent.context + val binding=ItemYellowCenterBinding.inflate(LayoutInflater.from(context),parent,false) + return DoubleViewHolder(binding) + } + override fun getItemCount(): Int { + return beanList.size + } + override fun onBindViewHolder(holder: DoubleViewHolder, position: Int) { + + val myBean = beanList[position] + val covert: String = myBean.convert + Log.d("covert",covert) + Glide.with(context).load(covert).into(holder.binding.image) + holder.binding.title.text = myBean.name + holder.binding.imgRelay.setOnClickListener { + val intent = Intent(context, TypeInActivity::class.java) + intent.putExtra(TypeInActivity.KEY_LIST_DATA, myBean) + context.startActivity(intent) + } + } + fun setList(list: List){ + this.beanList=list + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable/all_of_main_bg.xml b/app/src/main/res/drawable/all_of_main_bg.xml new file mode 100644 index 0000000..f7b4009 --- /dev/null +++ b/app/src/main/res/drawable/all_of_main_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/center_sound_0.png b/app/src/main/res/drawable/center_sound_0.png new file mode 100644 index 0000000..9b2309c Binary files /dev/null and b/app/src/main/res/drawable/center_sound_0.png differ diff --git a/app/src/main/res/drawable/center_sound_1.png b/app/src/main/res/drawable/center_sound_1.png new file mode 100644 index 0000000..47827c0 Binary files /dev/null and b/app/src/main/res/drawable/center_sound_1.png differ diff --git a/app/src/main/res/drawable/center_sound_selector.xml b/app/src/main/res/drawable/center_sound_selector.xml new file mode 100644 index 0000000..e4a7121 --- /dev/null +++ b/app/src/main/res/drawable/center_sound_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/clock_selector.xml b/app/src/main/res/drawable/clock_selector.xml new file mode 100644 index 0000000..d44f0cf --- /dev/null +++ b/app/src/main/res/drawable/clock_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/close_finishs.xml b/app/src/main/res/drawable/close_finishs.xml new file mode 100644 index 0000000..b47d615 --- /dev/null +++ b/app/src/main/res/drawable/close_finishs.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/empty_list_ic.png b/app/src/main/res/drawable/empty_list_ic.png new file mode 100644 index 0000000..c486d15 Binary files /dev/null and b/app/src/main/res/drawable/empty_list_ic.png differ diff --git a/app/src/main/res/drawable/for_like.xml b/app/src/main/res/drawable/for_like.xml new file mode 100644 index 0000000..f910e80 --- /dev/null +++ b/app/src/main/res/drawable/for_like.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/for_like_1.xml b/app/src/main/res/drawable/for_like_1.xml new file mode 100644 index 0000000..ddfae10 --- /dev/null +++ b/app/src/main/res/drawable/for_like_1.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/for_row.xml b/app/src/main/res/drawable/for_row.xml new file mode 100644 index 0000000..5ee0398 --- /dev/null +++ b/app/src/main/res/drawable/for_row.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/for_row_1.xml b/app/src/main/res/drawable/for_row_1.xml new file mode 100644 index 0000000..9a3a92a --- /dev/null +++ b/app/src/main/res/drawable/for_row_1.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/for_time.xml b/app/src/main/res/drawable/for_time.xml new file mode 100644 index 0000000..5551289 --- /dev/null +++ b/app/src/main/res/drawable/for_time.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/for_time_1.xml b/app/src/main/res/drawable/for_time_1.xml new file mode 100644 index 0000000..a6c7919 --- /dev/null +++ b/app/src/main/res/drawable/for_time_1.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..ca3826a --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/listen_sound_1.png b/app/src/main/res/drawable/listen_sound_1.png new file mode 100644 index 0000000..1f3f97f Binary files /dev/null and b/app/src/main/res/drawable/listen_sound_1.png differ diff --git a/app/src/main/res/drawable/listen_sound_2.xml b/app/src/main/res/drawable/listen_sound_2.xml new file mode 100644 index 0000000..24c8ccd --- /dev/null +++ b/app/src/main/res/drawable/listen_sound_2.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/drawable/listen_sound_selector.xml b/app/src/main/res/drawable/listen_sound_selector.xml new file mode 100644 index 0000000..14b87fa --- /dev/null +++ b/app/src/main/res/drawable/listen_sound_selector.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/main_nagitive_bar.xml b/app/src/main/res/drawable/main_nagitive_bar.xml new file mode 100644 index 0000000..35c520a --- /dev/null +++ b/app/src/main/res/drawable/main_nagitive_bar.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/music_default_copy.xml b/app/src/main/res/drawable/music_default_copy.xml new file mode 100644 index 0000000..e989900 --- /dev/null +++ b/app/src/main/res/drawable/music_default_copy.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/no_random_bg.xml b/app/src/main/res/drawable/no_random_bg.xml new file mode 100644 index 0000000..538634d --- /dev/null +++ b/app/src/main/res/drawable/no_random_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/play_selector.xml b/app/src/main/res/drawable/play_selector.xml new file mode 100644 index 0000000..4daeb9c --- /dev/null +++ b/app/src/main/res/drawable/play_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/pop_default_cor_bg.xml b/app/src/main/res/drawable/pop_default_cor_bg.xml new file mode 100644 index 0000000..a004b5b --- /dev/null +++ b/app/src/main/res/drawable/pop_default_cor_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/pop_sel_selector.xml b/app/src/main/res/drawable/pop_sel_selector.xml new file mode 100644 index 0000000..7aed8e4 --- /dev/null +++ b/app/src/main/res/drawable/pop_sel_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/punctate_selector.xml b/app/src/main/res/drawable/punctate_selector.xml new file mode 100644 index 0000000..f737ca9 --- /dev/null +++ b/app/src/main/res/drawable/punctate_selector.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/remove_any_small.png b/app/src/main/res/drawable/remove_any_small.png new file mode 100644 index 0000000..105af19 Binary files /dev/null and b/app/src/main/res/drawable/remove_any_small.png differ diff --git a/app/src/main/res/drawable/save_btn_decoration.xml b/app/src/main/res/drawable/save_btn_decoration.xml new file mode 100644 index 0000000..5dd5dcd --- /dev/null +++ b/app/src/main/res/drawable/save_btn_decoration.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/start_and_end_bg.xml b/app/src/main/res/drawable/start_and_end_bg.xml new file mode 100644 index 0000000..5368dd2 --- /dev/null +++ b/app/src/main/res/drawable/start_and_end_bg.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/start_joke_bg.xml b/app/src/main/res/drawable/start_joke_bg.xml new file mode 100644 index 0000000..5c9b161 --- /dev/null +++ b/app/src/main/res/drawable/start_joke_bg.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/start_play_121.png b/app/src/main/res/drawable/start_play_121.png new file mode 100644 index 0000000..17a2ae2 Binary files /dev/null and b/app/src/main/res/drawable/start_play_121.png differ diff --git a/app/src/main/res/drawable/stroke_brown_sel_choose.xml b/app/src/main/res/drawable/stroke_brown_sel_choose.xml new file mode 100644 index 0000000..23bf7f8 --- /dev/null +++ b/app/src/main/res/drawable/stroke_brown_sel_choose.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/trans_bg.xml b/app/src/main/res/drawable/trans_bg.xml new file mode 100644 index 0000000..18ddfd6 --- /dev/null +++ b/app/src/main/res/drawable/trans_bg.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/trumpet_ic.png b/app/src/main/res/drawable/trumpet_ic.png new file mode 100644 index 0000000..7edc3ad Binary files /dev/null and b/app/src/main/res/drawable/trumpet_ic.png differ diff --git a/app/src/main/res/drawable/type_in_bg.xml b/app/src/main/res/drawable/type_in_bg.xml new file mode 100644 index 0000000..0031106 --- /dev/null +++ b/app/src/main/res/drawable/type_in_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/use_sound_oval_bg.xml b/app/src/main/res/drawable/use_sound_oval_bg.xml new file mode 100644 index 0000000..631057c --- /dev/null +++ b/app/src/main/res/drawable/use_sound_oval_bg.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/use_sound_radius.xml b/app/src/main/res/drawable/use_sound_radius.xml new file mode 100644 index 0000000..c6f4f05 --- /dev/null +++ b/app/src/main/res/drawable/use_sound_radius.xml @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/wavy_ic.png b/app/src/main/res/drawable/wavy_ic.png new file mode 100644 index 0000000..ad7f212 Binary files /dev/null and b/app/src/main/res/drawable/wavy_ic.png differ diff --git a/app/src/main/res/drawable/white_35_all_radius.xml b/app/src/main/res/drawable/white_35_all_radius.xml new file mode 100644 index 0000000..1a8dca5 --- /dev/null +++ b/app/src/main/res/drawable/white_35_all_radius.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yellow_center_item_bg.xml b/app/src/main/res/drawable/yellow_center_item_bg.xml new file mode 100644 index 0000000..1bd882f --- /dev/null +++ b/app/src/main/res/drawable/yellow_center_item_bg.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yellow_end_0.png b/app/src/main/res/drawable/yellow_end_0.png new file mode 100644 index 0000000..bb9de24 Binary files /dev/null and b/app/src/main/res/drawable/yellow_end_0.png differ diff --git a/app/src/main/res/drawable/yellow_end_1.png b/app/src/main/res/drawable/yellow_end_1.png new file mode 100644 index 0000000..abcef15 Binary files /dev/null and b/app/src/main/res/drawable/yellow_end_1.png differ diff --git a/app/src/main/res/drawable/yellow_end_selector.xml b/app/src/main/res/drawable/yellow_end_selector.xml new file mode 100644 index 0000000..352a012 --- /dev/null +++ b/app/src/main/res/drawable/yellow_end_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yellow_start_0.png b/app/src/main/res/drawable/yellow_start_0.png new file mode 100644 index 0000000..cc9a3a1 Binary files /dev/null and b/app/src/main/res/drawable/yellow_start_0.png differ diff --git a/app/src/main/res/drawable/yellow_start_1.png b/app/src/main/res/drawable/yellow_start_1.png new file mode 100644 index 0000000..4f7fafe Binary files /dev/null and b/app/src/main/res/drawable/yellow_start_1.png differ diff --git a/app/src/main/res/drawable/yellow_start_item1.png b/app/src/main/res/drawable/yellow_start_item1.png new file mode 100644 index 0000000..4a47f82 Binary files /dev/null and b/app/src/main/res/drawable/yellow_start_item1.png differ diff --git a/app/src/main/res/drawable/yellow_start_item2.png b/app/src/main/res/drawable/yellow_start_item2.png new file mode 100644 index 0000000..96510fc Binary files /dev/null and b/app/src/main/res/drawable/yellow_start_item2.png differ diff --git a/app/src/main/res/drawable/yellow_start_selector.xml b/app/src/main/res/drawable/yellow_start_selector.xml new file mode 100644 index 0000000..3dec0ae --- /dev/null +++ b/app/src/main/res/drawable/yellow_start_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/yellow_white.xml b/app/src/main/res/drawable/yellow_white.xml new file mode 100644 index 0000000..8ff1c5d --- /dev/null +++ b/app/src/main/res/drawable/yellow_white.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_ad_show.xml b/app/src/main/res/layout/activity_ad_show.xml new file mode 100644 index 0000000..96c7e1c --- /dev/null +++ b/app/src/main/res/layout/activity_ad_show.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_listen_sound.xml b/app/src/main/res/layout/activity_listen_sound.xml new file mode 100644 index 0000000..f36f6e9 --- /dev/null +++ b/app/src/main/res/layout/activity_listen_sound.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_navigation.xml b/app/src/main/res/layout/activity_navigation.xml new file mode 100644 index 0000000..ad35396 --- /dev/null +++ b/app/src/main/res/layout/activity_navigation.xml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_save_to_local.xml b/app/src/main/res/layout/activity_save_to_local.xml new file mode 100644 index 0000000..719bdec --- /dev/null +++ b/app/src/main/res/layout/activity_save_to_local.xml @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_type_in.xml b/app/src/main/res/layout/activity_type_in.xml new file mode 100644 index 0000000..4cad93d --- /dev/null +++ b/app/src/main/res/layout/activity_type_in.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_use_sound.xml b/app/src/main/res/layout/activity_use_sound.xml new file mode 100644 index 0000000..f0f1c62 --- /dev/null +++ b/app/src/main/res/layout/activity_use_sound.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/frag_choose_time.xml b/app/src/main/res/layout/frag_choose_time.xml new file mode 100644 index 0000000..1df7499 --- /dev/null +++ b/app/src/main/res/layout/frag_choose_time.xml @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_yellow_center.xml b/app/src/main/res/layout/fragment_yellow_center.xml new file mode 100644 index 0000000..2545aae --- /dev/null +++ b/app/src/main/res/layout/fragment_yellow_center.xml @@ -0,0 +1,26 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_yellow_end.xml b/app/src/main/res/layout/fragment_yellow_end.xml new file mode 100644 index 0000000..25bbfd7 --- /dev/null +++ b/app/src/main/res/layout/fragment_yellow_end.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_yellow_start.xml b/app/src/main/res/layout/fragment_yellow_start.xml new file mode 100644 index 0000000..ce83498 --- /dev/null +++ b/app/src/main/res/layout/fragment_yellow_start.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_no_random.xml b/app/src/main/res/layout/item_no_random.xml new file mode 100644 index 0000000..f6012be --- /dev/null +++ b/app/src/main/res/layout/item_no_random.xml @@ -0,0 +1,44 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_random.xml b/app/src/main/res/layout/item_random.xml new file mode 100644 index 0000000..25e1b24 --- /dev/null +++ b/app/src/main/res/layout/item_random.xml @@ -0,0 +1,33 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_start_and_end.xml b/app/src/main/res/layout/item_start_and_end.xml new file mode 100644 index 0000000..7ceb444 --- /dev/null +++ b/app/src/main/res/layout/item_start_and_end.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_yellow_center.xml b/app/src/main/res/layout/item_yellow_center.xml new file mode 100644 index 0000000..5d77d54 --- /dev/null +++ b/app/src/main/res/layout/item_yellow_center.xml @@ -0,0 +1,47 @@ + + + + + + + + + + \ 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..c4a603d --- /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..c4a603d --- /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..86abf13 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_foreground.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..e021221 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..e7d9b1e 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..336cf5f 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_foreground.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..9edea7f 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..ca35056 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..af1d3e4 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_foreground.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..790008a 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..c0de31e 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..4436e7c 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_foreground.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..7c5fa13 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..1cbc410 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..ff02216 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_foreground.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp new file mode 100644 index 0000000..7c686dd 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..88a165f Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..176fdad --- /dev/null +++ b/app/src/main/res/values-night/themes.xml @@ -0,0 +1,7 @@ + + + + \ 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..fd5cc14 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,13 @@ + + + #FF000000 + #FFFFFFFF + #f8f8f8 + #a0a0a0 + #ff9572 + #644200 + #f9a300 + #ffc100 + + + \ 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..5e290e4 --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,28 @@ + + MischiefGo + Hello blank fragment + Record + Collect + Audio + More Pranks + Choose a Prank + off + 15 sec + 30 sec + 1 min + 5 min + Favorite + Recording + Recording Audio + Click to start + Click to finish… + Save Sound + Name the sound you created. + Save + 00 : 00 : 00 + An audio file with the same name already exists! + Please enter + Successfully save + Audio not found. + Home + \ 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..184fe03 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,9 @@ + + + + +