diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..fbf2d89 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,51 @@ +name: πŸ› Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС (Bug Report) +description: Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ Π±Π°Π³Π΅ ΠΈΠ»ΠΈ сбоС Π² Ρ€Π°Π±ΠΎΡ‚Π΅ HyperBoost +title: "[Bug]: " +labels: ["bug"] +body: + - type: markdown + attributes: + value: Бпасибо Π·Π° сообщСниС ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅! ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΡƒ Π½ΠΈΠΆΠ΅. + - type: input + id: version + attributes: + label: ВСрсия прилоТСния (App Version) + placeholder: "НапримСр: 1.4.0 (см. Настройки -> О ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ)" + validations: + required: true + - type: input + id: device + attributes: + label: МодСль устройства (Device Model) + placeholder: "НапримСр: Xiaomi 17T Pro, POCO F5, Samsung Galaxy S24" + validations: + required: true + - type: input + id: os + attributes: + label: ΠŸΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° ΠΈ вСрсия Android (OS & Android Version) + placeholder: "НапримСр: HyperOS 4.0 / Android 17, One UI 6.1 / Android 14" + validations: + required: true + - type: textarea + id: steps + attributes: + label: Π¨Π°Π³ΠΈ для воспроизвСдСния (Steps to Reproduce) + placeholder: "1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ...\n2. ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΎΠΊ...\n3. ΠŸΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚..." + validations: + required: true + - type: textarea + id: actual + attributes: + label: ЀактичСскоС ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ (Actual Behavior) + placeholder: "Π§Ρ‚ΠΎ пошло Π½Π΅ Ρ‚Π°ΠΊ (Ρ…Ρ€ΠΈΠΏ, отсутствиС эффСкта, сбой острова ΠΈ Ρ‚.Π΄.)" + validations: + required: true + - type: textarea + id: system_report + attributes: + label: ДиагностичСский ΠΎΡ‚Ρ‡Ρ‘Ρ‚ (System Diagnostic Report) + description: "ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ «БистСма» Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Β» ΠΈ Π²ΡΡ‚Π°Π²ΡŒΡ‚Π΅ тСкст сюда:" + placeholder: "Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ скопированный ΠΎΡ‚Ρ‡Ρ‘Ρ‚ Π²ΠΊΠ»Π°Π΄ΠΊΠΈ БистСма..." + validations: + required: false diff --git a/.gitignore b/.gitignore index 9eed36b..d85f066 100644 --- a/.gitignore +++ b/.gitignore @@ -12,3 +12,4 @@ keystore.properties *.aab *.ap_ *.dex +docs/agent/logs/ diff --git a/CHANGELOG.md b/CHANGELOG.md index ef7dde5..eb8b9f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,15 +3,23 @@ All notable changes to **HyperBoost** are documented in this file. Format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). -## [Unreleased] +## [1.4.0] - 2026-10-24 ### Fixed - **DSP Limiter Continuity:** Fixed $C^1$ jump of ~3,700 amplitude units at the knee boundary ($0.75 \times \text{threshold}$) in `SoftwarePcmDspProcessor` and `AudioBoosterService` soft-knee tanh limiters. - **Audio Loop Allocations:** Eliminated 48,000 `Pair` heap allocations per second in PCM audio capture loop via zero-allocation `processStereoSampleDirect`. - **Audio Lifecycle:** Added missing `audioManager.requestAudioFocus(req)` call in `AudioBoosterService` and registered `AudioDeviceCallback` with clean unregistration on service destroy. - **UI Interaction:** Connected `freeLensDragEnabled` setting to `GlassLensTabBar`, ensuring 100% reliable tab switching on normal tap without accidental drag interception. -- **Localization & Icons:** Eliminated hardcoded strings in Glance Widget, Home, Island JSON Builder, and System screens, achieving 100% key parity between English and Russian resources. Replaced deprecated Compose icons with `AutoMirrored` counterparts. -- **Documentation:** Restored complete release instructions in `docs/RELEASING.md` and cleaned markdown formatting in `README.ru.md`. +- **Localization & Icons:** Eliminated hardcoded strings in Glance Widget, Home, Island JSON Builder, Quick Settings Tile, and System screens, achieving 100% key parity between English and Russian resources. Replaced deprecated Compose icons with `AutoMirrored` counterparts. +- **Documentation & Workflows:** Restored complete release instructions in `docs/RELEASING.md`, updated GitHub issue templates, and verified release workflows. + +### Changed +- Replaced hardcoded status dB and sleep timer labels with localized formatting (`status_active_soft_fmt`, `status_active_capture_fmt`, `sleep_timer_remaining_fmt`). +- Updated release build configuration to version `1.4.0` (versionCode `10400`). + +### Performance +- Reduced PCM loop memory allocations from 48,000 objects/sec to 0 objects/sec, eliminating GC micro-stutters during direct audio capture. +- Release APK size optimized to 4.1 MB with R8 full mode and resource shrinking (-93.2% vs debug build). ## [1.3.1] - 2026-10-20 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5a40d84..9ed9a57 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,20 +1,25 @@ -```markdown # Contributing to HyperBoost -Bug reports, device compatibility reports, and translations are welcome. +Thank you for contributing to HyperBoost! -## Reporting device compatibility or bugs -1. Open the **System** tab in the app. -2. Run **Verify Audio Effects** and **Island Self-Test**. -3. Tap **Copy Report** and paste the output into a new GitHub Issue. The report contains only hardware/OS flags and no personal identifiers. +## How to Contribute -## Adding or fixing translations -- Default English strings are in `app/src/main/res/values/strings.xml`. -- Russian strings are in `app/src/main/res/values-ru/strings.xml`. -- Both files must contain the exact same `` keys. Run `./gradlew test` before submitting a PR β€” `DspAndLocalizationTest` automatically checks that no keys are missing. +1. **Reporting Bugs:** + - Use the [Bug Report template](.github/ISSUE_TEMPLATE/bug_report.yml). + - Please include device model, Android / OS version, and the diagnostic report from the **System** tab (**Copy Report** button). -## Commit message style -Use short, imperative commit messages describing one change per commit: -- `fix: route bass boost through DynamicsProcessing when hardware effect is unsupported` -- `feat: add backdrop blur to bottom navigation bar using Haze` -- `docs: update compatibility table in README` +2. **Localization (i18n):** + - Strings are kept in `app/src/main/res/values/strings.xml` (English) and `app/src/main/res/values-ru/strings.xml` (Russian). + - Ensure 100% key parity between English and other languages before submitting PRs. + +3. **Code Guidelines:** + - Stack: Kotlin 2.x, Jetpack Compose, MVVM, StateFlow, DataStore. + - Design Tokens: Use `LocalGlassTokens.current` instead of hardcoded dimension or color magic numbers. + - Audio Loop: Zero allocations in sample processing loops. No GC pressure or blocking calls. + - Android IPC: All `PendingIntent` must use `FLAG_IMMUTABLE`. + +4. **Testing before PR:** + ```bash + ./gradlew test lintDebug assembleDebug + ``` + All unit tests and lint checks must pass. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..edb2f14 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 MrQuster + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 8aea4b7..43f0a7b 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,129 @@
HyperBoost icon

HyperBoost

-

Volume booster and equalizer for Android with Xiaomi Hyper Island support

+

Volume booster and equalizer for Android with Xiaomi Hyper Island and Liquid Glass UI

+

+ Latest Release + License: MIT + Android CI + Android 10+ +

English β€’ Русский β€’ - Download APK (Releases) + Download APK β€’ + Report Issue

--- -HyperBoost is an Android app that pushes audio volume above the standard 100% system cap on phone speakers, Bluetooth headphones, and USB DACs. It uses a translucent glass interface (Liquid Glass) and runs on Android 10 (API 29) and newer. +HyperBoost is an open-source Android utility (Android 10+, API 29+) that increases audio volume above the standard 100% cap on phone speakers, Bluetooth headphones, external speakers, and USB DACs. It features a translucent Liquid Glass interface, 5 distinct screens, and integration with Xiaomi Super Island (`miui.focus.param`) and Android 16+ Live Updates. -## How it works +## Screenshots -Android handles audio effects differently depending on the manufacturer and Android version. HyperBoost includes two separate audio engines so you can switch if one is restricted by your firmware: +| Home | Equalizer | Devices | Settings | System | +| :---: | :---: | :---: | :---: | :---: | +| ![Home](docs/screenshots/home.png) | ![Equalizer](docs/screenshots/equalizer.png) | ![Devices](docs/screenshots/devices.png) | ![Settings](docs/screenshots/settings.png) | ![System](docs/screenshots/system.png) | + +--- -1. **Soft Mode (Session 0):** Attaches Android's hardware `LoudnessEnhancer` and a 6-band `DynamicsProcessing` stage to the global output mix (`sessionId = 0`). It adds no audio latency and works across all apps, including DRM-protected streaming services. -2. **Audio Capture Mode (PCM DSP):** Uses `MediaProjection` and `AudioPlaybackCapture` to read the raw stereo PCM stream, applies a 64-bit digital gain multiplier, a Biquad low-shelf bass filter (95 Hz), a Mid/Side stereo widener, and a soft-knee (`tanh`) limiter. This bypasses system mixer caps on firmwares where Session 0 is attenuated. +## How It Works + +Android handles audio effects differently across device manufacturers and OS skins. HyperBoost includes two independent audio engines: + +1. **Soft Mode (Session 0):** Attaches Android's system `LoudnessEnhancer` and 6-band `DynamicsProcessing` stage directly to the global audio mixer (`sessionId = 0`). It introduces zero audio latency and functions across all players, including DRM-protected streams. +2. **Audio Capture Mode (PCM DSP):** Captures the audio stream via `MediaProjection` and `AudioPlaybackCapture`, processing 48 kHz stereo samples through a 64-bit digital multiplier, a 95 Hz Biquad low-shelf bass filter, a Mid/Side stereo widener, and a continuous soft-knee (`tanh`) limiter. This engine bypasses vendor mixer constraints on devices where Session 0 is locked or attenuated. + +--- -## Multi-vendor support on Android +## Device Compatibility -This is an Android-only app (it does not run on iOS or desktop). On startup, `DeviceProfileDetector` checks `Build` fields, system properties, and installed system packages to adapt to the current ROM: +HyperBoost is developed specifically for Android. On startup, `DeviceProfileDetector` evaluates system properties and packages to select the best available audio and island presentation strategy: -| Device / OS Family | Status | Notes | +| Device / OS Skin | Verification Status | Features & Notes | | :--- | :--- | :--- | -| **Xiaomi 17T Pro (HyperOS 4, Android 17 / API 37)** | Tested on physical device | Full support: audio engines, Super Island (`miui.focus.param`) with `βˆ’10%` / `+10%` controls, autostart shortcuts. | -| **Other Xiaomi / Redmi / POCO (HyperOS 1–3, MIUI 14)** | Expected to work (needs testing) | Uses the same focus notification format and HyperOS security intents. | -| **Android 16+ devices (Pixel, Nothing, Motorola)** | Expected to work (needs testing) | Uses Android 16 promoted ongoing notifications (Live Updates) and standard AOSP battery settings. | -| **Samsung One UI, OnePlus OxygenOS, OPPO ColorOS, vivo, Honor** | Expected to work (needs testing) | Standard notification controls + vendor-specific background setup steps. Built-in Dolby Atmos or Dirac may compress Session 0 peaks above 150%; use Audio Capture mode if that happens. | +| **Xiaomi 17T Pro (HyperOS 4, Android 17 / API 37)** | Tested on physical device | Full support: both audio engines, Super Island (`miui.focus.param`) with `βˆ’10%` / `+10%` steps, battery and autostart shortcuts. | +| **Other Xiaomi / Redmi / POCO (HyperOS 1–3, MIUI 14)** | Expected to work (needs verification) | Uses identical focus notification structures and Xiaomi intent endpoints. | +| **Android 16+ devices (Pixel, Nothing, Motorola)** | Expected to work (needs verification) | Promoted ongoing Live Updates and standard AOSP background execution policies. | +| **Samsung One UI, OnePlus, OPPO, realme, vivo, Honor** | Expected to work (needs verification) | Standard media notification with `βˆ’10%` / `+10%` controls and vendor background guides. If Dolby Atmos or SoundAlive limits Session 0 peaks, use Audio Capture mode. | -If you test HyperBoost on another phone, open the **System** tab, tap **Copy Report**, and open an issue so we can update this table. +If you test HyperBoost on your phone, go to the **System** tab, tap **Copy Report**, and submit it in [Issues](https://github.com/MrQuster/HyperBoost/issues) to help keep this table up to date. -## Main features +--- -- **No artificial cap:** Standard scale goes from 0% to 1000%, with an optional toggle in Settings to unlock up to 10,000% for very quiet recordings. -- **Quick island & shade controls:** Compact droplet icon with current percentage, plus `βˆ’10%`, `+10%`, and `On/Off` buttons in Xiaomi Super Island, Android 16+ Live Updates, home screen widget, and Quick Settings tile. -- **5-band equalizer & working bass/surround sliders:** Automatically routes Bass Boost, 3D Surround, and Left/Right balance through hardware `AudioEffect`, `DynamicsProcessing` PreEQ, or software Biquad/Mid-Side DSP depending on what the phone supports. -- **Per-device profiles:** Remembers separate boost levels for the internal speaker, each Bluetooth device, wired headphones, and USB DACs. -- **Zero network access:** The app does not request the `INTERNET` permission. +## Features -## Known limitations +- **Uncapped volume scale:** Default scale ranges from 0% to 1000% (with clear 100%, 200%, 500% markers), and an optional Unlimited Mode unlocks up to 10,000% for very quiet media. +- **Fixed βˆ’10% and +10% controls:** Xiaomi Super Island, shade notifications, Glance home widget, and Quick Settings tile provide quick `βˆ’10%`, `+10%`, and `On/Off` controls. +- **Working bass, surround, and balance controls:** The app inspects whether hardware `BassBoost` and `Virtualizer` are available. If not, it routes bass and spatial balance through a 6-band `DynamicsProcessing.PreEq` stage or the software Biquad/Mid-Side DSP. +- **Per-output memory:** Automatically stores and restores independent volume levels for internal speakers, each paired Bluetooth device, wired headphones, and USB DACs. +- **Zero internet access:** HyperBoost does not request or include the `android.permission.INTERNET` permission. -- **DRM and capture policy:** Apps that set `ALLOW_CAPTURE_BY_NONE` (some banking apps, voice calls, and certain DRM video streams) block `AudioPlaybackCapture`. Use **Soft Mode (Session 0)** for those apps. -- **Xiaomi Super Island whitelist:** On some global HyperOS builds, `miui.systemui.plugin` restricts custom island layouts to whitelisted system packages. When that happens, HyperBoost falls back to standard ongoing notifications with the same `βˆ’10%` / `+10%` buttons. -- **Speaker & hearing safety:** High boost levels can cause speaker clipping or hearing fatigue. Enable the Soft (`tanh`) limiter in Settings if you hear distortion. +--- -## Screenshots +## Limitations - -| Home | Equalizer | Devices | System | -| :---: | :---: | :---: | :---: | -| ![Home](docs/screenshots/home.png) | ![Equalizer](docs/screenshots/equalizer.png) | ![Devices](docs/screenshots/devices.png) | ![System](docs/screenshots/system.png) | +- **Capture policy (DRM):** Apps with `ALLOW_CAPTURE_BY_NONE` (voice calls, banking clients, certain DRM-protected video streams) cannot be recorded by Android's `AudioPlaybackCapture`. Use **Soft Mode (Session 0)** for those applications. +- **HyperOS Super Island whitelist:** Some global HyperOS builds restrict custom island views to whitelisted system packages. HyperBoost detects this and falls back to a persistent notification with the same `βˆ’10%` and `+10%` actions. -*(Screenshots go into `docs/screenshots/`: `home.png`, `equalizer.png`, `devices.png`, `settings.png`, `system.png`).* +--- ## Installation -1. Go to the [Releases](https://github.com/MrQuster/HyperBoost/releases/latest) page and download `HyperBoost-vX.Y.Z.apk`. -2. Open the APK on your phone and allow installation from your browser or file manager. -3. If Google Play Protect shows an "Unknown developer" prompt, tap **More details** -> **Install anyway**. -4. To verify the download on Linux before installing: - ```bash - sha256sum -c HyperBoost-v1.3.0.apk.sha256 +1. Download the latest `HyperBoost-vX.Y.Z.apk` from [GitHub Releases](https://github.com/MrQuster/HyperBoost/releases/latest). +2. Open the file on your device and confirm installation. If Google Play Protect shows an "Unknown developer" alert, tap **More details** → **Install anyway**. +3. On Xiaomi / HyperOS devices: + - In HyperBoost open **Settings** → **Notification Settings** and enable **Focus Notifications / Super Island**. + - In background settings set battery saver to **No restrictions** and allow **Autostart**. + +To verify package integrity before installing on Linux: +```bash +sha256sum -c HyperBoost-v1.4.0.apk.sha256 +``` + +--- + +## Building from Source + +Requires JDK 17 and Android SDK (API 35): + +```bash +# Clone the repository +git clone https://github.com/MrQuster/HyperBoost.git +cd HyperBoost + +# Run unit tests and assemble Debug APK +./gradlew clean test lintDebug assembleDebug + +# Assemble Release APK with R8 (output in app/build/outputs/apk/release/) +./gradlew assembleRelease -PversionName="1.4.0" +``` + +--- + +## FAQ + +**Why is there no boost effect in some apps?** +Certain apps (e.g. streaming with DRM protection or voice calls) block audio capture. Switch to **Soft Mode (Session 0)** on the home screen. + +**How do I turn on Xiaomi Super Island?** +Go to phone **Settings** → **Notifications & status bar** → enable **Focus notifications** for HyperBoost. Inside the app, tap the island self-test in the **System** tab to confirm. + +**How do I disable Bluetooth Absolute Volume?** +If your Bluetooth headphones reach maximum volume too early, open **Developer Options** in Android settings and toggle **Disable Absolute Volume**. + +--- + +## Important Notice + +High volume amplification can overdrive speaker hardware or cause hearing fatigue over prolonged exposure. Use sensible listening levels and enable the soft-knee (`tanh`) limiter in Settings if you experience distortion. + +--- -## Author +## License & Author -Made by [MrQuster](https://github.com/MrQuster). +- License: [MIT](LICENSE) +- Author: [MrQuster](https://github.com/MrQuster) diff --git a/README.ru.md b/README.ru.md index bee162a..7d81f56 100644 --- a/README.ru.md +++ b/README.ru.md @@ -1,71 +1,129 @@
HyperBoost icon

HyperBoost

-

Π£ΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ громкости ΠΈ эквалайзСр для Android с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Xiaomi Hyper Island

+

Π£ΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ громкости ΠΈ эквалайзСр для Android с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Xiaomi Super Island ΠΈ интСрфСйсом Liquid Glass

+

+ ПослСдний Ρ€Π΅Π»ΠΈΠ· + ЛицСнзия: MIT + Android CI + Android 10+ +

English β€’ Русский β€’ - Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ APK (Releases) + Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ APK β€’ + Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎΠ± ошибкС

--- -HyperBoost β€” ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Android (начиная с Android 10 / API 29), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ Π·Π²ΡƒΠΊΠ° Π²Ρ‹ΡˆΠ΅ ΡˆΡ‚Π°Ρ‚Π½Ρ‹Ρ… 100% Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, Bluetooth-Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠ°Ρ…, ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… ΠΈ USB-ЦАП. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ сдСлан Π½Π° ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… стСклянных панСлях с Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„ΠΎΠ½Π° (Liquid Glass). +HyperBoost β€” ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ для Android (Android 10+, API 29+), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ Π·Π²ΡƒΠΊΠ° Π²Ρ‹ΡˆΠ΅ стандартных 100% Π½Π° встроСнных Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°Ρ…, Bluetooth-Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠ°Ρ…, ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°Ρ… ΠΈ USB-ЦАП. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ Π½Π° ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹Ρ… панСлях Liquid Glass с Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„ΠΎΠ½Π° ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ Π½Π° 5 Π²ΠΊΠ»Π°Π΄ΠΎΠΊ. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² БупСростровС Xiaomi (`miui.focus.param`) ΠΈ Live Updates Π² Android 16+. +## Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Ρ‹ + +| Главная | Π­ΠΊΠ²Π°Π»Π°ΠΉΠ·Π΅Ρ€ | Устройства | Настройки | БистСма | +| :---: | :---: | :---: | :---: | :---: | +| ![Главная](docs/screenshots/home.png) | ![Π­ΠΊΠ²Π°Π»Π°ΠΉΠ·Π΅Ρ€](docs/screenshots/equalizer.png) | ![Устройства](docs/screenshots/devices.png) | ![Настройки](docs/screenshots/settings.png) | ![БистСма](docs/screenshots/system.png) | + +--- + ## Как устроСно усилСниС Π·Π²ΡƒΠΊΠ° -На Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ… Android аудиоэффСкты Π²Π΅Π΄ΡƒΡ‚ сСбя ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ: Π³Π΄Π΅-Ρ‚ΠΎ глобальная сСссия `0` Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сразу, Π° Π³Π΄Π΅-Ρ‚ΠΎ систСмный ΠΌΠΈΠΊΡˆΠ΅Ρ€ Ρ€Π΅ΠΆΠ΅Ρ‚ усилСниС ΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ `BassBoost`. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π²Π° Ρ€Π΅ΠΆΠΈΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹: +Π’ Ρ€Π°Π·Π½Ρ‹Ρ… вСрсиях Android ΠΈ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°Ρ… Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ² аудиоэффСкты Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ. Π’ HyperBoost встроСны Π΄Π²Π° нСзависимых Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Ρ‚Ρ€Π°ΠΊΡ‚Π°: -1. **Мягкий Ρ€Π΅ΠΆΠΈΠΌ (Session 0):** ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ систСмный `LoudnessEnhancer` ΠΈ 6-полосный каскад `DynamicsProcessing` ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΌΠΈΠΊΡˆΠ΅Ρ€Ρƒ (`sessionId = 0`). Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π·Π²ΡƒΠΊΠ° Π½Π΅Ρ‚, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π²ΠΎ всСх прилоТСниях (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠ»Π΅Π΅Ρ€Ρ‹ с DRM-Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ). -2. **Π—Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ° (PCM DSP):** ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°ΡƒΠ΄ΠΈΠΎΠΏΠΎΡ‚ΠΎΠΊ Ρ‡Π΅Ρ€Π΅Π· `MediaProjection` + `AudioPlaybackCapture` ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ сэмплы Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ (64-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π°ΠΌΠΏΠ»ΠΈΡ‚ΡƒΠ΄Ρ‹, Π±ΠΈΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ баса Π½Π° 95 Π“Ρ†, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ стСрСосцСны Mid/Side ΠΈ мягкий Π»ΠΈΠΌΠΈΡ‚Π΅Ρ€ `tanh`). ΠŸΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π½Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ…, Π³Π΄Π΅ глобальная сСссия `0` Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Π°. +1. **Мягкий Ρ€Π΅ΠΆΠΈΠΌ (Session 0):** ΠŸΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΉ `LoudnessEnhancer` ΠΈ 6-полосный каскад `DynamicsProcessing` ΠΊ ΠΎΠ±Ρ‰Π΅ΠΌΡƒ ΠΌΠΈΠΊΡˆΠ΅Ρ€Ρƒ систСмы (`sessionId = 0`). Π Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π±Π΅Π· Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ Π·Π²ΡƒΠΊΠ° ΠΈ дСйствуСт Π²ΠΎ всСх прилоТСниях, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²Ρ‹Π΅ сСрвисы с DRM-Π·Π°Ρ‰ΠΈΡ‚ΠΎΠΉ. +2. **Π—Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ° (PCM DSP):** ΠŸΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ стСрСопоток 48 ΠΊΠ“Ρ† Ρ‡Π΅Ρ€Π΅Π· `MediaProjection` ΠΈ `AudioPlaybackCapture`. ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ΄Ρ‘Ρ‚ Ρ‡Π΅Ρ€Π΅Π· 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, Biquad low-shelf Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ баса (95 Π“Ρ†), Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚Π΅Π»ΡŒ стСрСосцСны Mid/Side ΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ soft-knee Π»ΠΈΠΌΠΈΡ‚Π΅Ρ€ (`tanh`). ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ систСмныС ограничСния Π½Π° ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ…, Π³Π΄Π΅ сСссия 0 Π·Π°Π³Π»ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Π²Π΅Π½Π΄ΠΎΡ€Π½Ρ‹ΠΌ ΠΌΠΈΠΊΡˆΠ΅Ρ€ΠΎΠΌ. + +--- -## Π Π°Π±ΠΎΡ‚Π° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… Android-устройствах +## Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с устройствами -ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ написано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ Android (вСрсий для iOS ΠΈΠ»ΠΈ ПК Π½Π΅Ρ‚). ΠŸΡ€ΠΈ запускС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `DeviceProfileDetector` провСряСт свойства ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΈ ΠΈ установлСнныС систСмныС ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ подходящиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: +ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для Android. ΠŸΡ€ΠΈ запускС ΠΌΠΎΠ΄ΡƒΠ»ΡŒ `DeviceProfileDetector` провСряСт ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ систСмы ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅Ρ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΡΡ‰ΡƒΡŽ схСму Ρ€Π°Π±ΠΎΡ‚Ρ‹: -| Устройство / ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° | Бтатус ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ | Π§Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈ особСнности | +| Устройство / ΠžΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ° | Бтатус ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ | ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ | | :--- | :--- | :--- | -| **Xiaomi 17T Pro (HyperOS 4, Android 17 / API 37)** | ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС | Оба Π·Π²ΡƒΠΊΠΎΠ²Ρ‹Ρ… Π΄Π²ΠΈΠΆΠΊΠ°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² БупСростровС (`miui.focus.param`) ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ `βˆ’10%` / `+10%`, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² настройки автозапуска ΠΈ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ. | -| **Π”Ρ€ΡƒΠ³ΠΈΠ΅ Xiaomi / Redmi / POCO (HyperOS 1–3, MIUI 14)** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ фокусных ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ систСмных ΠΈΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠ² Xiaomi. | -| **Π‘ΠΌΠ°Ρ€Ρ‚Ρ„ΠΎΠ½Ρ‹ с Android 16+ (Pixel, Nothing, Motorola)** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | НативныС увСдомлСния Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Android 16+ (Live Updates) ΠΈ стандартныС настройки энСргосбСрСТСния AOSP. | -| **Samsung One UI, OnePlus, OPPO, realme, vivo, Honor** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (Π½ΡƒΠΆΠ½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | ΠžΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ со ΡˆΡ‚ΠΎΡ€ΠΊΠΎΠΉ `βˆ’10%` / `+10%` ΠΈ инструкции настройки Ρ„ΠΎΠ½Π° ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Π²Π΅Π½Π΄ΠΎΡ€Π°. ΠŸΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½Π½ΠΎΠΌ Dolby Atmos ΠΈΠ»ΠΈ Dirac ΠΏΠΈΠΊΠΈ Π½Π° сСссии `0` ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΆΠΈΠΌΠ°Ρ‚ΡŒΡΡ систСмным Π»ΠΈΠΌΠΈΡ‚Π΅Ρ€ΠΎΠΌ β€” Π² этом случаС ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Ρ€Π΅ΠΆΠΈΠΌ Β«Π—Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ°Β». | +| **Xiaomi 17T Pro (HyperOS 4, Android 17 / API 37)** | ΠŸΡ€ΠΎΠ²Π΅Ρ€Π΅Π½ΠΎ Π½Π° Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ устройствС | Полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°: ΠΎΠ±Π° Π°ΡƒΠ΄ΠΈΠΎΠ΄Π²ΠΈΠΆΠΊΠ°, ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² БупСростровС (`miui.focus.param`) ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ `βˆ’10%` / `+10%`, ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹ Π² настройки автозапуска ΠΈ Π±Π°Ρ‚Π°Ρ€Π΅ΠΈ. | +| **Π”Ρ€ΡƒΠ³ΠΈΠ΅ Xiaomi / Redmi / POCO (HyperOS 1–3, MIUI 14)** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ фокусных ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΈ систСмных ΠΈΠ½Ρ‚Π΅Π½Ρ‚ΠΎΠ² Xiaomi. | +| **Устройства с Android 16+ (Pixel, Nothing, Motorola)** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | БистСмныС Live Updates ΠΈ стандартныС настройки энСргосбСрСТСния AOSP. | +| **Samsung One UI, OnePlus, OPPO, realme, vivo, Honor** | Π”ΠΎΠ»ΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ (трСбуСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°) | Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ ΠΌΠ΅Π΄ΠΈΠ°-ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ с ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ `βˆ’10%` / `+10%` ΠΈ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции настройки Ρ„ΠΎΠ½Π°. Если встроСнный Dolby Atmos ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ сСссию 0, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° Β«Π—Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ°Β». | -Если Π²Ρ‹ запустили ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° своСй ΠΌΠΎΠ΄Π΅Π»ΠΈ смартфона, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ **«БистСма»**, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ **Β«Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Β»** ΠΈ ΠΏΡ€ΠΈΡˆΠ»ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π² Issues β€” Ρ‚Π°ΠΊ ΠΌΡ‹ смоТСм Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… устройств. +Если Π²Ρ‹ запустили ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° своём смартфонС, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ **«БистСма»**, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ **Β«Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Β»** ΠΈ ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΊ [Issue](https://github.com/MrQuster/HyperBoost/issues) β€” это ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ. -## Π§Ρ‚ΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ +--- + +## ВозмоТности -- **Π¨ΠΊΠ°Π»Π° Π±Π΅Π· искусствСнного ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ°:** стандартная шкала Ρ€Π°Π·ΠΌΠ΅Ρ‡Π΅Π½Π° ΠΎΡ‚ 0% Π΄ΠΎ 1000% (с Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ 100%, 200%, 500%), Π° Π² настройках ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Π΄ΠΎ 10 000% для ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΈΡ…ΠΈΡ… записСй. -- **Быстрый шаг βˆ’10% ΠΈ +10%:** Π² БупСростровС Xiaomi, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ, Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ ΠΈ быстрых ярлыках оставлСны Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ `βˆ’10%`, `+10%` ΠΈ `Π’ΠΊΠ»/Π’Ρ‹ΠΊΠ»` β€” Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… мСню. -- **Π Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΈ баса, ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΈ баланса Π›/П:** ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ само провСряСт, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ° Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ `BassBoost` ΠΈ `Virtualizer`. Если Π½Π΅Ρ‚ β€” автоматичСски ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ бас, стСрСобаланс ΠΈ эквалайзСр Π½Π° 6-полосный `DynamicsProcessing.PreEq` (Π² мягком Ρ€Π΅ΠΆΠΈΠΌΠ΅) ΠΈΠ»ΠΈ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Biquad/Mid-Side Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ (Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°Ρ…Π²Π°Ρ‚Π°). Π’ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «БистСма» Π΅ΡΡ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΠ° самотСста ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ эффСкта. -- **ΠŸΡ€ΠΎΡ„ΠΈΠ»ΠΈ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π°:** ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ настройки усилСния для Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°, ΠΊΠ°ΠΆΠ΄Ρ‹Ρ… Bluetooth-Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½ΠΎΠΉ Π³Π°Ρ€Π½ΠΈΡ‚ΡƒΡ€Ρ‹. -- **Π‘Π΅Π· доступа Π² ΡΠ΅Ρ‚ΡŒ:** Π² манифСстС Π½Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ `INTERNET`. +- **Π¨ΠΊΠ°Π»Π° Π±Π΅Π· искусствСнного ΠΏΠΎΡ‚ΠΎΠ»ΠΊΠ°:** Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΎΡ‚ 0% Π΄ΠΎ 1000% (с ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΊΠ°ΠΌΠΈ 100%, 200%, 500%), Π° Π² настройках ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Π΄ΠΎ 10 000% для Ρ‚ΠΈΡ…ΠΈΡ… записСй. +- **Быстрый шаг βˆ’10% ΠΈ +10%:** Π’ БупСростровС Xiaomi, ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΈ, Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ ΠΈ ΠΏΠ»ΠΈΡ‚ΠΊΠ΅ быстрых настроСк доступны ΠΊΠ½ΠΎΠΏΠΊΠΈ `βˆ’10%`, `+10%` ΠΈ `Π’ΠΊΠ»/Π’Ρ‹ΠΊΠ»`. +- **Π Π°Π±ΠΎΡ‡ΠΈΠ΅ ΠΏΠΎΠ»Π·ΡƒΠ½ΠΊΠΈ баса, ΠΎΠ±ΡŠΡ‘ΠΌΠ° ΠΈ баланса:** ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ провСряСт Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Ρ… `BassBoost` ΠΈ `Virtualizer`. Если ΠΎΠ½ΠΈ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠΎΠΉ, эффСкты автоматичСски пСрСводятся Π½Π° 6-полосный каскад `DynamicsProcessing.PreEq` ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Biquad/Mid-Side DSP. +- **Π Π°Π·Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈ:** Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ усилСния запоминаСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ для Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ°, ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Bluetooth-устройства, ΠΏΡ€ΠΎΠ²ΠΎΠ΄Π½Ρ‹Ρ… Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠΎΠ² ΠΈ USB-ЦАП. +- **Полная изоляция ΠΎΡ‚ сСти:** Π’ манифСстС прилоТСния Π½Π΅Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ `android.permission.INTERNET`. + +--- ## ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ -- **Π—Π°ΠΏΡ€Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚Π° Π·Π²ΡƒΠΊΠ° (DRM):** прилоТСния с Ρ„Π»Π°Π³ΠΎΠΌ `ALLOW_CAPTURE_BY_NONE` (голосовыС Π²Ρ‹Π·ΠΎΠ²Ρ‹, банковскиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, Ρ‡Π°ΡΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½Ρ‹Ρ… видСосСрвисов) Π½Π΅ ΠΎΡ‚Π΄Π°ΡŽΡ‚ Π·Π²ΡƒΠΊ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Β«Π—Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ°Β». Для Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ «Мягкий Ρ€Π΅ΠΆΠΈΠΌΒ». -- **Π‘Π΅Π»Ρ‹ΠΉ список БупСрострова Π² HyperOS:** Π½Π° части Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΎΠΊ систСмный ΠΏΠ»Π°Π³ΠΈΠ½ `miui.systemui.plugin` Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π· кастомного острова Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСмным прилоТСниям. Если систСма ΠΎΡ‚ΠΊΠ»ΠΎΠ½ΠΈΠ»Π° остров, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСски ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ с Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ `βˆ’10%` ΠΈ `+10%`. -- **Π”ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ ΠΈ слух:** сильноС усилСниС ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ…Ρ€ΠΈΠΏ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΡƒ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ³Π»Π°Π΄ΠΈΡ‚ΡŒ ТёсткиС ΠΏΠΈΠΊΠΈ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ мягкий Π»ΠΈΠΌΠΈΡ‚Π΅Ρ€ (`tanh`) Π² настройках Π·Π²ΡƒΠΊΠ°. +- **ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ Π·Π°Ρ…Π²Π°Ρ‚Π° Π·Π²ΡƒΠΊΠ° (DRM):** ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ с Ρ„Π»Π°Π³ΠΎΠΌ `ALLOW_CAPTURE_BY_NONE` (голосовыС Π²Ρ‹Π·ΠΎΠ²Ρ‹, банковскиС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹, Π·Π°Ρ‰ΠΈΡ‰Ρ‘Π½Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ) Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊΠ°. Для Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ **«Мягкий Ρ€Π΅ΠΆΠΈΠΌ (Session 0)Β»**. +- **Π‘Π΅Π»Ρ‹ΠΉ список БупСрострова Π² HyperOS:** На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΡˆΠΈΠ²ΠΊΠ°Ρ… систСмный ΠΏΠ»Π°Π³ΠΈΠ½ `miui.systemui.plugin` Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ кастомного острова Ρ‚ΠΎΠ»ΡŒΠΊΠΎ систСмным ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌ. Π’ этом случаС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ автоматичСски ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° постоянноС ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ со ступСнями `βˆ’10%` ΠΈ `+10%`. + +--- ## Установка ΠΈΠ· Releases -1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ послСдний Ρ„Π°ΠΉΠ» `HyperBoost-vX.Y.Z.apk` ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° [Releases](https://github.com/MrQuster/HyperBoost/releases/latest). -2. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ APK Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ установку. Если Google Play Protect ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСизвСстном Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ **Β«ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅Β» β†’ «Всё Ρ€Π°Π²Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΒ»**. -3. На Xiaomi / HyperOS ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ **«Настройки»** Π²Π½ΡƒΡ‚Ρ€ΠΈ прилоТСния: - - НаТмитС **«Настройки ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉΒ»** ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€ **«ЀокусныС увСдомлСния / БупСростров»**. - - Π’ мастСрС настройки Ρ„ΠΎΠ½Π° Π²Ρ‹ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ активности Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ **«НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉΒ»** ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ **Автозапуск**. +1. Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `HyperBoost-vX.Y.Z.apk` ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»Π° [Releases](https://github.com/MrQuster/HyperBoost/releases/latest). +2. ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π΅ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ установку. Если Google Play Protect ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎ нСизвСстном Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ **Β«ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅Β»** → **«Всё Ρ€Π°Π²Π½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒΒ»**. +3. На устройствах Xiaomi / HyperOS: + - Π’ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ **«Настройки»** → **«Настройки ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉΒ»** ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ **«ЀокусныС увСдомлСния / БупСростров»**. + - Π’ мастСрС Ρ„ΠΎΠ½Π° Π²Ρ‹ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ активности Π² ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ **«НСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉΒ»** ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚Π΅ **Автозапуск**. + +ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½ΠΎΠΉ суммы ΠΏΠ΅Ρ€Π΅Π΄ установкой: +```bash +sha256sum -c HyperBoost-v1.4.0.apk.sha256 +``` + +--- -## Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· исходников (Arch Linux / Linux) +## Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈΠ· исходников -ΠŸΠΎΠ½Π°Π΄ΠΎΠ±ΡΡ‚ΡΡ JDK 17 ΠΈ Android SDK (API 35): +Для сборки Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ JDK 17 ΠΈ Android SDK (API 35): ```bash -git clone [https://github.com/MrQuster/HyperBoost.git](https://github.com/MrQuster/HyperBoost.git) +# ΠšΠ»ΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ рСпозитория +git clone https://github.com/MrQuster/HyperBoost.git cd HyperBoost -./gradlew test assembleDebug -## Автор +# Запуск тСстов ΠΈ сборка ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½ΠΎΠ³ΠΎ APK +./gradlew clean test lintDebug assembleDebug + +# Π‘Π±ΠΎΡ€ΠΊΠ° Ρ€Π΅Π»ΠΈΠ·Π½ΠΎΠ³ΠΎ APK с R8 (Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π² app/build/outputs/apk/release/) +./gradlew assembleRelease -PversionName="1.4.0" +``` + +--- + +## ЧастыС вопросы (FAQ) + +**ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚ усилСния Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… прилоТСниях?** +НСкоторыС ΠΏΠ»Π΅Π΅Ρ€Ρ‹ ΠΈ Π·Π²ΠΎΠ½ΠΊΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π°ΡŽΡ‚ запись Π·Π²ΡƒΠΊΠ° ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΎΠΉ бСзопасности. На Π³Π»Π°Π²Π½ΠΎΠΌ экранС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ Π½Π° **«Мягкий Ρ€Π΅ΠΆΠΈΠΌ (БСссия 0)Β»**. + +**Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ БупСростров Π½Π° Xiaomi?** +ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ **Настройки** Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° → **УвСдомлСния ΠΈ строка состояния** → Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ **ЀокусныС увСдомлСния** для HyperBoost. Π’ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ **«БистСма»** Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ «БамотСст острова» для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. + +**Как ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΡƒΡŽ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒ Bluetooth?** +Если Bluetooth-Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠΈ выходят Π½Π° максимум слишком Ρ€Π°Π½ΠΎ, ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ **«Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²Β»** Π² настройках Android ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ Ρ‚ΡƒΠΌΠ±Π»Π΅Ρ€ **Β«ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΡƒΡŽ Π³Ρ€ΠΎΠΌΠΊΠΎΡΡ‚ΡŒΒ»**. + +--- + +## ВаТная информация + +Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€ΠΎΡΠ»ΡƒΡˆΠΈΠ²Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ громкости ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΎΠ² смартфона ΠΈ ΡƒΡ‚ΠΎΠΌΠ»Π΅Π½ΠΈΡŽ слуха. Π’Ρ‹Π±ΠΈΡ€Π°ΠΉΡ‚Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ усилСния ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΠΉΡ‚Π΅ мягкий Π»ΠΈΠΌΠΈΡ‚Π΅Ρ€ (`tanh`) Π² настройках Π·Π²ΡƒΠΊΠ° ΠΏΡ€ΠΈ появлСнии искаТСний. + +--- + +## ЛицСнзия ΠΈ Π°Π²Ρ‚ΠΎΡ€ -Автор ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: [MrQuster](https://github.com/MrQuster). +- ЛицСнзия: [MIT](LICENSE) +- Автор: [MrQuster](https://github.com/MrQuster) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 9be9c99..c29bde2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -18,12 +18,12 @@ if (keystorePropertiesFile.exists()) { val rawTagVersion = (project.findProperty("versionName") as? String) ?: System.getenv("GITHUB_REF_NAME")?.removePrefix("v") - ?: "1.3.1" + ?: "1.4.0" val cleanVersionName = if (rawTagVersion.matches(Regex("""^\d+\.\d+\.\d+.*"""))) { rawTagVersion } else { - "1.3.1" + "1.4.0" } fun computeDeterministicVersionCode(ver: String): Int { diff --git a/app/src/main/java/com/example/volumeboost/island/IslandPresenter.kt b/app/src/main/java/com/example/volumeboost/island/IslandPresenter.kt index 81c9d0b..6b8c6ec 100644 --- a/app/src/main/java/com/example/volumeboost/island/IslandPresenter.kt +++ b/app/src/main/java/com/example/volumeboost/island/IslandPresenter.kt @@ -208,7 +208,7 @@ class LiveUpdatePresenter : IslandPresenter { } class ClassicNotificationPresenter : IslandPresenter { - override val presenterName: String = "ClassicNotificationPresenter (Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ ΡˆΡ‚ΠΎΡ€ΠΊΠ°)" + override val presenterName: String = "ClassicNotificationPresenter" override fun isSupported(context: Context): Boolean = true diff --git a/app/src/main/java/com/example/volumeboost/island/MiuiSuperIslandJsonBuilder.kt b/app/src/main/java/com/example/volumeboost/island/MiuiSuperIslandJsonBuilder.kt index f73cabc..a90adc2 100644 --- a/app/src/main/java/com/example/volumeboost/island/MiuiSuperIslandJsonBuilder.kt +++ b/app/src/main/java/com/example/volumeboost/island/MiuiSuperIslandJsonBuilder.kt @@ -79,8 +79,9 @@ object MiuiSuperIslandJsonBuilder { "${snapshot.boostPercent}%" } + val offLabel = context?.getString(R.string.island_state_off) ?: "OFF" val playStateLabel = when { - !snapshot.isRunning -> context?.getString(R.string.island_state_off) ?: "OFF" + !snapshot.isRunning -> offLabel snapshot.isMusicPlaying -> context?.getString(R.string.island_state_playing) ?: "PLAYING" else -> context?.getString(R.string.island_state_idle) ?: "STANDBY" } @@ -135,7 +136,7 @@ object MiuiSuperIslandJsonBuilder { put("colorTitle", "#FFFFFF") put("content", expandedSubtitle) put("colorContent", COLOR_SUBTEXT_HEX) - put("subContent", if (snapshot.isRunning) snapshot.modeLabel else "Π’Π«ΠšΠ›") + put("subContent", if (snapshot.isRunning) snapshot.modeLabel else offLabel) put("colorSubContent", activeColor) put("bgColor", COLOR_ISLAND_BG) }) diff --git a/app/src/main/java/com/example/volumeboost/service/AudioBoosterService.kt b/app/src/main/java/com/example/volumeboost/service/AudioBoosterService.kt index 735e70e..6b926f8 100644 --- a/app/src/main/java/com/example/volumeboost/service/AudioBoosterService.kt +++ b/app/src/main/java/com/example/volumeboost/service/AudioBoosterService.kt @@ -391,7 +391,7 @@ class AudioBoosterService : Service() { checks.add( SelfTestCheckItem( stepTitle = "2. Build & Validate JSON", - passed = testBuild140.errorSummary == "OK" || testBuild140.errorSummary == "НСт ошибок", + passed = testBuild140.jsonSizeBytes > 0 && !testBuild140.errorSummary.contains("ERROR", ignoreCase = true), explanation = "${testBuild140.activeTierName} (${testBuild140.jsonSizeBytes}B, miui.focus.param=$hasFocusParam)" ) ) diff --git a/app/src/main/java/com/example/volumeboost/service/BoosterTileService.kt b/app/src/main/java/com/example/volumeboost/service/BoosterTileService.kt index 87dc413..5b6ae52 100644 --- a/app/src/main/java/com/example/volumeboost/service/BoosterTileService.kt +++ b/app/src/main/java/com/example/volumeboost/service/BoosterTileService.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.service.quicksettings.Tile import android.service.quicksettings.TileService import androidx.core.content.ContextCompat +import com.example.volumeboost.R import kotlinx.coroutines.* class BoosterTileService : TileService() { @@ -16,8 +17,8 @@ class BoosterTileService : TileService() { AudioBoosterService.runtimeState.collect { state -> val tile = qsTile ?: return@collect tile.state = if (state.isRunning) Tile.STATE_ACTIVE else Tile.STATE_INACTIVE - tile.label = if (state.isRunning) "Буст ${state.currentBoostPercent}%" else "HyperBoost" - tile.subtitle = if (state.isRunning) "+10% / βˆ’10%" else "Π’Ρ‹ΠΊΠ»" + tile.label = if (state.isRunning) getString(R.string.tile_active_fmt, state.currentBoostPercent) else getString(R.string.app_name) + tile.subtitle = if (state.isRunning) getString(R.string.tile_sub_active) else getString(R.string.tile_sub_inactive) tile.updateTile() } } diff --git a/app/src/main/java/com/example/volumeboost/ui/screens/HomeScreen.kt b/app/src/main/java/com/example/volumeboost/ui/screens/HomeScreen.kt index 19ac451..dae4c54 100644 --- a/app/src/main/java/com/example/volumeboost/ui/screens/HomeScreen.kt +++ b/app/src/main/java/com/example/volumeboost/ui/screens/HomeScreen.kt @@ -24,6 +24,7 @@ import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -44,6 +45,7 @@ fun HomeScreen( onRequestStartEngine: (BoostMode) -> Unit ) { val tokens = LocalGlassTokens.current + val context = LocalContext.current val settings by viewModel.settings.collectAsStateWithLifecycle() val runtime by viewModel.runtimeState.collectAsStateWithLifecycle() val device by viewModel.connectedDevice.collectAsStateWithLifecycle() @@ -56,20 +58,19 @@ fun HomeScreen( // ЧСстный расчёт Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ акустичСского усилСния Π² Π΄Π‘: 20 * log10(boost / 100) val statusIdleText = stringResource(R.string.home_status_idle) - val modeStdText = stringResource(R.string.home_mode_standard) - val modeCapText = stringResource(R.string.home_mode_capture) - val statusSubtitle = remember(runtime.isRunning, runtime.activeMode, boostPercent, statusIdleText, modeStdText, modeCapText) { + val statusSubtitle = remember(runtime.isRunning, runtime.activeMode, boostPercent, statusIdleText) { if (!runtime.isRunning) { statusIdleText } else { val multiplier = (boostPercent / 100f).coerceAtLeast(0.01f) val acousticDb = if (boostPercent <= 100) 0f else (20f * log10(multiplier)) - val modePrefix = if (runtime.activeMode == BoostMode.STANDARD) { - modeStdText + val multStr = "%.2f".format(multiplier) + val dbStr = "%.1f".format(acousticDb) + if (runtime.activeMode == BoostMode.STANDARD) { + context.getString(R.string.status_active_soft_fmt, multStr, dbStr) } else { - modeCapText + context.getString(R.string.status_active_capture_fmt, multStr, dbStr) } - "$modePrefix β€’ ${"%.2f".format(multiplier)}x (+${"%.1f".format(acousticDb)} dB)" } } @@ -318,7 +319,11 @@ fun HomeScreen( ) if (runtime.sleepTimerRemainingSec > 0) { Text( - text = "${runtime.sleepTimerRemainingSec / 60} ΠΌΠΈΠ½ ${runtime.sleepTimerRemainingSec % 60} с", + text = stringResource( + R.string.sleep_timer_remaining_fmt, + runtime.sleepTimerRemainingSec / 60, + runtime.sleepTimerRemainingSec % 60 + ), color = tokens.accentColor, fontWeight = FontWeight.Bold, fontSize = 13.sp diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1b8d6f7..bbd2be1 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -2,6 +2,9 @@ HyperBoost АудиодвиТок Liquid Glass Π£ΡΠΈΠ»ΠΈΡ‚Π΅Π»ΡŒ + Буст %1$d%% + +10% / βˆ’10% + Π’Ρ‹ΠΊΠ» HyperBoost Π’ΠΈΠ΄ΠΆΠ΅Ρ‚ @@ -53,6 +56,7 @@ Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΏΡ€Π΅Ρ‰Π°Π΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ Π·Π²ΡƒΠΊΠ° (DRM) ΠΈΠ»ΠΈ стоит Π½Π° ΠΏΠ°ΡƒΠ·Π΅. Π’Π°ΠΉΠΌΠ΅Ρ€ Π°Π²Ρ‚ΠΎΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π’Ρ‹ΠΊΠ» + %1$d ΠΌΠΈΠ½ %2$d с 15ΠΌ 30ΠΌ 60ΠΌ diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 1c82ae9..6ce5d29 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -2,6 +2,9 @@ HyperBoost Liquid Glass Audio Engine Volume Boost + Boost %1$d%% + +10% / βˆ’10% + Off HyperBoost Widget @@ -53,6 +56,7 @@ Current app blocks audio capture (DRM) or playback is paused. Auto-Off Sleep Timer Off + %1$d m %2$d s 15m 30m 60m diff --git a/docs/icon-512.png b/docs/icon-512.png new file mode 100644 index 0000000..30d8076 Binary files /dev/null and b/docs/icon-512.png differ diff --git a/docs/social-preview.png b/docs/social-preview.png new file mode 100644 index 0000000..a9c1077 Binary files /dev/null and b/docs/social-preview.png differ