
|
Rockbox is a free replacement firmware for digital music players. It runs on a wide range of players:
Stable ports
Rockbox runs well on these players, has installation instructions, and most are supported by the Rockbox Utility:
- AIGO: Eros Q / Eros K (aka HIFI WALKER H2, AGPTek H3, and Surfans F20)
- Apple: iPod 1g through 6g (Classic), iPod Mini, iPod Nano 1g, iPod Nano 2g
- Agptek: Rocker (aka Benjie T6)
- Archos: Jukebox 5000, 6000, Studio, Recorder, FM Recorder, Recorder V2 and Ondio
- Cowon: iAudio X5, X5V, X5L, M5, M5L, M3 and M3L
- Creative: Zen Mozaic,
Zen X-Fi,
Zen X-Fi 3 and
Zen X-Fi Style
- FiiO: M3K
- iriver: iHP100 series, H100 series, H300 series and H10 series
- MPIO: HD300
- Olympus: M:Robe 100
- Packard Bell: Vibe 500
- Philips: GoGear SA9200, GoGear HDD16x0 and HDD63x0
- Samsung: YH-820, YH-920 and YH-925
- SanDisk: Sansa c200, e200 and e200R series, Fuze and Fuze+, Clip, Clip+ and Clip Zip
- Shanling: Q1
- Toshiba: Gigabeat X and F series
- xDuoo: X3, X3ii, and X20
Unstable ports
Rockbox runs on these players, but is incomplete, less usable or has problems that limit it to advanced users:
- Anbernic: RG Nano
- Creative: Zen and Zen X-Fi 2
- Cowon: D2
- HiFi E.T: MA9, MA8
- HiFiMAN: HM-601, HM-602, HM-603, HM-801
- Hiby: R1, R3ProII
- iBasso: DX50, DX90
- MPIO: HD200
- Olympus: M:Robe 500
- Samsung: YP-R0, YP-R1
- SanDisk: Sansa Connect
- Sony:
NWZ-E350,
NWZ-E360,
NWZ-E370,
NWZ-E380,
NWZ-E450,
NWZ-E460,
NWZ-E470,
NWZ-E580,
NWZ-A860,
NWZ-A10,
and NW-A20 series.
- Toshiba: Gigabeat S
- iHIFI: 770, 770C, and 800
Unusable ports
Work has begun on porting Rockbox to these players, but much remains before they are usable:
- Creative: Zen V
- Onda: VX747, VX767 and VX777
- Nintendo: 3DS
- iHIFI: 760 and 960
- Google: Android (4.4 and older only)
- Rockchip: rk27xx (generic)
- Surfans: F28
Click here for a status summary of unstable and unusable ports.
Quick links:
Why should you run Rockbox?
·
Change log
·
Contribute to Rockbox
If your player is not listed above, then Rockbox does not run on it.
|
Recent activity:
|
Older news
|
|
| when | what | where | who |
|---|
| Today 18:32 |
d9b1819e0b: FS #13942 - Lua strftime os.date("%C")
|
apps/plugins/lua/include_lua/strftime.lua [diff]
|
William Wilgus |
| Today 18:24 |
24b0254d96: metadata.c small cleanup
add get_metadata_afmt function so we don't have to extra functions remove unneeded bounds check on audio_format in rbcodec_format_is_atomic() add bounds check on audio_format in get_metadata_afmt()
|
apps/buffering.c [diff]
apps/gui/skin_engine/skin_tokens.c [diff]
apps/playlist_viewer.c [diff]
apps/tagcache.c [diff]
lib/rbcodec/metadata/metadata.c [diff]
lib/rbcodec/metadata/metadata.h [diff]
|
William Wilgus |
| Yesterday 18:14 |
3cd286d8f8: metadata add audio_fmt to get_metadata_ex
tagcache.c add_tagcache() and potentially skin_tokens.c wps_playlist_percent_prepare()
make calls to probe_file_format() prior to calling get_metadata_ex resulting in some small amout of duplicated work especially in the case of add_tagcache this can add up to a lot of duplicated work
breaks out audio_fmt so these can supply the afmt other callers just supply probe_file_format(trackname) in the function call
|
apps/buffering.c [diff]
apps/gui/skin_engine/skin_tokens.c [diff]
apps/playlist_viewer.c [diff]
apps/tagcache.c [diff]
lib/rbcodec/metadata/metadata.c [diff]
lib/rbcodec/metadata/metadata.h [diff]
|
William Wilgus |
| Yesterday 17:27 |
3e08b86e4b: FixRed a824085 skin: add %pX tag checkwps, ATA builds
ata_disk_isssd() return 0 for SIMULATOR
|
apps/gui/skin_engine/skin_parser.c [diff]
apps/gui/skin_engine/skin_tokens.c [diff]
firmware/export/ata.h [diff]
|
William Wilgus |
| Yesterday 16:29 |
a824085057: skin: add %pX tag for time-based playlist progress
%pP reports playlist progress by position index, which treats every track as equally long. For playlists with tracks of unequal length -- audiobooks with chapters anywhere from two minutes to an hour are the motivating case -- position is a poor proxy for listening progress.
%pX reports the played percentage of the whole playlist by time: the summed length of all preceding tracks plus the elapsed time in the current one, relative to the playlist's total duration. It can be used as a value, in a conditional, with %if(), or as a bar tag like
%pb.
If a playlist contains more than 500 tracks or the scan is taking too long and the user aborts the tag will fallback to the behavior of %pP except the progress through the current track will be included in the returned percentage
-------------------------------------- Computing this needs every track's length, and reading metadata for every track is too slow and disk-heavy for a tag that refreshes on the WPS. Instead each track's length is estimated from its file size: the skin engine scans the playlist in the background, a batch of files each skin refresh, opening each file only to read its size (directory metadata, no header parse). Size is turned into time by calibrating one file of each type -- the first file of each extension is parsed once with get_metadata to learn its bytes-per-second, and every later file of that type reuses it. A single-format playlist, the usual audiobook case, parses exactly one file and stat's the rest.
The result is an estimate -- bitrate varies within a type, especially for VBR -- but it is cheap and accurate enough for a progress indicator, and the playing track always contributes its exact elapsed time. Per-track lengths are stored as two bytes of minutes each in a movable buffer sized to the track count and allocated only while the tag is in use; the cache is keyed on the track count and a crc of the first, middle and last filenames, so a playlist swap or reshuffle is caught. If the buffer cannot be allocated (a very large playlist on a low-memory target) the tag falls back to position-based progress.
The buffer is allocated when playback starts (and when the now-playing screen is opened with playback already active) rather than lazily on the first WPS refresh, so the one-time allocation happens at a playback boundary instead of during steady-state playback; it falls back to allocating on first use if that point is missed.
Until the scan finishes the tag does not blank: it returns an instant equal-weight estimate -- (completed tracks + fraction through the current one) / track count -- which sharpens into the size-based value as the scan fills in. So a theme can just use %pX and it is correct from the first frame, and %?pX is true whenever a playlist is loaded.
Tested on a Sansa Clip Zip and in the simulator. On a 216-track,
~745 MB single-format audiobook playlist the length scan dropped from
~4150 ms (get_metadata on every track) to ~174 ms (one parse plus 215 file-size stats), roughly 24x lighter.
|
apps/gui/skin_engine/skin_display.c [diff]
apps/gui/skin_engine/skin_parser.c [diff]
apps/gui/skin_engine/skin_render.c [diff]
apps/gui/skin_engine/skin_tokens.c [diff]
apps/gui/skin_engine/wps_internals.h [diff]
apps/playlist.c [diff]
apps/playlist.h [diff]
lib/skin_parser/tag_table.c [diff]
lib/skin_parser/tag_table.h [diff]
manual/appendix/wps_tags.tex [diff]
|
Adam N. Burke |
All commits since last release,
last four weeks,
| |
|
Page template was last modified "Tue Sep 7 00:00:02 2021" The Rockbox Crew -- Privacy Policy
|