View Issue Details

IDProjectCategoryView StatusLast Update
0002108MMW v4Synchronizationpublic2007-08-28 14:58
Reporterrusty Assigned To 
PriorityurgentSeverityminorReproducibilityalways
Status resolvedResolutionfixed 
Fixed in Version3.0 
Summary0002108: Auto-conversion: Add Volume Leveling
DescriptionBecause many portable devices do not possess replay-gain type functionality, the ability for MM to actually modify the volume level of tracks could be useful.

Per discussions with Jiri:

Rusty: As discussed, I think that this should be available as a globally set rule if it's easy to implement. Per discussion with Jiri:

Jirka: Maybe it could be like:
[ ] Level volume when synchronizing
  [ ] Even for tracks that don't need auto-conversion

Rusty: I'm thinking that since this feature is only valuable to the user if All tracks are levelled, and since levelling all tracks varies in efficiency/effectiveness based on the format of the tracks that we might as well just make it a single option, but warn the user about the cost. e.g. [ ] Level volume when synchronizing (in the help explain that this: a) adds a lot of time for non-MP3 tracks b) decreases quality for non MP3 tracks). i.e. if we assume that the feature is valuable only when all tracks are leveled, then there's no use in adding a feature that allows it to be applied selectively.

Jiri: It isn't that hard to implement, I'd just like to note possible problems, mainly that it probably won't be possible to level volume of all tracks. Most likely we won't find any option how to do it for DRM protected WMAs (or other formats).

Based on all of the above, this would still be nice to fit into 2.5, but is definitely not critical since it would result in the following compromises:
a) track conversion would be done for all tracks but MP3s and would take a lot of time
b) track conversion reduces audio quality

  Convert the following formats when synchronizing:
-------------------------------------------------------------------------
|Format on PC | Bitrate | Format on Device
|------------------------------------------------------------------------
| [ ] Any | > 160 Kbps | MP3 128 Kbps
| [x] Unsupported | Any | MP3 128 Kbps
| <Add Conversion Rule>
|
--------------------------------------------------------------------------
^ V x

 [ ] Level volume when synchronizing

|-Supported formats on device---------------------------------------------
| 'MP3, OGG, etc.' OR 'Unknown (all formats)'
|
---------------------------------------------------------------------------
TagsNo tags attached.
Fixed in build1067

Relationships

related to 0002373 resolvedLudek Enable Auto-Conversion for CD Burning 
related to 0002669 new Auto-conversion: Stereophonic to Binaural conversion 
related to 0003518 closedLudek Burn: Auto-conversion is missing auto-leveling 

Activities

jiri

2007-08-24 13:28

administrator   ~0010292

Fixed in build 1063.
 - Implemented as discussed, just added a line for setting target volume level for the device.

Implementation notes on track leveling:
1. If a track belong to some auto-converted group, it is levelled during this conversion.
2. Otwerwise, if it's a mp3 track, mp3gain is applied.
3. All other tracks are converted to 128 CBR MP3. This approach was chosen, because it's impossible to mimic the conversion parameters of the original (e.g. guess how an OGG track was encoded). In case user doesn't like this, different auto-conversion settings can be applied and then track will belong to group 1.

rusty

2007-08-24 20:19

administrator   ~0010319

Tested 1063 and it seems to work well. This is a great feature...

The only issue is that if a user is synching OGG and WMA tracks to a device that handles OGG and WMA, it's likely that the user won't want to convert to MP3.

Are you saying that the solution is that the user should create 2 autoconversion rules:
Convert all OGG tracks to OGG 5
Convert all WMA tracks to WMA xx

Why not just automatically convert to the same source format using a couple of basic parameters (since that will minimize losses in audio quality)? e.g. Same Audio Format / Stereo / 128kbps VBR (i.e. just have a couple of 'hidden rules' that are used if the user doesn't specify a rule).

OR better yet, if the user has indicated that other formats besides MP3 are supported by the device, then automatically enable greyed out rules for these formats.

That way it yields better results out of the box.

jiri

2007-08-26 12:30

administrator   ~0010354

Fixed in build 1065.

The full logic is now:
1. If a track belong to some auto-converted group, it is levelled during this conversion.
2. Otherwise, if it's a mp3 track, mp3gain is applied.
3. If it's in a format that MM can convert to and the device supports it, track is converted to this format again with these settings:
 3a. OGG - quality based (quality 4 ~= 128kbps)
 3b. WMA - 128 CBR
 3c. FLAC or any other format based on an encoding plug-in - based on the plug-in defaults.
4. Otherwise, if none of these rules can be applied, track is converted to MP3 CBR 128.

Also, one more tweak was added: If a track differs less than 0.75dB from the desired volume level, it isn't adjusted (since it wouldn't make sense and would only take time). This level was chosen because mp3gain also can't adjust tracks any better (gain step in mp3 track is ~1.5dB).

rusty

2007-08-27 21:01

administrator   ~0010396

Just tested and there's a small bug. MPC tracks don't get levelled for some reason. It may be related to the MPC tagging bug you fixed earlier...

Posting a sample file to the ftp server.

jiri

2007-08-28 14:58

administrator   ~0010404

Fixed in build 1067.
 - It was caused by bugs in f_MPC.dll, Track Peak wasn't properly handled/stored and so MM couldn't level the track correctly.
 - While fixing this bug, I found another _very_ serious issue both in f_MPC and f_APE that caused stack corruption on every update of tag. Stack corruption could have resulted in a number of possible problems, AVs, etc.

jiri

2007-08-28 14:58

administrator   ~0010405

Reminder sent to: peke