diff --git a/README.md b/README.md index 734056c..776d95a 100644 --- a/README.md +++ b/README.md @@ -2,20 +2,21 @@ ![GitHub Release](https://img.shields.io/github/v/release/pnck/foo_input_ncm) ![GitHub Release Date](https://img.shields.io/github/release-date/pnck/foo_input_ncm) -## Play NCM files directly with our favourite +## Play NCM files directly with our favorite - On Windows - ![screenshot-win](/doc/screenshot-win.png) + ![screenshot-win](/docs/screenshot-win.png) - Or on MacOS - ![screenshot-mac](/doc/screenshot-mac.png) + ![screenshot-mac](/docs/screenshot-mac.png) ### Features - [x] Seamlessly load and play `.ncm` format files in _foobar2000_. - [x] Fully integrated with the powerful built-in _`metadb`_ system, enabling efficient searching and strong management capabilities. - [x] Unwrap/Convert `.ncm` to normal `.mp3` or `.flac` format with blazing speed. -- [ ] ReplayGain and retagging support. +- [x] Edit `replay gain`/`metadata`/`album art` in place. + - *Will be unrecognizable by the _NCM player_ after editing tags. Reset it by `Remove tags` utility. (Properties - Tools - Remove tags) ### Compatibility @@ -35,6 +36,6 @@ - [foo_input_msu](https://github.com/qwertymodo/foo_input_msu) by [qwertymodo](https://github.com/qwertymodo) - [foo_input_nemuc](https://github.com/hozuki/foo_input_nemuc) by [hozuki](https://github.com/hozuki) - [foo_input_spotify](https://github.com/FauxFaux/foo_input_spotify) by [FauxFaux](https://github.com/FauxFaux) -- The very detailed [develop tutorio](http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html) for starters +- The very detailed [development tutorial](http://yirkha.fud.cz/tmp/496351ef.tutorial-draft.html) for starters - Official component samples included in [foobar2000 sdk](https://www.foobar2000.org/SDK) -- And the [ncmdump](https://github.com/anonymous5l/ncmdump) which encourages me doing a lot of research on the file structure +- And the [ncmdump](https://github.com/anonymous5l/ncmdump) which encourages me to do a lot of research on the file structure diff --git a/docs/reminders.md b/docs/reminders.md new file mode 100644 index 0000000..cc81de3 --- /dev/null +++ b/docs/reminders.md @@ -0,0 +1,24 @@ +## Retagging + +By design, 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 stringified `JSON` object, allowing easy extension while preserving all original fields. Although modifying it would change the identification key, causing the _NCM player_ to refuse to playback, it's totally recoverable by deleting the overwrites. + +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. +- Other meta information is once edited, then cleared by `Remove tags` utility. + +## Extractor + +- 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()`. diff --git a/doc/screenshot-mac.png b/docs/screenshot-mac.png similarity index 100% rename from doc/screenshot-mac.png rename to docs/screenshot-mac.png diff --git a/doc/screenshot-win.png b/docs/screenshot-win.png similarity index 100% rename from doc/screenshot-win.png rename to docs/screenshot-win.png