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: Wack, the next generation of Flacattack (Read 56849 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

Wack, the next generation of Flacattack

I've just released Wack. From the website, www.uninformative.com/wack:

Quote
Wack is an application similar to M.A.R.E.O and was the next logical step after working on Flacattack. Wack allows you to work in conjunction with E.A.C. to create a digital copy of your CD collection. Wack gives you the ability to create multiple copies of your collection using different audio formats, while still only requiring you to rip your CDs one time. You can choose to create image and cuesheet files or individual files for each track using any number of audio formats. A typical situation is one where you would archive your collection using a lossless encoder and then have a lossy encoded copy of your collection for use on a portable device.

Wack is compatible with most encoders including Lame, Musepack, Ogg Vorbis, FAAC, ITunesEncode, Flac, Wavpack, Monkey's Audio, True Audio, OptimFrog, La, Shorten, and possibly others.

The Wack download includes a program called wavsplit created by Tangerine from Hydrogenaudio.

Wack, the next generation of Flacattack

Reply #1
Thanks a lot!

A question though - I had a quick look at the encoder.ini..

Is it mandatory to set EXEPATH and REPLAYGAINEXEPATH for each and every encoder? I tend to keep those executables in the PATH anyway, so it would be easier to only specify the name instead.
Friends don't let friends use lossy codecs.  (char0n)

Wack, the next generation of Flacattack

Reply #2
Quote
Thanks a lot!

A question though - I had a quick look at the encoder.ini..

Is it mandatory to set EXEPATH and REPLAYGAINEXEPATH for each and every encoder? I tend to keep those executables in the PATH anyway, so it would be easier to only specify the name instead.
[a href="index.php?act=findpost&pid=297272"][{POST_SNAPBACK}][/a]


I'm thinking you would be okay doing that, but I'm not positive. Only one way to find out - go ahead and try.

Wack, the next generation of Flacattack

Reply #3
thanks, will do
Friends don't let friends use lossy codecs.  (char0n)

Wack, the next generation of Flacattack

Reply #4
matroska output planned ?

Christian
matroska project admin

Wack, the next generation of Flacattack

Reply #5
Quote
matroska output planned ?

Christian
matroska project admin
[a href="index.php?act=findpost&pid=297985"][{POST_SNAPBACK}][/a]


I'll look into it.

Wack, the next generation of Flacattack

Reply #6
Wack 0.20 just released.
Download

Changes:

# Image cuesheet is now converted to individual file cuesheet when encoding to individual files. A copy of the cuesheet is put in the same folder as the audio file(s). I think this is pretty neat.

# Got rid of log file references in the encoder.ini file. I am not going to support anything to do with the E.A.C. log file.

# Added NAAENC section to encoder.ini file. I haven't tested it yet.

On the to-do list are:

1) Various Artist handling
2) Embedded cuesheet support

Anybody have any other requests?

Quote
matroska output planned ? smile.gif

Christian
matroska project admin


I looked into Matroska a bit, but I'm not sure if I will support it any time soon. However, I reserve the right to change my mind.

Wack, the next generation of Flacattack

Reply #7
Quote
I looked into Matroska a bit, but I'm not sure if I will support it any time soon. However, I reserve the right to change my mind.


Please note that

- there are almost ready to use C/C++/Java/Delphi libraries to write matroska files

- you can use mkvmerge.exe from command line / script to create .mka files, like what goldenear has done with his EAC plugin

Christian
matroska project admin

Wack, the next generation of Flacattack

Reply #8
If you have questions about the Matroska format or any of the existing libraries, there are usually some developers on #matroska on irc.corecodec.org.
irc://irc.corecodec.org/matroska

Wack, the next generation of Flacattack

Reply #9
Great work Ponchorage, all sounds very promising - looking forward to trying this.

When ripping to individual tracks, I assume the replaygain applied must be track based. Is there anyway that you can somehow detect once the entire rip is finished, and then have an option that can apply albumgain?

Sounds impossible, thinking about it, unless EAC somehow passes some data that indicates it's the last track??

Wack, the next generation of Flacattack

Reply #10
You're correct in assuming that track gain is applied when ripping to individual tracks. I've been looking into how to apply album gain, though.

I can tell when it is the last track though. After the image file is ripped, it is divided into separate WAV tracks which are then encoded to the file format of your choice. The track splitting is based on the cuesheet. So, I know how many tracks are being encoded.

The main issue I am having with album gain is keeping it general enough so that it will continue to work with all the replaygain applications. So far, track gain will work okay as far as I can tell.

However, album gain is a bit more tricky. Some replaygain applications will allow wildcards on their command line or a directory name, while others require that you pass in the name of each and every file that you wan't to apply replagain to.

The problem is with the latter. You can't specify, in the encoder.ini file on the REPLAYGAINARGUMENTS line, the name of each and every file because you don't yet know what those files will be called.

I'm thinking I'll have to implement some other variable, that when found by Wack, will tell it that album gain should be applied by making a list of all the encoded files for that album and appending them to the replaygain command line arguments.

Edited spelling.

Wack, the next generation of Flacattack

Reply #11
Quote
I'm thinking I'll have to implement some other variable, that when found by Wack, will tell it that album gain should be applied by making a list of all the encoded files for that album and appending them to the replaygain command line arguments.

Right. As I guess you can then use the cuesheet info to get the file names etc. Sounds very promising! Would definitely be a great feature. Good luck 

Wack, the next generation of Flacattack

Reply #12
Wack 0.30 just released.
Download Wack 0.30

Changes:

Added support for wavegain analysis that results in a scale value being returned which can then be used by encoders, such as Lame that uses the --scale option. Use %x as a variable in your encoder arguments which will be replaced by the scale value returned from wavegain. You will need to download wavegain  and put it in the same directory as Wack. If you don't want wavegain analysis to be done, remove wavegain from the Wack directory.

Wack, the next generation of Flacattack

Reply #13
Grrrr what am I doing wrong? I should mention I haven't slept in a few days. Wack gives a FileNotFoundException right away, before splitting the wave up or anything.

;[MP3-ID3]
EXEPATH=C:\Program Files\Lame\lame.exe
ARGUMENTS=--preset standard --scale %x --ta "%a" --tt "%t" --tl "%g" --ty "%y" --tn "%n" %s %d
FILEPATH=C:\Documents and Settings\Jeremy\Desktop\Music\%a\%g\%t
EXTENSION=.mp3
FILETYPE=1
APPLYREPLAYGAIN=false
REPLAYGAINEXEPATH=
REPLAYGAINARGUMENTS=

I don't HAVE replaygain, tried plugging in lame's path there though just to check and it still did it. Lame is definitely in that spot, and wavegain is in the same folder as wack. EAC set up like on your webpage.

Wack, the next generation of Flacattack

Reply #14
You need to uncomment that first line:

;[MP3-ID3] --> [MP3-ID3]

Did you leave wavsplit in the same directory as Wack?

Try making a new encoder.ini file and put just the [MP3-ID3] encoder in it.

Wack, the next generation of Flacattack

Reply #15
I just forgot to change .mp3 to .wack in EAC. Doh!

... so yeah... this works awsome, I can't believe just 2 days after I started pondering how to do this it is working! And I didn't have to lift a finger! Beers all around if either you or John33 are ever in Calgary.

... now I have to take it upon myself to fix/improve LAME's ID3v2 handling so I don't need an external tagger.

Wack, the next generation of Flacattack

Reply #16
Not that i'm in a position to be making more demands, but here is my humble list of extra parameters I think would be worth adding:

1) One that prints out the --scale value in decibels instead - just calculate 10E(scale * 0.05). I'd personally use this for tagging, some encoders might also use that instead of --scale.

2) the date (year, month, day).

3) The track # formatted to xx/xx format instead of just x.

Also, I'm thinking that rather than using lame's crummy ID3 support i'd just pass parameters to something like this. Figure I can probably do that just by pretending its a replaygain program, but since that sounds hackish, maybe you should change the replaygain parameters to simply "post-processor" or something.

Wack, the next generation of Flacattack

Reply #17
And here's another one some people might be interested in...

INSTANCES=2 (default to 1)

so that multiple encoders can be run at once (for those with SMP/dual-core/Hyperthreading). This one isn't greed, I don't have any of these things

Cheers!

Wack, the next generation of Flacattack

Reply #18
Quote
And here's another one some people might be interested in...

INSTANCES=2 (default to 1)

so that multiple encoders can be run at once (for those with SMP/dual-core/Hyperthreading). This one isn't greed, I don't have any of these things

Cheers!
[a href="index.php?act=findpost&pid=299201"][{POST_SNAPBACK}][/a]


I've toyed with this idea, but it is not the easiest to implement it so that the user has that option. Maybe I'll look into it again and see if I can get some help here.

Quote
1) One that prints out the --scale value in decibels instead - just calculate 10E(scale * 0.05). I'd personally use this for tagging, some encoders might also use that instead of --scale.

2) the date (year, month, day).

3) The track # formatted to xx/xx format instead of just x.

Also, I'm thinking that rather than using lame's crummy ID3 support i'd just pass parameters to something like this. Figure I can probably do that just by pretending its a replaygain program, but since that sounds hackish, maybe you should change the replaygain parameters to simply "post-processor" or something.


1 & 2)I can easily add the variable for decibels and the date.

3)Is this for tagging or what are you thinking? I guess I could add that too pretty easily.

I'll add these to the to-do list.

Wack, the next generation of Flacattack

Reply #19
Quote
3)Is this for tagging or what are you thinking? I guess I could add that too pretty easily.

I'll add these to the to-do list.
[a href="index.php?act=findpost&pid=299287"][{POST_SNAPBACK}][/a]


yeah, for tagging. Maybe just giving us a variable for total tracks (count the # of wavs in the folder). Both track # and total track count should also be available in "02" as well as "2" format. So thats 4 separate variables for track #s. I think that's the easiest way, then people can format how they like. The alternative would be some sort of pattern matching, printf-style formatting, which would be more work but also more robust.

Wack, the next generation of Flacattack

Reply #20
One very minor issue I've had.

With EAC I use "On extraction, start external compressors queued in the background".

Wack doesn't close the console window.  This is good as you can see what happened.  However, I often forget to close the window, and begin a new encoding.

Once EAC has written the WAVE it pauses, waiting for WACK to become free again.  Once I finally notice that I still have a WACK console open I close it.  WACK begins as it should, but WavSplit throws an error, cancelling the whole operation.  I don't know whether the previous instance of WACK hasn't had chance to release the hold on it or something.

I guess if you implement multiple instances this won't be an issue, as I'd just end up with two consoles open.

I thought it was worth mentioning though.
I'm on a horse.

Wack, the next generation of Flacattack

Reply #21
I've been meaning to make Wack close its window automatically. It was being kept open more for debugging purposes, but I'll remove that "feature". Thanks for the heads up.

Wack, the next generation of Flacattack

Reply #22
Quote
Once EAC has written the WAVE it pauses, waiting for WACK to become free again. Once I finally notice that I still have a WACK console open I close it. WACK begins as it should, but WavSplit throws an error, cancelling the whole operation. I don't know whether the previous instance of WACK hasn't had chance to release the hold on it or something.


One of the last things that Wack does is delete the source WAV and cuesheet. So, in your case EAC writes over the existing WAV and cuesheet (for the next CD), then when you close the first instance of Wack, it deletes these files. The next instance of Wack begins and immediately can't find the source WAV and cuesheet because they were just deleted.

A workaround is to name each source WAV and cue something different when prompted by EAC. It doesn't matter what its named because its just temporary anyway and will get renamed by Wack according to your naming scheme in encoders.ini.

Wack, the next generation of Flacattack

Reply #23
Quote
1) One that prints out the --scale value in decibels instead - just calculate 10E(scale * 0.05). I'd personally use this for tagging, some encoders might also use that instead of --scale.


@Jebus and everybody else too

Are you sure this is the correct formula to calculate the decibels? I'm getting some weird  numbers.

Wack, the next generation of Flacattack

Reply #24
Quote
Quote
1) One that prints out the --scale value in decibels instead - just calculate 10E(scale * 0.05). I'd personally use this for tagging, some encoders might also use that instead of --scale.


@Jebus and everybody else too

Are you sure this is the correct formula to calculate the decibels? I'm getting some weird  numbers.
[a href="index.php?act=findpost&pid=299925"][{POST_SNAPBACK}][/a]

Code: [Select]
        dB = 20. * log10(scale);