Skip to content

Commit

Permalink
update: docs
Browse files Browse the repository at this point in the history
  • Loading branch information
pnck committed May 7, 2024
1 parent 84ef8c1 commit 64eb7e9
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 6 deletions.
13 changes: 7 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
24 changes: 24 additions & 0 deletions docs/reminders.md
Original file line number Diff line number Diff line change
@@ -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()`.
File renamed without changes
File renamed without changes

0 comments on commit 64eb7e9

Please sign in to comment.