Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: FFSoX Player 0.1 Initial Release (Read 82641 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

FFSoX Player 0.1 Initial Release

FFSoX Player is a Winamp (http://www.winamp.com/) plug-in based on the FFmpeg (http://www.ffmpeg.org/) and SoX (http://sox.sourceforge.net/) libraries. Using FFmepg almost all multimedia files may be played, including but by far not restricted to H.264 and VP8. Audiophile sound processing is provided using high quality 32 bit SoX algorithms and dithering.

Home: http://in-ffsox.sourceforge.net/
Project: http://sourceforge.net/projects/in-ffsox/
Download: http://sourceforge.net/projects/in-ffsox/files/

FFSoX Player 0.1 Initial Release

Reply #1
thanks a lot...
_

FFSoX Player 0.1 Initial Release

Reply #2
Just released v0.2:

http://sourceforge.net/projects/in-ffsox/files/

What's new?
  • Now with installer.
  • Now with (minimal) FFmpeg for playing OGG (both Vorbis audio and Theora video ) and WebM (Vorbis audio and VP8 video, the latest one from Google)
Note the SoX options (replay gain and re-sampling to double sample rate) to get real hifi out of Winamp.

Would be glad to get some feedback from you.

Peter

 

FFSoX Player 0.1 Initial Release

Reply #3
Released v0.3

Got a feature request on SourceForge this morning:

Quote
So far winamp lacks any resampling plugin that resamples audio. This is useful for people who have the soundblaster audigy series, which forces audio playback in 48Khz, and any audio not at that resolution will get resampled by the APU, which is horrible in the audigy series. Besides that, some others, although having good cards, may prefer resampling techniques done in software instead of hardware. As far as I know, one of the more prominent resamplers for foobar2000 was based on SoX algorithms, so I hope that this could be implemented in this plugin as well. Thank You

In response I've created v0.3 making almost all SoX resampling options available to the user. For details cf.Download: http://sourceforge.net/projects/in-ffsox/f....3.exe/download

FFSoX Player 0.1 Initial Release

Reply #4
v0.4 released

What's new?
  • Enabled seeking (depends on whether the corresponding FFmpeg format supports it).
  • Made switching on/off the gain effect's limiter available in configuration dialog.
  • Resolved some issues which caused the plug-in to crash in case of unsupported codecs.
For details go here.
For download go here.

FFSoX Player 0.1 Initial Release

Reply #5
v0.4.1 released

What's new?
  • Support for "avcore-0.dll" (new FFmpeg library, has to be copied along the other DLLs if using FFmpeg from third party sites, e.g. http://ffmpeg.arrozcru.org/autobuilds/).
  • Resolved some video synchronization issues.
  • Switch on/off SoX decoders via configuration.
For details go here.
For download go here.

FFSoX Player 0.1 Initial Release

Reply #6
works nice, the only thing I didnt like - it is downloading full file and utilize full network bandwidth for http input (instead of buffering/pre-buffering)
(standard plugin in_mp3 dll have buffering options with data size limits, which results in low network usage during playback of streams and http links)

when this is useful? trying to play mp4 (audio podcast) by adding urls to playlist, sometimes use seeking...

I have checked ffplay (ffmpeg) and mplayer (uses libavcodec) - they both have some http buffering feature, and not trying to download whole file

FFSoX Player 0.1 Initial Release

Reply #7
it is downloading full file and utilize full network bandwidth for http input (instead of buffering/pre-buffering)
(standard plugin in_mp3 dll have buffering options with data size limits, which results in low network usage during playback of streams and http links)

I'm not aware that this plug-in supports streaming yet (uses av_open_input_file()), hence I have no idea how to test it. Could you please give an example?

FFSoX Player 0.1 Initial Release

Reply #8
my previous message was a inaccurate, it looks like mp4 was played via another plugin, and your plugin do not accept mp4 stream input
but your plugin accept ogg stream (http file link with ogg encoded podcast) input, and plays it on wrong speed
I send you pm with examples of http links (if you want to check it, but this features are not very important anymore:
I have re-checked winamp default plugins: mp4 supported with streaming and unbuffered seeking, ogg supported with streaming but not seeking)

also it is a little bit annoying to have flashing black console windows (which instantly disappear)

FFSoX Player 0.1 Initial Release

Reply #9
dont work flac winamp seek bar...

FFSoX Player 0.1 Initial Release

Reply #10
I send you pm with examples of http links

Thanks a lot.

your plugin do not accept mp4 stream input

MP4 is not supported by default. To activate it you should do the following:
  • Goto http://ffmpeg.arrozcru.org/autobuilds/ and download the latest "shared w32" build.
  • Extract (by using 7z) the DLLs from the 7z-archive's "bin" folder into "<Winamp>/Plugins/in_ffsox".
  • Add MP4 to the plugins extensions via configuration dialog.
  • Disable the default MP4 plugin, e.g. by renaming "in_mp4.dll" to "in_mp4.dll.X".
your plugin accept ogg stream (http file link with ogg encoded podcast) input, and plays it on wrong speed

I have no idea how you achieve this. The only thing I can imagine is the following:

it is a little bit annoying to have flashing black console windows (which instantly disappear)

The plugin is based on FFmpeg and SoX. Both provide an input layer. By default the plugin first tries to open a file via SoX and if not successful in a second try via FFmpeg. As far as I can see the black window comes from SoX trying to download the file using wget. In your environment this seems to be successful.

It is possible to switch off the SoX input layer via the plugin's preferences dialog. As far as I can see, if SoX input is switched off no streaming is possible, no black window appear.

Meanwhile I convinced myself that command line FFmpeg supports streaming. This gives rise to the assumption that the plugin will support real streaming (as opposed to SoX download) somewhere in the future.

I was able to reproduce that seeking OGG files is buggy. Hopefully this will be fixed in the near future.

FFSoX Player 0.1 Initial Release

Reply #11
dont work flac winamp seek bar...

From my limited understanding of SoX and FFmpeg I have the following impression:
  • SoX doesn't support seeking at all.
  • FFmpeg's FLAC demuxer doesn't support seeking (cf. "libavformat/flacdec.c").
Somebody out there who could proof me wrong?

FFSoX Player 0.1 Initial Release

Reply #12
v0.4.2 released

What's new?
  • Fixed seeking OGG (and possibly other formats).
  • Verified that streaming (e.g. via HTTP) is supported. For streaming "SoX decoder" in preferences should be switched off.
For details go here.
For download go here.

FFSoX Player 0.1 Initial Release

Reply #13
v0.4.2 released

There where some issues reported with the binaries compiled on a Vista/64 system. I've just uploaded new binaries compiled on a XP/32 system which should do better.

Sorry for any inconvenience.

FFSoX Player 0.1 Initial Release

Reply #14
Very interesting project, congratulations!

some small report in a hurry

- mp3 - seeking does not work, ape2 tags are not recognized. This is not important at all, because I doubt that somebody will replace the original nullsoft plugin, but might give you some hints if something is not working as expected;
- ogg (with tags) crash the WA 5.581, didn't crash 5.71. Not a big issue since there is an official plugin from nullsoft;
- both musepack sv7 and sv8 formats crash WA at EOF (with WA 5.71 only sv8 format had problems). This is important, because there is no official stable plugin from nullsoft.
- rg data ae not recognized for any file I've tested.

Cheers

FFSoX Player 0.1 Initial Release

Reply #15
Very interesting project, congratulations!

Thank you 

- mp3 - seeking does not work, ape2 tags are not recognized. This is not important at all, because I doubt that somebody will replace the original nullsoft plugin, but might give you some hints if something is not working as expected;

This plug-in is heaviliy based on FFmpeg. The idea ist to let all this decoding stuff done by FFmpeg and only use FFmpeg's format independent API. Put into other words, all these features depend on what is implemented in FFmpeg.

FFmpeg's MP3 demuxer doesn't provide seeking yet:

Code: [Select]
AVInputFormat mp3_demuxer = {
    "mp3",
    NULL_IF_CONFIG_SMALL("MPEG audio layer 2/3"),
    0,
    mp3_read_probe,
    mp3_read_header,
    mp3_read_packet,
    .flags= AVFMT_GENERIC_INDEX,
    .extensions = "mp2,mp3,m2a", /* XXX: use probe */
    .metadata_conv = ff_id3v2_metadata_conv,
};

The OGG demuxer instead does:

Code: [Select]
AVInputFormat ogg_demuxer = {
    "ogg",
    NULL_IF_CONFIG_SMALL("Ogg"),
    sizeof (struct ogg),
    ogg_probe,
    ogg_read_header,
    ogg_read_packet,
    ogg_read_close,
    ogg_read_seek,
    ogg_read_timestamp,
    .extensions = "ogg",
    .metadata_conv = ff_vorbiscomment_metadata_conv,
    .flags = AVFMT_GENERIC_INDEX,
};

The MP3 demuxer's "metadata_conv" is set to "ff_id3v2_metadata_conv", obviously only ID3v2.

FFmpeg is a very vital project. Propably someday all the missed features will be implemented. The FFSoX Player plug-in is only some kind of glue bringing FFmpeg into Winamp.

- ogg (with tags) crash the WA 5.581, didn't crash 5.71. Not a big issue since there is an official plugin from nullsoft;
- both musepack sv7 and sv8 formats crash WA at EOF (with WA 5.71 only sv8 format had problems). This is important, because there is no official stable plugin from nullsoft.

First I have to have a closer look at this.

- rg data ae not recognized for any file I've tested.

I run this plug-in myself using replay gain, especially for FLAC and MP3, and it seems to work. Which formats are you using?

FFSoX Player 0.1 Initial Release

Reply #16
v0.4.3 released

What's new?
  • Fixed reading metadata from OGG/Vorbis.
  • Fixed Musepack SV7 and SV8 formats crashing at the end of a track.
For details go here.
For download go here.

FFSoX Player 0.1 Initial Release

Reply #17
Thank you for your work, now Musepack playback is fine. However, tags and RG are still not recognized (or at least not displayed).
Please, see below what I mean.
.
BTW, I don't use ASIO4ALL, just your input plugin with  latest ffmpeg shared libs. I don't believe this could be the reason, but I might be wrong?
~

FFSoX Player 0.1 Initial Release

Reply #18
However, tags and RG are still not recognized (or at least not displayed).

Unfortunately this seems to be true for SV8 because currently FFmpeg seems not to support tags for SV8. Hopefully a FFmpeg devolper will pick up some day.

According to my tests tags should work for SV7.

FFSoX Player 0.1 Initial Release

Reply #19
According to my tests tags should work for SV7.


Well, not really:



But even if the tags reading is not implemented by ffmpeg, the RG is not stored in tags. For Musepack RG is stored in the file header.

Anyhow, I understand that all these issues are probably due to the incomplete ffmpeg implementation, so it is not in your power to fix them.

Thanks and good luck.

FFSoX Player 0.1 Initial Release

Reply #20
But even if the tags reading is not implemented by ffmpeg, the RG is not stored in tags. For Musepack RG is stored in the file header.

Of course, I'm no Musepack expert and don't use Musepack myself.

I've replay gained SV7 using the following script mainly based on WaveGain and SED:

Code: [Select]
#!/bin/sh

IFS="
"

table=`wavegain -a *.wav 2>&1|tr "\t" " "`

pat1=""
pat1="${pat1}^[ ]*Recommended Album Gain:[ ]*"    # eat white
pat1="${pat1}\([^ ]*\)"                            # col #1: gain
pat1="${pat1}[ ]*dB[ ]*Scale:[ ]*"                # eat white
pat1="${pat1}\([^ ]*\)"                            # col #2: scale
pat1="${pat1}.*$"                                # eat white

album_gain=`echo "${table}"|sed -n "s/${pat1}/\1/p"`
echo "album gain: ${album_gain} dB"

pat2=""
pat2="${pat2}^[ ]*"                                # eat white
pat2="${pat2}\([^ |]*\)"                        # col #1: gain
pat2="${pat2}[ ]*dB[ ]*|[ ]*"                    # eat white
pat2="${pat2}\([^ |]*\)"                        # col #2: peak
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #3: scale
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #4: new peak
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #5: left dc offset
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #6: right dc offset
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #7: track
pat2="${pat2}.*$"                                # eat white

for track in `echo "${table}"|sed -n "s/${pat2}/\7/p"`; do
  track_gain=`echo "${table}"|grep "${track}"|sed -n "s/${pat2}/\1/p"`
  echo "track: ${track}, track gain: ${track_gain} dB"
  mppenc \
  --tag "REPLAYGAIN_ALBUM_GAIN=${album_gain} dB" \
  --tag "REPLAYGAIN_TRACK_GAIN=${track_gain} dB" \
  --overwrite \
  ${track}
done

Maybe it's not standards to store RG values in tags but it seem to work.

FFSoX Player 0.1 Initial Release

Reply #21
Anyhow, I understand that all these issues are probably due to the incomplete ffmpeg implementation, so it is not in your power to fix them.

The plug-in has a hidden feature to work around missing tags or missing tag implementations. I've created it mainly to RG various video formats which doesn't provide RG at all. Maybe it helps also in your case.

The feature consists in providing a file "folder.csv" for each folder containing multi media files you want to "pseudo" tag. The file "folder.csv" has the following format:
[blockquote]The first line is a header listing tabulator separated the tags. Currently the haeder has to list the following tags exactly in the given order separated by tabulator:
  • file
  • artist
  • album
  • year
  • track
  • title
  • comment
  • genre
  • replaygain_track_gain
  • replaygain_album_gain
  • albumartist
  • composer
  • publisher
  • disc
  • bpm
The following lines have to list the corresponding values for each file to be pseudo tagged, possibly empty, separated by tabulators.[/blockquote]The following script demonstrate how to pseudo tag Musepack SV8:

Code: [Select]
#!/bin/sh

IFS="
"

# run wavegain analysis and store result into ${table} for later use.
table=`wavegain -a *.wav 2>&1|tr "\t" " "`

# define pattern for album related values.
pat1=""
pat1="${pat1}^[ ]*Recommended Album Gain:[ ]*"    # eat white
pat1="${pat1}\([^ ]*\)"                            # col #1: gain
pat1="${pat1}[ ]*dB[ ]*Scale:[ ]*"                # eat white
pat1="${pat1}\([^ ]*\)"                            # col #2: scale
pat1="${pat1}.*$"                                # eat white

album_gain=`echo "${table}"|sed -n "s/${pat1}/\1/p"`
echo "album gain: ${album_gain} dB"

# define pattern for track related values.
pat2=""
pat2="${pat2}^[ ]*"                                # eat white
pat2="${pat2}\([^ |]*\)"                        # col #1: gain
pat2="${pat2}[ ]*dB[ ]*|[ ]*"                    # eat white
pat2="${pat2}\([^ |]*\)"                        # col #2: peak
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #3: scale
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #4: new peak
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #5: left dc offset
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #6: right dc offset
pat2="${pat2}[ ]*|[ ]*"                            # eat white
pat2="${pat2}\([^ |]*\)"                        # col #7: track
pat2="${pat2}.*$"                                # eat white

# create "folder.csv" and write header to it.
header="file"
header="${header}\tartist"
header="${header}\talbum"
header="${header}\tyear"
header="${header}\ttrack"
header="${header}\ttitle"
header="${header}\tcomment"
header="${header}\tgenre"
header="${header}\treplaygain_track_gain"
header="${header}\treplaygain_album_gain"
header="${header}\talbumartist"
header="${header}\tcomposer"
header="${header}\tpublisher"
header="${header}\tdisc"
header="${header}\tbpm"
echo -e "${header}" > folder.csv

# for each track ...
for track in `echo "${table}"|sed -n "s/${pat2}/\7/p"`; do
  # get current track gain.
  track_gain=`echo "${table}"|grep "${track}"|sed -n "s/${pat2}/\1/p"`
  echo "track: ${track}, track gain: ${track_gain} dB"

  # encode current track.
  mpcenc --overwrite ${track}

  # append a row corresponding to current track into "folder.csv"
  row="`basename ${track} .wav`.mpc"        # file
  row="${row}\t"                            # artist
  row="${row}\t"                            # album
  row="${row}\t"                            # year
  row="${row}\t"                            # track
  row="${row}\t"                            # title
  row="${row}\t"                            # comment
  row="${row}\t"                            # genre
  row="${row}\t${track_gain} dB"            # replaygain_track_gain
  row="${row}\t${album_gain} dB"            # replaygain_album_gain
  row="${row}\t"                            # albumartist
  row="${row}\t"                            # composer
  row="${row}\t"                            # publisher
  row="${row}\t"                            # disc
  row="${row}\t"                            # bpm
  echo -e "${row}" >> folder.csv
done

FFSoX Player 0.1 Initial Release

Reply #22
Hello,

Tagging Musepack files with RG values is not correct. Musepack is designed with native RG support, that's why the RG data are stored in the header. You can find the specification here
In order to apply correctly RG data to the file one should use mpcgain (cli) or music organizers as Foobar, MusicBee etc.
On the other hand, APEv2 is the only allowed tag system to store metadata in Musepack files, so I don't think that it is acceptable to use some workarounds.
Whell, it seems that mpc support needs too much efforts, so don't loose your time. There are already two ways of playing mpc files on Winamp, but they are not perfect. The first one is by using the unofficial plugin from mpc developers. However, this plugin does not support transcoding (not that I would use it anyway) and some other new features of WA5.
The other way is by the DS plugin + DS filters, but in this way WA does not show the tags (although other players with DS support show them).
I hoped that your plugin will become the new official way to play mpc files, but it seems that the ffmpeg really provide very basic implementation, so don't bother with that.
Anyway, I don't use WA anymore, this request was more because of my wife .




FFSoX Player 0.1 Initial Release

Reply #23
Thank you for your support, Antonski.

The other way is by the DS plugin + DS filters, but in this way WA does not show the tags (although other players with DS support show them).

That's exactly why the currently undocumented feature described above is intentionally a major feature of the FFSoX Player plug-in. It allows you to RG your music clips as well and to shuffle them through the same playlist as any other audio file. Up to now I couldn't figure out whether there is any video format (VOB, AVI, MKV, etc.) at all supporting RG or even allow to set the corresponding tags. Could somebody help out with some respective information?

Anyway, I don't use WA anymore, this request was more because of my wife .

I'm using WA because it allows playing video clips along audio. Not to forget it's API 

FFSoX Player 0.1 Initial Release

Reply #24
v0.4.4 released

What's new?
  • Changed order of applying the replay gain and resampling effects. Resampling is now the first effect.
  • The stereo (2.0) audio stream is preferred over any other audio stream.
  • Added an "Objectives" section to the documentation describing the objectives why we are developing the the plug-in (currently only with respect to audio processing).
For details go here.
For download go here.