FFSoX Player 0.1 Initial Release |
![]() ![]() |
FFSoX Player 0.1 Initial Release |
Jun 13 2010, 14:47
Post
#1
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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/ |
|
|
|
Jun 13 2010, 18:27
Post
#2
|
|
|
Group: Members Posts: 58 Joined: 2-February 10 Member No.: 77800 |
thanks a lot...
_ |
|
|
|
Jun 27 2010, 17:08
Post
#3
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
Just released v0.2:
http://sourceforge.net/projects/in-ffsox/files/ What's new?
Would be glad to get some feedback from you. Peter |
|
|
|
Jul 4 2010, 19:27
Post
#4
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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 |
|
|
|
Jul 25 2010, 14:47
Post
#5
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
v0.4 released
What's new?
For download go here. |
|
|
|
Aug 8 2010, 14:13
Post
#6
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
v0.4.1 released
What's new?
For download go here. This post has been edited by pbelkner: Aug 8 2010, 14:16 |
|
|
|
Aug 8 2010, 14:17
Post
#7
|
|
|
Group: Members Posts: 166 Joined: 28-September 06 Member No.: 35705 |
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 This post has been edited by ZinCh: Aug 8 2010, 14:46 |
|
|
|
Aug 8 2010, 16:13
Post
#8
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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? This post has been edited by pbelkner: Aug 8 2010, 16:20 |
|
|
|
Aug 8 2010, 20:17
Post
#9
|
|
|
Group: Members Posts: 166 Joined: 28-September 06 Member No.: 35705 |
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) This post has been edited by ZinCh: Aug 8 2010, 20:33 |
|
|
|
Aug 8 2010, 23:46
Post
#10
|
|
|
Group: Members Posts: 6 Joined: 7-September 07 Member No.: 46862 |
dont work flac winamp seek bar...
|
|
|
|
Aug 9 2010, 10:26
Post
#11
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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:
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. This post has been edited by pbelkner: Aug 9 2010, 10:27 |
|
|
|
Aug 9 2010, 10:35
Post
#12
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
dont work flac winamp seek bar... From my limited understanding of SoX and FFmpeg I have the following impression:
This post has been edited by pbelkner: Aug 9 2010, 11:27 |
|
|
|
Aug 22 2010, 16:31
Post
#13
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
|
|
|
|
Aug 22 2010, 18:52
Post
#14
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
|
|
|
|
Aug 23 2010, 16:36
Post
#15
|
|
![]() Group: Members Posts: 195 Joined: 8-October 01 From: Sofia, Bulgaria Member No.: 250 |
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 |
|
|
|
Aug 23 2010, 17:07
Post
#16
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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 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 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? |
|
|
|
Aug 28 2010, 12:41
Post
#17
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
|
|
|
|
Aug 29 2010, 23:11
Post
#18
|
|
![]() Group: Members Posts: 195 Joined: 8-October 01 From: Sofia, Bulgaria Member No.: 250 |
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? ~ |
|
|
|
Aug 30 2010, 10:13
Post
#19
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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. |
|
|
|
Aug 30 2010, 23:28
Post
#20
|
|
![]() Group: Members Posts: 195 Joined: 8-October 01 From: Sofia, Bulgaria Member No.: 250 |
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. |
|
|
|
Aug 31 2010, 06:52
Post
#21
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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 #!/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. |
|
|
|
Aug 31 2010, 08:02
Post
#22
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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: 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:The following script demonstrate how to pseudo tag Musepack SV8: CODE #!/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 This post has been edited by pbelkner: Aug 31 2010, 08:05 |
|
|
|
Sep 2 2010, 00:59
Post
#23
|
|
![]() Group: Members Posts: 195 Joined: 8-October 01 From: Sofia, Bulgaria Member No.: 250 |
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 |
|
|
|
Sep 2 2010, 07:43
Post
#24
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
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 |
|
|
|
Oct 10 2010, 14:50
Post
#25
|
|
![]() Group: Members Posts: 395 Joined: 13-June 10 Member No.: 81467 |
v0.4.4 released
What's new?
For download go here. |
|
|
|
![]() ![]() |
|
Lo-Fi Version | Time is now: 18th May 2013 - 23:52 |