Compare commits

..

No commits in common. "dev" and "v4.0.0-dev4" have entirely different histories.

239 changed files with 5903 additions and 5424 deletions

2
.gitignore vendored
View file

@ -14,5 +14,3 @@ captures/
*.iml
.cxx
.kotlin
.aider*
.env

2
.gitmodules vendored
View file

@ -5,4 +5,4 @@
[submodule "musikr/src/main/cpp/taglib"]
path = musikr/src/main/cpp/taglib
url = https://github.com/taglib/taglib.git
tag = ee1931b
tag = v2.0.2

View file

@ -1,52 +1,5 @@
# Changelog
## 4.0.3
#### What's Improved
- Improved music loader pipeline efficiency
- Made cover.png support more flexible
- Albums with the same name but different album artists are now split
if fully tagged with album artists
#### What's Fixed
- Possibly fixed cache failures on large libraries
- Possibly fixed playback state saving failing on some devices
- Fixed issue where artists w/o songs would not have a cover
- Fixed music not being reloaded when music locations changed
- Fixed tasker media control not working
- Fixed tasker playback start command never finishing
#### Dev/Meta
- Removed useless storage permissions
- Internal cleanup/simplification of musikr API
- Removed unused resources
#### What's Fixed
## 4.0.2
#### What's New
- Added back in support for cover art from cover.png/cover.jpg
- Added "As is" cover art setting
- Option to include hidden files or not (off by default)
#### What's Improved
- Reduced elevation contrast in black theme
#### What's Fixed
- Fixed incorrect extension stripping on some files
- Fixed various errors in new branding
- Fixed MTE segfault from improper string handling
#### What's Changed
- Hidden files no longer loaded by default
## 4.0.1
#### What's Fixed
- Fixed music loading hanging on files without tags
- Fixed playlists being destroyed in poorly tagged libraries
## 4.0.0
#### What's New
@ -70,7 +23,6 @@ if fully tagged with album artists
- M3U playlist file name is now proposed if one cannot be found within the file
- Duration is now parsed from certain files that previously could not be parsed
- ID3v2 tags are now parsed from WAV files
- NN/TT tracks/discs are now handled in Vorbis
- Music library will is less likely to fail to respond to updates
- Hidden audio files can now be loaded
- Sorting songs by date now uses songs date first, before the earliest album date
@ -82,15 +34,11 @@ if fully tagged with album artists
- Fixed playback sheet flickering on warm start
- No longer possible to save a sort with no direction specified
- Fixed inconsistent corner radii in widget
- Possibly fixed foreground start music loading failures
- Fixed playlist view not exiting on deletion
#### What's Changed
- Date added is now local to when the app discovers the file and will not
persist long-term
- Songs with no album are now "Unknown album" rather than folder name
- Tab layout no longer changes depending on device configuration
- Round mode is now on by default
#### Dev/Meta
- No longer using custom logging setup

View file

@ -2,8 +2,8 @@
<h1 align="center"><b>Auxio</b></h1>
<h4 align="center">A simple, rational music player for android.</h4>
<p align="center">
<a href="https://github.com/oxygencobalt/Auxio/releases/tag/v4.0.4">
<img alt="Latest Version" src="https://img.shields.io/static/v1?label=tag&message=v4.0.4&color=64B5F6&style=flat">
<a href="https://github.com/oxygencobalt/Auxio/releases/tag/v3.6.3">
<img alt="Latest Version" src="https://img.shields.io/static/v1?label=tag&message=v3.6.3&color=64B5F6&style=flat">
</a>
<a href="https://github.com/oxygencobalt/Auxio/releases/">
<img alt="Releases" src="https://img.shields.io/github/downloads/OxygenCobalt/Auxio/total.svg?color=4B95DE&style=flat">
@ -15,12 +15,7 @@
</p>
<h4 align="center"><a href="/CHANGELOG.md">Changelog</a> | <a href="https://github.com/OxygenCobalt/Auxio/wiki">Wiki</a> | <a href="https://github.com/OxygenCobalt/Auxio#Donate">Donate</a></h4>
<p align="center">
<a href="https://f-droid.org/app/org.oxycblt.auxio"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" width="250"></a>
<a href="https://accrescent.app/app/org.oxycblt.auxio">
<img alt="Get it on Accrescent" src="https://accrescent.app/badges/get-it-on.png" width="250">
</a>
</p>
<p align="center">
<a href="https://f-droid.org/app/org.oxycblt.auxio"><img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" width="170"></a>
<a href="https://hosted.weblate.org/engage/auxio/"><img height=64 src="https://hosted.weblate.org/widgets/auxio/-/strings/287x66-grey.png" alt="Translation status" /></a>
</p>
@ -33,12 +28,14 @@ Auxio is a local music player with a fast, reliable UI/UX without the many usele
## Screenshots
<p align="center">
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot0.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot1.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot2.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot3.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot4.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot5.png" width=250>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot0.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot1.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot2.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot3.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot4.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot5.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot6.png" width=200>
<img src="fastlane/metadata/android/en-US/images/phoneScreenshots/shot7.png" width=200>
</p>
@ -64,39 +61,29 @@ precise/original dates, sort tags, and more
- Headset autoplay
- Stylish widgets that automatically adapt to their size
- Completely private and offline
- No rounded album covers (if you want them)
- No rounded album covers (by default)
## Permissions
- Storage (`READ_MEDIA_AUDIO`, `READ_EXTERNAL_STORAGE`) to read and play your music files
- Services (`FOREGROUND_SERVICE`, `WAKE_LOCK`) to keep the music playing in the background
- Notifications (`POST_NOTIFICATION`) to indicate ongoing playback and music loading
- Notifcations (`POST_NOTIFICATION`) to indicate ongoing playback and music loading
## Donate
You can support Auxio's development through [my Github Sponsors page](https://github.com/sponsors/OxygenCobalt). Get the ability to prioritize features and have your profile added to the README, Release Changelogs, and even the app itself!
<p align="center"><b>$16/month supporters:</b></p>
<p align="center">
<a href="https://github.com/mark-pitblado"><img src="https://avatars.githubusercontent.com/u/86988982?v=4" width=75 /></a>
<br/>
<a href="https://github.com/mark-pitblado"><b>Mark Pitblado</b></a>
</p>
<p align="center"><b>$8/month supporters:</b></p>
<p align="center">
<a href="https://github.com/alanorth"><img src="https://avatars.githubusercontent.com/u/191754?v=4" width=50 /></a>
<a href="https://github.com/dmint789"><img src="https://avatars.githubusercontent.com/u/53250435?v=4" width=50 /></a>
<a href="https://github.com/adventure-tense"><img src="https://avatars.githubusercontent.com/u/123326084?v=4" width=50 /></a>
<a href="https://github.com/slushspirit"><img src="https://avatars.githubusercontent.com/u/95902378?v=4" width=50 /></a>
</p>
## Building
Auxio relies on a patched version of Media3 that enables some extra playback features, alongside taglib for metadata
parsing. This adds some caveats to the build process:
Auxio relies on a custom version of Media3 that enables some extra features. This adds some caveats to the build process:
1. `cmake` and `ninja-build` must be installed before building the project.
2. The project uses submodules, so when cloning initially, use `git clone --recurse-submodules` to properly
download the external code.

View file

@ -18,8 +18,8 @@ android {
defaultConfig {
applicationId namespace
versionName "4.0.4"
versionCode 63
versionName "4.0.0-dev4"
versionCode 57
minSdk min_sdk
targetSdk target_sdk

View file

@ -2,6 +2,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- Android 13 uses READ_MEDIA_AUDIO instead of READ_EXTERNAL_STORAGE -->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View file

@ -1309,6 +1309,7 @@ public class BackportBottomSheetBehavior<V extends View> extends CoordinatorLayo
+ " should not be set externally.");
}
if (!hideable && state == STATE_HIDDEN) {
Log.w(TAG, "Cannot set state: " + state);
return;
}
final int finalState;
@ -1632,13 +1633,12 @@ public class BackportBottomSheetBehavior<V extends View> extends CoordinatorLayo
return;
}
BackEventCompat backEvent = bottomContainerBackHelper.onHandleBackInvoked();
boolean canActuallyHide = hideable && isHideableWhenDragging();
if (backEvent == null || VERSION.SDK_INT < VERSION_CODES.UPSIDE_DOWN_CAKE) {
// If using traditional button system nav or if pre-U, just hide or collapse the bottom sheet.
setState(canActuallyHide ? STATE_HIDDEN : STATE_COLLAPSED);
setState(hideable ? STATE_HIDDEN : STATE_COLLAPSED);
return;
}
if (canActuallyHide) {
if (hideable && isHideableWhenDragging()) {
bottomContainerBackHelper.finishBackProgressNotPersistent(
backEvent,
new AnimatorListenerAdapter() {

View file

@ -34,9 +34,14 @@ import androidx.media.MediaBrowserServiceCompat
import androidx.media.utils.MediaConstants
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.oxycblt.auxio.music.service.MusicServiceFragment
import org.oxycblt.auxio.playback.service.PlaybackServiceFragment
import timber.log.Timber
@AndroidEntryPoint
class AuxioService :
@ -47,6 +52,10 @@ class AuxioService :
@Inject lateinit var musicFragmentFactory: MusicServiceFragment.Factory
private lateinit var musicFragment: MusicServiceFragment
private val delayScopeJob = Job() + Dispatchers.Main
private val delayScope = CoroutineScope(delayScopeJob)
private var currentDelayJob: Job? = null
@SuppressLint("WrongConstant")
override fun onCreate() {
super.onCreate()
@ -54,30 +63,32 @@ class AuxioService :
musicFragment = musicFragmentFactory.create(this, this, this)
sessionToken = playbackFragment.attach()
musicFragment.attach()
Timber.d("Service Created")
}
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
// TODO: Start command occurring from a foreign service basically implies a detached
// service, we might need more handling here.
super.onStartCommand(intent, flags, startId)
onHandleForeground(intent)
// If we die we want to not restart, we will immediately try to foreground in and just
// fail to start again since the activity will be dead too. This is not the semantically
// "correct" flag (normally you want START_STICKY for playback) but we need this to avoid
// weird foreground errors.
return START_NOT_STICKY
return super.onStartCommand(intent, flags, startId)
}
override fun onBind(intent: Intent): IBinder? {
val binder = super.onBind(intent)
onHandleForeground(intent)
return binder
return super.onBind(intent)
}
private fun onHandleForeground(intent: Intent?) {
currentDelayJob?.cancel()
currentDelayJob =
delayScope.launch {
// The foreground limiter is fussy and doesn't like us starting a foreground
// service too early despite having the right to do so at this point. Comply
// and artificially delay (to user detriment...)
delay(250)
val startId = intent?.getIntExtra(INTENT_KEY_START_ID, -1) ?: -1
musicFragment.start()
playbackFragment.start(intent)
playbackFragment.start(startId)
}
}
override fun onTaskRemoved(rootIntent: Intent?) {
@ -87,6 +98,7 @@ class AuxioService :
override fun onDestroy() {
super.onDestroy()
delayScopeJob.cancel()
musicFragment.release()
playbackFragment.release()
}
@ -141,7 +153,6 @@ class AuxioService :
}
// Nothing changed, but don't show anything music related since we can always
// index during playback.
isForeground = true
} else {
musicFragment.createNotification {
if (it != null) {

View file

@ -65,8 +65,6 @@ object IntegerTable {
const val START_ID_ACTIVITY = 0xA050
/** Tasker AuxioService Start ID */
const val START_ID_TASKER = 0xA051
/** MediaButtonReceiver AuxioService Start ID */
const val START_ID_MEDIA_BUTTON = 0xA052
/** RepeatMode.NONE */
const val REPEAT_MODE_NONE = 0xA100
/** RepeatMode.ALL */
@ -143,6 +141,4 @@ object IntegerTable {
const val PLAY_SONG_BY_ITSELF = 0xA124
/** CoverMode.SaveSpace */
const val COVER_MODE_SAVE_SPACE = 0xA125
/** CoverMode.AsIs */
const val COVER_MODE_AS_IS = 0xA126
}

View file

@ -20,12 +20,10 @@ package org.oxycblt.auxio
import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.activity.enableEdgeToEdge
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.app.AppCompatDelegate
import androidx.core.view.WindowCompat
import androidx.core.view.updatePadding
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import org.oxycblt.auxio.databinding.ActivityMainBinding
@ -33,7 +31,6 @@ import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.playback.state.DeferredPlayback
import org.oxycblt.auxio.ui.UISettings
import org.oxycblt.auxio.util.isNight
import org.oxycblt.auxio.util.systemBarInsetsCompat
import timber.log.Timber as L
/**
@ -56,12 +53,12 @@ class MainActivity : AppCompatActivity() {
@Inject lateinit var uiSettings: UISettings
override fun onCreate(savedInstanceState: Bundle?) {
enableEdgeToEdge()
super.onCreate(savedInstanceState)
setupTheme()
// Inflate the views after setting up the theme so that the theme attributes are applied.
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
setupEdgeToEdge(binding.root)
L.d("Activity created")
}
@ -98,17 +95,6 @@ class MainActivity : AppCompatActivity() {
}
}
private fun setupEdgeToEdge(contentView: View) {
WindowCompat.setDecorFitsSystemWindows(window, false)
contentView.setOnApplyWindowInsetsListener { view, insets ->
// Automatically inset the view to the left/right, as component support for
// these insets are highly lacking.
val bars = insets.systemBarInsetsCompat
view.updatePadding(left = bars.left, right = bars.right)
insets
}
}
/**
* Transform an [Intent] given to [MainActivity] into a [DeferredPlayback] that can be used in
* the playback system.

View file

@ -18,6 +18,7 @@
package org.oxycblt.auxio
import android.animation.ValueAnimator
import android.os.Bundle
import android.view.LayoutInflater
import android.view.ViewTreeObserver
@ -513,6 +514,8 @@ class MainFragment :
}
}
private var scrimAnimator: ValueAnimator? = null
private fun updateSpeedDial(open: Boolean) {
requireNotNull(speedDialBackCallback) { "SpeedDialBackPressedCallback was not available" }
.invalidateEnabled(open)

View file

@ -98,7 +98,7 @@ sealed interface ArtistShowChoices {
val uid: Music.UID
/** The current [Artist] choices. */
val choices: List<Artist>
/** Sanitize this instance with a [Library]. */
/** Sanitize this instance with a [DeviceLibrary]. */
fun sanitize(newLibrary: Library): ArtistShowChoices?
/** Backing implementation of [ArtistShowChoices] that is based on a [Song]. */

View file

@ -16,7 +16,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.ui
package org.oxycblt.auxio.home
import android.content.Context
import android.util.AttributeSet
@ -40,6 +40,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
}
override fun onApplyWindowInsets(insets: WindowInsets): WindowInsets {
// Prevent excessive layouts by using translation instead of padding.
updatePadding(bottom = insets.systemBarInsetsCompat.bottom)
return insets
}

View file

@ -37,10 +37,12 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.floatingactionbutton.FloatingActionButton
import com.google.android.material.tabs.TabLayoutMediator
import com.google.android.material.transition.MaterialSharedAxis
import dagger.hilt.android.AndroidEntryPoint
import java.lang.reflect.Field
import java.lang.reflect.Method
import kotlin.math.abs
import org.oxycblt.auxio.R
import org.oxycblt.auxio.databinding.FragmentHomeBinding
@ -51,7 +53,7 @@ import org.oxycblt.auxio.home.list.ArtistListFragment
import org.oxycblt.auxio.home.list.GenreListFragment
import org.oxycblt.auxio.home.list.PlaylistListFragment
import org.oxycblt.auxio.home.list.SongListFragment
import org.oxycblt.auxio.home.tabs.NamedTabStrategy
import org.oxycblt.auxio.home.tabs.AdaptiveTabStrategy
import org.oxycblt.auxio.home.tabs.Tab
import org.oxycblt.auxio.list.ListViewModel
import org.oxycblt.auxio.list.SelectionFragment
@ -66,6 +68,7 @@ import org.oxycblt.auxio.playback.PlaybackViewModel
import org.oxycblt.auxio.util.collect
import org.oxycblt.auxio.util.collectImmediately
import org.oxycblt.auxio.util.lazyReflectedField
import org.oxycblt.auxio.util.lazyReflectedMethod
import org.oxycblt.auxio.util.navigateSafe
import org.oxycblt.auxio.util.showToast
import org.oxycblt.musikr.IndexingProgress
@ -91,6 +94,7 @@ class HomeFragment :
private var storagePermissionLauncher: ActivityResultLauncher<String>? = null
private var getContentLauncher: ActivityResultLauncher<String>? = null
private var pendingImportTarget: Playlist? = null
private var lastUpdateTime = -1L
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -266,7 +270,9 @@ class HomeFragment :
// Set up the mapping between the ViewPager and TabLayout.
TabLayoutMediator(
binding.homeTabs, binding.homePager, NamedTabStrategy(homeModel.currentTabTypes))
binding.homeTabs,
binding.homePager,
AdaptiveTabStrategy(requireContext(), homeModel.currentTabTypes))
.attach()
}
@ -508,5 +514,11 @@ class HomeFragment :
private companion object {
val VP_RECYCLER_FIELD: Field by lazyReflectedField(ViewPager2::class, "mRecyclerView")
val RV_TOUCH_SLOP_FIELD: Field by lazyReflectedField(RecyclerView::class, "mTouchSlop")
val FAB_HIDE_FROM_USER_FIELD: Method by
lazyReflectedMethod(
FloatingActionButton::class,
"hide",
FloatingActionButton.OnVisibilityChangedListener::class,
Boolean::class)
}
}

View file

@ -0,0 +1,60 @@
/*
* Copyright (c) 2022 Auxio Project
* AdaptiveTabStrategy.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.home.tabs
import android.content.Context
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import org.oxycblt.auxio.R
import org.oxycblt.auxio.music.MusicType
/**
* A [TabLayoutMediator.TabConfigurationStrategy] that uses larger/smaller tab configurations
* depending on the screen configuration.
*
* @param context [Context] required to obtain window information
* @param tabs Current tab configuration from settings
* @author Alexander Capehart (OxygenCobalt)
*/
class AdaptiveTabStrategy(context: Context, private val tabs: List<MusicType>) :
TabLayoutMediator.TabConfigurationStrategy {
private val width = context.resources.configuration.smallestScreenWidthDp
override fun onConfigureTab(tab: TabLayout.Tab, position: Int) {
val homeTab = tabs[position]
val icon =
when (homeTab) {
MusicType.SONGS -> R.drawable.ic_song_24
MusicType.ALBUMS -> R.drawable.ic_album_24
MusicType.ARTISTS -> R.drawable.ic_artist_24
MusicType.GENRES -> R.drawable.ic_genre_24
MusicType.PLAYLISTS -> R.drawable.ic_playlist_24
}
// Use expected sw* size thresholds when choosing a configuration.
when {
// On small screens, only display an icon.
width < 370 -> tab.setIcon(icon).setContentDescription(homeTab.nameRes)
// On large screens, display an icon and text.
width < 600 -> tab.setText(homeTab.nameRes)
// On medium-size screens, display text.
else -> tab.setIcon(icon).setText(homeTab.nameRes)
}
}
}

View file

@ -29,8 +29,7 @@ enum class CoverMode {
OFF,
SAVE_SPACE,
BALANCED,
HIGH_QUALITY,
AS_IS;
HIGH_QUALITY;
/**
* The integer representation of this instance.
@ -44,7 +43,6 @@ enum class CoverMode {
SAVE_SPACE -> IntegerTable.COVER_MODE_SAVE_SPACE
BALANCED -> IntegerTable.COVER_MODE_BALANCED
HIGH_QUALITY -> IntegerTable.COVER_MODE_HIGH_QUALITY
AS_IS -> IntegerTable.COVER_MODE_AS_IS
}
companion object {
@ -61,7 +59,6 @@ enum class CoverMode {
IntegerTable.COVER_MODE_SAVE_SPACE -> SAVE_SPACE
IntegerTable.COVER_MODE_BALANCED -> BALANCED
IntegerTable.COVER_MODE_HIGH_QUALITY -> HIGH_QUALITY
IntegerTable.COVER_MODE_AS_IS -> AS_IS
else -> null
}
}

View file

@ -27,8 +27,9 @@ import android.net.Uri
import android.os.ParcelFileDescriptor
import kotlinx.coroutines.runBlocking
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.image.covers.SettingCovers
import org.oxycblt.musikr.covers.CoverResult
import org.oxycblt.auxio.image.covers.SiloedCoverId
import org.oxycblt.auxio.image.covers.SiloedCovers
import org.oxycblt.musikr.cover.ObtainResult
class CoverProvider : ContentProvider() {
override fun onCreate(): Boolean = true
@ -38,10 +39,12 @@ class CoverProvider : ContentProvider() {
return null
}
val id = uri.lastPathSegment ?: return null
val coverId = SiloedCoverId.parse(id) ?: return null
return runBlocking {
when (val result = SettingCovers.immutable(requireNotNull(context)).obtain(id)) {
is CoverResult.Hit -> result.cover.fd()
else -> null
val siloedCovers = SiloedCovers.from(requireNotNull(context), coverId.silo)
when (val res = siloedCovers.obtain(id)) {
is ObtainResult.Hit -> res.cover.fd()
is ObtainResult.Miss -> null
}
}
}

View file

@ -37,7 +37,6 @@ import androidx.annotation.DrawableRes
import androidx.annotation.Px
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.view.children
import androidx.core.view.isEmpty
import androidx.core.view.updateMarginsRelative
import androidx.core.widget.ImageViewCompat
import coil3.ImageLoader
@ -65,7 +64,7 @@ import org.oxycblt.musikr.Artist
import org.oxycblt.musikr.Genre
import org.oxycblt.musikr.Playlist
import org.oxycblt.musikr.Song
import org.oxycblt.musikr.covers.CoverCollection
import org.oxycblt.musikr.cover.CoverCollection
/**
* Auxio's extension of [ImageView] that enables cover art loading and playing indicator and
@ -173,7 +172,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
super.onFinishInflate()
// The image isn't added if other children have populated the body. This is by design.
if (isEmpty()) {
if (childCount == 0) {
addView(image)
}
@ -410,7 +409,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
@Px val iconSize: Int?
) : Drawable() {
init {
// Re-tint the drawable to use the analogous "on surface" color for
// Re-tint the drawable to use the analogous "on surfaceg" color for
// StyledImageView.
DrawableCompat.setTintList(inner, context.getColorCompat(R.color.sel_on_cover_bg))
}

View file

@ -19,9 +19,9 @@
package org.oxycblt.auxio.image.coil
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import androidx.core.graphics.createBitmap
import androidx.core.graphics.drawable.toDrawable
import coil3.ImageLoader
import coil3.asImage
@ -46,7 +46,7 @@ import kotlinx.coroutines.withContext
import okio.FileSystem
import okio.buffer
import okio.source
import org.oxycblt.musikr.covers.CoverCollection
import org.oxycblt.musikr.cover.CoverCollection
class CoverCollectionFetcher
private constructor(
@ -90,7 +90,8 @@ private constructor(
val mosaicFrameSize =
Size(Dimension(mosaicSize.width / 2), Dimension(mosaicSize.height / 2))
val mosaicBitmap = createBitmap(mosaicSize.width, mosaicSize.height)
val mosaicBitmap =
Bitmap.createBitmap(mosaicSize.width, mosaicSize.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(mosaicBitmap)
var x = 0

View file

@ -18,20 +18,32 @@
package org.oxycblt.auxio.image.coil
import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Canvas
import androidx.core.graphics.drawable.toDrawable
import coil3.ImageLoader
import coil3.asImage
import coil3.decode.DataSource
import coil3.decode.ImageSource
import coil3.fetch.FetchResult
import coil3.fetch.Fetcher
import coil3.fetch.ImageFetchResult
import coil3.fetch.SourceFetchResult
import coil3.request.Options
import coil3.size.Dimension
import coil3.size.Size
import coil3.size.pxOrElse
import java.io.InputStream
import javax.inject.Inject
import okio.FileSystem
import okio.buffer
import okio.source
import org.oxycblt.musikr.covers.Cover
import org.oxycblt.musikr.cover.Cover
class CoverFetcher private constructor(private val cover: Cover) : Fetcher {
class CoverFetcher private constructor(private val context: Context, private val cover: Cover) :
Fetcher {
override suspend fun fetch(): FetchResult? {
val stream = cover.open() ?: return null
return SourceFetchResult(
@ -40,8 +52,59 @@ class CoverFetcher private constructor(private val cover: Cover) : Fetcher {
dataSource = DataSource.DISK)
}
/** Derived from phonograph: https://github.com/kabouzeid/Phonograph */
private suspend fun createMosaic(streams: List<InputStream>, size: Size): FetchResult {
// Use whatever size coil gives us to create the mosaic.
val mosaicSize = android.util.Size(size.width.mosaicSize(), size.height.mosaicSize())
val mosaicFrameSize =
Size(Dimension(mosaicSize.width / 2), Dimension(mosaicSize.height / 2))
val mosaicBitmap =
Bitmap.createBitmap(mosaicSize.width, mosaicSize.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(mosaicBitmap)
var x = 0
var y = 0
// For each stream, create a bitmap scaled to 1/4th of the mosaics combined size
// and place it on a corner of the canvas.
for (stream in streams) {
if (y == mosaicSize.height) {
break
}
// Crop the bitmap down to a square so it leaves no empty space
// TODO: Work around this
val bitmap =
SquareCropTransformation.INSTANCE.transform(
BitmapFactory.decodeStream(stream), mosaicFrameSize)
canvas.drawBitmap(bitmap, x.toFloat(), y.toFloat(), null)
x += bitmap.width
if (x == mosaicSize.width) {
x = 0
y += bitmap.height
}
}
// It's way easier to map this into a drawable then try to serialize it into an
// BufferedSource. Just make sure we mark it as "sampled" so Coil doesn't try to
// load low-res mosaics into high-res ImageViews.
return ImageFetchResult(
image = mosaicBitmap.toDrawable(context.resources).asImage(),
isSampled = true,
dataSource = DataSource.DISK)
}
private fun Dimension.mosaicSize(): Int {
// Since we want the mosaic to be perfectly divisible into two, we need to round any
// odd image sizes upwards to prevent the mosaic creation from failing.
val size = pxOrElse { 512 }
return if (size.mod(2) > 0) size + 1 else size
}
class Factory @Inject constructor() : Fetcher.Factory<Cover> {
override fun create(data: Cover, options: Options, imageLoader: ImageLoader) =
CoverFetcher(data)
CoverFetcher(options.context, data)
}
}

View file

@ -21,8 +21,8 @@ package org.oxycblt.auxio.image.coil
import coil3.key.Keyer
import coil3.request.Options
import javax.inject.Inject
import org.oxycblt.musikr.covers.Cover
import org.oxycblt.musikr.covers.CoverCollection
import org.oxycblt.musikr.cover.Cover
import org.oxycblt.musikr.cover.CoverCollection
class CoverKeyer @Inject constructor() : Keyer<Cover> {
override fun key(data: Cover, options: Options) = "${data.id}&${options.size}"

View file

@ -38,8 +38,8 @@ import coil3.transform.Transformation
import kotlin.math.roundToInt
/**
* A vendoring of coil's RoundedCornersTransformation that can handle non-1:1 aspect ratio images
* without cropping them.
* A vendoring of [coil.transform.RoundedCornersTransformation] that can handle non-1:1 aspect ratio
* images without cropping them.
*
* @author Coil Team, Alexander Capehart (OxygenCobalt)
*/

View file

@ -19,7 +19,6 @@
package org.oxycblt.auxio.image.coil
import android.graphics.Bitmap
import androidx.core.graphics.scale
import coil3.size.Size
import coil3.size.pxOrElse
import coil3.transform.Transformation
@ -47,7 +46,7 @@ class SquareCropTransformation : Transformation() {
val desiredHeight = size.height.pxOrElse { dstSize }
if (dstSize != desiredWidth || dstSize != desiredHeight) {
// Image is not the desired size, upscale it.
return dst.scale(desiredWidth, desiredHeight)
return Bitmap.createScaledBitmap(dst, desiredWidth, desiredHeight, true)
}
return dst
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2023 Auxio Project
* CoversModule.kt is part of Auxio.
* Copyright (c) 2024 Auxio Project
* CoverModule.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -20,11 +20,19 @@ package org.oxycblt.auxio.image.covers
import dagger.Binds
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import org.oxycblt.musikr.cover.CoverIdentifier
@Module
@InstallIn(SingletonComponent::class)
interface CoilModule {
@Binds fun settingCovers(imageSettings: SettingCoversImpl): SettingCovers
interface CoverModule {
@Binds fun configCovers(impl: SettingCoversImpl): SettingCovers
}
@Module
@InstallIn(SingletonComponent::class)
class CoverProvidesModule {
@Provides fun identifier(): CoverIdentifier = CoverIdentifier.md5()
}

View file

@ -0,0 +1,44 @@
/*
* Copyright (c) 2024 Auxio Project
* CoverSilo.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.image.covers
import java.util.UUID
import org.oxycblt.musikr.cover.CoverParams
data class CoverSilo(val revision: UUID, val params: CoverParams) {
override fun toString() = "${revision}.${params.resolution}.${params.quality}"
companion object {
fun parse(silo: String): CoverSilo? {
val parts = silo.split('.')
if (parts.size != 3) return null
val revision = parts[0].toUuidOrNull() ?: return null
val resolution = parts[1].toIntOrNull() ?: return null
val quality = parts[2].toIntOrNull() ?: return null
return CoverSilo(revision, CoverParams.of(resolution, quality))
}
}
}
private fun String.toUuidOrNull(): UUID? =
try {
UUID.fromString(this)
} catch (e: IllegalArgumentException) {
null
}

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2025 Auxio Project
* RevisionedTranscoding.kt is part of Auxio.
* Copyright (c) 2024 Auxio Project
* CoverUtil.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -18,9 +18,9 @@
package org.oxycblt.auxio.image.covers
import java.util.UUID
import org.oxycblt.musikr.covers.stored.Transcoding
import android.content.Context
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
class RevisionedTranscoding(revision: UUID, private val inner: Transcoding) : Transcoding by inner {
override val tag = "_$revision${inner.tag}"
}
suspend fun Context.coversDir() =
withContext(Dispatchers.IO) { filesDir.resolve("covers").apply { mkdirs() } }

View file

@ -18,20 +18,18 @@
package org.oxycblt.auxio.image.covers
import org.oxycblt.musikr.covers.Cover
import org.oxycblt.musikr.covers.CoverResult
import org.oxycblt.musikr.covers.MutableCovers
import org.oxycblt.musikr.covers.stored.CoverStorage
import org.oxycblt.musikr.fs.device.DeviceFile
import org.oxycblt.musikr.metadata.Metadata
import android.content.Context
import org.oxycblt.musikr.cover.Cover
import org.oxycblt.musikr.cover.MutableCovers
import org.oxycblt.musikr.cover.ObtainResult
class NullCovers(private val storage: CoverStorage) : MutableCovers<NullCover> {
override suspend fun obtain(id: String) = CoverResult.Hit(NullCover)
class NullCovers(private val context: Context) : MutableCovers {
override suspend fun obtain(id: String) = ObtainResult.Hit(NullCover)
override suspend fun create(file: DeviceFile, metadata: Metadata) = CoverResult.Hit(NullCover)
override suspend fun write(data: ByteArray): Cover = NullCover
override suspend fun cleanup(excluding: Collection<Cover>) {
storage.ls(setOf()).map { storage.rm(it) }
context.coversDir().listFiles()?.forEach { it.deleteRecursively() }
}
}

View file

@ -19,55 +19,30 @@
package org.oxycblt.auxio.image.covers
import android.content.Context
import android.graphics.Bitmap
import java.util.UUID
import javax.inject.Inject
import org.oxycblt.auxio.image.CoverMode
import org.oxycblt.auxio.image.ImageSettings
import org.oxycblt.musikr.covers.Cover
import org.oxycblt.musikr.covers.Covers
import org.oxycblt.musikr.covers.FDCover
import org.oxycblt.musikr.covers.MutableCovers
import org.oxycblt.musikr.covers.chained.ChainedCovers
import org.oxycblt.musikr.covers.chained.MutableChainedCovers
import org.oxycblt.musikr.covers.embedded.CoverIdentifier
import org.oxycblt.musikr.covers.embedded.EmbeddedCovers
import org.oxycblt.musikr.covers.fs.FSCovers
import org.oxycblt.musikr.covers.fs.MutableFSCovers
import org.oxycblt.musikr.covers.stored.Compress
import org.oxycblt.musikr.covers.stored.CoverStorage
import org.oxycblt.musikr.covers.stored.MutableStoredCovers
import org.oxycblt.musikr.covers.stored.NoTranscoding
import org.oxycblt.musikr.covers.stored.StoredCovers
import org.oxycblt.musikr.cover.CoverIdentifier
import org.oxycblt.musikr.cover.CoverParams
import org.oxycblt.musikr.cover.MutableCovers
interface SettingCovers {
suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover>
companion object {
suspend fun immutable(context: Context): Covers<FDCover> =
ChainedCovers(StoredCovers(CoverStorage.at(context.coversDir())), FSCovers(context))
}
suspend fun create(context: Context, revision: UUID): MutableCovers
}
class SettingCoversImpl @Inject constructor(private val imageSettings: ImageSettings) :
class SettingCoversImpl
@Inject
constructor(private val imageSettings: ImageSettings, private val identifier: CoverIdentifier) :
SettingCovers {
override suspend fun mutate(context: Context, revision: UUID): MutableCovers<out Cover> {
val coverStorage = CoverStorage.at(context.coversDir())
val transcoding =
override suspend fun create(context: Context, revision: UUID): MutableCovers =
when (imageSettings.coverMode) {
CoverMode.OFF -> return NullCovers(coverStorage)
CoverMode.SAVE_SPACE -> Compress(Bitmap.CompressFormat.JPEG, 500, 70)
CoverMode.BALANCED -> Compress(Bitmap.CompressFormat.JPEG, 750, 85)
CoverMode.HIGH_QUALITY -> Compress(Bitmap.CompressFormat.JPEG, 1000, 100)
CoverMode.AS_IS -> NoTranscoding
CoverMode.OFF -> NullCovers(context)
CoverMode.SAVE_SPACE -> siloedCovers(context, revision, CoverParams.of(500, 70))
CoverMode.BALANCED -> siloedCovers(context, revision, CoverParams.of(750, 85))
CoverMode.HIGH_QUALITY -> siloedCovers(context, revision, CoverParams.of(1000, 100))
}
val revisionedTranscoding = RevisionedTranscoding(revision, transcoding)
val storedCovers =
MutableStoredCovers(
EmbeddedCovers(CoverIdentifier.md5()), coverStorage, revisionedTranscoding)
val fsCovers = MutableFSCovers(context)
return MutableChainedCovers(storedCovers, fsCovers)
}
}
private fun Context.coversDir() = filesDir.resolve("covers").apply { mkdirs() }
private suspend fun siloedCovers(context: Context, revision: UUID, with: CoverParams) =
MutableSiloedCovers.from(context, CoverSilo(revision, with), identifier)
}

View file

@ -0,0 +1,118 @@
/*
* Copyright (c) 2024 Auxio Project
* SiloedCovers.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.image.covers
import android.content.Context
import java.io.File
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.oxycblt.musikr.cover.Cover
import org.oxycblt.musikr.cover.CoverFormat
import org.oxycblt.musikr.cover.CoverIdentifier
import org.oxycblt.musikr.cover.Covers
import org.oxycblt.musikr.cover.FileCover
import org.oxycblt.musikr.cover.FileCovers
import org.oxycblt.musikr.cover.MutableCovers
import org.oxycblt.musikr.cover.MutableFileCovers
import org.oxycblt.musikr.cover.ObtainResult
import org.oxycblt.musikr.fs.app.AppFiles
open class SiloedCovers(private val silo: CoverSilo, private val fileCovers: FileCovers) : Covers {
override suspend fun obtain(id: String): ObtainResult<SiloedCover> {
val coverId = SiloedCoverId.parse(id) ?: return ObtainResult.Miss()
if (coverId.silo != silo) return ObtainResult.Miss()
return when (val result = fileCovers.obtain(coverId.id)) {
is ObtainResult.Hit -> ObtainResult.Hit(SiloedCover(silo, result.cover))
is ObtainResult.Miss -> ObtainResult.Miss()
}
}
companion object {
suspend fun from(context: Context, silo: CoverSilo): SiloedCovers {
val core = SiloCore.from(context, silo)
return SiloedCovers(silo, FileCovers(core.files, core.format))
}
}
}
class MutableSiloedCovers
private constructor(
private val rootDir: File,
private val silo: CoverSilo,
private val fileCovers: MutableFileCovers
) : SiloedCovers(silo, fileCovers), MutableCovers {
override suspend fun write(data: ByteArray) = SiloedCover(silo, fileCovers.write(data))
override suspend fun cleanup(excluding: Collection<Cover>) {
fileCovers.cleanup(excluding.filterIsInstance<SiloedCover>().map { it.innerCover })
// Destroy old revisions no longer being used.
withContext(Dispatchers.IO) {
val exclude = silo.toString()
rootDir.listFiles { file -> file.name != exclude }?.forEach { it.deleteRecursively() }
}
}
companion object {
suspend fun from(
context: Context,
silo: CoverSilo,
coverIdentifier: CoverIdentifier
): MutableSiloedCovers {
val core = SiloCore.from(context, silo)
return MutableSiloedCovers(
core.rootDir, silo, MutableFileCovers(core.files, core.format, coverIdentifier))
}
}
}
data class SiloedCover(private val silo: CoverSilo, val innerCover: FileCover) :
FileCover by innerCover {
private val innerId = SiloedCoverId(silo, innerCover.id)
override val id = innerId.toString()
}
data class SiloedCoverId(val silo: CoverSilo, val id: String) {
override fun toString() = "$id@$silo"
companion object {
fun parse(id: String): SiloedCoverId? {
val parts = id.split('@')
if (parts.size != 2) return null
val silo = CoverSilo.parse(parts[1]) ?: return null
return SiloedCoverId(silo, parts[0])
}
}
}
private data class SiloCore(val rootDir: File, val files: AppFiles, val format: CoverFormat) {
companion object {
suspend fun from(context: Context, silo: CoverSilo): SiloCore {
val rootDir: File
val revisionDir: File
withContext(Dispatchers.IO) {
rootDir = context.coversDir()
revisionDir = rootDir.resolve(silo.toString()).apply { mkdirs() }
}
val files = AppFiles.at(revisionDir)
val format = CoverFormat.jpeg(silo.params)
return SiloCore(rootDir, files, format)
}
}
}

View file

@ -19,7 +19,6 @@
package org.oxycblt.auxio.list.recycler
import android.animation.Animator
import android.annotation.SuppressLint
import android.content.Context
import android.graphics.Canvas
import android.graphics.Rect
@ -35,7 +34,6 @@ import android.view.ViewGroup
import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.annotation.AttrRes
import androidx.core.view.isEmpty
import androidx.core.view.isInvisible
import androidx.core.view.updatePaddingRelative
import androidx.core.widget.TextViewCompat
@ -92,7 +90,6 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
private val thumbSlider = MaterialSlider.small(context, thumbWidth)
private var thumbAnimator: Animator? = null
@SuppressLint("InflateParams")
private val thumbView =
context.inflater.inflate(R.layout.view_scroll_thumb, null).apply {
thumbSlider.jumpOut(this)
@ -342,7 +339,7 @@ constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr
// [proportion of scroll position to scroll range] * [total thumb range]
// This is somewhat adapted from the androidx RecyclerView FastScroller implementation.
val offsetY = computeVerticalScrollOffset()
if (computeVerticalScrollRange() < height || isEmpty()) {
if (computeVerticalScrollRange() < height || childCount == 0) {
fastScrollingPossible = false
hideThumb()
hidePopup()

View file

@ -29,7 +29,6 @@ import kotlinx.coroutines.withContext
import kotlinx.coroutines.yield
import org.oxycblt.auxio.image.covers.SettingCovers
import org.oxycblt.auxio.music.MusicRepository.IndexingWorker
import org.oxycblt.auxio.music.shim.WriteOnlyMutableCache
import org.oxycblt.musikr.IndexingProgress
import org.oxycblt.musikr.Interpretation
import org.oxycblt.musikr.Library
@ -39,7 +38,7 @@ import org.oxycblt.musikr.MutableLibrary
import org.oxycblt.musikr.Playlist
import org.oxycblt.musikr.Song
import org.oxycblt.musikr.Storage
import org.oxycblt.musikr.cache.MutableCache
import org.oxycblt.musikr.cache.StoredCache
import org.oxycblt.musikr.playlist.db.StoredPlaylists
import org.oxycblt.musikr.tag.interpret.Naming
import org.oxycblt.musikr.tag.interpret.Separators
@ -188,8 +187,8 @@ interface MusicRepository {
/**
* Flags indicating which kinds of music information changed.
*
* @param deviceLibrary Whether the current songs/albums/artists/genres has changed.
* @param userLibrary Whether the current playlists have changed.
* @param deviceLibrary Whether the current [DeviceLibrary] has changed.
* @param library Whether the current [Playlist]s have changed.
*/
data class Changes(val deviceLibrary: Boolean, val userLibrary: Boolean)
@ -237,14 +236,14 @@ class MusicRepositoryImpl
@Inject
constructor(
@ApplicationContext private val context: Context,
private val cache: MutableCache,
private val storedCache: StoredCache,
private val storedPlaylists: StoredPlaylists,
private val settingCovers: SettingCovers,
private val musicSettings: MusicSettings
) : MusicRepository {
private val updateListeners = mutableListOf<MusicRepository.UpdateListener>()
private val indexingListeners = mutableListOf<MusicRepository.IndexingListener>()
@Volatile private var indexingWorker: IndexingWorker? = null
@Volatile private var indexingWorker: MusicRepository.IndexingWorker? = null
@Volatile override var library: MutableLibrary? = null
@Volatile private var previousCompletedState: IndexingState.Completed? = null
@ -283,7 +282,7 @@ constructor(
}
@Synchronized
override fun registerWorker(worker: IndexingWorker) {
override fun registerWorker(worker: MusicRepository.IndexingWorker) {
if (indexingWorker != null) {
L.w("Worker is already registered")
return
@ -293,7 +292,7 @@ constructor(
}
@Synchronized
override fun unregisterWorker(worker: IndexingWorker) {
override fun unregisterWorker(worker: MusicRepository.IndexingWorker) {
if (indexingWorker !== worker) {
L.w("Given worker did not match current worker")
return
@ -385,14 +384,14 @@ constructor(
Naming.simple()
}
val locations = musicSettings.musicLocations
val withHidden = musicSettings.withHidden
val currentRevision = musicSettings.revision
val newRevision = currentRevision?.takeIf { withCache } ?: UUID.randomUUID()
val cache = if (withCache) cache else WriteOnlyMutableCache(cache)
val covers = settingCovers.mutate(context, newRevision)
val cache = if (withCache) storedCache.visible() else storedCache.invisible()
val covers = settingCovers.create(context, newRevision)
val storage = Storage(cache, covers, storedPlaylists)
val interpretation = Interpretation(nameFactory, separators, withHidden)
val interpretation = Interpretation(nameFactory, separators)
val result =
Musikr.new(context, storage, interpretation).run(locations, ::emitIndexingProgress)
// Music loading completed, update the revision right now so we re-use this work

View file

@ -40,8 +40,6 @@ interface MusicSettings : Settings<MusicSettings.Listener> {
var musicLocations: List<MusicLocation>
/** Whether to exclude non-music audio files from the music library. */
val excludeNonMusic: Boolean
/** Whether to ignore hidden files and directories during music loading. */
val withHidden: Boolean
/** Whether to be actively watching for changes in the music library. */
val shouldBeObserving: Boolean
/** A [String] of characters representing the desired characters to denote multi-value tags. */
@ -85,19 +83,13 @@ class MusicSettingsImpl @Inject constructor(@ApplicationContext private val cont
sharedPreferences.edit {
putString(
getString(R.string.set_key_music_locations), MusicLocation.toString(value))
commit()
// Sometimes changing this setting just won't actually trigger the listener.
// Only this one. No idea why.
listener?.onMusicLocationsChanged()
this@edit.apply()
}
}
override val excludeNonMusic: Boolean
get() = sharedPreferences.getBoolean(getString(R.string.set_key_exclude_non_music), true)
override val withHidden: Boolean
get() = sharedPreferences.getBoolean(getString(R.string.set_key_with_hidden), false)
override val shouldBeObserving: Boolean
get() = sharedPreferences.getBoolean(getString(R.string.set_key_observing), false)
@ -124,9 +116,7 @@ class MusicSettingsImpl @Inject constructor(@ApplicationContext private val cont
listener.onMusicLocationsChanged()
}
getString(R.string.set_key_separators),
getString(R.string.set_key_auto_sort_names),
getString(R.string.set_key_with_hidden),
getString(R.string.set_key_exclude_non_music) -> {
getString(R.string.set_key_auto_sort_names) -> {
L.d("Dispatching indexing setting change for $key")
listener.onIndexingSettingChanged()
}

View file

@ -27,10 +27,15 @@ import org.oxycblt.auxio.R
* @author Alexander Capehart (OxygenCobalt)
*/
enum class MusicType {
/** @see Song */
SONGS,
/** @see Album */
ALBUMS,
/** @see Artist */
ARTISTS,
/** @see Genre */
GENRES,
/** @see Playlist */
PLAYLISTS;
/**

View file

@ -53,9 +53,6 @@ class DeletePlaylistDialog : ViewBindingMaterialDialogFragment<DialogDeletePlayl
builder
.setTitle(R.string.lbl_confirm_delete_playlist)
.setPositiveButton(R.string.lbl_delete) { _, _ ->
// Normally the navigateUp will occur after this, which then collides with the
// playlist view's navigation. Forcefully navigate up to stop this.
findNavController().navigateUp()
// Now we can delete the playlist for-real this time.
musicModel.deletePlaylist(
unlikelyToBeNull(pickerModel.currentPlaylistToDelete.value), rude = true)

View file

@ -25,7 +25,6 @@ import android.view.LayoutInflater
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
import androidx.core.net.toUri
import androidx.recyclerview.widget.ConcatAdapter
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
@ -81,7 +80,7 @@ class MusicSourcesDialog :
val locations =
savedInstanceState?.getStringArrayList(KEY_PENDING_LOCATIONS)?.mapNotNull {
MusicLocation.existing(requireContext(), it.toUri())
MusicLocation.existing(requireContext(), Uri.parse(it))
} ?: musicSettings.musicLocations
locationAdapter.addAll(locations)

View file

@ -51,7 +51,7 @@ class NewLocationFooterAdapter(private val listener: Listener) :
}
/**
* A [RecyclerView.ViewHolder] that displays a "New Playlist" choice in [NewLocationFooterAdapter].
* A [RecyclerView.ViewHolder] that displays a "New Playlist" choice in [NewPlaylistFooterAdapter].
* Use [from] to create an instance.
*
* @author Alexander Capehart (OxygenCobalt)

View file

@ -92,7 +92,6 @@ constructor(
fun start() {
if (musicRepository.indexingState == null) {
L.d("Requesting index")
musicRepository.requestIndex(true)
}
}

View file

@ -25,8 +25,7 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
import org.oxycblt.musikr.cache.MutableCache
import org.oxycblt.musikr.cache.db.MutableDBCache
import org.oxycblt.musikr.cache.StoredCache
import org.oxycblt.musikr.playlist.db.StoredPlaylists
@Module
@ -34,7 +33,7 @@ import org.oxycblt.musikr.playlist.db.StoredPlaylists
class MusikrShimModule {
@Singleton
@Provides
fun cache(@ApplicationContext context: Context): MutableCache = MutableDBCache.from(context)
fun storedCache(@ApplicationContext context: Context) = StoredCache.from(context)
@Singleton
@Provides

View file

@ -1,41 +0,0 @@
/*
* Copyright (c) 2025 Auxio Project
* WriteOnlyMutableCache.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.music.shim
import org.oxycblt.musikr.cache.CacheResult
import org.oxycblt.musikr.cache.CachedSong
import org.oxycblt.musikr.cache.MutableCache
import org.oxycblt.musikr.fs.device.DeviceFile
class WriteOnlyMutableCache(private val inner: MutableCache) : MutableCache {
override suspend fun read(file: DeviceFile): CacheResult {
return when (val result = inner.read(file)) {
is CacheResult.Hit -> CacheResult.Stale(file, result.song.addedMs)
else -> result
}
}
override suspend fun write(cachedSong: CachedSong) {
inner.write(cachedSong)
}
override suspend fun cleanup(excluding: List<CachedSong>) {
inner.cleanup(excluding)
}
}

View file

@ -48,6 +48,13 @@ fun Long.dsToMs() = times(100)
*/
fun Long.dsToSecs() = floorDiv(10)
/**
* Convert seconds into milliseconds.
*
* @return A converted millisecond value.
*/
fun Long.secsToMs() = times(1000)
/**
* Convert a millisecond value into a string duration.
*

View file

@ -18,9 +18,7 @@
package org.oxycblt.auxio.playback.service
import androidx.annotation.OptIn
import androidx.media3.common.C
import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.source.ShuffleOrder
/**
@ -30,7 +28,6 @@ import androidx.media3.exoplayer.source.ShuffleOrder
*
* @author media3 team, Alexander Capehart (OxygenCobalt)
*/
@OptIn(UnstableApi::class)
class BetterShuffleOrder(private val shuffled: IntArray) : ShuffleOrder {
private val indexInShuffled: IntArray = IntArray(shuffled.size)

View file

@ -22,13 +22,11 @@ import android.content.Context
import android.content.Intent
import android.media.audiofx.AudioEffect
import android.provider.OpenableColumns
import androidx.annotation.OptIn
import androidx.media3.common.AudioAttributes
import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.PlaybackException
import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi
import androidx.media3.decoder.ffmpeg.FfmpegAudioRenderer
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.exoplayer.RenderersFactory
@ -64,7 +62,6 @@ import org.oxycblt.musikr.MusicParent
import org.oxycblt.musikr.Song
import timber.log.Timber as L
@OptIn(UnstableApi::class)
class ExoPlaybackStateHolder(
private val context: Context,
private val player: ExoPlayer,
@ -435,16 +432,16 @@ class ExoPlaybackStateHolder(
override fun endSession() {
// This session has ended, so we need to reset this flag for when the next
// session starts.
playbackManager.playing(false)
save {
// User could feasibly start playing again if they were fast enough, so
// we need to avoid stopping the foreground state if that's the case.
if (!playbackManager.progression.isPlaying) {
if (playbackManager.progression.isPlaying) {
playbackManager.playing(false)
}
sessionOngoing = false
playbackManager.ack(this, StateAck.SessionEnded)
}
}
}
override fun reset(ack: StateAck.NewPlayback) {
player.setMediaItems(listOf())
@ -548,9 +545,7 @@ class ExoPlaybackStateHolder(
private fun save(cb: () -> Unit) {
saveJob {
if (sessionOngoing) {
persistenceRepository.saveState(playbackManager.toSavedState())
}
withContext(Dispatchers.Main) { cb() }
}
}
@ -561,11 +556,9 @@ class ExoPlaybackStateHolder(
delay(SAVE_BUFFER)
yield()
L.d("Committing saved state")
if (sessionOngoing) {
persistenceRepository.saveState(playbackManager.toSavedState())
}
}
}
private fun saveJob(block: suspend () -> Unit) {
currentSaveJob?.let {

View file

@ -26,7 +26,6 @@ import androidx.core.content.ContextCompat
import dagger.hilt.android.AndroidEntryPoint
import javax.inject.Inject
import org.oxycblt.auxio.AuxioService
import org.oxycblt.auxio.IntegerTable
import org.oxycblt.auxio.playback.state.PlaybackStateManager
import timber.log.Timber as L
@ -48,11 +47,8 @@ class MediaButtonReceiver : BroadcastReceiver() {
// stupid this is with the state of foreground services on modern android. One
// wrong action at the wrong time will result in the app crashing, and there is
// nothing I can do about it.
// TODO: Think I finally have an alternative with the changes I made to accomodate
// tasker
L.d("Delivering media button intent $intent")
intent.component = ComponentName(context, AuxioService::class.java)
intent.putExtra(AuxioService.INTENT_KEY_START_ID, IntegerTable.START_ID_MEDIA_BUTTON)
ContextCompat.startForegroundService(context, intent)
}
}

View file

@ -20,7 +20,6 @@ package org.oxycblt.auxio.playback.service
import android.annotation.SuppressLint
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat
@ -29,7 +28,6 @@ import androidx.annotation.DrawableRes
import androidx.car.app.mediaextensions.MetadataExtras
import androidx.core.app.NotificationCompat
import androidx.media.app.NotificationCompat.MediaStyle
import androidx.media.session.MediaButtonReceiver
import javax.inject.Inject
import org.oxycblt.auxio.BuildConfig
import org.oxycblt.auxio.ForegroundListener
@ -110,9 +108,6 @@ private constructor(
}
}
fun tryMediaButtonIntent(intent: Intent): Boolean =
MediaButtonReceiver.handleIntent(mediaSession, intent) != null
/**
* Release this instance, closing the [MediaSessionCompat] and preventing any further updates to
* the [PlaybackNotification].

View file

@ -19,11 +19,9 @@
package org.oxycblt.auxio.playback.service
import android.content.Context
import android.content.Intent
import android.support.v4.media.session.MediaSessionCompat
import javax.inject.Inject
import kotlinx.coroutines.Job
import org.oxycblt.auxio.AuxioService.Companion.INTENT_KEY_START_ID
import org.oxycblt.auxio.ForegroundListener
import org.oxycblt.auxio.ForegroundServiceNotification
import org.oxycblt.auxio.IntegerTable
@ -85,34 +83,18 @@ private constructor(
}
}
fun start(intent: Intent?) {
fun start(startedBy: Int) {
// At minimum we want to ensure an active playback state.
// TODO: Possibly also force to go foreground?
val startId = intent?.getIntExtra(INTENT_KEY_START_ID, -1)
L.d("Handling non-native start.")
val action =
when (startId) {
when (startedBy) {
IntegerTable.START_ID_ACTIVITY -> null
IntegerTable.START_ID_TASKER ->
DeferredPlayback.RestoreState(
play = true, fallback = DeferredPlayback.ShuffleAll)
IntegerTable.START_ID_MEDIA_BUTTON -> {
if (!sessionHolder.tryMediaButtonIntent(intent)) {
// Malformed intent, need to restore state immediately
DeferredPlayback.RestoreState(
play = true, fallback = DeferredPlayback.ShuffleAll)
} else {
null
}
}
else -> {
L.d("Handling non-native start.")
if (intent != null && sessionHolder.tryMediaButtonIntent(intent)) {
// Just a media button intent, move on.
return
}
// External services using Auxio better know what they are doing.
DeferredPlayback.RestoreState(play = false)
}
else -> DeferredPlayback.RestoreState(play = false)
}
if (action != null) {
L.d("Initing service fragment using action $action")

View file

@ -19,8 +19,6 @@
package org.oxycblt.auxio.playback.service
import android.content.Context
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
import androidx.media3.datasource.ContentDataSource
import androidx.media3.datasource.DataSource
import androidx.media3.exoplayer.source.MediaSource
@ -43,7 +41,6 @@ import dagger.hilt.components.SingletonComponent
@Module
@InstallIn(SingletonComponent::class)
@OptIn(UnstableApi::class)
class SystemModule {
@Provides
fun mediaSourceFactory(

View file

@ -94,11 +94,7 @@ constructor(
override val parent: MusicParent?,
override val queue: List<Song>,
override val shuffled: Boolean
) : PlaybackCommand {
// Only show queue count to reduce memory use
override fun toString() =
"PlaybackCommand(song=$song, parent=$parent, queue=${queue.size} songs, shuffled=$shuffled)"
}
) : PlaybackCommand
override fun song(song: Song, shuffle: ShuffleMode) =
newCommand(song, null, listOf(song), shuffle)

View file

@ -20,9 +20,9 @@ package org.oxycblt.auxio.settings
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.LayoutInflater
import androidx.core.net.toUri
import androidx.core.view.updatePadding
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
@ -72,9 +72,6 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
binding.aboutLicenses.setOnClickListener { requireContext().openInBrowser(LINK_LICENSES) }
binding.aboutProfile.setOnClickListener { requireContext().openInBrowser(LINK_PROFILE) }
binding.aboutDonate.setOnClickListener { requireContext().openInBrowser(LINK_DONATE) }
binding.aboutSupMarkPitblado.setOnClickListener {
requireContext().openInBrowser(LINK_SUP_MARK_PITBLADO)
}
binding.aboutFeedbackGithub.setOnClickListener {
requireContext().openInBrowser(LINK_NEW_ISSUE)
}
@ -105,7 +102,7 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
}
private fun Context.sendEmail(recipient: String) {
val intent = Intent(Intent.ACTION_SENDTO).apply { data = "mailto:$recipient".toUri() }
val intent = Intent(Intent.ACTION_SENDTO).apply { data = Uri.parse("mailto:$recipient") }
startIntent(intent)
}
@ -116,6 +113,5 @@ class AboutFragment : ViewBindingFragment<FragmentAboutBinding>() {
const val LINK_NEW_ISSUE = "$LINK_SOURCE/issues/new"
const val LINK_PROFILE = "https://github.com/OxygenCobalt"
const val LINK_DONATE = "https://github.com/sponsors/OxygenCobalt"
const val LINK_SUP_MARK_PITBLADO = "https://github.com/mark-pitblado"
}
}

View file

@ -62,13 +62,17 @@ interface Settings<Listener> {
*/
abstract class Impl<Listener>(private val context: Context) :
Settings<Listener>, SharedPreferences.OnSharedPreferenceChangeListener {
init {
L.d(this::class.simpleName)
}
protected val sharedPreferences: SharedPreferences =
PreferenceManager.getDefaultSharedPreferences(context.applicationContext)
/** @see [Context.getString] */
protected fun getString(@StringRes stringRes: Int) = context.getString(stringRes)
protected var listener: Listener? = null
private var listener: Listener? = null
override fun registerListener(listener: Listener) {
if (this.listener == null) {

View file

@ -67,14 +67,5 @@ class MusicPreferenceFragment : BasePreferenceFragment(R.xml.preferences_music)
true
}
}
if (preference.key == getString(R.string.set_key_with_hidden)) {
L.d("Configuring ignore hidden files setting")
preference.onPreferenceChangeListener =
Preference.OnPreferenceChangeListener { _, _ ->
L.d("Ignore hidden files setting changed, reloading music")
musicModel.refresh()
true
}
}
}
}

View file

@ -66,9 +66,6 @@ class StartActionRunner : TaskerPluginRunnerActionNoOutputOrInput() {
while (!AuxioService.isForeground) {
Thread.sleep(100)
}
// Actually need to sleep even longer since for some reason the notification still
// won't accept media button events for an arbitrary period.
Thread.sleep(100)
return TaskerPluginResultSucess()
}
}

View file

@ -46,25 +46,25 @@ class AnimConfig(
companion object {
val STANDARD = MR.attr.motionEasingStandardInterpolator
// val EMPHASIZED = MR.attr.motionEasingEmphasizedInterpolator
val EMPHASIZED = MR.attr.motionEasingEmphasizedInterpolator
val EMPHASIZED_ACCELERATE = MR.attr.motionEasingEmphasizedAccelerateInterpolator
val EMPHASIZED_DECELERATE = MR.attr.motionEasingEmphasizedDecelerateInterpolator
val SHORT1 = MR.attr.motionDurationShort1 to 50
// val SHORT2 = MR.attr.motionDurationShort2 to 100
val SHORT2 = MR.attr.motionDurationShort2 to 100
val SHORT3 = MR.attr.motionDurationShort3 to 150
// val SHORT4 = MR.attr.motionDurationShort4 to 200
val SHORT4 = MR.attr.motionDurationShort4 to 200
val MEDIUM1 = MR.attr.motionDurationMedium1 to 250
val MEDIUM2 = MR.attr.motionDurationMedium2 to 300
val MEDIUM3 = MR.attr.motionDurationMedium3 to 350
// val MEDIUM4 = MR.attr.motionDurationMedium4 to 400
// val LONG1 = MR.attr.motionDurationLong1 to 450
// val LONG2 = MR.attr.motionDurationLong2 to 500
// val LONG3 = MR.attr.motionDurationLong3 to 550
// val LONG4 = MR.attr.motionDurationLong4 to 600
// val EXTRA_LONG1 = MR.attr.motionDurationExtraLong1 to 700
// val EXTRA_LONG2 = MR.attr.motionDurationExtraLong2 to 800
// val EXTRA_LONG3 = MR.attr.motionDurationExtraLong3 to 900
// val EXTRA_LONG4 = MR.attr.motionDurationExtraLong4 to 1000
val MEDIUM4 = MR.attr.motionDurationMedium4 to 400
val LONG1 = MR.attr.motionDurationLong1 to 450
val LONG2 = MR.attr.motionDurationLong2 to 500
val LONG3 = MR.attr.motionDurationLong3 to 550
val LONG4 = MR.attr.motionDurationLong4 to 600
val EXTRA_LONG1 = MR.attr.motionDurationExtraLong1 to 700
val EXTRA_LONG2 = MR.attr.motionDurationExtraLong2 to 800
val EXTRA_LONG3 = MR.attr.motionDurationExtraLong3 to 900
val EXTRA_LONG4 = MR.attr.motionDurationExtraLong4 to 1000
fun of(context: Context, @AttrRes interpolator: Int, duration: Pair<Int, Int>) =
AnimConfig(context, interpolator, duration.first, duration.second)
@ -122,7 +122,7 @@ private constructor(
}
}
private fun jumpToFadeIn(view: View) {
fun jumpToFadeIn(view: View) {
view.apply {
alpha = 1f
scaleX = 1.0f

View file

@ -1,45 +0,0 @@
/*
* Copyright (c) 2025 Auxio Project
* EatInsetsFrameLayout.kt is part of Auxio.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.oxycblt.auxio.ui
import android.content.Context
import android.util.AttributeSet
import android.view.WindowInsets
import android.widget.FrameLayout
import androidx.annotation.AttrRes
/**
* A [FrameLayout] that works around the pre-Android 10 behavior of propagating mutated insets to
* sibling views. Wrap this around views that to isolate mutated window insets.
*
* @author Alexander Capehart (OxygenCobalt)
*/
class EatInsetsFrameLayout
@JvmOverloads
constructor(context: Context, attrs: AttributeSet? = null, @AttrRes defStyleAttr: Int = 0) :
FrameLayout(context, attrs, defStyleAttr) {
init {
clipToPadding = false
}
override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets {
super.dispatchApplyWindowInsets(insets)
return insets
}
}

View file

@ -72,7 +72,7 @@ class UISettingsImpl @Inject constructor(@ApplicationContext context: Context) :
}
override val roundMode: Boolean
get() = sharedPreferences.getBoolean(getString(R.string.set_key_round_mode), true)
get() = sharedPreferences.getBoolean(getString(R.string.set_key_round_mode), false)
override fun migrate() {
if (sharedPreferences.contains(OLD_KEY_ACCENT3)) {

View file

@ -65,22 +65,22 @@ private val accentThemes =
private val accentBlackThemes =
intArrayOf(
R.style.Theme_Auxio_Red_Black,
R.style.Theme_Auxio_Pink_Black,
R.style.Theme_Auxio_Purple_Black,
R.style.Theme_Auxio_DeepPurple_Black,
R.style.Theme_Auxio_Indigo_Black,
R.style.Theme_Auxio_Blue_Black,
R.style.Theme_Auxio_DeepBlue_Black,
R.style.Theme_Auxio_Cyan_Black,
R.style.Theme_Auxio_Teal_Black,
R.style.Theme_Auxio_Green_Black,
R.style.Theme_Auxio_DeepGreen_Black,
R.style.Theme_Auxio_Lime_Black,
R.style.Theme_Auxio_Yellow_Black,
R.style.Theme_Auxio_Orange_Black,
R.style.Theme_Auxio_Brown_Black,
R.style.Theme_Auxio_Grey_Black,
R.style.Theme_Auxio_Black_Red,
R.style.Theme_Auxio_Black_Pink,
R.style.Theme_Auxio_Black_Purple,
R.style.Theme_Auxio_Black_DeepPurple,
R.style.Theme_Auxio_Black_Indigo,
R.style.Theme_Auxio_Black_Blue,
R.style.Theme_Auxio_Black_DeepBlue,
R.style.Theme_Auxio_Black_Cyan,
R.style.Theme_Auxio_Black_Teal,
R.style.Theme_Auxio_Black_Green,
R.style.Theme_Auxio_Black_DeepGreen,
R.style.Theme_Auxio_Black_Lime,
R.style.Theme_Auxio_Black_Yellow,
R.style.Theme_Auxio_Black_Orange,
R.style.Theme_Auxio_Black_Brown,
R.style.Theme_Auxio_Black_Grey,
R.style.Theme_Auxio_Black // Dynamic colors are on the base theme
)

View file

@ -24,6 +24,7 @@ import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.PointF
import android.graphics.drawable.Drawable
import android.os.Build
import android.view.View
import android.view.WindowInsets
@ -35,6 +36,7 @@ import androidx.appcompat.widget.Toolbar
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.app.ShareCompat
import androidx.core.graphics.Insets
import androidx.core.graphics.drawable.DrawableCompat
import androidx.core.net.toUri
import androidx.core.view.children
import androidx.navigation.NavController
@ -104,6 +106,10 @@ private fun isUnderImpl(
val View.isRtl: Boolean
get() = layoutDirection == View.LAYOUT_DIRECTION_RTL
/** Whether this [Drawable] is using an RTL layout direction. */
val Drawable.isRtl: Boolean
get() = DrawableCompat.getLayoutDirection(this) == View.LAYOUT_DIRECTION_RTL
/** Get a [Context] from a [ViewBinding]'s root [View]. */
val ViewBinding.context: Context
get() = root.context
@ -351,7 +357,7 @@ fun Context.startIntent(intent: Intent) {
// No app installed to open the link
showToast(R.string.err_no_app)
}
} else {
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
// On older versions of android, opening links from an ACTION_VIEW intent might
// not work in all cases, especially when no default app was set. If that is the
// case, we will try to manually handle these cases before we try to launch the

View file

@ -22,11 +22,18 @@ import androidx.fragment.app.Fragment
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import java.util.concurrent.TimeoutException
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.TimeoutCancellationException
import kotlinx.coroutines.channels.ReceiveChannel
import kotlinx.coroutines.channels.SendChannel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.launch
import kotlinx.coroutines.withTimeout
import org.oxycblt.auxio.BuildConfig
import timber.log.Timber as L
/**
* A wrapper around [StateFlow] exposing a one-time consumable event.
@ -146,3 +153,71 @@ private fun Fragment.launch(
) {
viewLifecycleOwner.lifecycleScope.launch { viewLifecycleOwner.repeatOnLifecycle(state, block) }
}
const val DEFAULT_TIMEOUT = 60000L
/**
* Wraps [SendChannel.send] with a specified timeout.
*
* @param element The element to send.
* @param timeout The timeout in milliseconds. Defaults to 10 seconds.
* @throws TimeoutException If the timeout is reached, provides context on what element
* specifically.
*/
suspend fun <E> SendChannel<E>.sendWithTimeout(element: E, timeout: Long = DEFAULT_TIMEOUT) {
try {
withTimeout(timeout) { send(element) }
} catch (e: TimeoutCancellationException) {
L.e("Failed to send element to channel $e in ${timeout}ms.")
if (BuildConfig.DEBUG) {
throw TimeoutException("Timed out sending element to channel: $e")
} else {
L.e(e.stackTraceToString())
send(element)
}
}
}
/**
* Wraps a [ReceiveChannel] consumption with a specified timeout. Note that the timeout will only
* start on the first element received, as to prevent initialization of dependent coroutines being
* interpreted as a timeout.
*
* @param action The action to perform on each element received.
* @param timeout The timeout in milliseconds. Defaults to 10 seconds.
* @throws TimeoutException If the timeout is reached, provides context on what element
* specifically.
*/
suspend fun <E> ReceiveChannel<E>.forEachWithTimeout(
timeout: Long = DEFAULT_TIMEOUT,
action: suspend (E) -> Unit
) {
var exhausted = false
var subsequent = false
val handler: suspend () -> Unit = {
val value = receiveCatching()
if (value.isClosed && value.exceptionOrNull() == null) {
exhausted = true
} else {
action(value.getOrThrow())
}
}
while (!exhausted) {
try {
if (subsequent) {
withTimeout(timeout) { handler() }
} else {
handler()
subsequent = true
}
} catch (e: TimeoutCancellationException) {
L.e("Failed to send element to channel $e in ${timeout}ms.")
if (BuildConfig.DEBUG) {
throw TimeoutException("Timed out sending element to channel: $e")
} else {
L.e(e.stackTraceToString())
handler()
}
}
}
}

View file

@ -20,7 +20,6 @@ package org.oxycblt.auxio.widgets
import android.content.res.Resources
import android.graphics.Bitmap
import androidx.core.graphics.scale
import coil3.size.Size
import coil3.transform.Transformation
import kotlin.math.sqrt
@ -50,7 +49,7 @@ class WidgetBitmapTransformation(reduce: Float) : Transformation() {
val scale = sqrt(maxBitmapArea / inputArea.toDouble())
val newWidth = (input.width * scale).toInt()
val newHeight = (input.height * scale).toInt()
return input.scale(newWidth, newHeight)
return Bitmap.createScaledBitmap(input, newWidth, newHeight, true)
}
return input
}

View file

@ -19,6 +19,7 @@
package org.oxycblt.auxio.widgets
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo
import android.content.ComponentName
import android.content.Context
import android.os.Build
@ -65,6 +66,11 @@ fun RemoteViews.setLayoutDirection(@IdRes viewId: Int, layoutDirection: Int) {
setInt(viewId, "setLayoutDirection", layoutDirection)
}
fun AppWidgetManager.setWidgetPreviewCompat(component: ComponentName, remoteViews: RemoteViews) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.VANILLA_ICE_CREAM) {
setWidgetPreview(component, AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN, remoteViews)
}
}
/**
* Update the app widget layouts corresponding to the given [WidgetProvider] [ComponentName] with an
* adaptive layout, in a version-compatible manner.

View file

@ -119,8 +119,7 @@
app:layout_constraintEnd_toStartOf="@+id/detail_shuffle_button"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/detail_cover"
tools:ignore="RtlSymmetry" />
app:layout_constraintTop_toBottomOf="@+id/detail_cover" />
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/detail_shuffle_button"

View file

@ -101,8 +101,7 @@
app:icon="@drawable/ic_play_24"
app:layout_constraintEnd_toStartOf="@+id/detail_shuffle_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/detail_info"
tools:ignore="RtlSymmetry"/>
app:layout_constraintTop_toBottomOf="@+id/detail_info" />
<org.oxycblt.auxio.ui.RippleFixMaterialButton
android:id="@+id/detail_shuffle_button"

View file

@ -129,8 +129,7 @@
app:layout_constraintBottom_toBottomOf="@+id/detail_play_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/detail_play_button"
app:layout_constraintTop_toTopOf="@+id/detail_play_button"
tools:ignore="RtlSymmetry" />
app:layout_constraintTop_toTopOf="@+id/detail_play_button" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.divider.MaterialDivider

View file

@ -132,8 +132,7 @@
app:layout_constraintBottom_toBottomOf="@+id/detail_play_button"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/detail_play_button"
app:layout_constraintTop_toTopOf="@+id/detail_play_button"
tools:ignore="RtlSymmetry" />
app:layout_constraintTop_toTopOf="@+id/detail_play_button" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.divider.MaterialDivider

View file

@ -8,7 +8,7 @@
android:background="?attr/colorSurface">
<org.oxycblt.auxio.ui.EatInsetsFrameLayout
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="org.oxycblt.auxio.ui.BottomSheetContentBehavior">
@ -23,7 +23,7 @@
tools:layout="@layout/fragment_home" />
<org.oxycblt.auxio.ui.EdgeFrameLayout
<org.oxycblt.auxio.home.EdgeFrameLayout
android:id="@+id/main_fab_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -55,9 +55,9 @@
android:contentDescription="@string/lbl_shuffle"
android:src="@drawable/ic_shuffle_off_24" />
</org.oxycblt.auxio.ui.EdgeFrameLayout>
</org.oxycblt.auxio.home.EdgeFrameLayout>
</org.oxycblt.auxio.ui.EatInsetsFrameLayout>
</FrameLayout>
<View

View file

@ -226,17 +226,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/about_sup_mark_pitblado"
style="@style/Widget.Auxio.TextView.Icon.Clickable"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/sup_mark_pitblado"
app:layout_constraintEnd_toEndOf="parent"
app:drawableStartCompat="@drawable/ic_person_24"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/about_licenses" />
<TextView
android:id="@+id/about_supporters_promo"
style="@style/Widget.Auxio.TextView.Icon.Clickable"

View file

@ -14,7 +14,7 @@
tools:listitem="@layout/item_song" />
<org.oxycblt.auxio.ui.EdgeFrameLayout
<org.oxycblt.auxio.home.EdgeFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
@ -34,7 +34,6 @@
android:layout_height="@dimen/size_icon_huge"
android:layout_marginBottom="@dimen/spacing_small"
android:src="@drawable/ic_song_48"
tools:ignore="ContentDescription"
app:tint="?attr/colorOnSurface" />
<TextView
@ -54,5 +53,5 @@
</LinearLayout>
</org.oxycblt.auxio.ui.EdgeFrameLayout>
</org.oxycblt.auxio.home.EdgeFrameLayout>
</FrameLayout>

View file

@ -8,7 +8,7 @@
android:background="?attr/colorSurface"
android:transitionGroup="true">
<org.oxycblt.auxio.ui.EatInsetsFrameLayout
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="org.oxycblt.auxio.ui.BottomSheetContentBehavior">
@ -28,7 +28,7 @@
android:layout_height="match_parent"
android:visibility="invisible" />
<org.oxycblt.auxio.ui.EdgeFrameLayout
<org.oxycblt.auxio.home.EdgeFrameLayout
android:id="@+id/main_fab_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -60,9 +60,9 @@
android:contentDescription="@string/lbl_shuffle"
android:src="@drawable/ic_shuffle_off_24" />
</org.oxycblt.auxio.ui.EdgeFrameLayout>
</org.oxycblt.auxio.home.EdgeFrameLayout>
</org.oxycblt.auxio.ui.EatInsetsFrameLayout>
</FrameLayout>
<View
android:id="@+id/main_sheet_scrim"

View file

@ -3,13 +3,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/spacing_tiny"
xmlns:tools="http://schemas.android.com/tools">
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:layout_width="wrap_content"
android:layout_height="@dimen/size_touchable_small"
android:scaleType="centerInside"
tools:ignore="ContentDescription"
android:src="@drawable/ui_scroll_thumb" />
</FrameLayout>

View file

@ -22,7 +22,7 @@
android:scaleType="centerCrop"
android:background="@drawable/ui_widget_bg_round"
android:clipToOutline="true"
tools:ignore="ContentDescription,UnusedAttribute" />
tools:ignore="ContentDescription" />
<android.widget.LinearLayout
android:id="@+id/widget_panel"

View file

@ -20,7 +20,8 @@
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:background="@drawable/ui_widget_bg_round"
tools:ignore="ContentDescription,UnusedAttribute" />
android:clipToOutline="true"
tools:ignore="ContentDescription" />
<android.widget.LinearLayout
android:id="@+id/widget_panel"

View file

@ -5,6 +5,7 @@
<string name="lng_widget">عرض وتحكم بشتغيل الموسيقى</string>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">إعادة المحاولة</string>
<string name="lbl_grant">منح</string>
<string name="lbl_genres">الانواع</string>
<string name="lbl_artists">فنانين</string>
<string name="lbl_albums">البومات</string>
@ -26,40 +27,42 @@
<string name="set_play_song_from_album">تشغيل من البوم</string>
<string name="set_play_song_from_artist">تشغيل من فنان</string>
<string name="lbl_queue">طابور</string>
<string name="lbl_play_next">شغل التالي</string>
<string name="lbl_play_next">شغل الاغنية التالية</string>
<string name="lbl_queue_add">أضف إلى الطابور</string>
<string name="lng_queue_added">تمت الإضافة إلى الطابور</string>
<string name="lbl_artist_details">أذهب إلى الفنان</string>
<string name="lbl_album_details">أذهب إلى الالبوم</string>
<string name="lbl_add">أضف</string>
<string name="lbl_save">حفظ</string>
<string name="err_no_locations">لا مجلد</string>
<string name="lbl_about">حول</string>
<string name="lbl_version">الإصدار</string>
<string name="lbl_code">كود البرنامج</string>
<string name="lbl_code">عرض على الكود في Github</string>
<string name="lbl_licenses">التراخيص</string>
<string name="lbl_author_name">الكساندر كابيهارت</string>
<string name="lbl_author_name">تمت برمجة التطبيق من قبل الكساندر كابيهارت</string>
<!-- Settings namespace | Settings-related labels -->
<string name="set_root_title">الإعدادات</string>
<string name="set_ui">المظهر والاحساس</string>
<string name="set_ui">المظهر</string>
<string name="set_theme">السمة</string>
<string name="set_theme_auto">تلقائي</string>
<string name="set_theme_day">فاتح</string>
<string name="set_theme_night">مظلم</string>
<string name="set_accent">نظام الألوان</string>
<string name="set_black_mode">السمة السوداء</string>
<string name="set_black_mode_desc">استخدام سمة اللون الاسود النقي</string>
<string name="set_black_mode_desc">استخدام اللون الاسود القاتم في الوضع المظلم</string>
<string name="set_display">عرض</string>
<string name="set_lib_tabs">تبويتات المكتبة</string>
<string name="set_lib_tabs_desc">تغيير ظهور وترتيب تبويتات المكتبة</string>
<string name="set_round_mode">وضع دائري</string>
<string name="set_round_mode_desc">تفعيل الزوايا المدورة لحدات الواجهه الاضافية (يتطلب اغلفة الالبوم ان تكون مدورة)</string>
<string name="set_notif_action">فعالية تنبيه مخصصة</string>
<string name="set_round_mode">اغلفة البوم مدورة</string>
<string name="set_round_mode_desc">جعل اغلفة الابومات ذات زوايا مدورة</string>
<string name="set_notif_action">استخدام نشاط بديل للإشعار</string>
<string name="set_audio">صوتيات</string>
<string name="set_replay_gain_mode">صخب الصوت</string>
<string name="set_replay_gain_mode_track">تفضيل المقطع</string>
<string name="set_replay_gain_mode_album">تفضيل الالبوم</string>
<string name="set_replay_gain_mode_dynamic">ديناميكي</string>
<string name="set_personalize">تخصيص</string>
<string name="set_play_in_list_with">عند التشغيل من المكتبة</string>
<string name="set_personalize">سلوك</string>
<string name="set_play_in_list_with">عند اختيار اغنية</string>
<string name="set_keep_shuffle">تذكر الخلط</string>
<string name="set_keep_shuffle_desc">إبقاء وضع الخلط عند تشغيل اغنية جديدة</string>
<string name="set_rewind_prev">تشجيع قبل التخطي للخلف</string>
@ -68,11 +71,13 @@
<string name="set_repeat_pause_desc">ايقاف مؤقت عند تكرار تشغيل اغنية</string>
<string name="set_content">محتوى</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">لم يتم ايجاد موسيقى</string>
<string name="err_index_failed">فشل تحميل الموسيقى</string>
<string name="err_no_perms">اوكسيو يحتاج إلى صلاحيات لقراءة للاطلاع على مكتبتك للموسيقى</string>
<string name="err_no_app">لا يوجد تطبيق لفتح هذا الرابط</string>
<string name="err_bad_location">هذا المجلد غير مدعوم</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">ابحث في مكتبتك…</string>
<string name="lng_search_library">البحث في مكتبتك…</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="desc_track_number">المقطع %d</string>
<string name="desc_play_pause">تشغيل او ايقاف مؤقت</string>
@ -80,6 +85,7 @@
<string name="desc_skip_prev">تخطي للاغنية الاخيرة</string>
<string name="desc_change_repeat">تغيير وضع التكرار</string>
<string name="desc_shuffle">تشغيل او اطفاء الخلط</string>
<string name="desc_shuffle_all">خلط جميع الاغاني</string>
<string name="desc_remove_song">إزالة اغنية من الطابور</string>
<string name="desc_song_handle">نقل اغنية من الطابور</string>
<string name="desc_tab_handle">تحريك التبويت</string>
@ -130,44 +136,44 @@
<item quantity="many">%d ألبومات</item>
<item quantity="other">%d ألبومات</item>
</plurals>
<string name="lbl_mix">مكس دي جي</string>
<string name="lbl_mix">MixMix</string>
<string name="lbl_cancel">الغاء</string>
<string name="lbl_format">التنسيق</string>
<string name="lbl_size">الحجم</string>
<string name="lbl_library_counts">إحصائيات المكتبة</string>
<string name="lbl_bitrate">معدل البت</string>
<string name="lbl_compilation_live">تجميع مباشر</string>
<string name="lbl_compilation_remix">تجميعات ريمكس</string>
<string name="lbl_compilation_remix">تجميعات</string>
<string name="lbl_props">خصائص الاغنية</string>
<string name="lbl_sample_rate">معدل العينة</string>
<string name="lbl_shuffle_shortcut_short">عشوائي</string>
<string name="lbl_shuffle_shortcut_long">تشغيل عشوائي للكل</string>
<string name="lbl_shuffle_shortcut_long">تشغيل كل الاغاني بشكل عشوائي</string>
<string name="lbl_ok">حسنا</string>
<string name="lbl_sort_dsc">تنازلي</string>
<string name="lbl_song_detail">عرض الخصائص</string>
<string name="lbl_live_group">مباشر</string>
<string name="lbl_reset">اعادة ضبط</string>
<string name="lng_indexing">يتم تحمل مكتبتك الموسيقية</string>
<string name="lng_indexing">يتم تحمل مكتبتك …</string>
<string name="lbl_genre">النوع</string>
<string name="lng_observing">مراقبة تغييرات في مكتبتك الموسيقية…</string>
<string name="lng_observing">مراقبة تغييرات في مكتبتك</string>
<string name="lbl_observing">مراقبة مكتبة الموسيقة</string>
<string name="lbl_indexer">تحميل الموسيقى</string>
<string name="lbl_equalizer">المعادل</string>
<string name="lbl_singles">فرديات</string>
<string name="lbl_singles">منفصل</string>
<string name="lbl_single">فردي</string>
<string name="lbl_ep">أغنية مطولة</string>
<string name="lbl_eps">أغاني مطولة</string>
<string name="lbl_mixtape">مكس</string>
<string name="lbl_soundtrack">موسيقى تصويرية</string>
<string name="lbl_mixtapes">مكسات</string>
<string name="lbl_ep">EP</string>
<string name="lbl_eps">EPs</string>
<string name="lbl_mixtape">Mixtape</string>
<string name="lbl_soundtrack">تسجيل صوتي</string>
<string name="lbl_mixtapes">Mixtapes</string>
<string name="lbl_remix_group">RemixesRemixes</string>
<string name="lbl_soundtracks">موسيقات تصويرية</string>
<string name="lbl_soundtracks">الموسيقى التصويرية</string>
<string name="lbl_album_live">البوم مباشر</string>
<string name="lbl_album_remix">البوم ريمكس</string>
<string name="lbl_ep_live">أغنية مطولة مباشرة</string>
<string name="lbl_ep_remix">اغنية مطولة ريمكس</string>
<string name="lbl_album_remix">ريمكس</string>
<string name="lbl_ep_live">مؤاثرات مباشرة</string>
<string name="lbl_ep_remix">مؤاثرات ريمكس</string>
<string name="lbl_single_live">بث مباشر فردي</string>
<string name="lbl_single_remix">ريمكس فردي</string>
<string name="lbl_single_remix">ريمكس منفصل</string>
<string name="lbl_compilations">تجميعات</string>
<string name="lbl_duration">مدة</string>
<string name="lbl_song_count">عدد الأغاني</string>
@ -175,15 +181,16 @@
<string name="lbl_track">مسار</string>
<string name="lbl_date_added">تاريخ الاضافة</string>
<string name="lbl_indexing">تحميل الموسيقى</string>
<string name="lbl_compilation">تجميع</string>
<string name="lbl_mixes">مكسات دي جي</string>
<string name="lbl_wiki">ويكي</string>
<string name="lbl_compilation">التحويل البرمجي</string>
<string name="lbl_mixes">مزيج</string>
<string name="lbl_wiki">Wiki</string>
<string name="lbl_song">أغنية</string>
<string name="lbl_sort_direction">أتجاه</string>
<string name="lbl_selection">أختيار</string>
<string name="lbl_playlists">قوائم التشغيل</string>
<string name="lbl_playlist">قائمة التشغيل</string>
<string name="lng_playlist_created">تم خلق قائمة التشغيل</string>
<string name="lbl_show_error_info">المزيد</string>
<string name="lbl_delete">حذف</string>
<string name="lbl_copied">تم النسخ</string>
<string name="lbl_playlist_add">إضافة إلى قائمة التشغيل</string>
@ -197,66 +204,8 @@
<string name="lng_playlist_deleted">تم حذف قائمة التشغيل</string>
<string name="lbl_report">تقرير</string>
<string name="lbl_new_playlist">قائمة تشغيل جديدة</string>
<string name="lbl_error_info">معلومات الخطأ</string>
<string name="lbl_error_info">معلومات خاطئة</string>
<string name="lng_playlist_renamed">تم إعادة تسمية قائمة التشغيل</string>
<string name="lbl_rename_playlist">إعادة تسمية قائمة التشغيل</string>
<string name="lbl_appears_on">يظهر على</string>
<string name="lbl_music_sources">إختيار المجلد</string>
<string name="lbl_demos">مقاطع تجريبية</string>
<string name="lbl_import">استيراد</string>
<string name="lbl_export">تصدير</string>
<string name="lbl_export_playlist">تصدير قائمة تشغيل</string>
<string name="lbl_feedback">ملاحظات</string>
<string name="lbl_github">سجل مشكلة على GitHub</string>
<string name="lbl_email">أرسل ايميل</string>
<string name="lbl_donate">تبرع</string>
<string name="set_action_mode_next">تخطى الى التالي</string>
<string name="set_play_in_parent_with">عند التشغيل من خصائص العنصر</string>
<string name="set_play_song_none">تشغيل من العناصر المعروظة</string>
<string name="set_play_song_from_genre">تشغيل من النوع</string>
<string name="set_content_desc">تحكم بكيفية تحميل الاموسيقى والصور</string>
<string name="set_observing">التحميل التلقائي</string>
<string name="set_exclude_non_music_desc">تجاوز الملفات الصوتية الغير موسيقية, مثل البودكاست</string>
<string name="set_separators_desc">تعريف الفواصل التي تدل على علامات متعددة</string>
<string name="set_separators_semicolon">فاصلة منقوطة(;)</string>
<string name="lbl_path_style">نمط المسار</string>
<string name="lbl_more">ألمزيد</string>
<string name="lbl_path_style_absolute">مطلق</string>
<string name="lbl_supporters">الداعمين</string>
<string name="set_bar_action">فعالية شريط تشغيل مخصصة</string>
<string name="set_separators_and">العطف(&amp;)</string>
<string name="lbl_imported_playlist">قائمة تشغيل مستوردة</string>
<string name="set_separators">فواصل متعددة القيم</string>
<string name="set_ui_desc">تغيير سمات والوان البرنامج</string>
<string name="set_exclude_non_music">تجاوز غير الموسيقى</string>
<string name="lbl_demo">مقطع تجريبي</string>
<string name="lng_empty_songs">الاغاني الخاصة بك ستضهر هنا.</string>
<string name="lng_empty_artists">الفنانين الخاصين بك سيضهرون هنا.</string>
<string name="lbl_replaygain_track">تعديل تثبيت مستوى الصوت للاغنية</string>
<string name="lbl_replaygain_album">تعديل تثبيت مستوى الصوت للالبوم</string>
<string name="lng_playlist_imported">تم استيراد قائمة التشغيل</string>
<string name="lng_playlist_exported">تم تصدير قائمة التشغيل</string>
<string name="lng_supporters_promo">تبرع للمشروع لتتم اضافة اسمك هنا!</string>
<string name="set_action_mode_repeat">وضع التكرار</string>
<string name="set_play_song_by_itself">تشغيل اغنية محددة</string>
<string name="set_separators_plus">زائد(+)</string>
<string name="lbl_import_playlist">استيراد قائمة تشغيل</string>
<string name="lbl_empty_playlist">قائمة تشغيل فارغة</string>
<string name="set_personalize_desc">تخصيص ادوات تحكم الواجهه و سلوكها</string>
<string name="lbl_path">المسار</string>
<string name="set_intelligent_sorting">الترتيب الذكي</string>
<string name="set_separators_slash">الشارحة(/)</string>
<string name="lbl_start_playback">بدء التشغيل</string>
<string name="lbl_path_style_relative">نسبي</string>
<string name="lbl_windows_paths">إستخدام مسارات متوافقة مع نافذة</string>
<string name="lng_tasker_start">تشغيل Auxio بأستخدام الحالة المحفوظه مسبقا. اذا لم تتوفر حالة, كل الاغاني ستشغل بشكل عشوائي.\n\nتحذير:كن حذرا بالتحكم بهذة الخدمة, اذا اغلقتها وفتحتها مجددا,قد يتوقف البرنامج عن العمل.</string>
<string name="lbl_author">المؤلف</string>
<string name="set_music">الموسيقى</string>
<string name="lng_empty_playlists">قوائم التشغيل الخاصة بك ستضهر هنا.</string>
<string name="set_behavior">السلوك</string>
<string name="set_separators_comma">فاصلة (,)</string>
<string name="lng_empty_albums">الالبومات الخاصة بك ستضهر هنا.</string>
<string name="lng_empty_genres">الفئات الخاصة بك ستضهر هنا.</string>
<string name="set_observing_desc">اعادة تحميل مكتبة الموسيقى عند حصول تغيير(يتطلب تنبيه ثابت)</string>
<string name="set_separators_warning">تحذير: استخدام هذا الاعداد قد ينتج عنه ان يتم تفسير بعض العلامات بشكل خاطئ مثل ان تحتوي على قيم متعددة. يمكن ان يتم حل هذا بتقديم الفواصل الغير مرغوبةبالشارحة الخلفية(\\).</string>
</resources>

View file

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="info_app_desc">مشغّل موسيقى بسيط ومعقول للأندرويد.</string>
<string name="info_app_desc">مشغّل موسيقى بسيط ومعقول للأندرويد</string>
<string name="lbl_observing">مراقبة مكتبة الموسيقى</string>
<string name="lbl_retry">إعادة المحاولة</string>
<string name="lbl_grant">منح</string>
<string name="lbl_albums">الألبومات</string>
<string name="lbl_songs">أغاني</string>
<string name="lbl_song">أغنية</string>
@ -17,7 +18,8 @@
<string name="lbl_queue_add">إضافة للطابور</string>
<string name="lbl_playlist_add">إضافة لقائمة التشغيل</string>
<string name="lbl_reset">إعادة ضبط</string>
<string name="lng_indexing">جارِ تحميل مكتبتك الموسيقية…</string>
<string name="lbl_add">إضافة مجلد</string>
<string name="lng_indexing">يتم تحميل مكتبتك الموسيقية</string>
<string name="lng_queue_added">أضيفت للطابور</string>
<string name="lng_playlist_created">تم إنشاء قائمة التشغيل</string>
<string name="lbl_artists">فنانون</string>
@ -83,6 +85,7 @@
<string name="def_disc">لا قرص</string>
<string name="cdc_mp4">صوت MPEG-4</string>
<string name="cdc_ogg">أوغ الصوت</string>
<string name="cdc_mka">صوت ماتروسكا</string>
<string name="cdc_flac">برنامج ترميز الصوت المجاني بدون فقدان البيانات (FLAC)</string>
<string name="clr_indigo">نيلي</string>
<string name="clr_blue">أزرق</string>
@ -106,6 +109,7 @@
</plurals>
<string name="set_hide_collaborators_desc">إظهار فقط الفنانين المُعتمدين مباشرة على الألبوم (يعمل بشكل أفضل في المكتبات المعروفة بتوسيماتها الجيدة)</string>
<string name="set_content">المحتوى</string>
<string name="set_locations_list">مجلدات</string>
<string name="set_hide_collaborators">إخفاء المتعاونين</string>
<string name="set_audio_desc">ضبط سلوك وصوت التشغيل</string>
<string name="set_rewind_prev">إعادة التشغيل قبل الانتقال للوراء</string>
@ -113,6 +117,7 @@
<string name="set_remember_pause_desc">البقاء على التشغيل/الإيقاف عند الانتقال أو تعديل قائمة التشغيل</string>
<string name="set_remember_pause">تذكر الإيقاف المؤقت</string>
<string name="set_rescan_desc">مسح ذاكرة التخزين المؤقت للعلامات وإعادة تحميل كامل مكتبة الموسيقى (أبطأ ولكن أكثر اكتمالًا)</string>
<string name="err_no_perms">يحتاج Auxio إلى إذن لقراءة مكتبة الموسيقى الخاصة بك.</string>
<string name="err_import_failed">غير قادر على استيراد قائمة التشغيل من هذا الملف</string>
<string name="err_no_app">لم يتم العثور على تطبيق يمكنه التعامل مع هذه المهمة</string>
<string name="desc_play_pause">تشغيل أو إيقاف مؤقت</string>
@ -135,6 +140,7 @@
<string name="lbl_demos">تسجيلات تجريبية</string>
<string name="lbl_mixes">اغاني دي جي</string>
<string name="lbl_mix">اغنية دي جي</string>
<string name="lbl_show_error_info">المزيد</string>
<string name="desc_selection_image">صورة التحديد</string>
<string name="desc_remove_song">إزالة هذه الأغنية</string>
<string name="desc_song_handle">نقل هذه الأغنية</string>
@ -163,7 +169,9 @@
<string name="lbl_single_remix">اغنية فردية ريميكس</string>
<string name="set_images">الصور</string>
<string name="set_reindex_desc">إعادة تحميل مكتبة الموسيقى، باستخدام العلامات المخزنة مؤقتًا عند الإمكان</string>
<string name="err_no_locations">لا توجد مجلدات</string>
<string name="err_bad_location">هذا المجلد غير مدعوم</string>
<string name="desc_shuffle_all">خلط جميع الأغاني</string>
<string name="clr_cyan">ازرق سماوي</string>
<string name="fmt_editing">تحرير %s</string>
<string name="set_theme_auto">تلقائي</string>
@ -240,6 +248,7 @@
<string name="set_pre_amp_desc">يتم تطبيق مكبر الصوت المسبق على التعديل الحالي أثناء التشغيل</string>
<string name="set_pre_amp_with">ضبط مع العلامات</string>
<string name="set_reindex">تحديث الموسيقى</string>
<string name="err_no_music">لم يتم العثور على موسيقى</string>
<string name="def_track">لا مسار</string>
<string name="def_playback">لا يوجد تشغيل الموسيقى</string>
<string name="cdc_aac">ترميز الصوت المتقدم (AAC)</string>
@ -268,61 +277,4 @@
<string name="lng_playlist_added">تمت إضافته إلى قائمة التشغيل</string>
<string name="set_root_title">إعدادات</string>
<string name="set_separators_semicolon">الفاصلة المنقوطة (؛)</string>
<string name="lbl_music_sources">اختر المجلدات</string>
<string name="lbl_import">استورد</string>
<string name="lbl_export">صدّر</string>
<string name="lbl_export_playlist">صدّر قائمة التشغيل</string>
<string name="lbl_sample_rate">معدل العينة</string>
<string name="lbl_path_style">نمط المسار</string>
<string name="lbl_selection">تحديد</string>
<string name="lbl_feedback">الانطباعات</string>
<string name="lbl_github">افتح مشكلة على GitHub</string>
<string name="lbl_email">إرسل بريد إلكتروني</string>
<string name="lbl_supporters">المؤيدون</string>
<string name="lbl_more">المزيد</string>
<string name="lbl_path_style_relative">نسبي</string>
<string name="lbl_path_style_absolute">مطلق</string>
<string name="cdc_unknown">غير معروف</string>
<string name="lbl_imported_playlist">قائمة التشغيل استوردت</string>
<string name="def_album">ألبوم غير معروف</string>
<string name="lbl_sort_mode">افرز حسب</string>
<string name="lbl_sort_direction">الاتجاه</string>
<plurals name="fmt_artist_count">
<item quantity="zero">لا فنان</item>
<item quantity="one">فنان</item>
<item quantity="two">فنانان</item>
<item quantity="few">%d فنانين</item>
<item quantity="many">%d فنان</item>
<item quantity="other">%d فنان</item>
</plurals>
<string name="lng_empty_songs">ستظهر أغانيك هنا.</string>
<string name="lng_empty_albums">ستظهر ألبوماتك هنا.</string>
<string name="lng_empty_artists">سوف يظهر الفنانون الخاص بك هنا.</string>
<string name="lng_empty_playlists">سوف تظهر قوائم تشغيلك هنا.</string>
<string name="lng_empty_genres">سوف تظهر أنواعك هنا.</string>
<string name="lbl_replaygain_album">تعديل الألبوم Replaygain</string>
<string name="lbl_replaygain_track">تعديل مسار ReplayGain</string>
<string name="lbl_author_name">ألكساندر كيبهارت</string>
<string name="lbl_donate">تبرّع</string>
<string name="lbl_author">المؤلف</string>
<string name="lbl_import_playlist">استورد قائمة التشغيل</string>
<string name="lbl_path">المسار</string>
<string name="set_locations_new">مجلد جديد</string>
<string name="lbl_start_playback">بدء التشغيل</string>
<string name="lbl_error_info">معلومات الخطأ</string>
<string name="lbl_copied">نُسخت</string>
<string name="lbl_report">إبلاغ</string>
<string name="lng_tasker_start">يبدأ Auxio باستخدام الحالة المحفوظة مسبقًا. إذا لم تتوفر حالة محفوظة، فسيتم خلط جميع الأغاني. سيبدأ التشغيل على الفور. \n\nتحذير: احرص على التحكم في هذه الخدمة، إذا قمت بإغلاقها ثم حاول استخدامها مرة أخرى، فمن المحتمل أن ينهار التطبيق.</string>
<string name="lbl_windows_paths">استخدم مسارات متوافقة مع Windows</string>
<string name="set_cover_mode_save_space">وفر المساحة</string>
<plurals name="fmt_album_count">
<item quantity="zero">لا ألبوم</item>
<item quantity="one">ألبوم</item>
<item quantity="two">ألبومان</item>
<item quantity="few">%d ألبومات</item>
<item quantity="many">%d ألبوم</item>
<item quantity="other">%d ألبوم</item>
</plurals>
<string name="cnt_mp4">MPEG-4 تحتوي على %s</string>
<string name="cdc_alac">Apple Lossless Audio Codec (ALAC)</string>
</resources>

View file

@ -3,6 +3,7 @@
<string name="lbl_indexer">Musiqi yüklənir</string>
<string name="lbl_indexing">Musiqi yüklənir</string>
<string name="lbl_retry">Təkrar cəhd et</string>
<string name="lbl_grant">Qəbul et</string>
<string name="lbl_songs">Mahnılar</string>
<string name="lbl_all_songs">Bütün mahnılar</string>
<string name="lbl_albums">Albomlar</string>
@ -34,6 +35,7 @@
<string name="lbl_artist">Sənətkar</string>
<string name="lbl_artists">Sənətkarlar</string>
<string name="lbl_genre">Janr</string>
<string name="lbl_show_error_info">Daha çox</string>
<string name="lbl_song">Mahnı</string>
<string name="lbl_mixtapes">Qarışıq lentlər</string>
<string name="lbl_mixtape">Qarışıq lent</string>
@ -74,6 +76,7 @@
<string name="lbl_album_details">Alboma keç</string>
<string name="lbl_parent_detail">Baxış</string>
<string name="lbl_share">Paylaş</string>
<string name="lbl_add">Əlavə et</string>
<string name="lbl_play">Səsləndir</string>
<string name="lbl_sort_mode">Çeşidləmə üsulu</string>
<string name="lbl_sort_direction">Göstəriş</string>

View file

@ -23,6 +23,7 @@
<string name="set_root_title">Налады</string>
<string name="info_app_desc">Просты, рацыянальны музычны плэер для Android.</string>
<string name="lbl_observing">Маніторынг музычнай бібліятэкі</string>
<string name="lbl_grant">Выдаць</string>
<string name="lbl_songs">Песні</string>
<string name="set_ui_desc">Змяніце тэму і колеры праграмы</string>
<string name="lbl_all_songs">Ўсе песні</string>
@ -87,6 +88,7 @@
<string name="lbl_bitrate">Бітрэйт</string>
<string name="lbl_sample_rate">Частата дыскрэтызацыі</string>
<string name="lbl_reset">Скінуць</string>
<string name="lbl_add">Дадаць</string>
<string name="lbl_wiki">Вікі</string>
<string name="lbl_save">Захаваць</string>
<string name="lbl_version">Версія</string>
@ -111,11 +113,15 @@
<string name="set_pre_amp">Папярэдні ўзмацняльнік ReplayGain</string>
<string name="set_library">Бібліятэка</string>
<string name="set_locations_desc">Кіруйце месцам загрузкі музыкі</string>
<string name="set_locations_list">Тэчкі</string>
<string name="set_rescan">Перасканаваць музыку</string>
<string name="set_reindex">Абнавіць музыку</string>
<string name="set_reindex_desc">Перазагрузіце музычную бібліятэку, выкарыстоўваючы па магчымасці кэшаваныя тэгі</string>
<string name="set_rescan_desc">Ачысціце кэш тэгаў і цалкам перазагрузіце музычную бібліятэку (павольней, але больш поўна)</string>
<string name="err_no_perms">Auxio патрабуецца дазвол на чытанне вашай музычнай бібліятэкі</string>
<string name="err_no_music">Музыка не знойдзена</string>
<string name="err_index_failed">Памылка загрузкі музыкі</string>
<string name="err_no_locations">Няма тэчак</string>
<string name="err_bad_location">Гэтая папка не падтрымліваецца</string>
<string name="desc_track_number">Кампазіцыя %d</string>
<string name="desc_song_handle">Перамясціць песню ў чаргу</string>
@ -127,6 +133,7 @@
<string name="desc_auxio_icon">Значок Auxio</string>
<string name="desc_shuffle">Ўключыце або выключыце перамешванне</string>
<string name="desc_remove_song">Выдаліць гэтую песню з чаргі</string>
<string name="desc_shuffle_all">Перамяшаць усе песні</string>
<string name="desc_exit">Спыніць прайграванне</string>
<string name="desc_queue_bar">Адкрыйце чаргу</string>
<string name="desc_clear_search">Ачысціць пошукавы запыт</string>
@ -141,6 +148,7 @@
<string name="def_date">Без даты</string>
<string name="def_track">Няма дарожкі</string>
<string name="cdc_mp3">MPEG-1 аўдыё</string>
<string name="cdc_mka">Matroska аўдыё</string>
<string name="def_playback">Музыка не грае</string>
<string name="cdc_mp4">MPEG-4 аўдыё</string>
<string name="clr_red">Чырвоны</string>
@ -271,6 +279,7 @@
<string name="lbl_sort_direction">Напрамак</string>
<string name="desc_selection_image">Абярыце малюнак</string>
<string name="lbl_selection">Абярыце</string>
<string name="lbl_show_error_info">Дадаткова</string>
<string name="lbl_copied">Скапіравана</string>
<string name="lbl_error_info">Інфармацыя пра памылку</string>
<string name="lbl_report">Справаздача пра памылку</string>

View file

@ -76,6 +76,7 @@
<string name="lbl_windows_paths">Използвай съвместими с Windows пътища</string>
<string name="info_app_desc">Прост, рационален музикален плейър за android.</string>
<string name="lbl_indexing">Зарежда се музика</string>
<string name="lbl_show_error_info">Още</string>
<string name="lbl_albums">Албуми</string>
<string name="lbl_ep_live">EP на живо</string>
<string name="lbl_single_live">Сингъл наживо</string>
@ -96,6 +97,7 @@
<string name="lbl_playback">Сега се изпълнява</string>
<string name="lbl_replaygain_track">ReplayGain Регулиране на песента</string>
<string name="lbl_shuffle_shortcut_long">Разбъркай всички</string>
<string name="lbl_add">Добави</string>
<string name="lbl_about">Относно</string>
<string name="lbl_path_style_absolute">Абсолютно</string>
<string name="lbl_eps">EPs</string>
@ -184,6 +186,7 @@
<string name="set_replay_gain">Нормализация на звука</string>
<string name="set_replay_gain_mode">ReplayGain стратегия</string>
<string name="set_replay_gain_mode_off">Изключено</string>
<string name="lbl_grant">Предоставяне</string>
<string name="lng_supporters_promo">Дарете за проекта, за да бъде добавено името ви тук!</string>
<string name="lng_search_library">Търсене във вашата библиотека…</string>
<string name="set_bar_action">Персонализирано действие на лентата за възпроизвеждане</string>
@ -207,15 +210,20 @@
<string name="set_library">Библиотека</string>
<string name="set_locations">Музикални папки</string>
<string name="set_locations_desc">Управлявайте откъде да се зарежда музиката</string>
<string name="set_locations_list">Папки</string>
<string name="set_reindex">Обновяване на музика</string>
<string name="err_no_music">Няма намерена музика</string>
<string name="err_index_failed">Неуспешно зареждане на музика</string>
<string name="err_no_perms">Auxio се нуждае от разрешение, за да чете вашата музикална библиотека</string>
<string name="err_export_failed">Плейлиста не може да се изнесе в този файл</string>
<string name="err_no_app">Няма намерено приложение, което да може да се справи с тази задача</string>
<string name="err_no_locations">Няма папки</string>
<string name="desc_play_pause">Изпълни или пауза</string>
<string name="desc_skip_next">Премини към следваща песен</string>
<string name="desc_skip_prev">Премини към последна песен</string>
<string name="desc_change_repeat">Промени режима на повторение</string>
<string name="desc_shuffle">Включи или изключи разбъркване</string>
<string name="desc_shuffle_all">Разбъркай всички песни</string>
<string name="desc_exit">Спри възпроизвеждането</string>
<string name="desc_remove_song">Премахни тази песен</string>
<string name="desc_song_handle">Премести тази песен</string>
@ -247,6 +255,7 @@
<string name="cdc_mp3">MPEG-1 audio</string>
<string name="cdc_mp4">MPEG-4 audio</string>
<string name="cdc_ogg">Ogg audio</string>
<string name="cdc_mka">Matroska audio</string>
<string name="clr_pink">Розово</string>
<string name="clr_red">Червено</string>
<string name="clr_purple">Лилаво</string>

View file

@ -7,6 +7,7 @@
<!-- Label Namespace | Static Labels -->
<string name="lng_indexing">Načítání vaší hudební knihovny…</string>
<string name="lbl_retry">Zkusit znovu</string>
<string name="lbl_grant">Udělit</string>
<string name="lbl_genres">Žánry</string>
<string name="lbl_artists">Umělci</string>
<string name="lbl_albums">Alba</string>
@ -41,6 +42,7 @@
<string name="lbl_ok">OK</string>
<!-- Actual string: Cancel -->
<string name="lbl_cancel">Zrušit</string>
<string name="lbl_add">Přidat</string>
<string name="lbl_save">Uložit</string>
<string name="lbl_about">O aplikaci</string>
<string name="lbl_version">Verze</string>
@ -88,8 +90,11 @@
<string name="set_reindex">Obnovit hudbu</string>
<string name="set_reindex_desc">Znovu načíst hudební knihovnu, pokud možno s použitím značek uložených v mezipaměti</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Nenalezena žádná hudba</string>
<string name="err_index_failed">Načítání hudby selhalo</string>
<string name="err_no_perms">Auxio potřebuje oprávnění ke čtení vaší hudební knihovny</string>
<string name="err_no_app">Nebyla nalezena žádná aplikace, která by dokázala vykonat tuto akci</string>
<string name="err_no_locations">Žádné složky</string>
<string name="err_bad_location">Tato složka není podporována</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">Prohledat vaší knihovnu…</string>
@ -100,6 +105,7 @@
<string name="desc_skip_prev">Přeskočit na předchozí skladbu</string>
<string name="desc_change_repeat">Změnit režim opakování</string>
<string name="desc_shuffle">Vypnout nebo zapnout náhodné přehrávání</string>
<string name="desc_shuffle_all">Náhodně přehrávat vše</string>
<string name="desc_remove_song">Odebrat tuto skladbu z fronty</string>
<string name="desc_song_handle">Přesunout tuto skladbu ve frontě</string>
<string name="desc_tab_handle">Přesunout tuto kartu</string>
@ -161,6 +167,7 @@
<string name="cdc_mp3">Zvuk MPEG-1</string>
<string name="cdc_mp4">Zvuk MPEG-4</string>
<string name="cdc_ogg">Zvuk Ogg</string>
<string name="cdc_mka">Zvuk Matroska</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
<string name="fmt_bitrate">%d kbps</string>
@ -239,6 +246,7 @@
<string name="lbl_wiki">Wiki</string>
<string name="fmt_list">%1$s, %2$s</string>
<string name="lbl_reset">Obnovit</string>
<string name="set_locations_list">Složky</string>
<string name="set_replay_gain">Normalizace hlasitosti</string>
<string name="set_behavior">Chování</string>
<string name="set_ui_desc">Změnit motiv a barvy aplikace</string>
@ -282,6 +290,7 @@
<string name="lbl_sort_mode">Seřadit podle</string>
<string name="desc_selection_image">Výběr obrázku</string>
<string name="lbl_selection">Výběr</string>
<string name="lbl_show_error_info">Další</string>
<string name="lbl_error_info">Informace o chybě</string>
<string name="lbl_copied">Zkopírovat</string>
<string name="lbl_report">Nahlásit</string>
@ -332,7 +341,4 @@
<string name="lng_empty_artists">Vaši umělci se zobrazí zde.</string>
<string name="lng_empty_playlists">Vaše seznamy skladeb se zobrazí zde.</string>
<string name="lng_empty_genres">Vaše žánry se zobrazí zde.</string>
<string name="set_with_hidden">Zahrnout skryté soubory</string>
<string name="set_with_hidden_desc">Zahrnout skryté zvukové soubory (např. .cache)</string>
<string name="set_cover_mode_as_is">Původní</string>
</resources>

View file

@ -4,6 +4,7 @@
<string name="lbl_indexer">Llwytho cerddoriaeth</string>
<string name="lbl_observing">Yn monitro llyfrgell cerddoriaeth</string>
<string name="lbl_retry">Ceisio eto</string>
<string name="lbl_grant">Caniatáu</string>
<string name="lbl_songs">Caneuon</string>
<string name="lbl_song">Cân</string>
<string name="lbl_all_songs">Holl ganeuon</string>
@ -23,6 +24,7 @@
<string name="lbl_mixtapes">Tapiau cymysgiad</string>
<string name="lbl_mixtape">Tâp cymysgiad</string>
<string name="info_app_desc">Chwaraewr cerddoriaeth syml a synhwyrol.</string>
<string name="lbl_show_error_info">Mwy</string>
<string name="lbl_ep_remix">EP ail-gymysgiad</string>
<string name="lbl_name">Enw</string>
<string name="lbl_date">Dyddiad</string>
@ -32,6 +34,7 @@
<string name="lbl_track">Trac</string>
<string name="lbl_sort">Didoli</string>
<string name="lbl_sort_mode">Didoli gan</string>
<string name="set_locations_list">Ffolderi</string>
<string name="lbl_playlists">Rhestri chwarae</string>
<string name="lbl_new_playlist">Rhestr chwarae newydd</string>
<string name="lbl_empty_playlist">Rhestr chwarae gwag</string>
@ -86,6 +89,7 @@
<string name="set_locations">Ffolderi cerddoriaeth</string>
<string name="set_reindex">Adnewyddu cerddoriaeth</string>
<string name="desc_track_number">Trac %d</string>
<string name="desc_shuffle_all">Chwarae pob cân ar hap</string>
<string name="def_artist">Artist anhysbys</string>
<string name="def_genre">Genre anhysbys</string>
<string name="def_date">Dim dyddiad</string>
@ -153,6 +157,7 @@
<string name="lbl_cancel">Diddymu</string>
<string name="lbl_save">Cadw</string>
<string name="lbl_reset">Ailosod</string>
<string name="lbl_add">Ychwanegu</string>
<string name="lbl_path_style">Dull llwybr</string>
<string name="lbl_windows_paths">Defnyddio llwybrau Windows</string>
<string name="lbl_about">Ynghylch</string>
@ -194,8 +199,11 @@
<string name="set_replay_gain_mode_track">Ffafrio trac</string>
<string name="set_replay_gain_mode_album">Ffafrio albwm</string>
<string name="set_pre_amp_with">Addasiad gyda thagiau</string>
<string name="err_no_music">Ni chanfuwyd cerddoriaeth</string>
<string name="err_index_failed">Methwyd llwytho cerddoriaeth</string>
<string name="err_no_perms">Mae ar Auxio angen caniatâd i ddarllen eich llyfrgell gerddoriaeth</string>
<string name="err_no_app">Methwyd dod o hyd ap sydd yn gallu gwneud y tasg hon</string>
<string name="err_no_locations">Dim ffolderi</string>
<string name="desc_skip_next">Neidio i\'r gân nesaf</string>
<string name="desc_skip_prev">Neidio i\'r gân ddiwethaf</string>
<string name="desc_change_repeat">Newid y modd ail-chwarae</string>
@ -237,6 +245,7 @@
<string name="desc_remove_song">Tynnu\'r gân hon</string>
<string name="desc_queue_bar">Agor y ciw</string>
<string name="cdc_mp4">Sain MPEG-4</string>
<string name="cdc_mka">Sain Matroska</string>
<string name="fmt_deletion_info">Dileu %s? Ni fydd yn bosib dadwneud hyn.</string>
<plurals name="fmt_song_count">
<item quantity="zero">%d caneuon</item>

View file

@ -2,6 +2,7 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Erneut versuchen</string>
<string name="lbl_grant">Gewähren</string>
<string name="lbl_genres">Genres</string>
<string name="lbl_artists">Künstler</string>
<string name="lbl_albums">Alben</string>
@ -23,7 +24,9 @@
<string name="lng_queue_added">Der Warteschlange hinzugefügt</string>
<string name="lbl_artist_details">Zum Künstler gehen</string>
<string name="lbl_album_details">Zum Album gehen</string>
<string name="lbl_add">Hinzufügen</string>
<string name="lbl_save">Speichern</string>
<string name="err_no_locations">Keine Ordner</string>
<string name="lbl_about">Über</string>
<string name="lbl_version">Version</string>
<string name="lbl_code">Quellcode</string>
@ -61,7 +64,9 @@
<string name="set_reindex">Musik neu laden</string>
<string name="set_reindex_desc">Musikbibliothek neu laden, verwendet gecachte Tags wenn möglich</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Keine Musik gefunden</string>
<string name="err_index_failed">Laden der Musik fehlgeschlagen</string>
<string name="err_no_perms">Auxio benötigt die Berechtigung, um deine Musikbibliothek zu lesen</string>
<string name="err_no_app">Es konnte keine App gefunden werden, die diese Aufgabe übernehmen kann</string>
<string name="err_bad_location">Das Verzeichnis wird nicht unterstützt</string>
<!-- Hint Namespace | EditText Hints -->
@ -124,6 +129,7 @@
<string name="set_lib_tabs">Bibliotheks-Registerkarten</string>
<string name="set_lib_tabs_desc">Sichtbarkeit und Ordnung der Bibliotheksregisterkarten ändern</string>
<string name="lbl_name">Name</string>
<string name="desc_shuffle_all">Alle Lieder zufällig</string>
<string name="desc_remove_song">Lied in der Warteschlange löschen</string>
<string name="desc_tab_handle">Tab versetzen</string>
<string name="def_artist">Unbekannter Künstler</string>
@ -152,6 +158,7 @@
<string name="cdc_ogg">Ogg-Audio</string>
<string name="cdc_mp4">MPEG-4-Audio</string>
<string name="cdc_mp3">MPEG-1-Audio</string>
<string name="cdc_mka">Matroska-Audio</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
<string name="fmt_bitrate">%d kB/s</string>
@ -237,6 +244,7 @@
<string name="set_music">Musik</string>
<string name="set_images">Bilder</string>
<string name="set_library">Bibliothek</string>
<string name="set_locations_list">Ordner</string>
<string name="set_playback">Wiedergabe</string>
<string name="set_audio_desc">Ton und Wiedergabeverhalten konfigurieren</string>
<string name="set_replay_gain">Lautstärkenormalisierung</string>
@ -273,6 +281,7 @@
<string name="lbl_sort_mode">Sortieren nach</string>
<string name="desc_selection_image">Auswahl-Bild</string>
<string name="lbl_selection">Auswahl</string>
<string name="lbl_show_error_info">Mehr</string>
<string name="lbl_copied">Kopiert</string>
<string name="lbl_report">Melden</string>
<string name="lbl_error_info">Fehlerinformation</string>
@ -323,7 +332,4 @@
<string name="lng_empty_songs">Deine Lieder werden hier angezeigt.</string>
<string name="lng_empty_genres">Deine Genres werden hier angezeigt.</string>
<string name="lng_empty_artists">Deine Künstler werden hier angezeigt.</string>
<string name="set_cover_mode_as_is">Unverändert</string>
<string name="set_with_hidden_desc">Audio-Dateien einbeziehen, die versteckt sind (z. B. .cache)</string>
<string name="set_with_hidden">Versteckte Dateien einbeziehen</string>
</resources>

View file

@ -2,6 +2,7 @@
<resources>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Προσπάθεια εκ νέου</string>
<string name="lbl_grant">Χορήγηση</string>
<string name="lbl_genres">Είδη</string>
<string name="lbl_artists">Καλλιτέχνες</string>
<string name="lbl_albums">Άλμπουμ</string>
@ -74,8 +75,10 @@
<string name="fmt_lib_artist_count">Καλλιτέχνες που φορτώθηκαν: %d</string>
<string name="lbl_date">Έτος</string>
<string name="lbl_disc">Δίσκος</string>
<string name="err_no_music">Δεν βρέθηκε καθόλου μουσική</string>
<string name="err_index_failed">Η φόρτωση μουσικής απέτυχε</string>
<string name="fmt_bitrate">%d kbps</string>
<string name="lbl_add">Πρόσθεση</string>
<string name="lbl_props">Ιδιότητες τραγουδιού</string>
<string name="lbl_song_detail">Προβολή Ιδιοτήτων</string>
<string name="lbl_library_counts">Στατιστικά συλλογής</string>
@ -92,6 +95,7 @@
<string name="lbl_name">Όνομα</string>
<string name="lbl_duration">Διάρκεια</string>
<string name="fmt_lib_total_duration">Συνολική διάρκεια: %s</string>
<string name="err_no_locations">Καθόλου φάκελοι</string>
<string name="info_app_desc">Μια απλή, λογική εφαρμογή αναπαραγωγής μουσικής για Android.</string>
<string name="lbl_indexer">Φόρτωση μουσικής</string>
<string name="lng_widget">Προβολή και έλεγχος αναπαραγωγής μουσικής</string>

View file

@ -5,6 +5,7 @@
<string name="lng_widget">Ver y controlar la reproducción musical</string>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Reintentar</string>
<string name="lbl_grant">Permitir</string>
<string name="lbl_genres">Géneros</string>
<string name="lbl_artists">Artistas</string>
<string name="lbl_albums">Álbumes</string>
@ -21,36 +22,38 @@
<string name="lbl_sort_asc">Ascendente</string>
<string name="lbl_playback">En reproducción</string>
<string name="lbl_play">Reproducir</string>
<string name="lbl_shuffle">Modo aleatorio</string>
<string name="lbl_shuffle">Mezcla</string>
<string name="set_play_song_from_all">Reproducir todo</string>
<string name="set_play_song_from_album">Reproducir por álbum</string>
<string name="set_play_song_from_artist">Reproducir por artista</string>
<string name="lbl_queue">Cola</string>
<string name="lbl_play_next">Reproducir siguiente</string>
<string name="lbl_queue_add">Añadir a la cola</string>
<string name="lng_queue_added">Añadido a la cola</string>
<string name="lbl_queue_add">Agregar a la cola</string>
<string name="lng_queue_added">Agregado a la cola</string>
<string name="lbl_artist_details">Ir al artista</string>
<string name="lbl_album_details">Ir al álbum</string>
<string name="lbl_add">Agregar</string>
<string name="lbl_save">Guardar</string>
<string name="err_no_locations">Sin carpetas</string>
<string name="lbl_about">Acerca de</string>
<string name="lbl_version">Versión</string>
<string name="lbl_code">Código fuente</string>
<string name="lbl_licenses">Licencias</string>
<string name="lbl_author_name">Desarrollado por Alexander Capehart</string>
<!-- Settings namespace | Settings-related labels -->
<string name="set_root_title">Configuración</string>
<string name="set_ui">Aspecto y comportamiento</string>
<string name="set_root_title">Ajustes</string>
<string name="set_ui">Aspecto y Comportamiento</string>
<string name="set_theme">Tema</string>
<string name="set_theme_auto">Automático</string>
<string name="set_theme_day">Claro</string>
<string name="set_theme_night">Oscuro</string>
<string name="set_accent">Combinación de colores</string>
<string name="set_accent">Esquema de color</string>
<string name="set_black_mode">Tema negro</string>
<string name="set_black_mode_desc">Usar un tema completamente negro</string>
<string name="set_display">Pantalla</string>
<string name="set_lib_tabs">Pestañas de la biblioteca</string>
<string name="set_lib_tabs_desc">Cambiar visibilidad y orden de las pestañas de la biblioteca</string>
<string name="set_round_mode">Modo redondeado</string>
<string name="set_round_mode">Carátulas redondeadas</string>
<string name="set_round_mode_desc">Habilitar las esquinas redondeadas en los elementos adicionales de la interfaz del usuario (requiere que las portadas de los álbumes estén redondeadas)</string>
<string name="set_notif_action">Usar acciones de notificación personalizadas</string>
<string name="set_audio">Sonido</string>
@ -70,11 +73,13 @@
<string name="set_reindex">Actualizar música</string>
<string name="set_reindex_desc">Recargar la biblioteca musical, utilizando las etiquetas en caché cuando sea posible</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">No se ha encontrado música</string>
<string name="err_index_failed">Falló la carga de música</string>
<string name="err_no_perms">Auxio necesita permiso para leer su biblioteca de música</string>
<string name="err_no_app">No se encontró ninguna aplicación que pueda manejar esta tarea</string>
<string name="err_bad_location">No se admite esta carpeta</string>
<string name="err_bad_location">Directorio no soportado</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">Buscar en la fonoteca…</string>
<string name="lng_search_library">Buscar en la biblioteca…</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="desc_track_number">Pista %d</string>
<string name="desc_play_pause">Reproducir o pausar</string>
@ -82,6 +87,7 @@
<string name="desc_skip_prev">Saltar a la última canción</string>
<string name="desc_change_repeat">Cambiar modo de repetición</string>
<string name="desc_shuffle">Activar o desactivar mezcla</string>
<string name="desc_shuffle_all">Mezclar todas las canciones</string>
<string name="desc_remove_song">Quitar canción de la cola</string>
<string name="desc_song_handle">Mover canción en la cola</string>
<string name="desc_tab_handle">Mover pestaña</string>
@ -136,12 +142,13 @@
<string name="lbl_song_detail">Ver propiedades</string>
<string name="lbl_shuffle_shortcut_short">Mezclar</string>
<string name="lbl_shuffle_shortcut_long">Mezclar todo</string>
<string name="lbl_ok">Aceptar</string>
<string name="lbl_ok">De acuerdo</string>
<string name="lbl_library_counts">Estadísticas de la biblioteca</string>
<string name="set_pre_amp_without">Ajuste sin etiquetas</string>
<string name="set_pre_amp_warning">Advertencia: Cambiar el pre-amp a un valor alto puede resultar en picos en algunas pistas de audio.</string>
<string name="set_play_song_none">Reproducir desde el elemento que se muestra</string>
<string name="cdc_flac">Códec de audio sin pérdida libre (FLAC)</string>
<string name="cdc_mka">Audio matroska</string>
<string name="cdc_flac">Free Losless Audio Codec (FLAC)</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="fmt_indexing">Cargando tu biblioteca de música… (%1$d/%2$d)</string>
<string name="fmt_lib_artist_count">Artistas cargados: %d</string>
@ -150,15 +157,15 @@
<string name="lbl_song_count">Número de canciones</string>
<string name="set_observing">Recarga automática</string>
<string name="set_observing_desc">Recargar la biblioteca musical cada vez que cambie (requiere una notificación persistente)</string>
<string name="lng_indexing">Cargando la fonoteca…</string>
<string name="lng_indexing">Cargando tu librería de música…</string>
<string name="lbl_indexing">Cargando música</string>
<string name="lbl_observing">Monitorizando la fonoteca</string>
<string name="lng_observing">Monitorizando cambios en la fonoteca…</string>
<string name="cdc_ogg">Audio Ogg</string>
<string name="lbl_observing">Monitorizando la librería de música</string>
<string name="lng_observing">Monitorizando cambios en tu librería de música…</string>
<string name="cdc_ogg">Audio ogg</string>
<string name="set_play_in_parent_with">Cuando se reproduce desde los detalles</string>
<string name="lbl_date_added">Fecha de adición</string>
<string name="lbl_date_added">Fecha de añadido</string>
<string name="lbl_props">Propiedades de la canción</string>
<string name="lbl_sample_rate">Tasa de muestreo</string>
<string name="lbl_sample_rate">Frecuencia de muestreo</string>
<string name="lbl_cancel">Cancelar</string>
<string name="set_headset_autoplay">Reproducción automática con auriculares</string>
<string name="set_locations">Carpetas de música</string>
@ -169,9 +176,9 @@
<string name="lbl_ep">EP</string>
<string name="lbl_singles">Sencillos</string>
<string name="lbl_single">Sencillo</string>
<string name="lbl_soundtrack">Banda sonora</string>
<string name="lbl_album_remix">Álbum de remezclas</string>
<string name="lbl_soundtracks">Bandas sonoras</string>
<string name="lbl_soundtrack">Pista de audio</string>
<string name="lbl_album_remix">Álbum remix</string>
<string name="lbl_soundtracks">Pistas de audio</string>
<string name="lbl_mixtapes">Mixtapes (recopilación de canciones)</string>
<string name="lbl_mixtape">Mixtape (recopilación de canciones)</string>
<string name="lbl_remix_group">Remezclas</string>
@ -184,7 +191,7 @@
<string name="fmt_lib_album_count">Álbumes cargados: %d</string>
<string name="fmt_lib_total_duration">Duración total: %s</string>
<string name="lbl_album_live">Álbum en directo</string>
<string name="lbl_single_live">Sencillo en directo</string>
<string name="lbl_single_live">Single en directo</string>
<string name="lbl_compilation">Compilación</string>
<string name="lbl_live_group">En directo</string>
<string name="cdc_mp3">Audio MPEG-1</string>
@ -192,9 +199,9 @@
<string name="fmt_bitrate">%d kbps</string>
<string name="fmt_db_neg">-%.1f dB</string>
<string name="lbl_ep_live">EP en directo</string>
<string name="lbl_single_remix">Sencillo remezclado</string>
<string name="lbl_single_remix">Single remix</string>
<string name="lbl_compilations">Compilaciones</string>
<string name="lbl_ep_remix">EP de remezclas</string>
<string name="lbl_ep_remix">EP de remixes</string>
<string name="desc_queue_bar">Abrir la cola</string>
<string name="lbl_genre">Género</string>
<string name="set_separators">Separadores de varios valores</string>
@ -209,7 +216,7 @@
<string name="lbl_mix">Mezcla de DJ</string>
<string name="lbl_equalizer">Ecualizador</string>
<string name="set_cover_mode">Portadas de álbumes</string>
<string name="set_cover_mode_off">Desactivadas</string>
<string name="set_cover_mode_off">Apagado</string>
<string name="set_action_mode_repeat">Modo de repetición</string>
<string name="set_separators_plus">Más (+)</string>
<string name="set_separators_and">Signo et</string>
@ -241,6 +248,7 @@
<string name="set_images">Imágenes</string>
<string name="set_audio_desc">Configurar el comportamiento del sonido y la reproducción</string>
<string name="set_playback">Reproducción</string>
<string name="set_locations_list">Carpetas</string>
<string name="set_ui_desc">Cambiar el tema y los colores de la aplicación</string>
<string name="set_personalize_desc">Personalizar los controles y el comportamiento de la interfaz de usuario</string>
<string name="set_library">Biblioteca</string>
@ -252,17 +260,17 @@
<string name="set_intelligent_sorting_desc">Ignorar palabras como \"the\" al ordenar por nombre (funciona mejor con música en inglés)</string>
<string name="lbl_new_playlist">Nueva lista de reproducción</string>
<string name="fmt_def_playlist">Lista de reproducción %d</string>
<string name="lbl_playlist_add">Añadir a la lista de reproducción</string>
<string name="lbl_playlist_add">Agregar a la lista de reproducción</string>
<string name="lng_playlist_added">Agregado a la lista de reproducción</string>
<string name="lng_playlist_created">Lista de reproducción creada</string>
<string name="def_song_count">No hay canciones</string>
<string name="lbl_delete">Eliminar</string>
<string name="lbl_rename">Cambiar nombre</string>
<string name="lbl_rename_playlist">Cambiar nombre de lista de reproducción</string>
<string name="lbl_delete">Borrar</string>
<string name="lbl_rename">Cambiar el nombre</string>
<string name="lbl_rename_playlist">Cambiar el nombre de la lista de reproducción</string>
<string name="lng_playlist_renamed">Lista de reproducción renombrada</string>
<string name="lng_playlist_deleted">Lista de reproducción eliminada</string>
<string name="lng_playlist_deleted">Lista de reproducción borrada</string>
<string name="fmt_deletion_info">¿Borrar %s\? Esto no se puede deshacer.</string>
<string name="lbl_confirm_delete_playlist">¿Quiere eliminar la lista de reproducción?</string>
<string name="lbl_confirm_delete_playlist">¿Borrar la lista de reproducción\?</string>
<string name="lbl_edit">Editar</string>
<string name="fmt_editing">Editando %s</string>
<string name="lbl_appears_on">Aparece en</string>
@ -277,6 +285,7 @@
<string name="lbl_sort_direction">Dirección</string>
<string name="desc_selection_image">Selección de imágenes</string>
<string name="lbl_selection">Selección</string>
<string name="lbl_show_error_info">Más</string>
<string name="lbl_error_info">Información sobre el error</string>
<string name="lbl_copied">Copiado</string>
<string name="lbl_report">Informar</string>
@ -319,15 +328,5 @@
<string name="def_album">Álbum desconocido</string>
<string name="cdc_unknown">Desconocido</string>
<string name="cnt_mp4">El MPEG-4 contiene %s</string>
<string name="cdc_alac">Códec de audio sin pérdida de Apple (ALAC)</string>
<string name="lng_empty_albums">Sus álbumes aparecerán aquí.</string>
<string name="lng_empty_artists">Sus artistas aparecerán aquí.</string>
<string name="lng_empty_genres">Sus géneros aparecerán aquí.</string>
<string name="set_locations_new">Nueva carpeta</string>
<string name="lng_empty_playlists">Sus listas de reproducción aparecerán aquí.</string>
<string name="lng_empty_songs">Sus canciones aparecerán aquí.</string>
<string name="set_cover_mode_save_space">Ahorra espacio</string>
<string name="set_cover_mode_as_is">Original</string>
<string name="set_with_hidden_desc">Incluir ficheros de audio ocultos (ej. .cache)</string>
<string name="set_with_hidden">Incluir ficheros ocultos</string>
<string name="cdc_alac">Apple Lossless Audio Codec (ALAC)</string>
</resources>

View file

@ -2,6 +2,8 @@
<resources>
<string name="lbl_indexer">Muusika on laadimisel</string>
<string name="lbl_observing">Jälgime muudatusi muusikakogus</string>
<string name="lbl_show_error_info">Veel</string>
<string name="lbl_grant">Anna õigused</string>
<string name="lbl_song">Pala</string>
<string name="lbl_albums">Albumid</string>
<string name="lbl_album_live">Album elavas esituses muusikaga</string>
@ -55,6 +57,7 @@
<string name="lbl_start_playback">Alusta taasesitust</string>
<string name="lbl_cancel">Katkesta</string>
<string name="lbl_save">Salvesta</string>
<string name="lbl_add">Lisa</string>
<string name="lbl_path_style">Asukoha kuvamise viis</string>
<string name="lbl_path_style_absolute">Absoluutne</string>
<string name="lbl_about">Rakenduse teave</string>
@ -227,7 +230,7 @@
<string name="set_separators_comma">Koma (,)</string>
<string name="set_separators_semicolon">Semikoolon (;)</string>
<string name="set_separators_plus">Pluss (+)</string>
<string name="set_separators_and">Ampersand (and-märk)</string>
<string name="set_separators_and">Ampersand (&amp;)</string>
<string name="set_separators_desc">Seadista tähemärke, mis eraldavad siltides mitut väärtust</string>
<string name="set_separators_slash">Kaldkriips (/)</string>
<string name="set_separators_warning">Hoiatus: selle seadistuse kasutamisel ei pruugi mitu väärtust siltides olla alati korralikult tuvastatud; seda olukorda saad proovida lahendada täiendava prefiksi lisamisega kurakaldkriipsu näol (\\).</string>
@ -240,15 +243,19 @@
<string name="set_library">Muusikakogu</string>
<string name="set_locations">Muusika kaustad</string>
<string name="set_locations_desc">Halda kaustu, kust otsime ja laadime muusikat</string>
<string name="set_locations_list">Kaustad</string>
<string name="set_reindex">Värskenda muusika andmed</string>
<string name="set_reindex_desc">Laadi muusikakogu uuesti ning kui võimalik, siis kasuta puhverdatud silte</string>
<string name="set_rescan">Laadi muusikakogu uuesti</string>
<string name="set_rescan_desc">Kustuta puhverdatud siltide andmed ja laadi muusikakogu tervikuna uuesti (aeglasem, aga täpsem tulemus)</string>
<string name="err_no_music">Muusikat ei leidu</string>
<string name="err_index_failed">Muusika laadimine ei õnnestunud</string>
<string name="err_no_perms">Auxio vajab muusikakogu töötlemiseks õigust lugeda faile ja kaustu sinu nutiseadmes</string>
<string name="err_import_failed">Sellest failist ei õnnestu esitusloendit importida</string>
<string name="err_export_failed">Sellesse faili ei õnnestu esitusloendit eksportida</string>
<string name="err_no_app">Ei leidu selle ülesande täitmiseks sobilikku rakendust</string>
<string name="desc_track_number">Lugu %d</string>
<string name="err_no_locations">Kaustu pole määratud</string>
<string name="err_bad_location">See kaust pole toetatud</string>
<string name="desc_play_pause">Esita või peata</string>
<string name="desc_change_repeat">Muuda kordamise režiimi</string>
@ -258,6 +265,7 @@
<string name="desc_exit">Lõpeta taasesitus</string>
<string name="desc_queue_bar">Ava esitusjärjekord</string>
<string name="desc_tab_handle">Liiguta seda vahelehte</string>
<string name="desc_shuffle_all">Sega kõik palad</string>
<string name="desc_remove_song">Eemalda see pala</string>
<string name="desc_song_handle">Tõsta see pala teise kohta</string>
<string name="desc_clear_search">Tühjenda otsinguajalugu</string>
@ -280,6 +288,7 @@
<string name="cdc_ogg">Ogg Vorbis audio</string>
<string name="cdc_mp3">MPEG-1 audio</string>
<string name="cdc_mp4">MPEG-4 audio</string>
<string name="cdc_mka">Matroska audio</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="fmt_lib_song_count">Laaditud palasid: %d</string>
<string name="fmt_deletion_info">Kas kustutame %s? Seda tegevust ei saa tagasi pöörata.</string>
@ -315,7 +324,4 @@
<string name="lng_empty_genres">Sinu žanrid saavad olema nähtavad siin.</string>
<string name="lng_empty_albums">Sinu albumid saavad olema nähtavad siin.</string>
<string name="lng_empty_playlists">Sinu esitusloendid saavad olema nähtavad siin.</string>
<string name="set_with_hidden">Kaasa peidetud failid</string>
<string name="set_with_hidden_desc">Kaasa peidetud helifailid (nt. .cache)</string>
<string name="set_cover_mode_as_is">Sellisena, nagu ta on</string>
</resources>

View file

@ -3,6 +3,7 @@
<string name="lbl_indexer">بارگیری موسیقی</string>
<string name="info_app_desc">یک پخش کننده موسیقی ساده و منطقی برای اندروید.</string>
<string name="lbl_retry">تلاش دوباره</string>
<string name="lbl_grant">اجازه دادن</string>
<string name="lbl_album">آلبوم</string>
<string name="lbl_album_live">آلبوم زنده</string>
<string name="lbl_album_remix">آلبوم ریمیکس</string>

View file

@ -4,6 +4,7 @@
<string name="lbl_indexer">Musiikki latautuu</string>
<string name="lbl_indexing">Ladataan musiikkia</string>
<string name="lbl_retry">Yritä uudelleen</string>
<string name="lbl_grant">Anna lupa</string>
<string name="lbl_songs">Kappaleet</string>
<string name="lbl_all_songs">Kaikki kappaleet</string>
<string name="lbl_albums">Albumit</string>
@ -50,6 +51,7 @@
<string name="lbl_cancel">Peruuta</string>
<string name="lbl_save">Tallenna</string>
<string name="lbl_reset">Palauta oletus</string>
<string name="lbl_add">Lisää</string>
<string name="lng_observing">Valvotaa musiikkikirjastoa muutosten varalta…</string>
<string name="lbl_shuffle_shortcut_short">Sekoita</string>
<string name="lbl_shuffle_shortcut_long">Sekoita kaikki</string>
@ -68,7 +70,7 @@
<string name="set_play_song_from_genre">Toista tyylilajista</string>
<string name="set_separators">Moniarvoerottimet</string>
<string name="set_exclude_non_music_desc">Ohita äänitiedostot, jotka eivät ole musiikkia, kuten podcastit</string>
<string name="set_separators_and">Ampersand &amp;</string>
<string name="set_separators_and">Ja-merkki (&amp;)</string>
<string name="set_separators_comma">Pilkku (,)</string>
<string name="set_separators_plus">Plus (+)</string>
<string name="set_separators_semicolon">Puolipiste (;)</string>
@ -87,6 +89,7 @@
<string name="set_locations_desc">Määritä mistä musiikki tulee ladata</string>
<string name="set_rescan">Läpikäy musiikki uudelleen</string>
<string name="err_no_app">Tähän tehtävään kykenevää sovellusta ei löytynyt</string>
<string name="err_no_locations">Ei kansioita</string>
<string name="desc_track_number">Raita %d</string>
<string name="desc_skip_next">Siirry seuraavaan kappaleeseen</string>
<string name="desc_change_repeat">Muuta kertaustilaa</string>
@ -103,6 +106,7 @@
<string name="cdc_mp3">MPEG-1-ääni</string>
<string name="cdc_mp4">MPEG-4-ääni</string>
<string name="cdc_ogg">Ogg-ääni</string>
<string name="cdc_mka">Matroska-ääni</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
<string name="clr_red">Punainen</string>
@ -161,8 +165,10 @@
<string name="set_round_mode">Pyöristetty tila</string>
<string name="lbl_soundtracks">Elokuvamusiikit</string>
<string name="lbl_mixes">DJ-mixaukset</string>
<string name="err_no_perms">Auxio tarvitsee luvan lukea musiikkikirjastoa</string>
<string name="set_root_title">Asetukset</string>
<string name="lbl_sort">Järjestä</string>
<string name="err_no_music">Musiikkia ei löytynyt</string>
<string name="lbl_wiki">Wiki</string>
<string name="clr_grey">Harmaa</string>
<string name="set_ui_desc">Muuta sovelluksen teemaa ja värejä</string>
@ -199,9 +205,11 @@
<string name="set_headset_autoplay">Automaattitoisto kuulokkeilla</string>
<string name="set_headset_autoplay_desc">Aloita aina toisto, kun kuulokkeet yhdistetään (ei välttämättä toimi kaikilla laitteilla)</string>
<string name="desc_skip_prev">Siirry viimeiseen kappaleeseen</string>
<string name="set_locations_list">Kansiot</string>
<string name="desc_play_pause">Toista tai keskeytä</string>
<string name="err_bad_location">Tämä kansio ei ole tuettu</string>
<string name="desc_shuffle">Sekoitus päällä/pois</string>
<string name="desc_shuffle_all">Sekoita kaikki kappaleet</string>
<string name="desc_tab_handle">Siirry tätä välilehteä</string>
<string name="desc_clear_search">Tyhjennä hakuehto</string>
<string name="desc_artist_image">Esittäjän %s kuva</string>
@ -242,6 +250,7 @@
<string name="set_rescan_desc">Tyhjennä tunnistevälimuisti ja lataa musiikkikirjasto kokonaan uudelleen (hitaampi mutta kattavampi)</string>
<string name="lbl_song">Kappale</string>
<string name="lbl_parent_detail">Näytä</string>
<string name="lbl_show_error_info">Lisää</string>
<string name="lbl_copied">Kopioitu</string>
<string name="lbl_report">Ilmoita virheestä</string>
<string name="lbl_selection">Valinta</string>
@ -306,11 +315,4 @@
<string name="set_locations_new">Uusi kansio</string>
<string name="cnt_mp4">MPEG-4 sisältäen %s</string>
<string name="cdc_unknown">Tuntematon</string>
<string name="lng_empty_songs">Kappaleesi tulevat näkymään tässä.</string>
<string name="lng_empty_albums">Albumisi tulevat näkymään tässä.</string>
<string name="lng_empty_artists">Esittäjäsi tulevat näkymään tässä.</string>
<string name="lng_empty_playlists">Soittolistasi tulevat näkymään tässä.</string>
<string name="lng_empty_genres">Tyylilajisi tulevat näkymään tässä.</string>
<string name="cdc_alac">Apple Lossless Audio Codec (ALAC)</string>
<string name="set_cover_mode_save_space">Säätä tilaa</string>
</resources>

View file

@ -51,6 +51,7 @@
<string name="lbl_bitrate">Tulin ng mga bit</string>
<string name="lbl_sample_rate">Tulin ng sample</string>
<string name="lbl_shuffle_shortcut_short">Haluin</string>
<string name="lbl_add">Idagdag</string>
<string name="lbl_save">I-save</string>
<string name="lbl_about">Tungkol</string>
<string name="lbl_version">Ulat</string>
@ -87,6 +88,7 @@
<string name="lbl_live_group">Live</string>
<string name="lbl_search">Hanapin</string>
<string name="lbl_singles">Mga Single</string>
<string name="lbl_grant">Bigyan</string>
<string name="lbl_genres">Mga Genre</string>
<string name="lng_widget">Tignan at ayusin ang pagtugtog ng kanta</string>
<string name="set_theme">Tema</string>

View file

@ -2,6 +2,7 @@
<resources>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Réessayer</string>
<string name="lbl_grant">Accorder</string>
<string name="lbl_genres">Genres</string>
<string name="lbl_artists">Artistes</string>
<string name="lbl_albums">Albums</string>
@ -37,6 +38,7 @@
<string name="set_audio">Audio</string>
<string name="set_personalize">Comportement</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Pas de musique trouvée</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="desc_track_number">Morceau %d</string>
<string name="desc_play_pause">Lecture ou pause</string>
@ -83,6 +85,7 @@
<string name="lbl_cancel">Annuler</string>
<string name="lbl_save">Enregistrer</string>
<string name="lbl_size">Taille</string>
<string name="lbl_add">Ajouter</string>
<string name="set_display">Affichage</string>
<string name="set_lib_tabs">Onglets de la bibliothèque</string>
<string name="info_app_desc">Un lecteur de musique simple et rationnel pour Android.</string>
@ -107,7 +110,7 @@
<string name="lbl_compilation">Compilation</string>
<string name="lbl_live_group">Live</string>
<string name="lbl_indexing">Chargement de la musique</string>
<string name="lbl_observing">Suivre la bibliothèque musicale</string>
<string name="lbl_observing">Suivre la librairie musicale</string>
<string name="lbl_eps">EP</string>
<string name="lbl_ep">EP</string>
<string name="lbl_singles">Singles</string>
@ -122,11 +125,13 @@
<string name="lbl_album_remix">Album de remix</string>
<string name="lbl_genre">Genre</string>
<string name="lbl_equalizer">Égaliseur</string>
<string name="desc_shuffle_all">Lecture aléatoire de tous les titres</string>
<string name="desc_auxio_icon">Icône Auxio</string>
<string name="desc_no_cover">Couverture de l\'album</string>
<string name="def_genre">Genre inconnu</string>
<string name="clr_dynamic">Dynamique</string>
<string name="clr_cyan">Cyan</string>
<string name="err_no_locations">Aucun dossier</string>
<string name="desc_music_location_delete">Supprimer le dossier</string>
<string name="def_artist">Artiste inconnu</string>
<string name="lbl_compilation_live">Compilation en direct</string>
@ -195,11 +200,13 @@
<string name="set_replay_gain_mode">Stratégie de normalisation de volume</string>
<string name="set_replay_gain_mode_track">Par chanson</string>
<string name="set_replay_gain_mode_album">Par album</string>
<string name="set_locations_list">Dossiers</string>
<string name="set_replay_gain_mode_dynamic">Par album si un album est en lecture</string>
<string name="set_library">Bibliothèque</string>
<string name="set_reindex">Actualiser la musique</string>
<string name="set_rescan_desc">Effacer le cache des étiquettes et recharger entièrement la bibliothèque musicale (lent, mais plus complet)</string>
<string name="err_no_app">Aucune application trouvée qui puisse gérer cette tâche</string>
<string name="err_no_perms">Auxio a besoin de permissions pour lire votre bibliothèque musicale</string>
<string name="set_intelligent_sorting">Tri intelligent</string>
<string name="set_intelligent_sorting_desc">Ignorer les nombres ou certains mots comme \"the\" en début de nom lors du tri (fonctionne au mieux avec de la musique en anglais)</string>
<string name="set_rescan">Scanner à nouveau la musique</string>
@ -215,6 +222,7 @@
<string name="fmt_sample_rate">%d Hz</string>
<string name="desc_skip_prev">Passer à la dernière chanson</string>
<string name="lbl_playlist_add">Ajouter à la liste de lecture</string>
<string name="cdc_mka">Audio Matroska</string>
<string name="fmt_lib_artist_count">Artistes chargés: %d</string>
<string name="set_rewind_prev">Rembobiner avant de revenir en arrière</string>
<string name="desc_artist_image">Image d\'artiste pour %s</string>
@ -275,6 +283,7 @@
<string name="lbl_sort_mode">Trier par</string>
<string name="lbl_sort_direction">Direction</string>
<string name="lbl_selection">Sélection</string>
<string name="lbl_show_error_info">En savoir plus</string>
<string name="lbl_copied">Copié</string>
<string name="lbl_report">Signaler</string>
<string name="lbl_error_info">Info sur l\'erreur</string>

View file

@ -14,6 +14,7 @@
<string name="lbl_singles">Sinxelo</string>
<string name="lbl_compilations">Compilacións</string>
<string name="lbl_compilation">Compilación</string>
<string name="lbl_grant">Permitir</string>
<string name="lbl_albums">Álbums</string>
<string name="lbl_single_remix">Sinxelo remix</string>
<string name="lbl_retry">Volver a intentar</string>
@ -92,6 +93,7 @@
<string name="lbl_song_detail">Ver as propiedades</string>
<string name="lbl_props">Propiedades da canción</string>
<string name="lbl_save">Gardar</string>
<string name="lbl_add">Engadir</string>
<string name="lbl_licenses">Licenzas</string>
<string name="lng_queue_added">Engadido á cola</string>
<string name="set_personalize">Personalizar</string>
@ -160,6 +162,7 @@
<string name="set_rescan_desc">Borrar a caché das etiquetas a recargar completamente a biblioteca de música (máis lento, pero máis completo)</string>
<string name="desc_change_repeat">Cambiar o modo de repetición</string>
<string name="desc_shuffle">Activar ou desactivar a mezcla</string>
<string name="desc_shuffle_all">Mezclar todas as cancións</string>
<string name="desc_exit">Deter a reprodución</string>
<string name="desc_queue_bar">Abrir a cola</string>
<string name="desc_clear_search">Borrar o historial de busca</string>
@ -176,7 +179,9 @@
<string name="cdc_mp3">Audio MPEG-1</string>
<string name="cdc_mp4">Audio MPEG-4</string>
<string name="err_index_failed">Fallou a carga de música</string>
<string name="err_no_perms">Auxio necesita permiso para leer a túa biblioteca de música</string>
<string name="err_no_app">Non se atopou ningunha aplicación que poda facer esta tarefa</string>
<string name="err_no_locations">Sen cartafois</string>
<string name="cdc_ogg">Audio ogg</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
@ -222,9 +227,12 @@
<string name="set_intelligent_sorting_desc">Ignorar palabras como \"the\" ao ordenar por nome (funciona mellor con música en inglés)</string>
<string name="set_locations_desc">Xestionar dende onde se carga a música</string>
<string name="set_repeat_pause_desc">Pausar cando se repite unha canción</string>
<string name="set_locations_list">Cartafois</string>
<string name="def_track">Ningunha pista</string>
<string name="desc_skip_prev">Saltar á última canción</string>
<string name="err_no_music">Sen música</string>
<string name="desc_track_number">Pista %d</string>
<string name="cdc_mka">Audio Matroska</string>
<string name="lbl_mixtapes">Mixtapes (compilación de cancións)</string>
<string name="lbl_mixtape">Mixtapes (compilación de cancións)</string>
<string name="lbl_remix_group">Remix</string>

View file

@ -2,6 +2,7 @@
<resources>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">पुन: प्रयास करें</string>
<string name="lbl_grant">अनुदान</string>
<string name="lbl_artists">कलाकार</string>
<string name="lbl_albums">एल्बम</string>
<string name="lbl_songs">गीत</string>
@ -30,6 +31,7 @@
<string name="set_audio">ऑडियो</string>
<string name="set_personalize">चाल चलन</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">कोई संगीत नहीं मिला</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="desc_play_pause">चलाएं/रोकें</string>
<!-- Hint Namespace | EditText Hints -->
@ -139,6 +141,7 @@
<item quantity="other">%d कलाकार</item>
</plurals>
<string name="lbl_observing">संगीत लाइब्रेरी की निगरानी</string>
<string name="lbl_add">जोड़ें</string>
<string name="lbl_ep">ईपी</string>
<string name="lbl_rename">नाम बदलें</string>
<string name="set_separators_semicolon">अर्धविराम (;)</string>
@ -199,10 +202,12 @@
<string name="set_repeat_pause_desc">जब कोई गीत दोहराया जाता है तो रुक जाएं</string>
<string name="set_pre_amp">रीप्लेगेन प्री-एम्प</string>
<string name="set_pre_amp_with">टैग के साथ समायोजन</string>
<string name="set_locations_list">फ़ोल्डर</string>
<string name="err_index_failed">संगीत लोड करना विफल रहा</string>
<string name="err_bad_location">यह फ़ोल्डर समर्थित नहीं है</string>
<string name="desc_change_repeat">रिपीट मोड बदलें</string>
<string name="desc_shuffle">शफ़ल चालू या बंद करें</string>
<string name="desc_shuffle_all">सभी गीत शफ़ल करें</string>
<string name="desc_exit">प्लेबैक बंद करो</string>
<string name="desc_song_handle">इस गीत को इस स्थानांतरित करें</string>
<string name="def_genre">अज्ञात शैली</string>
@ -256,6 +261,8 @@
<string name="set_rewind_prev">वापस जाने से पहले रिवाइंड करें</string>
<string name="set_replay_gain_mode_track">ट्रैक को प्राथमिकता दें</string>
<string name="set_rescan_desc">टैग कैश साफ़ करें और संगीत लाइब्रेरी को पूरी तरह पुनः लोड करें (धीमी, लेकिन अधिक पूर्ण)</string>
<string name="err_no_perms">Auxio को आपकी संगीत लाइब्रेरी पढ़ने के लिए अनुमति की आवश्यकता है</string>
<string name="err_no_locations">कोई फ़ोल्डर नहीं</string>
<string name="clr_brown">भूरा</string>
<string name="clr_yellow">पीला</string>
<string name="clr_lime">नींबू रंग</string>
@ -264,6 +271,7 @@
<string name="desc_skip_next">अगले गाने पर जाएं</string>
<string name="desc_auxio_icon">ऑक्सियो आइकन</string>
<string name="cdc_ogg">Ogg ऑडियो</string>
<string name="cdc_mka">Matroska ऑडियो</string>
<string name="clr_pink">गुलाबी</string>
<string name="set_intelligent_sorting">बुद्धिमान छंटाई</string>
<string name="set_intelligent_sorting_desc">संख्याओं या \"the\" जैसे शब्दों से शुरू होने वाले नामों को सही ढंग से क्रमबद्ध करें (अंग्रेजी भाषा के संगीत के साथ सबसे अच्छा काम करता है)</string>
@ -275,6 +283,7 @@
<string name="lbl_error_info">त्रुटि की जानकारी</string>
<string name="lbl_report">रिपोर्ट करें</string>
<string name="lbl_copied">कापी किया गया</string>
<string name="lbl_show_error_info">और</string>
<string name="def_album_count">कोई एल्बम नहीं</string>
<string name="lbl_demo">डेमो</string>
<string name="lbl_demos">डेमो</string>

View file

@ -48,6 +48,7 @@
<string name="lbl_shuffle_shortcut_long">Izmiješaj sve</string>
<string name="lbl_ok">U redu</string>
<string name="lbl_cancel">Odustani</string>
<string name="lbl_add">Dodaj</string>
<string name="lbl_save">Spremi</string>
<string name="lbl_about">O</string>
<string name="lbl_version">Inačica</string>
@ -86,12 +87,16 @@
<string name="set_locations_desc">Upravljaj odakle će se glazba učitati</string>
<string name="set_observing">Automatsko ponovno učitavanje</string>
<string name="set_observing_desc">Ponovo učitaj svoju zbirku glazbe čim se dogode promjene (zahtijeva stalno obavještavanje)</string>
<string name="err_no_music">Nijedna glazba nije pronađena</string>
<string name="err_index_failed">Greška u učitvanju glazbe</string>
<string name="err_no_perms">Auxio treba dozvolu za čitanje tvoje zbirke glazbe</string>
<string name="err_no_app">Nijedna aplikacija ne može obraditi ovaj zadatak</string>
<string name="err_no_locations">Nema mapa</string>
<string name="err_bad_location">Ova mapa nije podržana</string>
<string name="lng_search_library">Pretraži svoju zbirku …</string>
<string name="desc_track_number">Zvučni zapis %d</string>
<string name="desc_shuffle">Omogućite ili onemogućite miješanje</string>
<string name="desc_shuffle_all">Izmiješaj sve pjesme</string>
<string name="desc_remove_song">Ukoni ovu pjesmu iz popisa pjesama</string>
<string name="desc_song_handle">Premjesti ovu pjesmu u popisu pjesama</string>
<string name="desc_tab_handle">Pomakni ovu karticu</string>
@ -153,6 +158,7 @@
<string name="lbl_retry">Pokušaj ponovo</string>
<string name="lbl_indexer">Učitavanje glazbe</string>
<string name="lng_widget">Prikaži i upravljaj reprodukcijom glazbe</string>
<string name="lbl_grant">Dozvoli</string>
<string name="lbl_single_live">Singl uživo</string>
<string name="lbl_single_remix">Singl remiks</string>
<string name="lbl_single">Singl</string>
@ -161,7 +167,7 @@
<string name="lbl_search">Traži</string>
<string name="lbl_filter_all">Sve</string>
<string name="lbl_queue_add">Dodaj u redoslijed</string>
<string name="lng_queue_added">Dodano u redoslijed izvođenja</string>
<string name="lng_queue_added">Dodano u redoslijed</string>
<string name="lbl_song_detail">Pogledaj svojstva</string>
<string name="lbl_artist_details">Idi na izvođača</string>
<string name="lbl_album_details">Idi na album</string>
@ -185,6 +191,7 @@
<string name="desc_skip_prev">Preskoči na prethodnu pjesmu</string>
<string name="desc_change_repeat">Promijeni način ponavljanja</string>
<string name="clr_purple">Ljubičasto</string>
<string name="cdc_mka">Matroska zvuk</string>
<string name="desc_queue_bar">Otvori redoslijed</string>
<string name="lbl_genre">Žanr</string>
<string name="set_separators_comma">Zarez (,)</string>
@ -226,6 +233,7 @@
<string name="fmt_list">%1$s, %2$s</string>
<string name="lbl_reset">Resetiraj</string>
<string name="set_replay_gain">Normalizacija glasnoće</string>
<string name="set_locations_list">Mape</string>
<string name="lbl_sort_dsc">Silazno</string>
<string name="set_ui_desc">Promijenite temu i boje aplikacije</string>
<string name="set_personalize_desc">Prilagodite kontrole i ponašanje korisničkog sučelja</string>
@ -268,6 +276,7 @@
<string name="lbl_sort_direction">Smjer</string>
<string name="desc_selection_image">Slika odabira</string>
<string name="lbl_selection">Odabir</string>
<string name="lbl_show_error_info">Više</string>
<string name="lbl_error_info">Podaci greške</string>
<string name="lbl_report">Prijavi</string>
<string name="lbl_copied">Kopirano</string>
@ -313,9 +322,4 @@
<string name="cnt_mp4">MPEG-4 sadrži %s</string>
<string name="set_cover_mode_save_space">Niža kvaliteta</string>
<string name="set_locations_new">Nova mapa</string>
<string name="lng_empty_songs">Tvoje pjesme će se ovdje prikazati.</string>
<string name="lng_empty_albums">Tvoji albumi će se ovdje prikazati.</string>
<string name="lng_empty_artists">Tvoji izvođači će se ovdje prikazati.</string>
<string name="lng_empty_playlists">Tvoji popisi pjesama će se ovdje prikazati.</string>
<string name="lng_empty_genres">Tvoji žanrovi će se ovdje prikazati.</string>
</resources>

View file

@ -2,6 +2,7 @@
<resources>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Újra</string>
<string name="lbl_grant">Engedélyez</string>
<string name="lbl_genres">Műfajok</string>
<string name="lbl_artists">Előadók</string>
<string name="lbl_albums">Albumok</string>
@ -36,6 +37,7 @@
<string name="set_audio">Hang</string>
<string name="set_personalize">Testreszabás</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Nem található zene</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">Keresés a könyvtárban…</string>
<!-- Description Namespace | Accessibility Strings -->
@ -110,6 +112,7 @@
<string name="lbl_mix">DJ Mix</string>
<string name="lbl_genre">Műfaj</string>
<string name="lbl_props">Dal tulajdonságai</string>
<string name="err_no_locations">Nincs mappa</string>
<string name="set_black_mode_desc">Tiszta fekete sötét téma használata</string>
<string name="clr_dynamic">Dinamikus</string>
<string name="set_cover_mode">Album borítók</string>
@ -160,6 +163,7 @@
<string name="lbl_rename_playlist">Lejátszólista átnevezés</string>
<string name="lbl_rename">Átnevez</string>
<string name="lbl_date_added">Hozzáadás dátuma</string>
<string name="set_locations_list">Mappák</string>
<string name="lbl_save">Ment</string>
<string name="lbl_reset">Alaphelyzet</string>
<string name="lbl_author_name">Fejlesztő Alexander Capehart</string>
@ -181,6 +185,7 @@
<string name="def_date">Nincs dátum</string>
<string name="set_cover_mode_balanced">Gyors</string>
<string name="set_exclude_non_music">A nem zenei anyagok kizárása</string>
<string name="desc_shuffle_all">Keverés minden dalból</string>
<string name="cdc_ogg">Ogg audio</string>
<string name="set_display">Megjelenítés</string>
<string name="lbl_track">Hangsáv</string>
@ -201,6 +206,7 @@
<string name="lbl_observing">Zene könyvtár figyelése</string>
<string name="desc_exit">Lejátszás megállítása</string>
<string name="info_app_desc">Egyszerű, praktikus zenelejátszó androidra.</string>
<string name="cdc_mka">Matroska hang</string>
<string name="lbl_album">Album</string>
<string name="lbl_singles">Kislemezek</string>
<string name="lbl_single">Kislemez</string>
@ -216,6 +222,7 @@
<string name="lbl_shuffle_shortcut_short">Keverés</string>
<string name="lbl_artist">Előadó</string>
<string name="lbl_remix_group">Remixek</string>
<string name="lbl_add">Hozzáad</string>
<string name="fmt_db_pos">+%.1f dB</string>
<string name="set_separators_slash">Per jel (/)</string>
<plurals name="fmt_artist_count">
@ -259,6 +266,7 @@
<string name="lbl_appears_on">Megjelenik itt,</string>
<string name="lbl_share">Megoszt</string>
<string name="lbl_confirm_delete_playlist">Lejátszólista törlése\?</string>
<string name="err_no_perms">Az Auxio engedélyt kér a zenei könyvtár olvasásához</string>
<string name="desc_remove_song">Távolítsa el ezt a dalt</string>
<string name="desc_auxio_icon">Auxio ikon</string>
<string name="def_disc">Nincs lemez</string>
@ -272,6 +280,7 @@
<string name="lbl_sort_mode">Rendezés</string>
<string name="lbl_selection">Kiválasztás</string>
<string name="desc_selection_image">Kép kiválasztás</string>
<string name="lbl_show_error_info">További</string>
<string name="lbl_copied">Másolva</string>
<string name="lbl_report">Jelentés</string>
<string name="lbl_error_info">Hiba információ</string>

View file

@ -2,6 +2,8 @@
<resources>
<string name="lbl_indexing">Cargante le musica</string>
<string name="lbl_retry">Retentar</string>
<string name="lbl_show_error_info">Plus</string>
<string name="lbl_grant">Conceder</string>
<string name="lbl_songs">Cantos</string>
<string name="lbl_song">Canto</string>
<string name="lbl_all_songs">Tote le cantos</string>
@ -43,6 +45,7 @@
<string name="lbl_play">Reproducer</string>
<string name="lbl_play_next">Reproducer sequente</string>
<string name="lbl_queue_add">Adder al cauda</string>
<string name="lbl_add">Adder</string>
<string name="lbl_version">Version</string>
<string name="lbl_code">Codice fonte</string>
<string name="lbl_wiki">Wiki</string>
@ -116,6 +119,7 @@
<string name="set_play_song_none">Reproducer ab le elemento mostrate</string>
<string name="set_play_song_from_artist">Reproducer ab artista</string>
<string name="set_keep_shuffle_desc">Mantener le reproduction aleatori al reproducer un nove canto</string>
<string name="err_no_perms">Auxio besonia permission pro leger tu bibliotheca de musica</string>
<string name="def_genre">Genere incognite</string>
<string name="fmt_lib_genre_count">Generes cargate: %d</string>
<string name="desc_genre_image">Imagine de genere ab %s</string>
@ -135,8 +139,11 @@
<string name="set_playback">Reproduction</string>
<string name="set_remember_pause">Rememorar le pausa</string>
<string name="set_locations">Dossieres de musica</string>
<string name="set_locations_list">Dossieres</string>
<string name="set_reindex">Actualisar le musica</string>
<string name="err_no_music">Nulle musica trovate</string>
<string name="err_index_failed">Falleva le carga del musica</string>
<string name="err_no_locations">Necun dossieres</string>
<string name="err_bad_location">Iste dossier non es supportate</string>
<string name="desc_track_number">Tracia %d</string>
<string name="desc_play_pause">Reproducer o pausar</string>
@ -157,6 +164,7 @@
<string name="cdc_mp4">Audio MPEG-4</string>
<string name="cdc_mp3">Audio MPEG-1</string>
<string name="cdc_ogg">Audio Ogg</string>
<string name="cdc_mka">Audio Matroska</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="fmt_selected">%d seligite</string>

View file

@ -2,6 +2,7 @@
<resources>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Coba lagi</string>
<string name="lbl_grant">Izinkan</string>
<string name="lbl_genres">Aliran</string>
<string name="lbl_artists">Artis</string>
<string name="lbl_albums">Album</string>
@ -37,6 +38,7 @@
<string name="set_personalize">Personalisasi</string>
<string name="set_keep_shuffle">Ingat daftar putar acak</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Musik tidak ditemukan</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">Telusuri pustaka Anda…</string>
<!-- Description Namespace | Accessibility Strings -->
@ -53,6 +55,7 @@
<string name="lbl_bitrate">Laju bit</string>
<string name="lbl_ok">OK</string>
<string name="lbl_cancel">Batal</string>
<string name="lbl_add">Tambah</string>
<string name="lbl_save">Simpan</string>
<string name="set_black_mode">Tema hitam</string>
<string name="set_black_mode_desc">Gunakan tema gelap hitam murni</string>
@ -133,11 +136,14 @@
<string name="set_pre_amp_without">Penyesuaian tanpa tag</string>
<string name="set_locations">Folder musik</string>
<string name="set_play_song_from_artist">Putar dari artis</string>
<string name="err_no_perms">Auxio memerlukan izin untuk membaca perpustakaan musik Anda</string>
<string name="desc_skip_prev">Loncat ke lagu terakhir</string>
<string name="desc_shuffle_all">Acak semua lagu</string>
<string name="def_date">Tidak ada tanggal</string>
<string name="err_index_failed">Pemuatan musik gagal</string>
<string name="desc_album_cover">Sampul album untuk %s</string>
<string name="def_artist">Artis tidak dikenal</string>
<string name="err_no_locations">Tidak ada folder</string>
<string name="desc_skip_next">Loncat ke lagu berikutnya</string>
<string name="desc_music_location_delete">Hapus folder</string>
<string name="desc_auxio_icon">Ikon Auxio</string>
@ -151,6 +157,7 @@
<string name="fmt_lib_total_duration">Total durasi: %s</string>
<string name="desc_genre_image">Gambar genre untuk %s</string>
<string name="def_genre">Genre tidak diketahui</string>
<string name="cdc_mka">Audio Matroska</string>
<string name="clr_deep_green">Hijau tua</string>
<string name="clr_yellow">Kuning</string>
<string name="cdc_mp4">Audio MPEG-4</string>
@ -180,6 +187,7 @@
<string name="set_cover_mode_off">Nonaktif</string>
<string name="set_cover_mode_balanced">Cepat</string>
<string name="lbl_album_remix">Album remix</string>
<string name="set_locations_list">Folder</string>
<string name="lbl_indexing">Memuat musik</string>
<string name="lbl_observing">Memantau pustaka musik</string>
<string name="lng_observing">Memantau perubahan pada pustaka musik Anda…</string>
@ -199,6 +207,7 @@
<string name="lbl_ep_live">EP Live</string>
<string name="lbl_compilation">Kompilasi</string>
<string name="lbl_mixtapes">Kaset campuran</string>
<string name="lbl_show_error_info">Lainnya</string>
<string name="lbl_soundtracks">Soundtrack</string>
<string name="lbl_album_live">Album live</string>
<plurals name="fmt_artist_count">

View file

@ -1,15 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Info namespace | App labels -->
<string name="info_app_desc">Un lettore musicale semplice e razionale per android.</string>
<string name="lng_widget">Visualizza e gestisci la riproduzione musicale</string>
<string name="info_app_desc">Semplice e razionale lettore musicale per android.</string>
<string name="lng_widget">Vedi e gestisci la riproduzione musicale</string>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">Riprova</string>
<string name="lbl_grant">Autorizza</string>
<string name="lbl_genres">Generi</string>
<string name="lbl_artists">Artisti</string>
<string name="lbl_albums">Album</string>
<string name="lbl_songs">Brani</string>
<string name="lbl_all_songs">Tutti i brani</string>
<string name="lbl_all_songs">Tutte i brani</string>
<string name="lbl_search">Cerca</string>
<string name="lbl_filter">Filtro</string>
<string name="lbl_filter_all">Tutto</string>
@ -17,82 +18,87 @@
<string name="lbl_name">Nome</string>
<string name="lbl_artist">Artista</string>
<string name="lbl_album">Album</string>
<string name="lbl_date">Data</string>
<string name="lbl_sort_asc">Crescente</string>
<string name="lbl_playback">In riproduzione</string>
<string name="lbl_date">Anno</string>
<string name="lbl_sort_asc">Ascendente</string>
<string name="lbl_playback">Ora in riproduzione</string>
<string name="lbl_play">Riproduci</string>
<string name="lbl_shuffle">Casuale</string>
<string name="lbl_shuffle">Mescola</string>
<string name="set_play_song_from_all">Riproduci da tutti i brani</string>
<string name="set_play_song_from_album">Riproduci dall\'album</string>
<string name="set_play_song_from_artist">Riproduci dall\'artista</string>
<string name="lbl_queue">Coda</string>
<string name="lbl_play_next">Riproduci come successivo</string>
<string name="lbl_queue_add">Aggiungi alla coda</string>
<string name="lng_queue_added">Aggiungi alla coda</string>
<string name="lbl_play_next">Riproduci successivo</string>
<string name="lbl_queue_add">Accoda</string>
<string name="lng_queue_added">Accodato</string>
<string name="lbl_artist_details">Vai all\'artista</string>
<string name="lbl_album_details">Vai all\'album</string>
<string name="lbl_add">Aggiungi</string>
<string name="lbl_save">Salva</string>
<string name="err_no_locations">Nessuna cartella</string>
<string name="lbl_about">Informazioni</string>
<string name="lbl_version">Versione</string>
<string name="lbl_code">Codice sorgente</string>
<string name="lbl_licenses">Licenze</string>
<string name="lbl_author_name">Alexander Capehart</string>
<string name="lbl_library_counts">Statistiche della libreria</string>
<string name="lbl_author_name">Sviluppato da Alexander Capehart</string>
<string name="lbl_library_counts">Statistiche della raccolta</string>
<!-- Settings namespace | Settings-related labels -->
<string name="set_root_title">Impostazioni</string>
<string name="set_root_title">Opzioni</string>
<string name="set_ui">Aspetto</string>
<string name="set_theme">Tema</string>
<string name="set_theme_auto">Sistema</string>
<string name="set_theme_auto">Automatico</string>
<string name="set_theme_day">Chiaro</string>
<string name="set_theme_night">Scuro</string>
<string name="set_accent">Accento</string>
<string name="set_black_mode">Tema nero</string>
<string name="set_black_mode_desc">Usa un tema scuro AMOLED</string>
<string name="set_black_mode_desc">Usa tema nero puro</string>
<string name="set_display">Visualizzazione</string>
<string name="set_lib_tabs">Schede libreria</string>
<string name="set_lib_tabs_desc">Cambia la visibilità e l\'ordine delle schede della libreria</string>
<string name="set_round_mode">Copertine arrotondate</string>
<string name="set_round_mode_desc">Abilita gli angoli arrotondati su ulteriori elementi dell\'interfaccia (richiede che le copertine degli album siano arrotondate)</string>
<string name="set_notif_action">Personalizza azione notifica</string>
<string name="set_round_mode">Copertine dischi arrotondate</string>
<string name="set_round_mode_desc">Abilita gli angoli arrotondati su ulteriori elementi dell\'interfaccia utente (richiede che le copertine degli album siano arrotondate)</string>
<string name="set_notif_action">Usa azioni notifica alternative</string>
<string name="set_audio">Audio</string>
<string name="set_headset_autoplay">Riproduzione automatica</string>
<string name="set_headset_autoplay_desc">Inizia la riproduzione ogni volta che vengono connesse delle cuffie (potrebbe non funzionare su tutti i dispositivi)</string>
<string name="set_replay_gain_mode">Modalità ReplayGain</string>
<string name="set_headset_autoplay">Autoplay cuffie</string>
<string name="set_headset_autoplay_desc">Comincia la riproduzione ogni volta che le cuffie sono inserite (potrebbe non funzionare su tutti i dispositivi)</string>
<string name="set_replay_gain_mode">Strategia ReplayGain</string>
<string name="set_replay_gain_mode_track">Preferisci traccia</string>
<string name="set_replay_gain_mode_album">Preferisci album</string>
<string name="set_replay_gain_mode_dynamic">Preferisci l\'album se in riproduzione</string>
<string name="set_personalize">Personalizza</string>
<string name="set_personalize">Comportamento</string>
<string name="set_play_in_list_with">Quando in riproduzione dalla libreria</string>
<string name="set_keep_shuffle">Ricorda riproduzione casuale</string>
<string name="set_keep_shuffle_desc">Mantiene la riproduzione casuale quando viene riprodotto un nuovo brano</string>
<string name="set_rewind_prev">Riavvolgi prima di tornare indietro</string>
<string name="set_rewind_prev_desc">Riavvolge il brano in riproduzione prima di passare a quello precedente</string>
<string name="set_keep_shuffle">Mantieni mescolamento</string>
<string name="set_keep_shuffle_desc">Mantiene il mescolamento anche se un nuovo brano è selezionato</string>
<string name="set_rewind_prev">Riavvolgi prima di saltare indietro</string>
<string name="set_rewind_prev_desc">Riavvolge prima di saltare al brano precedente</string>
<string name="set_repeat_pause">Pausa alla ripetizione</string>
<string name="set_repeat_pause_desc">Mette in pausa quando un brano si ripete</string>
<string name="set_repeat_pause_desc">Pausa quando un brano si ripete</string>
<string name="set_content">Contenuti</string>
<string name="set_reindex">Aggiorna libreria</string>
<string name="set_reindex">Aggiorna musica</string>
<string name="set_reindex_desc">Ricarica la libreria musicale, usando i tag nella cache quando possibile</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">Musica non trovata</string>
<string name="err_index_failed">Caricamento musica fallito</string>
<string name="err_no_perms">Auxio ha bisogno del permesso per leggere la tua libreria musicale</string>
<string name="err_no_app">Nessuna app può completare questa azione</string>
<string name="err_bad_location">Questa cartella non è supportata</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">Cerca nella libreria…</string>
<!-- Description Namespace | Accessibility Strings -->
<string name="desc_track_number">Traccia %d</string>
<string name="desc_play_pause">Riproduci o metti in pausa</string>
<string name="desc_skip_next">Passa al brano successivo</string>
<string name="desc_skip_prev">Passa all\'ultimo brano</string>
<string name="desc_track_number">Canzone %d</string>
<string name="desc_play_pause">Riproduci o pausa</string>
<string name="desc_skip_next">Salta a brano successivo</string>
<string name="desc_skip_prev">Salta a ultimo brano</string>
<string name="desc_change_repeat">Cambia modalità ripetizione</string>
<string name="desc_shuffle">Attiva o disattiva la riproduzione casuale</string>
<string name="desc_shuffle">Attiva o disattiva mescolamento</string>
<string name="desc_shuffle_all">Mescola tutti i brani</string>
<string name="desc_remove_song">Rimuovi questo brano</string>
<string name="desc_song_handle">Sposta questo brano</string>
<string name="desc_tab_handle">Sposta questa scheda</string>
<string name="desc_clear_search">Cancella la ricerca</string>
<string name="desc_tab_handle">Muove questa scheda</string>
<string name="desc_clear_search">Cancella la query di ricerca</string>
<string name="desc_music_location_delete">Rimuovi cartella</string>
<string name="desc_auxio_icon">Icona Auxio</string>
<string name="desc_no_cover">Copertina album</string>
<string name="desc_album_cover">Copertina album di %s</string>
<string name="desc_album_cover">Copertina album per %s</string>
<string name="desc_artist_image">Immagine artista per %s</string>
<string name="desc_genre_image">Immagine genere per %s</string>
<!-- Default Namespace | Placeholder values -->
@ -100,7 +106,7 @@
<string name="def_genre">Genere sconosciuto</string>
<string name="def_date">Data sconosciuta</string>
<string name="def_track">Nessuna traccia</string>
<string name="def_playback">Nessun brano in riproduzione</string>
<string name="def_playback">Nessuna canzone in riproduzione</string>
<!-- Color Label namespace | Accent names -->
<string name="clr_red">Rosso</string>
<string name="clr_pink">Rosa</string>
@ -115,7 +121,7 @@
<string name="clr_deep_green">Verde scuro</string>
<string name="clr_lime">Lime</string>
<string name="clr_yellow">Giallo</string>
<string name="clr_orange">Arancione</string>
<string name="clr_orange">Arancio</string>
<string name="clr_brown">Marrone</string>
<string name="clr_grey">Grigio</string>
<!-- Format Namespace | Value formatting/plurals -->
@ -140,21 +146,22 @@
<string name="clr_dynamic">Dinamico</string>
<string name="fmt_db_pos">+%.1f dB</string>
<string name="fmt_sample_rate">%d Hz</string>
<string name="fmt_indexing">Caricamento della tua libreria musicale… (%1$d/%2$d)</string>
<string name="set_play_in_parent_with">Quando riproduci dai dettagli di un elemento</string>
<string name="set_pre_amp_warning">Attenzione: impostare alti valori positivi può provocare la distorsione di alcune tracce.</string>
<string name="fmt_indexing">Caricamento libreria musicale… (%1$d/%2$d)</string>
<string name="set_play_in_parent_with">Quando in riproduzione dai dettagli dell\'elemento</string>
<string name="set_pre_amp_warning">Attenzione: impostare valore positivi alti può provocare distorsioni su alcune tracce.</string>
<string name="set_pre_amp_without">Regolazione senza tag</string>
<string name="lbl_shuffle_shortcut_short">Casuale</string>
<string name="lbl_shuffle_shortcut_long">Tutto in casuale</string>
<string name="set_pre_amp_with">Regolazione in base ai tag</string>
<string name="lbl_shuffle_shortcut_short">Mescola</string>
<string name="lbl_shuffle_shortcut_long">Mescola tutto</string>
<string name="set_pre_amp_with">Regolazione con tag</string>
<string name="set_pre_amp_desc">Il pre-amp è applicato alla regolazione esistente durante la riproduzione</string>
<string name="set_play_song_none">Riproduci dall\'elemento corrente</string>
<string name="set_play_song_none">Riproduci dall\'elemento mostrato</string>
<string name="set_locations_desc">Gestisci le cartelle da dove caricare la musica</string>
<string name="set_locations">Cartelle musicali</string>
<string name="set_locations">Cartelle musica</string>
<string name="cdc_mka">Matroska audio</string>
<string name="cdc_flac">Free Lossless Audio Codec (FLAC)</string>
<string name="cdc_aac">Advanced Audio Coding (AAC)</string>
<string name="fmt_disc_no">Disco %d</string>
<string name="fmt_bitrate">%d kbps</string>
<string name="fmt_bitrate">%d kB/s</string>
<string name="fmt_db_neg">-%.1f dB</string>
<string name="lbl_indexer">Caricamento musica</string>
<string name="lng_indexing">Caricamento libreria musicale…</string>
@ -164,18 +171,18 @@
<string name="lbl_track">Traccia</string>
<string name="lbl_ok">OK</string>
<string name="lbl_sample_rate">Frequenza di campionamento</string>
<string name="lbl_song_detail">Visualizza proprietà</string>
<string name="lbl_song_detail">Vedi proprietà</string>
<string name="lbl_props">Proprietà brano</string>
<string name="lbl_format">Formato</string>
<string name="lbl_size">Dimensione</string>
<string name="lbl_bitrate">Velocità in bit</string>
<string name="lbl_cancel">Annulla</string>
<string name="lbl_bitrate">Bitrate</string>
<string name="lbl_cancel">Cancella</string>
<string name="set_pre_amp">Pre-amp ReplayGain</string>
<string name="lng_observing">Sto monitorando i cambiamenti nella tua libreria musicale…</string>
<string name="set_observing_desc">Ricarica la tua libreria musicale se subisce cambiamenti (richiede notifica persistente)</string>
<string name="lbl_indexing">Caricamento musica</string>
<string name="lbl_observing">Monitoraggio libreria musicale</string>
<string name="lbl_date_added">Data di aggiunta</string>
<string name="lbl_date_added">Data aggiunta</string>
<string name="set_observing">Ricaricamento automatico</string>
<string name="lbl_eps">EP</string>
<string name="lbl_ep">EP</string>
@ -190,32 +197,32 @@
<string name="lbl_single_live">Singolo live</string>
<string name="lbl_album_live">Album live</string>
<string name="lbl_ep_live">EP live</string>
<string name="lbl_compilation">Compilation</string>
<string name="lbl_compilation">Raccolta</string>
<string name="lbl_soundtracks">Colonne sonore</string>
<string name="lbl_single_remix">Singolo remix</string>
<string name="lbl_compilations">Compilation</string>
<string name="lbl_compilations">Raccolte</string>
<string name="lbl_soundtrack">Colonna sonora</string>
<string name="lbl_equalizer">Equalizzatore</string>
<string name="desc_queue_bar">Apri la coda</string>
<string name="lbl_genre">Genere</string>
<string name="set_bar_action">Personalizza azione barra di riproduzione</string>
<string name="set_action_mode_next">Passa al brano successivo</string>
<string name="set_bar_action">Azione personalizzata barra di riproduzione</string>
<string name="set_action_mode_next">Vai alla prossima</string>
<string name="set_action_mode_repeat">Modalità ripetizione</string>
<string name="desc_exit">Interrompi la riproduzione</string>
<string name="desc_exit">Interrompi riproduzione</string>
<string name="set_hide_collaborators">Nascondi collaboratori</string>
<string name="set_hide_collaborators_desc">Mostra solo gli artisti che appaiono esplicitamente nei riconoscimenti di un album (funziona meglio su librerie ben taggate)</string>
<string name="set_hide_collaborators_desc">Mostra solo artisti che sono direttamente accreditati in un album (funziona meglio su librerie ben taggate)</string>
<string name="set_cover_mode">Copertine album</string>
<string name="set_cover_mode_off">Disattiva copertine</string>
<string name="set_cover_mode_balanced">Media qualità</string>
<string name="set_exclude_non_music">Escludi i file non musicali</string>
<string name="set_exclude_non_music_desc">Ignora i file audio non musicali, come i podcast</string>
<string name="set_cover_mode_off">Off</string>
<string name="set_cover_mode_balanced">Veloce</string>
<string name="set_exclude_non_music">Escludi file non musicali</string>
<string name="set_exclude_non_music_desc">Ignora file audio non musicali, come i podcast</string>
<string name="set_separators">Separatori multi-valore</string>
<string name="set_separators_desc">Configura i caratteri che identificano tag con valori multipli</string>
<string name="set_separators_desc">Configura caratteri che indicano valori multipli di tag</string>
<string name="set_separators_slash">Barra (/)</string>
<string name="set_separators_warning">Attenzione: potrebbero verificarsi degli errori nell\'interpretazione di alcuni tag con valori multipli. Puoi risolvere questo problema aggiungendo come prefisso una barra rovesciata (\\) ai separatori indesiderati.</string>
<string name="set_separators_warning">Attenzione: potrebbero verificarsi degli errori nella interpretazione di alcuni tag con valori multipli. Puoi risolvere aggiungendo come prefisso la barra rovesciata (\\) ai separatori indesiderati.</string>
<string name="set_separators_and">E commerciale (&amp;)</string>
<string name="lbl_compilation_live">Compilation live</string>
<string name="lbl_compilation_remix">Compilation remix</string>
<string name="lbl_compilation_live">Raccolte live</string>
<string name="lbl_compilation_remix">Raccolta remix</string>
<string name="lbl_mixes">Mix DJ</string>
<string name="lbl_mix">Mix DJ</string>
<string name="set_cover_mode_high_quality">Alta qualità</string>
@ -235,25 +242,26 @@
<string name="fmt_list">%1$s, %2$s</string>
<string name="lbl_reset">Ripristina</string>
<string name="set_behavior">Comportamento</string>
<string name="set_locations_list">Cartelle</string>
<string name="set_music">Musica</string>
<string name="set_images">Immagini</string>
<string name="set_library">Libreria</string>
<string name="set_library">Collezione</string>
<string name="set_ui_desc">Cambia il tema e i colori dell\'app</string>
<string name="set_content_desc">Controlla come vengono caricate musica e immagini</string>
<string name="set_replay_gain">Normalizzazione del volume</string>
<string name="set_playback">Riproduzione</string>
<string name="set_personalize_desc">Personalizza i controlli e il comportamento dell\'interfaccia</string>
<string name="set_audio_desc">Suono e riproduzione</string>
<string name="lbl_sort_dsc">Decrescente</string>
<string name="set_personalize_desc">Personalizza controlli e comportamento dell\'UI</string>
<string name="set_audio_desc">Configura comportamento di suono e riproduzione</string>
<string name="lbl_sort_dsc">Discendente</string>
<string name="lbl_playlist">Playlist</string>
<string name="lbl_playlists">Playlist</string>
<string name="set_intelligent_sorting">Ordinamento intelligente</string>
<string name="set_intelligent_sorting_desc">Ordina correttamente i titoli che iniziano con numeri o parole come \"the\" (funziona meglio con i titoli in inglese)</string>
<string name="set_intelligent_sorting">Ordinazione intelligente</string>
<string name="set_intelligent_sorting_desc">Ordina correttamente i nomi che iniziano con numeri o parole come \"the\" (funziona meglio con i titoli in inglese)</string>
<string name="desc_playlist_image">Immagine della playlist per %s</string>
<string name="lbl_new_playlist">Nuova playlist</string>
<string name="lbl_playlist_add">Aggiungi alla playlist</string>
<string name="lbl_playlist_add">Aggiungi a playlist</string>
<string name="lng_playlist_created">Playlist creata</string>
<string name="lng_playlist_added">Aggiunto alla playlist</string>
<string name="lng_playlist_added">Aggiunto a playlist</string>
<string name="def_song_count">Nessun brano</string>
<string name="fmt_def_playlist">Playlist %d</string>
<string name="lbl_delete">Elimina</string>
@ -266,30 +274,31 @@
<string name="lng_playlist_renamed">Playlist rinominata</string>
<string name="lbl_share">Condividi</string>
<string name="def_disc">Nessun disco</string>
<string name="lbl_appears_on">Appare in</string>
<string name="fmt_editing">Modificando %s</string>
<string name="lbl_appears_on">Appare su</string>
<string name="fmt_editing">Modifica di %s</string>
<string name="set_square_covers">Forza copertine album quadrate</string>
<string name="set_square_covers_desc">Adatta tutte le copertine degli album ad una visualizzazione 1:1</string>
<string name="lbl_song">Brano</string>
<string name="lbl_parent_detail">Visualizza</string>
<string name="set_play_song_by_itself">Riproduci solo il brano</string>
<string name="set_play_song_by_itself">Riproduci brano da solo</string>
<string name="lbl_sort_mode">Ordina per</string>
<string name="lbl_imported_playlist">Playlist esterna</string>
<string name="lbl_imported_playlist">Playlist importata</string>
<string name="err_export_failed">Impossibile esportare la playlist in questo file</string>
<string name="lbl_sort_direction">Ordine</string>
<string name="desc_selection_image">Selezione immagine</string>
<string name="lbl_sort_direction">Direzione</string>
<string name="lbl_show_error_info">Espandi</string>
<string name="desc_selection_image">Immagine di selezione</string>
<string name="lbl_selection">Selezione</string>
<string name="lbl_copied">Copiato</string>
<string name="lbl_report">Segnala</string>
<string name="lbl_author">Autore</string>
<string name="lbl_donate">Dona</string>
<string name="lbl_supporters">Sostenitori</string>
<string name="lbl_supporters">Supporti</string>
<string name="lbl_error_info">Informazioni sull\'errore</string>
<string name="def_album_count">Nessun album</string>
<string name="lbl_path">Percorso</string>
<string name="lbl_empty_playlist">Playlist vuota</string>
<string name="lbl_import_playlist">Importa playlist</string>
<string name="lng_supporters_promo">Dona al progetto, il tuo nome sarà aggiunto qui!</string>
<string name="lng_supporters_promo">Dona al progetto; il tuo nome sarà aggiunto qui!</string>
<string name="err_import_failed">Impossibile importare una playlist da questo file</string>
<string name="lbl_import">Importa</string>
<string name="lbl_export">Esporta</string>
@ -300,7 +309,7 @@
<string name="lbl_windows_paths">Usa percorsi compatibili con Windows</string>
<string name="lng_playlist_imported">Playlist importata</string>
<string name="lng_playlist_exported">Playlist esportata</string>
<string name="set_replay_gain_mode_off">Disattivato</string>
<string name="set_replay_gain_mode_off">Spento</string>
<string name="lbl_demo">Demo</string>
<string name="lbl_demos">Demo</string>
<string name="lbl_replaygain_track">Regolazione traccia ReplayGain</string>
@ -308,24 +317,5 @@
<string name="set_remember_pause">Ricorda pausa</string>
<string name="set_remember_pause_desc">Mantiene riproduzione/pausa durante il cambio di brano e la modifica della coda di riproduzione</string>
<string name="lbl_start_playback">Avvia la riproduzione</string>
<string name="lng_tasker_start">Avvia Auxio utilizzando le ultime impostazioni di riproduzione salvate. Se non è disponibile alcuna impostazione di riproduzione, i brani verranno riprodotti in ordine casuale. La riproduzione inizierà immediatamente.\n\nAttenzione: fai attenzione a controllare questa impostazione; se lo chiudi e poi provi a usarlo di nuovo, è probabile che l\'app si blocchi.</string>
<string name="lbl_music_sources">Scegli le cartelle</string>
<string name="lbl_feedback">Feedback</string>
<string name="lbl_email">Invia un\'email</string>
<string name="lbl_github">Apri un\'issue su GitHub</string>
<string name="def_album">Album sconosciuto</string>
<string name="lng_empty_genres">I tuoi generi appariranno qui.</string>
<string name="lng_empty_songs">I tuoi brani appariranno qui.</string>
<string name="lng_empty_artists">I tuoi artisti appariranno qui.</string>
<string name="lng_empty_albums">I tuoi album appariranno qui.</string>
<string name="lng_empty_playlists">Le tue playlist appariranno qui.</string>
<string name="lbl_more">Espandi</string>
<string name="set_locations_new">Nuova cartella</string>
<string name="set_cover_mode_save_space">Bassa qualità</string>
<string name="cnt_mp4">MPEG-4 contenente %s</string>
<string name="cdc_alac">Apple Lossless Audio Codec (ALAC)</string>
<string name="cdc_unknown">Sconosciuto</string>
<string name="set_cover_mode_as_is">Qualità originale</string>
<string name="set_with_hidden_desc">Include file audio nascosti (per esempio in .cache)</string>
<string name="set_with_hidden">Includi file nascosti</string>
<string name="lng_tasker_start">Avvia Auxio utilizzando le ultime impostazioni di riproduzione salvate. Se non è disponibile alcuna impostazione di riproduzione, i brani verranno riprodotti in ordine casuale. La riproduzione inizierà immediatamente.\n\nATTENZIONE: stare attenti quando si usa questa impostazione, se viene chiusa e poi si cerca di usarla nuovamente, si rischia di mandare l\'applicazione in blocco.</string>
</resources>

View file

@ -55,6 +55,7 @@
<string name="lbl_cancel">ביטול</string>
<string name="lbl_save">שמירה</string>
<string name="lbl_reset">אתחול</string>
<string name="lbl_add">הוספה</string>
<string name="lbl_version">גרסה</string>
<string name="lbl_code">קוד מקור</string>
<string name="lbl_wiki">ויקי</string>
@ -155,6 +156,7 @@
<string name="set_pre_amp_desc">המגבר מוחל על ההתאמה הקיימת בזמן השמעה</string>
<string name="lbl_new_playlist">רשימת השמעה חדשה</string>
<string name="lbl_playlist_add">הוספה לרשימת השמעה</string>
<string name="lbl_grant">הענק</string>
<string name="lbl_playlist">רשימת השמעה (פלייליסט)</string>
<string name="lbl_playlists">רשימות השמעה</string>
<string name="lbl_delete">מחיקה</string>
@ -166,6 +168,7 @@
<string name="set_locations">תיקיות מוזיקה</string>
<string name="set_reindex_desc">טעינה מחדש של ספריית המוזיקה, במידה וניתן ייעשה שימוש בתגיות מהמטמון</string>
<string name="set_rescan">סריקת מוסיקה מחדש</string>
<string name="err_no_perms"> Auxio צריך הרשאות על מנת לקרוא את ספריית המוזיקה שלך</string>
<string name="desc_queue_bar">פתיחת התור</string>
<string name="fmt_lib_total_duration">משך כולל: %s</string>
<string name="fmt_def_playlist">רשימת השמעה %d</string>
@ -175,6 +178,7 @@
<string name="fmt_lib_genre_count">ז\'אנרים טעונים: %d</string>
<string name="set_library">ספריה</string>
<string name="err_no_app">לא נמצא יישום שיכול לטפל במשימה זו</string>
<string name="err_no_locations">אין תיקיות</string>
<string name="err_bad_location">תיקייה זו אינה נתמכת</string>
<string name="desc_skip_prev">דילוג לשיר האחרון</string>
<string name="desc_change_repeat">שינוי מצב חזרה</string>
@ -199,12 +203,14 @@
<string name="def_song_count">אין שירים</string>
<string name="clr_pink">ורוד</string>
<string name="lng_playlist_created">נוצרה רשימת השמעה</string>
<string name="set_locations_list">תיקיות</string>
<plurals name="fmt_artist_count">
<item quantity="one">אומן אחד</item>
<item quantity="two">שני אומנים</item>
<item quantity="other">%d אומנים</item>
</plurals>
<string name="set_reindex">רענון מוזיקה</string>
<string name="err_no_music">לא נמצאה מוזיקה</string>
<string name="err_index_failed">אירע כשל בטעינה מוזיקה</string>
<string name="desc_no_cover">עטיפת אלבום</string>
<plurals name="fmt_song_count">
@ -220,6 +226,7 @@
<string name="lng_playlist_renamed">שונה שם רשימת ההשמעה</string>
<string name="lng_playlist_deleted">רשימת השמעה נמחקה</string>
<string name="lng_playlist_added">נוסף לרשימת השמעה</string>
<string name="desc_shuffle_all">ערבוב כל השירים</string>
<string name="desc_auxio_icon">סמל Auxio</string>
<string name="desc_music_location_delete">הסרת תיקייה</string>
<string name="desc_playlist_image">תמונת רשימת השמעה עבור %s</string>
@ -255,6 +262,7 @@
<string name="clr_teal">טורקיז</string>
<string name="clr_brown">חום</string>
<string name="fmt_selected">%d נבחרו</string>
<string name="lbl_show_error_info">עוד</string>
<string name="lbl_selection">בחירה</string>
<string name="lbl_error_info">מידע על השגיאה</string>
<string name="lbl_report">דיווח</string>
@ -267,6 +275,7 @@
<string name="fmt_sample_rate">%d הרץ (Hz)</string>
<string name="fmt_bitrate">%d קילוביטים לשנייה (kbps)</string>
<string name="lbl_copied">מועתק</string>
<string name="cdc_mka">אודיו Matroska</string>
<string name="cdc_aac">קודק אודיו מתקדם (AAC)</string>
<string name="fmt_list">%1$s, %2$s</string>
<string name="clr_lime">ליים</string>

View file

@ -2,6 +2,7 @@
<resources>
<string name="lbl_retry">再試行</string>
<string name="info_app_desc">Android 用のシンプルで合理的な音楽プレーヤー。</string>
<string name="lbl_grant">許可する</string>
<string name="lbl_artists">アーティスト</string>
<string name="lbl_genres">ジャンル</string>
<string name="lbl_duration">曲の長さ</string>
@ -25,10 +26,12 @@
<string name="lbl_date">日付け</string>
<string name="set_cover_mode_high_quality">高クオリティ</string>
<string name="set_round_mode">ラウンドモード</string>
<string name="err_no_music">音楽が見つかりません</string>
<string name="err_index_failed">音楽の読み込みに失敗</string>
<string name="cdc_ogg">Ogg オーディオ</string>
<string name="clr_cyan">シアン</string>
<string name="clr_deep_blue"></string>
<string name="lbl_add">追加</string>
<string name="lbl_save">保存</string>
<string name="lng_search_library">ライブラリ検索…</string>
<string name="set_theme_night">暗い</string>
@ -75,6 +78,8 @@
<string name="set_replay_gain_mode_track">トラックを優先</string>
<string name="set_locations_desc">音楽の読み込み元を管理</string>
<string name="set_reindex">音楽の再読み込み</string>
<string name="err_no_perms">Auxio は音楽ライブラリを読む許可を必要とします</string>
<string name="err_no_locations">フォルダがありません</string>
<string name="err_bad_location">このフォルダはサポートされていません</string>
<string name="desc_track_number">トラック %d</string>
<string name="desc_play_pause">再生またはポーズ</string>
@ -144,6 +149,7 @@
<string name="err_no_app">このタスクを実行できるアプリが見つかりません</string>
<string name="set_content">コンテンツ</string>
<string name="set_rescan">音楽の再スキャン</string>
<string name="cdc_mka">Matroska オーディオ</string>
<string name="cdc_aac">高度なオーディオ コーデック (AAC)</string>
<string name="cdc_flac">品質を損なうことのない無料のオーディオ コーデック (FLAC)</string>
<string name="clr_grey">グレイ</string>
@ -170,11 +176,13 @@
<string name="set_repeat_pause">ポーズと繰り返し</string>
<string name="set_library">ライブラリ</string>
<string name="set_pre_amp_without">タグ無しで調整</string>
<string name="set_locations_list">フォルダ</string>
<string name="set_separators_semicolon">セミコロン (;)</string>
<string name="set_separators_slash">スラッシュ (/)</string>
<string name="desc_change_repeat">繰り返しモードを変更</string>
<string name="desc_shuffle">シャフルのオン・オフ</string>
<string name="desc_skip_next">次の曲にスキップ</string>
<string name="desc_shuffle_all">すべての曲をシャフル</string>
<string name="fmt_sample_rate">%d ヘルツ</string>
<string name="fmt_bitrate">%d kbps</string>
<string name="set_pre_amp_with">タグで調整</string>

View file

@ -1,104 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="lbl_retry">გამეორება</string>
<string name="lbl_ep">EP</string>
<string name="info_app_desc">მარტივი და სასიამოვნო მუსიკის დამკვრელი Android-სთვის.</string>
<string name="lbl_song">სიმღერა</string>
<string name="lbl_ep_remix">EP-ის რემიქსი</string>
<string name="lbl_indexing">მუსიკის ჩატვირთვა</string>
<string name="lbl_songs">სიმღერები</string>
<string name="lbl_observing">მუსიკის ბიბლიოთეკის მონიტორინგი</string>
<string name="lbl_albums">ალბომები</string>
<string name="lbl_eps">EP-ები</string>
<string name="lbl_all_songs">ყველა სიმღერა</string>
<string name="lbl_album">ალბომი</string>
<string name="lbl_music_sources">შეარჩიე საქაღალდეები</string>
<string name="lbl_indexer">მუსიკის ჩატვირთვა</string>
<string name="lbl_ep_live">პირდაპირი EP</string>
<string name="lbl_singles">სინგლები</string>
<string name="lbl_single">სინგლი</string>
<string name="lbl_album_live">Live ალბომები</string>
<string name="lbl_album_remix">Remix ალბომები</string>
<string name="lbl_artist">არტისტი</string>
<string name="lbl_artists">არტისტები</string>
<string name="lbl_genre">ჟანრი</string>
<string name="lbl_genres">ჟანრები</string>
<string name="lbl_playlist">დასაკრავი სია</string>
<string name="lbl_playlists">დასაკრავი სიები</string>
<string name="lbl_new_playlist">ახალი დასაკრავი სია</string>
<string name="lbl_empty_playlist">ცარიელი დასაკრავი სია</string>
<string name="lbl_import">იმპორტი</string>
<string name="lbl_export">ექსპორტი</string>
<string name="lbl_rename">სახელის გადარქმევა</string>
<string name="lbl_imported_playlist">დასაკრავი სია იმპორტირებულია</string>
<string name="lbl_import_playlist">დასაკრავი სიის იმპორტი</string>
<string name="lbl_export_playlist">დასაკრავი სიის ექსპორტი</string>
<string name="lbl_delete">წაშლა</string>
<string name="lbl_confirm_delete_playlist">დასაკრავი სიის წაშლა ?</string>
<string name="lbl_edit">ჩასწორება</string>
<string name="lbl_search">ძებნა</string>
<string name="lbl_filter">ფილტრი</string>
<string name="lbl_filter_all">ყველა</string>
<string name="lbl_name">სახელი</string>
<string name="lbl_rename_playlist">დასაკრავი სიის სახელის შეცვლა</string>
<string name="lbl_date">თარიღი</string>
<string name="lbl_duration">ხანგრძლივობა</string>
<string name="lbl_date_added">დამატების თარიღი</string>
<string name="lbl_sort">დაალაგე</string>
<string name="lbl_song_count">სიმღერების რაოდენობა</string>
<string name="lbl_sort_mode">დაალაგე</string>
<string name="lbl_sort_asc">ზრდადობით</string>
<string name="lbl_sort_dsc">კლებადობით</string>
<string name="lbl_sort_direction">მიხედვით</string>
<string name="lbl_play">დაკვრა</string>
<string name="lbl_playback">ეხლა იკვრება</string>
<string name="lbl_play_next">შემდეგი</string>
<string name="lbl_playlist_add">დამკვრელი სიაში დამატება</string>
<string name="lbl_artist_details">არტისტის ნახვა</string>
<string name="lbl_album_details">ალბომის ნახვა</string>
<string name="lbl_queue">რიგი</string>
<string name="lbl_shuffle">შემთხვევითი მუსიკა</string>
<string name="lbl_share">გაზიარება</string>
<string name="lbl_format">ფორმატი</string>
<string name="lbl_parent_detail">ნახვა</string>
<string name="lbl_props">სიმღერის პარამეტრები</string>
<string name="lbl_song_detail">პარამეტრების ნახვა</string>
<string name="lbl_size">ზომა</string>
<string name="lbl_more">მეტი</string>
<string name="lbl_cancel">გაუქმება</string>
<string name="lbl_save">შენახვა</string>
<string name="lbl_version">ვერსია</string>
<string name="lbl_about">აპლიკაციის შესახებ</string>
<string name="lbl_copied">დაკოპირებულია</string>
<string name="lbl_author">ავტორი</string>
<string name="lbl_error_info">ინფორმაცია</string>
<string name="lbl_feedback">უკუკავშირი</string>
<string name="lbl_email">ელექტრონული შეტყობინების გაგზავნა</string>
<string name="lbl_donate">დონაცია</string>
<string name="lng_indexing">სიმღერების ჩატვირთვა…</string>
<string name="lng_queue_added">დაამატე რიგში</string>
<string name="lng_playlist_imported">დასაკრავი სია იმპორტირებულია</string>
<string name="lng_playlist_renamed">დასაკრავი სიის სახელი შეცვლილია</string>
<string name="lng_search_library">ძებნა თქვენს ბიბლიოთეკაში…</string>
<string name="lng_empty_albums">ალბომები აქ გამოჩნდება.</string>
<string name="lng_empty_artists">არტისტები აქ გამოჩნდება.</string>
<string name="set_theme">თემა</string>
<string name="set_theme_day">ღია</string>
<string name="set_theme_night">მუქი</string>
<string name="set_black_mode">შავი თემა</string>
<string name="set_action_mode_next">შემდეგზე გადასვლა</string>
<string name="set_play_song_from_all">ყველა სიმღერის დაკვრა</string>
<string name="lng_playlist_deleted">დასაკრავი სია წაშლილია</string>
<string name="lng_playlist_exported">დასაკრავი სია ექსპორტირებულია</string>
<string name="lng_playlist_created">დასაკრავი სია შექმნილია</string>
<string name="lng_playlist_added">დამატებულია დასაკრავი სიაში</string>
<string name="set_theme_auto">ავტომატური</string>
<string name="lng_empty_songs">სიმღერები აქ გამოჩნდება.</string>
<string name="set_root_title">პარამეტრები</string>
<string name="set_accent">ფერები</string>
<string name="set_observing">ავტომატური ჩატვირთვა</string>
<string name="set_images">სურათები</string>
<string name="set_locations">მუსიკის საქაღალდე</string>
<string name="set_locations_new">ახალი საქაღალდე</string>
<string name="desc_skip_prev">ბოლო სიმღერაზე გადასვლა</string>
</resources>

View file

@ -5,6 +5,7 @@
<string name="lng_widget">음악 재생 제어 및 상태 확인</string>
<!-- Label Namespace | Static Labels -->
<string name="lbl_retry">다시 시도</string>
<string name="lbl_grant">허용</string>
<string name="lbl_genres">장르</string>
<string name="lbl_artists">아티스트</string>
<string name="lbl_albums">앨범</string>
@ -39,6 +40,7 @@
<string name="lbl_ok">확인</string>
<!-- Actual string: Cancel -->
<string name="lbl_cancel">취소</string>
<string name="lbl_add">추가</string>
<string name="lbl_save">저장</string>
<string name="lbl_about">정보</string>
<string name="lbl_version">버전</string>
@ -86,8 +88,11 @@
<string name="set_reindex">음악 새로고침</string>
<string name="set_reindex_desc">캐시된 태그를 사용하여 음악 라이브러리를 다시 불러옵니다.</string>
<!-- Error Namespace | Error Labels -->
<string name="err_no_music">음악 없음</string>
<string name="err_index_failed">음악 불러오기 실패</string>
<string name="err_no_perms">앱에서 음악 라이브러리를 읽을 수 있는 권한이 필요합니다.</string>
<string name="err_no_app">이 작업을 처리할 수 있는 앱을 찾을 수 없습니다.</string>
<string name="err_no_locations">폴더 없음</string>
<string name="err_bad_location">지원하지 않는 폴더입니다</string>
<!-- Hint Namespace | EditText Hints -->
<string name="lng_search_library">라이브러리에서 검색…</string>
@ -98,6 +103,7 @@
<string name="desc_skip_prev">마지막 곡으로 건너뛰기</string>
<string name="desc_change_repeat">반복 방식 변경</string>
<string name="desc_shuffle">무작위 재생 켜기 또는 끄기</string>
<string name="desc_shuffle_all">모든 곡 무작위 재생</string>
<string name="desc_remove_song">이 곡 제거</string>
<string name="desc_song_handle">이 곡 이동</string>
<string name="desc_tab_handle">이 탭 이동</string>
@ -157,6 +163,7 @@
<string name="lbl_shuffle_shortcut_long">모두 무작위 재생</string>
<string name="desc_exit">재생 중지</string>
<string name="cdc_ogg">Ogg 오디오</string>
<string name="cdc_mka">Matroska 오디오</string>
<string name="fmt_sample_rate">%d Hz</string>
<string name="lbl_mix">DJ믹스</string>
<string name="lbl_compilation_live">라이브 컴필레이션</string>
@ -233,6 +240,7 @@
<string name="set_replay_gain">ReplayGain 볼륨 조정</string>
<string name="set_audio_desc">사운드 및 재생 동작 구성</string>
<string name="set_playback">재생</string>
<string name="set_locations_list">폴더</string>
<string name="set_ui_desc">앱 테마 및 색상 변경</string>
<string name="set_music">음악</string>
<string name="set_library">라이브러리</string>
@ -273,6 +281,7 @@
<string name="lbl_sort_mode">정렬 기준</string>
<string name="desc_selection_image">선택 이미지</string>
<string name="lbl_selection">선택</string>
<string name="lbl_show_error_info">더 보기</string>
<string name="lbl_copied">복사했습니다.</string>
<string name="lbl_report">오류 보고</string>
<string name="lbl_error_info">오류 정보</string>

View file

@ -38,6 +38,7 @@
<string name="lbl_props">Dainos ypatybės</string>
<string name="lbl_save">Išsaugoti</string>
<string name="lbl_about">Apie</string>
<string name="lbl_add">Pridėti</string>
<string name="set_ui">Išvaizda ir pojūtis</string>
<string name="lbl_format">Formatas</string>
<string name="lbl_version">Versija</string>
@ -49,6 +50,7 @@
<string name="lng_widget">Peržiūrėk ir valdyk muzikos įrašo perklausą</string>
<string name="lbl_genres">Žanrai</string>
<string name="lbl_retry">Pakartoti</string>
<string name="lbl_grant">Suteikti</string>
<string name="lbl_indexing">Įkeliama muzika</string>
<string name="lng_indexing">Įkeliamas tavo muzikos biblioteka…</string>
<string name="lbl_library_counts">Bibliotekos statistika</string>
@ -112,6 +114,7 @@
<string name="lbl_ep_live">Gyvai mini albumas</string>
<string name="lbl_ep_remix">Remikso mini albumas</string>
<string name="cdc_mp4">MPEG-4 garsas</string>
<string name="cdc_mka">Matroska garsas</string>
<string name="lbl_album_live">Gyvai albumas</string>
<string name="lbl_album_remix">Remikso albumas</string>
<string name="lbl_live_group">Gyvai</string>
@ -119,6 +122,7 @@
<string name="cdc_ogg">Ogg garsas</string>
<string name="lbl_author_name">Aleksandras Keiphartas (angl. Alexander Capehart)</string>
<string name="set_replay_gain_mode_track">Pageidauti takeliui</string>
<string name="err_no_locations">Nėra aplankų</string>
<string name="err_bad_location">Šis aplankas nepalaikomas.</string>
<string name="desc_play_pause">Leisti arba pristabdyti</string>
<string name="desc_skip_next">Praleisti į kitą dainą</string>
@ -134,6 +138,7 @@
<string name="desc_song_handle">Perkelti šią dainą</string>
<string name="desc_tab_handle">Perkelti šį skirtuką</string>
<string name="err_index_failed">Nepavyko įkelti muzikos.</string>
<string name="err_no_perms">„Auxio“ reikia leidimo skaityti tavo muzikos biblioteką.</string>
<string name="fmt_disc_no">%d diskas</string>
<string name="fmt_db_pos">+%.1f dB</string>
<string name="fmt_db_neg">-%.1f dB</string>
@ -154,6 +159,7 @@
<string name="lng_search_library">Ieškok savo bibliotekoje…</string>
<string name="lbl_equalizer">Ekvalaizeris</string>
<string name="set_observing">Automatinis perkėlimas</string>
<string name="err_no_music">Muzika nerasta.</string>
<string name="desc_exit">Sustabdyti įrašo perklausą</string>
<string name="def_track">Nėra takelio</string>
<string name="set_action_mode_next">Praleisti į kitą</string>
@ -173,6 +179,7 @@
<string name="fmt_lib_album_count">Įkelti albumai: %d</string>
<string name="fmt_lib_artist_count">Įkelti atlikėjai: %d</string>
<string name="fmt_indexing">Įkėliamas tavo muzikos biblioteka… (%1$d/%2$d)</string>
<string name="desc_shuffle_all">Maišyti visas dainas</string>
<string name="set_personalize">Suasmeninti</string>
<string name="set_pre_amp_warning">Įspėjimas: keičiant išankstinį stiprintuvą į didelę teigiamą reikšmę, kai kuriuose garso takeliuose gali atsirasti tarpų.</string>
<string name="desc_album_cover">Albumo viršelis %s</string>
@ -238,6 +245,7 @@
<string name="set_images">Vaizdai</string>
<string name="set_playback">Įrašo perklausa</string>
<string name="set_replay_gain">Garso normalizavimas</string>
<string name="set_locations_list">Aplankai</string>
<string name="lbl_sort_dsc">Mažėjantis</string>
<string name="set_intelligent_sorting_desc">Teisingai surūšiuok pavadinimus, kurie prasideda skaičiais arba žodžiais, tokiais kaip „the“ (geriausiai veikia su anglų kalbos muzika).</string>
<string name="set_intelligent_sorting">Išmanusis rūšiavimas</string>
@ -273,6 +281,7 @@
<string name="lbl_selection">Pasirinkimas</string>
<string name="lbl_error_info">Klaidos informacija</string>
<string name="lbl_copied">Nukopijuota</string>
<string name="lbl_show_error_info">Daugiau</string>
<string name="lbl_report">Pranešti</string>
<string name="def_album_count">Nėra albumų</string>
<string name="lbl_demo">Demo versija</string>
@ -306,22 +315,4 @@
\nĮSPĖJIMAS: būk atsargus (-i) valdant šią paslaugą, jei ją uždarysi ir vėl bandysi naudoti, tikriausiai sutriks programėlė.</string>
<string name="lbl_start_playback">Paleisti įrašo perklausą</string>
<string name="lbl_more">Daugiau</string>
<string name="lbl_feedback">Atsiliepimai</string>
<string name="lbl_github">Sukurti problemą svetainėje „GitHub“</string>
<string name="cnt_mp4">MPEG-4, kuriame yra %s</string>
<string name="def_album">Nežinomas albumas</string>
<string name="lng_empty_songs">Čia bus rodomos jūsų dainos.</string>
<string name="lng_empty_albums">Čia bus rodomi jūsų albumai.</string>
<string name="lng_empty_artists">Čia bus rodomi jūsų atlikėjai.</string>
<string name="lng_empty_playlists">Čia bus rodomi jūsų grojaraščiai.</string>
<string name="lng_empty_genres">Čia bus rodomi jūsų žanrai.</string>
<string name="lbl_music_sources">Pasirinkti aplankus</string>
<string name="lbl_email">Siųsti el. laišką</string>
<string name="set_locations_new">Naujas aplankas</string>
<string name="cdc_alac">„Apple“ be nuostolių garso kodekas (ALAC)</string>
<string name="cdc_unknown">Nežinomas</string>
<string name="set_cover_mode_save_space">Išsaugoti vietos</string>
<string name="set_cover_mode_as_is">Kaip yra</string>
<string name="set_with_hidden">Įtraukti paslėptus failus</string>
<string name="set_with_hidden_desc">Įtraukite garso failus, kurie paslėpti (pvz., .cache)</string>
</resources>

View file

@ -3,6 +3,7 @@
<string name="lbl_save">രക്ഷിക്കുക</string>
<string name="set_behavior">പെരുമാറ്റം</string>
<string name="set_content">ഉള്ളടക്കം</string>
<string name="err_no_music">സംഗീതമൊന്നും കണ്ടെത്തിയില്ല</string>
<string name="desc_queue_bar">വരി തുറക്കുക</string>
<string name="def_artist">അജ്ഞാത കലാകാരൻ</string>
<string name="clr_grey">ചാരനിറം</string>
@ -22,6 +23,7 @@
<string name="lbl_play_next">അടുത്തത് കളിക്കുക</string>
<string name="lbl_format">രൂപകല്പന</string>
<string name="lbl_size">വലിപ്പം</string>
<string name="lbl_add">ചേർക്കുക</string>
<string name="lbl_ok">ശരി</string>
<string name="lbl_cancel">റദ്ദാക്കുക</string>
<string name="set_theme_day">വെളിച്ചം</string>
@ -69,6 +71,7 @@
<string name="lbl_indexing">സംഗീതം ലോഡ് ചെയ്യുന്നു</string>
<string name="lbl_observing">സംഗീത ഗ്രന്ഥശാല നിരീക്ഷിക്കുന്നു</string>
<string name="lbl_retry">വീണ്ടും ശ്രമിക്കുക</string>
<string name="lbl_grant">അനുവദിക്കുക</string>
<string name="lbl_songs">ഗാനങ്ങൾ</string>
<string name="lbl_song_count">പാട്ടുകളുടെ എണ്ണം</string>
<string name="lbl_date_added">തീയതി ചേർത്തു</string>

View file

@ -109,6 +109,7 @@
<string name="fmt_lib_song_count">Spor innlastet: %d</string>
<string name="lbl_date">Dato</string>
<string name="set_ui_desc">Endre drakten og programfargene</string>
<string name="set_locations_list">Mapper</string>
<string name="clr_yellow">Gul</string>
<string name="set_intelligent_sorting">Intelligent sortering</string>
<string name="lbl_rename">Gi nytt navn</string>
@ -118,6 +119,7 @@
<string name="lbl_version">Versjon</string>
<string name="lbl_wiki">Wiki</string>
<string name="lbl_reset">Tilbakestill</string>
<string name="lbl_add">Legg til</string>
<string name="set_accent">Fargedrakt</string>
<string name="set_black_mode">Svart drakt</string>
<string name="set_black_mode_desc">Bruk en helsvart mørk drakt</string>
@ -134,6 +136,7 @@
<string name="set_hide_collaborators_desc">Vis kun artister som er kreditert direkte på album (fungerer best med velmerkede bibliotek)</string>
<string name="set_rescan">Reskann musikk</string>
<string name="set_reindex_desc">Last inn musikkbiblioteket igjen, ved bruk av hurtiglagrede etiketter når mulig</string>
<string name="err_no_locations">Ingen mapper</string>
<string name="fmt_lib_album_count">Album innlastet: %d</string>
<string name="lbl_library_counts">Bibliotekstatistikk</string>
<string name="set_cover_mode_off">Av</string>
@ -148,6 +151,7 @@
<string name="err_bad_location">Denne mappen støttes ikke</string>
<string name="desc_skip_next">Hopp til neste spor</string>
<string name="desc_skip_prev">Hopp til siste spor</string>
<string name="desc_shuffle_all">Omstokk alle spor</string>
<string name="desc_music_location_delete">Fjern mappe</string>
<string name="def_genre">Ukjent sjanger</string>
<string name="desc_genre_image">Sjangerbilde for %s</string>
@ -218,6 +222,7 @@
<string name="set_square_covers_desc">Beskjær alle albumomslag til 1:1-sideforhold</string>
<string name="desc_play_pause">Spill av eller pause</string>
<string name="desc_artist_image">Artistbilde for %s</string>
<string name="err_no_perms">Auxio trenger tilgang til å lese musikkbiblioteket ditt</string>
<string name="clr_pink">Rosa</string>
<string name="clr_grey">Grå</string>
<string name="fmt_editing">Redigerer %s</string>
@ -234,6 +239,7 @@
<string name="lbl_single_live">Live-singel</string>
<string name="lbl_indexing">Laster inn musikk</string>
<string name="lbl_observing">Holder øye med musikkbiblioteket</string>
<string name="lbl_grant">Bevilge</string>
<string name="lbl_singles">Singler</string>
<string name="lbl_songs">Spor</string>
<string name="lbl_album">Album</string>
@ -251,6 +257,8 @@
<string name="lng_indexing">Laster inn musikkbiblioteket ditt …</string>
<string name="set_play_in_list_with">Ved avspilling fra bibliotek</string>
<string name="set_play_song_from_artist">Spill fra artist</string>
<string name="err_no_music">Fant ikke noe musikk</string>
<string name="cdc_mka">Matroska-lyd</string>
<string name="set_play_song_none">Spill fra vist element</string>
<string name="cdc_ogg">OGG-lyd</string>
<string name="clr_deep_blue">Mørkeblå</string>
@ -278,6 +286,7 @@
<string name="err_export_failed">Kan ikke eksportere spillelisten til denne filen</string>
<string name="lbl_demo">Demo</string>
<string name="lbl_demos">Demoer</string>
<string name="lbl_show_error_info">Vis mer</string>
<string name="lbl_error_info">Feilopplysninger</string>
<string name="lbl_copied">Kopiert</string>
<string name="lbl_replaygain_album">ReplayGain-albumjustering</string>

Some files were not shown because too many files have changed in this diff Show more