View Issue Details

IDProjectCategoryView StatusLast Update
0002545MMW v4Playerpublic2006-10-26 11:53
Reporterrusty Assigned To 
PriorityurgentSeverityfeatureReproducibilityalways
Status resolvedResolutionfixed 
Fixed in Version3.0 
Summary0002545: New output plugin
DescriptionA new output plugin is required to address several major issues:
1) Current plugin may have problems with Vista compatibility due to the fact that it writes to an .ini file in the Program Files directory
2) Current plugin cannot be configured for crossfading/gapless playback via the MM UI
3) Current plugin isn't intuitively configurable for 5.1 speaker system
4) Current plugin isn't localized

Implementation note: This might be a reason to consider using the bass library, rather than building this ourselves (or not).
TagsNo tags attached.
Fixed in build1010

Relationships

related to 0001233 resolvedrusty Validate plugin compatibility with Vista 
related to 0000117 closedLudek Player: crossfade between songs 
related to 0001417 resolvedpeke Support for 5.1 speaker systems 
related to 0002655 resolvedjiri Support for iPod's 'gapless' mode 
related to 0002718 resolvedjiri Play mp3 tracks gaplessly 

Activities

peke

2006-08-16 22:10

developer   ~0007730

1) How Winamp solved that issue?
2, 3, 4) Output Plugin is in tight to Input Plugin Architecture of Winamp v1.x SDK even winamp do not solve that OK. (Multi Channel MP3 Player example that I have sent you almost a year ago uses modified Winamp SDK and Interface parser to create Emulation/Workaround and add full user control over crossfade on each played song like it is done now for single song only)
MM is written on Winamp SDK (same thing goes for Songs-DB). 99.99% of users use Direct Sound Output (Wave output is relevant and important only for Win9x users with very old hardware which do not support DirectSound part od DirectX 6 and above). We know That Output Plugin Depends on INI on load and initialize so we can use that to implement UI in MM and in case user wants to use other that Direct Sound UI will not be localized as it will use Plugin internal Configuration. (This is workaround but 100% acurate and safe)
Using bass Library could cost us more than we gain on this.

You are right that Bass have some benefits. Ultimate Goal would be to keep Winamp Plugin Compatbility but with adding above support. It will require more work and dedication on issue from all of us but it will make us unique (I really do not know why winamp team didn't implemented it that way but tried to override things that work 10+ years)

rusty

2006-09-19 16:06

administrator   ~0007920

Note: one other thing to keep in mind is that it would be great if the new plugin could take advantage of Vista's environmental equalization system.

peke

2006-09-19 22:48

developer   ~0007921

Another Thing needs to be sorted an UI in Player Skin Engine that allow user to Enable/Dissable and control Crossfading along with info on crossfading time (Like in My player Engine example), this helps DJ-s A lot also regular users know what actualy happends during crossfading (also available in my player engine example).

rusty

2006-10-05 18:17

administrator   ~0007972

Summary re. Gapless output (from discussion in bug 2655) for documentation purposes:
Gaps can be created in several ways:
1) The encoder can add them: a) encoder delay; b) padding
2) The decoder can amplify them: a) reverse-MDCT; b) failure to account for padding
3) There may be sound files that are recorded (correctly or incorrectly) with silence at the beginning/end.

The Output plug-in doesn't fix any of these issues, it just makes sure that two subsequent tracks are played without any interruption added by the output plug-in itself. It might sound perfectly obvious, but it technically isn't and many WinAmp plug-ins don't play tracks gaplessly - even if all 3 points mentioned above are ok.

Jirka: Re. 'Silence removal - forget about it, I don't think it was a good idea. However, it still remains a good feature for crossfaded playback.

Jirka: re. in_mpg123 gapless playback - I don't know, I haven't tested the feature, I'd suppose that it tries somehow to eliminate the problem 2) (and maybe partially 1).

jiri

2006-10-16 16:18

administrator   ~0008015

Fixed in build 1008.
 - out_MMDS.dll create and included in installer, it should replace out_DS.dll, all the basic and also advanced features should work well now.

rusty

2006-10-18 20:40

administrator   ~0008024

Testing this for a couple of hours with various types of tracks, dsp plugins, and equalizer and it seems to work really well (I'm not sure if this is possible, but it sounds better!!).

My only problem is that I don't know how this is _supposed_ to work:

1) 'Crossfade Tracks' actually fades out tracks, but there doesn't seem to be a way to configure for how long. Is this intentional?
2) 'Crossfade time' under 'Fade in new tracks' seems to apply only to the Fade-in time, however, the time that is configured doesn't seem to match the actual crossfade time. e.g. if I set it to 10000ms, the crossfade seems to only start at ~5 seconds left in the playing track. Is this by design?
3) 'Smooth pause', 'Smooth seek', and 'Smooth stop'. Are these settings supposed to be independent of the 'Crossfade time'?
4) 'MediaMonkey DirectSound Output' is technically what the plugin is, but it's a bit technical-sounding.
5) The ms settings can probably be changed to seconds for ease of manipulation (assuming the user can set fractional seconds e.g. 1.5).

I think that the following would resolve the usability issues described (although item 2 may be a functional problem as well), but I'm not sure if this is what you'd intended:

Plugin Name: MediaMonkey audio output

 Use: __Primary Sound Driver__^

On track changes:
 [x] Remove silence at the beginning / end of a track
 [x] Fade out on track end: ___ s
 [ ] Fade in on new track: ___ s
 [ ] Crossfade on new track
On player operations:
 [x] Fade out/in on pause/play: ___ s
 [x] Fade out/in on stop/play: ___ s
 [x] Crossfade on seek: ___ s

jiri

2006-10-19 17:05

administrator   ~0008036

Fixed in build 1009:
 1&2) This seems to be a little misundestanding in how it works and possibly problem caused by some bugs in the previous build. Here is an explanation of each related setting:
   Crossfade tracks - Whether to crossfade tracks at all. If unchecked, MM tries to play tracks gaplessly. If checked, tracks A and B overlap for a defined time period. Track A currently always fades out for a defined time period (maybe we could add an option to disable this, but I don't think it's necessary).
   Fade in new track - Defines whether Track B fades in (for the whole period of crossfading). If unchecked, track B start at the full volume.
   Crossfade time - Defines how much playback of tracks A and B overlaps, which also includes for how long track A fades out and tracks B fades in.

I hope it's much clearer now, particularly with few UI touches I have made.

 3) Yes. They have all their specific timing tuned. We _could_ make this configurable, but I think it unnecessarily clutters UI. For example, 'Smooth seek' doesn't make sense to have too short or too long times set, it would sound weird. Or 'Smooth pause', it's tuned to be assymetric, it fades out very quickly (150ms) because user certainly expects that playback is paused almost instantly. However, it then fades in for much longer time (600ms) because it sounds better this way.

 4) I agree, but I'd like to keep the term 'DirectSound' there (or somewhere). It's quite important, particularly because sometimes I'd like to make (myself or someone else) a Kernel Streaming output plug-in working well with MM so that e.g. users of foobar could convert to MM and would get the maximal audio quality possible.

 5) Done, with some other related improvements.

rusty

2006-10-20 02:05

administrator   ~0008042

Reminder: When using 'Previous' or 'Next' functions the sound transition isn't very smooth.

jiri

2006-10-20 07:35

administrator   ~0008050

Fixed in build 1009:
 - Pressing Next now works as pressing a sequence of Stop, Next and Play, i.e. playback is stopped smoothly and the next track briefly crossfades with the previous one.

rusty

2006-10-20 19:15

administrator   ~0008056

Looking good!

1)&2) Now I understand what you mean, however, the UI is still a bit confusing since it's unclear that 'Crossfade Time' applies to 'Crossfade Tracks' independently of whether Fade-in tracks is enabled.

Also, I'm still a bit confused about what 'Remove silence at the beginning/end of a track' does. In earlier comments, you'd indicated that:
-'Gapless' playback is enabled if Crossfade isn't (which makes me believe that this isn't for gapless).
-Silence removal is applicable only for crossfading
If this is the case, then shouldn't this function appear following the 'Fade-in' option?

A simple change will fix these issues:
[x] Crossfade tracks (x s) <----------------->
    [ ] Fade in new tracks
    [x] Remove silence at the beginning / end of track

....other settings...


4)We could use 'MediaMonkey audio output (DirectSound)' but the present wording is probably better. i.e. leave it as is.

jiri

2006-10-23 14:20

administrator   ~0008060

1&2) I agree, I just don't like placing the trackbar next [x] Crossfade tracks because it makes problems with localization. What keeping it as is and only indent the items a little more?

6) re. Silence removal - Originally I thought it would be a little different, but the current state is:
  a) It's an important option for crossfading in order to not crossfade silent parts of tracks.
  b) It's also important for gapless playback - it really can avoid that silence at beginning/end of tracks made by mp3 encoder/decoder.

rusty

2006-10-24 04:24

administrator   ~0008065

Re. 1&2) I think I have a decent solution below.

Re. 6) What I don't understand is that you'd indicated that 'gapless' mode is enabled if crossfading isn't. If that is indeed the case, then what does it mean for 'gapless mode' to be enabled if '[x] Remove silence at the begining / end of track' isn't? Do you mean that 'Gapless' is enabled only if the 'remove silence' option is enabled? If so, then I'd suggest:

[x] Remove silence at the beginning / end of track

[x] Crossfade tracks (x s)
     <----------------->
    [ ] Fade in new tracks

[x] Smooth x...

jiri

2006-10-24 12:43

administrator   ~0008066

6) Well, as we have already discussed over IM, Gapless mode in the output plug-in doesn't mean anything special, it only means that the plug-in itself doesn't add any gap between tracks (which may sound pretty obvious, but from implementation point of view it isn't). That's also the reason why there isn't any note about gapless mode in configuration window.

As for the effect of [x] Remove silence at the beginning / end of track for gapless playback, it's only useful for formats where codec adds some silence at the beginning/end of track (definitely mp3, possibly some others). If this option is enabled, playback is more or less gapless. This option makes no sense (and is better disabled) for lossless formats (wma, flac) or formats ready for gapless encoding (ogg) where no silence is artificially added between tracks.

rusty

2006-10-24 14:58

administrator   ~0008068

So to paraphrase:
-The output plugin is _always_ 'gapless' in the sense that it doesn't add any extra gaps
-The '[ ] Remove Silence...' option is meant mainly for MP3 tracks where the input plugin might add a gap or there's a gap encoded in the audio file itself.

So if I understand correctly: most users, who have a mix of audio formats (MP3, OGG, etc) will _not_ enable the '[ ] Remove silence...' option since it can add unwanted artifacts. It's useful mainly for people who have only MP3s in their collection. Correct?

Lastly, do you agree with the proposed layout in my previous comment? (I don't believe the issues we've discussed above affect the usability of that proposal).

jiri

2006-10-26 11:53

administrator   ~0008078

Fixed in build 1010.
 - Plug-in configuration dialog controls moved.