Feedback

Helpful: Composer pictures are e.g. available from here . License information inside archive. Unpack archive e.g. in your "Pictures" folder. Alternatively try the download functionality in "Settings", section "Metadata".

The metadata editor Classical Music Tagger (F-Droid) or (older version in Play Store) can be directly called via its menu entry in the Playing List View. It also works standalone and then shows a file directory browser. If not installed, yet, starting it via menu entry will send you automatically to its Play Store entry.

The Classical Music Scanner or (older version in Play Store) and the SAF Media Scanner or (Play Store) are also supported.

Due to Google's security restrictions for Play Store since 2021, only old or functionally limited versions of some programs can be provided there.

Table of Contents

Album View
Works View
Selection View
Play List View
Playing List View
Composer View
Genre View
Performer View
Folder View
Playback
Metadata
Folders and Album Covers
Metadata Troubleshooting
What is SAF?

The Opus 1 Music Player

Really an Opus One?

The Opus 1 Music Player is the larger sister of the Unpopular Music Player so that it's more some Opus 2, but this name would not sound that nice. Basically every statement about for the first player is also true for the second one.

Currently the app can only handle locally stored files. As default it uses the (unreliable) Android functionality for album and album cover management. See below about how to reset and rebuild Android's internal database in case there are inconsistencies. Additionally it might be necessary to also reset the app's database. There is a menu item for this functionality which is accessible in the menu on the upper right corner of the display.

The First Start

If the the app has been freshly installed or its internal files have been deleted, it will request for file read access. As soon as the access is granted, the app reads every single music file on the device (using the system's media database) and stores its metadata in a private database. Depending on device and number of files this process can take a long time. However, the next start will be much faster, because only this internal database is accessed.

Some devices with Android 6 or newer deny file access after it has been both requested and granted. This Android OS bug is present e.g. in Nexus 7, but not in Nexus 5. As workaround the user could restart the program via menu entry "Rebuild Music Database…", but with version 1.50 this phenomenon is automatically detected, and a restart is offered to the user.

The Media Database

The program supports three alternative kinds of media database: first the system database, i.e. Android database, second such databases created by the Classical Music Scanner, und third those created by the SAF Media Scanner. The two last mentioned modes are signalised in the program's title text, as "DB" oder SAF.

Alternative 1: By default the program uses the Android database and derives its own, private one; here no special permissions are needed. Some disadvantages are that the Android database often is faulty or incomplete and that rebuilding the own, private database may need some time.

Alternative 2: The Classical Music Scanner creates databases similar to that one of Android, usually in the directory "ClassicalMusicDb", but without its problems and instead with all necessary information. This kind of database can be activated in the settings dialogue "Playback/Use own database", Opus 1 Music Player

.

Attention for Android 11: Here the system is so restrictive that no program is allowed to access the database or the alias file in the directory "ClassicalMusicDb", neither reading nor writing. So there are no more shareable directories in which programs are allowed to share data. At present the only solution is to grant the player full file access via the three-point menu. This in turn is prevented by Google's Play Store, i.e. the player is not allowed to be published there, if it only offers the option of asking the user for full file access. Therefore, only the version of the program published on F-Droid offers this possibility. An imperfect way to get around Google's restrictions would be to name the database file not "musicmetadata.db" but, for example, "musicmetadata.db.jpg". Google would then consider the database to be an image, which could be access to it. Unfortunately, however, one still can't access the album images, because according to Google these are not media, unlike all other images. Without full file access also the composer images cannot be downloaded automatically, and if the have been loaded manually, the alias name file cannot be read.

Regarding Android 11, internal memory and SD card can indeed be read via SAF, so one can bypass some of the restrictions. However, this is a major shortcoming of SAF, all accesses take a long time, the system "lames" even when accessing internal memory. At present, even with SAF the composers names alias file cannot be read without full file access, this behaviour might be improved in the future.

Alternative 3: Since version 2.30, music can also be played from media that are only accessible via Google's Storage Access Framework (SAF). These include USB storage devices (which are treated like SD cards with Android 9 or 10, but not with 6, 7 and 8), network shares and some "cloud" services. Note that first a media database file must be created using the program SAF Media Scanner. After done, run the Opus 1 Music Player and select the SAF base directory via the corresponding menu item. Note that this directory usually contains the folder ClassicalMusicDb, created by the scanner, from which the player copies and opens the database. In case the SAF directory is write protected, the SAF scanner stores the corresponding database in internal memory, and the player will ask for the appropriate database file (file name extension ".db").

Since version 2.40 single or multiple files can be passed to the player via the "Open with..." or "Share" functionality in any file manager application. This mechanism is based on SAF and also works with "cloud" oder server share based files. Note that currently no metadata are extracted for files passed this way, thus only the file names will be displayed. The passed files are shown in the Selection view, and from there single files can be copied to the playing list.

See the dedicated SAF chapter in this document for further, detailed information.

The menu (accessible via the three vertical dots at the top right) is adjusted according to the database mode. So there is either the entry "Rebuild database", if the Android database is used, or the entries "Reload album list" and "Search device", if the some own database is used.

The menu entry "Search device" either leads to the Classical Music Scanner or the SAF Media Scanner, depending on the currently used database.

Note that there is currently no automatism for detecting database changes at runtime.

Views

The app provides nine views switchable via a view selection menu located at the upper left corner of the screen. From these views the Composers, Genres and Performers are filter views (the menu items are blue), while the Albums, Works, Selection, Playlists and Folders views can be used to move music to the playing list (green menu item).

Notifications

While a music piece is being played the most important information is shown as system notification. By touching these playback can be controlled or the application can be opened. The notification style can be configured in the program settings. Note that due to an operating system error the setting "System (Media)" results in dark notifications. This system failure was corrected with Android 7.

Bluetooth Car Radio

The program does a great deal of work in order to show the most relevant information about the current music on the car radio and to be remote-controllable also. Via settings the information being displayed can be configured and also the reaction on PLAY and PAUSE remote control commands from the radio. Note that due to an operating system error Android 6 cannot show "playing track 3 of 8", this was corrected with Android 7.

Bluetooth car radios are supported with Android 5. Support for older versions would be too much effort.

Sources

The Album, Works, Selection, Playlists and Folder views have a black menu entry. Selected objects are moved to the Playing view (green menu entry) and can be played from there. The object either replaces the Playing list, after confirmation, or is appended.

Note that albums, works, tracks etc. are mixed in the Playing list, and the program reconstructs complete albums and works from the tracks.

Filters

Filter views have a blue menu item. Items selected here are used to filter other views, i.e. their non-matching items are hidden. Reselecting the same item in a filter view will remove the respective filter. In the other views the filters can be removed individually via the filter selector shown a the lower border of the screen.

The Folders, Playlists, Playing and Selection views are not filtered.

An example: Choose the genre "Baroque" to find nobody but baroque composers, baroque works and albums containing baroque music. By choosing a composer, e.g. John Sebastian Creek (Johann Sebastian Bach), the search can be refined: One will find only genres Bach composed and only performers having performed baroque music from Bach and only works and albums with baroque music from Bach.

However, the Playing and Selection views are never filtered, i.e. in case an album contains additional music, i.e. not from Bach or not baroque, this one will also be shown and played. The Folder and Playlists views are also never filtered.

While any filter is active, the view selector menu additionally shows the number of filtered items. So Albums (5/75) means that 5 of 75 albums match the filter criteria.

Globally visible user interface items

In any view the upper right corner shows a search field and a menu. The search field allows a textual search, entering "Cello" will hide any item in the list except those containing the word "Cello" in their title. In case of the composers a search text like "Bach" will reduce the view to all persons of the Bach family. Use the "x" to clear the search and redisplay all items. By default the search is case insensitive, but this can be changed in the settings.

The yellow button at the lower right corner will always switch to the playlist view, except in case this view is already shown. In that case the play, pause and stop keys will be shown.

While a music piece is being played, in any view a progress bar is shown at the screen's lower edge.

Album View

Selecting an album will open it in the Selection View and from there it can be moved to the Playing List (before version 2.00 it was directly moved there). A long press opens a context menu which allows to directly move the object to the Playing list.

The Album view can be filtered by composer, genre and performer (in any combination); in this case only the matching albums are displayed. The filters can be opened by the user interface item at the lower edge of the screen and can be individually removed. The album currently present in the Selection view is marked with a dark selection colour.
In any other view, except Folders, the "Back" key will switch to the Album view.

In the Album view the application can be exited using the "Back" key. An other way is the menu entry "Exit Application" which is accessible in in any view via the "..." menu.

A long touch on the yellow "Playing List" floating button (at bottom right) copies all albums into the Playing List, which in particular is helpful if combined with the text search.

Works View

The Works view is similar to the Album view, but by default the composers' pictures are used instead of album covers. This can be changed in the settings, so that album or performer pictures are used instead. Single works, containing one or more tracks, can be moved to the Selection List. In case every work consists of a single track this view is the same like "Titles" or "Tracks" in conventional music play programs.

A long touch on the yellow "Playing List" floating button (at bottom right) copies all works into the Playing List, which in particular is helpful if combined with the text search.

Selection View

Here the parts of a selected album or work are copied, and from here the album, work or individual tracks can be added to the Playing List. A long touch on the yellow "Playing List" floating button (at bottom right) copies all objects into the Playing List. The context menu is also supported.

Playlist View

Version 1.50 introduced permanently stored play lists. They are located in the program's private memory and automatically removed with deinstallation.

The entry "Save Playlist..." in the ...-menu ist accessible only in the Playing view. Here the current playing list can be stored under a given name and then will appear in the Playlists view.

Selecting a play list will move it to the Playing list, either overwriting or being appended, after confirmation. A long press to a list item allows to remove it, also after confirmation.

Playlists are based on paths and will be affected if files are renamed or deleted.

Playing View

The Playing list contains those tracks which can be played. Its behaviour is configurable with the settings. It will never show a filter list, but text search is possible. To make this view better distinguishable from the Selection View, the navigation bar not black, but coloured, depending on the current colour theme. Obviously this will not work on devices with dedicated buttons.

Since version 1.50 the Playing list is automatically saved and restored at program start. Files deleted in the meant time are ignored.

A long press on an item opens a context menu at the top of the screen. Here one can obtain detailed file information, send the associated files to the metadata editor or remove the object from the playlist (not from the device memory!). Since version 2.12 a track can be moved up and down in the list (note that the corresponding menu entries are hidden under the three-vertical-dots-submenu).

Composer View

The Composer view uses the composers' names to look for pictures on the device, like a file named Antonín Dvořák.png or Luigi Boccherini.jpg. Keep in mind that not all composers have names containing only ASCII letters, so all accented characters, Ä, ö, sharp-S etc. must also match. It might be possible that the application will show multiple items for the same person, which could happen in case the Russian composer is written either the German way: "Tschaikowski" or the English way: "Tchaikovksy". Life time information is automatically removed before comparing composer names, so "Johann Strauss (Sohn) (1825-1899)" will match "Johann Strauss (Sohn)". Note that "(Sohn)" (in English "son") is part of the surname, necessary to distinguish him from his Radetzky March Father. Sometimes it might be advisable to have the same picture file copied with different names to take care of the different spellings.

In the Preferences there is a configuration switch Start with Last Name to get „Last Name, First Name“ view.

Warning: Never store composer, performer or genre pictures to the Music folder, but always elsewhere, e.g. to "pictures". Otherwise there will be conflicts with album cover pictures!

Genre View

The Genre view lists all found genres for some of those the application provides special icons. Additional icons can be installed the same way as composer pictures. In case of the music piece with genre "cat music" one can draw a picture showing a cat and some musical notes (recommended size: 512x512 pixels) and store it with the file name "cat music.jpg" somewhere in the "pictures" folder on the device.

Performer View

The Performer View works like the Composer view. Here also pictures can be stored on the device to show the performers, but these would have to have a longish file name like "The Misborough Symphony Orchestra, Hermann of Caramalt.jpg".

Since version 1.83 performer lists, separated by semicolon (preferred) or comma, are split accordingly, if configured.

Folder View

The Folder view does not list every folder of the system but only those containing music or folders containing music. The "Back" key does not switch to the Album View (like in the other views) but to the respective parent directory. When the root folder is reached, a second press of the "Back" key will switch to the Album view. The Folder view allows either selecting single files to be moved to the playlist, or by touching the path item in the lower edge of the screen all files in the folder are moved to the playlist. The Folder View looks for files "albumart.jpg" or "folder.jpg" to decorate the folder icon (if found).

Without full file access, Android 11 and newer deny album cover picture access. For fun, one could store two pictures in the album directory, one "albumart.jpg" and one "ordner.jpg", then the latter can be displayed. As a side effect this file will also be visible in your photo database unintentionally i.e. becomes visible in Google Photos. These restrictions do not apply to SAF mode.

Playback

Usually, the playlist is automatically processed up to its end. Then playback stops. In the Preferences (Behaviour Settings, Autoplay Mode, one can specify that the playback should should stop after a movement (i.e. a file) or after a (multi-part) work. In addition, automatic repetition can be activated using the menu item Repeat. The endless repetition of a work or movement is achieved with the corresponding combination of from Stop after... in the Preferences and Repeat in the menu.

Version 2.20 introduced an automatic per-track bookmark management. Bookmarked tracks are marked with a leading asterisk in the playlist. When pressing the green PLAY button, they can on request be played immediately at the stored position. The last five seconds are always repeated. If a track has been completely played, its bookmark will be automatically deleted, also if it was stopped in its first ten seconds. The number of bookmarks is limited to one hundred, if necessary the oldest one will be deleted.

Metadata

Obviously the application can only show what is stored inside the music files, in the so called "tags" (meta information). If these are wrong or incomplete, one could use the Classical Music Tagger or handy applications like Kid3, Qoobar, iTunes or similar to repair or add information especially for classical music. Additionally to the usual meta information, like "album", "track number", "CD number", "title", the app mainly relies on "composer" and "group" (used for work), but also shows "year" resp. "date" and "conductor", if existing.

When editing meta information one can either use standard tags or iTunes tags.

Standard tags for mp4 files are:
- ©nam for title or movement name, including movement number, e.g. „I. Presto“
- ©grp for work, e.g. „Sinfonie Nr. 8 h-moll, op. 42“

Standard tags for mp3 files are:
- TIT2 for title or movement name, including movement number
- TIT1 for work

The problematic behaviour of iTunes, especially concerning mp3 files, is described in the following chapters.

Metadata Behaviour of iTunes

Use Work and Movement OFF:

- MP3: "Grouping" -> GRP1 (Nonsense, must be TIT1)
- MP3: "Title" -> TIT2

- MP4: "Grouping" -> ©grp
- MP4: "Title" -> ©nam

Use Work and Movement ON:

- MP3: "Work" -> TIT1 (Nonsense, must be new one)
- MP3: "Movement Name" -> MVNM
- MP3: "Movement Number/Number of Movements" -> MVIN

- MP4: "Work" -> ©wrk
- MP4: "Movement Name" -> ©mvn
- MP4: "Movement Number" -> ©mvi
- MP4: "Number of Movements" -> ©mvc
- MP4: shwm := 1

Use Work and Movement ON->OFF:

- MP3: no file change (Nonsense, change flag or remove tags)

- MP4: remove shwm

Metadata Behaviour of this Program

If movement name exist (©mvn or MVNM):
- Get movement number (©mvi or MVIN), precede it to movement and use as title
- Get work (©wrk)
- If work does not exist or file is not .mp4, get "©grp" or TIT1
- If these also do not exist, get GRP1
Otherwise (i.e. no movement name):
- Get title as usual (©nam or TIT2)
- Get "©grp" or TIT1
- If these do not exist, get GRP1

Files of type .flac or .ogg may contain "Vorbis" comments:
- The work name is stored in WORK.
- The movement name, containing the number, is stored in TITLE.
Additionally, Apple specific metadata can be included, and here we use the mapping used by the popular program MusicBrainz Picard:
- The movement name is stored in MOVEMENTNAME.
- The movement number ist stored in MOVEMENT.
- The number of movements is stored in MOVEMENTTOTAL.

Folders and Album Covers

A sensible organisation of music on the device is to use one folder for each album, and additionally to the music files (mp3, mp4 or similar) this folder should contain a picture called "albumart.jpg" or "folder.jpg" in order to help the Android system with file and album management. By the way: Files named like "frontpage.jpg" would be shown the photo gallery, which usually is unintended. Attention: At least Samsung and LG devices ignore any image file except "albumart.jpg", for unknown reasons.

Metadata Troubleshooting (Android DB)

This topic is irrelevant when using the Classical Music Scanner or SAF Media Scanner.

The program first retrieves the basic metadata from the Android system, for all albums and all music files associated with the albums. Because of the many shortcomings and long-term errors and malfunctions in the system (which will not be repaired), all music files are read in the second step, to complete missing and replace wrong information. This may take a long time on a slow device and may files. During this time one can browse the album list, because the necessary information is already present (even if it is partially incorrect, for example in the case of years and album-artists!), but there is not more functionality yet. In order to minimise this waiting period , all information collected is written to a private database that is is used for the following starts. This is very fast even on slow devices.

Whenever a file on the device has been modified, deleted or added, Android should automatically update its database. The Opus 1 Music Player should recognize that the Android database has been changed and should rebuild its private database (it's a good idea to remove the app from the latest-used-app list and then restart it). A menu item is provided in order to rebuild the private database in case this automatism fails

However, if the Android database is incomplete or corrupt, it can be rebuilt manually. The simplest method: Start the Classical Music Tagger, select menu item Android Media Storage, in the system dialog press Storage and then CLEAR DATA. Then restart the device and wait for ten minutes.

Hint: If not configured differently, the Unpopular Music Player uses the system information only. If some metadata are incorrect, the Android database is inconsistent and should be reset.

"Audiobooks" directory in Android 10 and newer: The respective audio files are not marked as "Music", but as "Audiobook". No album entries are created in the internal database and thus no album pictures, but (quasi invalid) album IDs. The concept is not sensible, because it leads to audio file "orphans".
Since version 2.6.1, the application tries to reconstruct the corresponding albums, but has no way to find any album pictures. Therefore, it is not recommended to use this directory at all.

What the File is SAF?

<

According to Google, programs normally should use the Android media database for all metadata and access to photos, audio and video files. But if this database lacks - or contains wrong - information, for example only supports pop music and only in mp3 format, one needs direct read access to the corresponding files.

Standard file access in Java uses the File class, there are corresponding functions in "native code" (C or C++). With these functions directories can be read or created, files can be read, written, created or deleted. This works the same way in desktop computers running Linux, Unix or macOS. The Classical Music Scanner mainly runs in "native code" for maximum execution speed.

For access control and restrictions, the Linux kernel, which is also used in Android, provides proven mechanisms. However, Google was not satisfied with this access protection concept and increasingly restricted the standard file access to certain directories, depending on the Android version. On the other hand Google invented the "Storage Access Framework" (SAF) that grants access only after an explicit user interaction. This permission can also be permanent, i.e. still valid after an application restart.

A major limitation of SAF is that no standard functions of Java or C or C++ work with it. Instead one has to use Google's class DocumentFile that is only available in Java, not in C or C++. However, once opened in Java, a file can, with restrictions, also be read and written in C or C++, but it cannot be opened, neither created or deleted. Not even a directory search is possible. Finally, Google did not provide a corresponding Java class RandomAccessDocumentFile, which also makes rewriting existing Java code unnecessarily difficult.

Furthermore, SAF is extremely slow. Therefore "normal" file access is preferable, if possible. For which directories such "normal" access is allowed?
Each application has its private directories in internal memory and SD card (if exists). Here the access is unrestricted, SAF is not needed.
"Music" and "Photos" in internal memory are unrestricted up to Android 10. Android 11, without "full file access", denies even read accesses on all non-media-files.
"Music" etc. on SD card is readable up to Android 10, but one needs SAF for write access. For Android 11 the same restrictions as for internal memory apply.
USB memory (via OTG adapter) is treated like SD cards with Android 9 and 10. For older OS versions one needs SAF for both read and write access.

SAF operations are executed by some "Document Provider" that either are pre-installed or can be installed later like an application.
Some "Document Providers" support "Open Document Tree" or "FLAG_SUPPORTS_IS_CHILD", others do not. Only the former are visible in the SAF selection dialog, because this functionality is required by Classical Music Tagger and SAF Media Scanner to search subdirectories. Access to internal memory, SD card or USB memory always supports subdirectories.
Some "document providers" allow "random access", i.e. the file is "seekable", which means that it can be read or written anywhere within the file, just like "normal" file accesses, and it is not necessary to read the whole file into memory before it can be used. This is true for internal memory, SD card and USB memory.
The "Android SMB Client" allows read and write access to network storage (although somewhat unstable...), "Open Document Tree" is supported, but no "random access".
Google Drive does not support "Open Document Tree".
Rumors say that the NextCloud Client does support "Open Document Tree".

Conclusion: The player needs SAF to play music from USB memory on older Android versions (before 9). SAF is also required for all types of network storage, but this only works if the responsible "Document Provider" is capable enough. And finally, with Android 11 without "full file access", SAF is needed to bypass some of the system's restrictions.


Feedback

For comments, feedback, and suggestions, please
contact me