-
By currently observed, a
.ncm
file may contain duplicated meta tags, coming from both the NCM file heder and the wrapped audio content. This component would take all of them and merge together to show distinct values. -
Other meta informations such as
codec
,duration
,bitrate
... are retrieved by the underlying decoder, typicallyFLAC
orMPEG
decoder. And the decoder is also reading meta tags of the audio at the same time. Thats the reason why both source of meta have to be dealed with. -
The audio content is NOT fully decrypted in the memory at once, but decrypt while reading on demand. This significantly reduces the memory usage, but slightly affects the speed of processing. It may be hard for compilers to optimize the
transform_view
, used in the implementation.
By design, the music meta information such as title/artist/album etc is embedded and re-encrypted into the ncm
header. This decision was reached considering the following factors:
-
The audio content isn't "clean". Meaning if we take the embedded tag of the audio as overwrites, some music might be "polluted" by the tags at the original state.
-
Audio content is not verified when played by NCM player. So there is no way to tell whether it's modified, nor to completely restore the file state.
-
Replay gain is written to the audio content because it's recoverable and simply tested that the file hash will turn back after clearing the custom gain information.
-
The meta information stored in the
ncm
header is essentially a standard stringifiedJSON
object, allowing easy extension while preserving all original fields. Although modifying it would change its identification, causing the NCM player to refuse to playback, it's totally recoverable by deleting the overwrites.- An
overwrite
key is appended to theJSON
if user customized the meta tags. All changes would happen in theoverwrite
object. - Clear all tags result in removing the
overwrite
key, which is actually equivalent to restore the file idntification.
- An
Currently, the downloaded .ncm
files can be recognized and played by the NCM player IF:
- It's put in a monitored directory.
- The album art or the replay gain is edited, while other meta information isn't.
- Meta tags are once edited, then cleared by
Remove tags
utility.
-
The extraction menu is unavailable in old fb2k versions (v1.6), due to API incompatity.
-
The extraction process is multi-threaded. Spawn order:
UI => extractor(x1) => worker(xN)
. -
The output file would be overwritten if existed, and no warning would be given in this case. See the comments at
ncm_file::save_raw_audio()
.
-
The meta info JSON is built and writen AFTER completing the download of the music file.
-
The cover image is always retrived from the internet. The player will just ignore the embedded image.
-
There may be some extra verifications to the identification (
163 key(Don't modify):xxxx
). The player refuses to play even when off-line. -
The player actually recognize
.ncm
files by the identification, not by the decrypted meta info fields.