<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.hydrogenaudio.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frodoontop</id>
	<title>Hydrogenaudio Knowledgebase - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.hydrogenaudio.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Frodoontop"/>
	<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Special:Contributions/Frodoontop"/>
	<updated>2026-04-29T01:41:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=17508</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=17508"/>
		<updated>2007-07-08T19:38:06Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: update for 0.4.2 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]]&lt;br /&gt;
| caption = Open-source secure ripper for Linux&lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.4.2&lt;br /&gt;
| preview_release = SVN&lt;br /&gt;
| operating_system = Linux, Mac OS/X&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL&lt;br /&gt;
| website = [http://code.google.com/p/rubyripper/ Rubyripper website (hosted by Google Code)]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language.&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X is supported for the CLI frontend. The source (same as executable) is published under the GPL3 license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.4.2 was released on 8 July 2007.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.4.1 was released on 23 April 2007.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
== Correction mechanism ==&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong.&lt;br /&gt;
&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; (&#039;&#039;libglade2-ruby&#039;&#039;) and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal Rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
These screenshots are taken with the 0.4.1 release:&lt;br /&gt;
* http://code.google.com/p/rubyripper/wiki/Screenshots&lt;br /&gt;
&lt;br /&gt;
== Suggestions for next version ==&lt;br /&gt;
Add an issue in the bugtracker to discuss any wishes: &lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
= Development API =&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase.&lt;br /&gt;
&lt;br /&gt;
== Becoming a Rubyripper developer ==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible.&amp;lt;br/&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
== Data files and class structures ==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
== Adding a new frontend ==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the GUI first presents the info of a Cddb instance. When the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. The update function is used as a communication channel for the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://code.google.com/p/rubyripper/ Rubyripper] the official Google Code website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=17468</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=17468"/>
		<updated>2007-06-23T12:17:40Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: Update for 0.4.1 version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]]&lt;br /&gt;
| caption = Open-source secure ripper for Linux&lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.4.1&lt;br /&gt;
| preview_release = SVN&lt;br /&gt;
| operating_system = Linux, Mac OS/X&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL&lt;br /&gt;
| website = [http://code.google.com/p/rubyripper/ Rubyripper website (hosted by Google Code)]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language.&lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X is supported for the CLI frontend. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.4.1 was released on 23 April 2007.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
== Correction mechanism ==&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong.&lt;br /&gt;
&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; (&#039;&#039;libglade2-ruby&#039;&#039;) and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: &amp;lt;code&amp;gt;make install&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal Rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
These screenshots are taken with the 0.4.1 release:&lt;br /&gt;
* http://code.google.com/p/rubyripper/wiki/Screenshots&lt;br /&gt;
&lt;br /&gt;
== Suggestions for next version ==&lt;br /&gt;
Add an issue in the bugtracker to discuss any wishes: &lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
== Known Bugs ==&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
= Development API =&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase.&lt;br /&gt;
&lt;br /&gt;
== Becoming a Rubyripper developer ==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible.&amp;lt;br/&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
== Data files and class structures ==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
== Adding a new frontend ==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the GUI first presents the info of a Cddb instance. When the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. The update function is used as a communication channel for the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://code.google.com/p/rubyripper/ Rubyripper] the official Google Code website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15812</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15812"/>
		<updated>2006-12-07T17:55:44Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Development progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
These screenshots are taken with the 0.3 release:&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/cddb-info.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/codecs.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/other-settings.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/ripping-settings.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/status-window.png The status window]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the gui first presents the info of a Cddb instance. And when the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. This is used as a communication channel of the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* reworking the Secure_rip class to allow partial reripping tracks with problems. This will be a time savior for hard to rip cd&#039;s. However, the implementation is not so simple. Now that 0.3 version is released, work is started on this. Minimum ripping size will be +/- 2,5 MB to prevent cache problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15795</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15795"/>
		<updated>2006-12-06T12:19:53Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
These screenshots are taken with the 0.3 release:&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/cddb-info.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/codecs.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/other-settings.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/ripping-settings.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/status-window.png The status window]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the gui first presents the info of a Cddb instance. And when the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. This is used as a communication channel of the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. It was improved by opening the main window with a fixed size. The tracklist becomes scrollable, if it is to large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* He also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. The task that is being decided upon is, which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15794</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15794"/>
		<updated>2006-12-06T12:19:20Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
These screenshots are taken with the 0.3 release:&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/cddb-info.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/codecs.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/other-settings.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/ripping-settings.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/status-window.png The status window]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the gui first presents the info of a Cddb instance. And when the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. This is used as a communication channel of the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. It was improved by opening the main window with a fixed size. The tracklist becomes scrollable, if it is to large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* He also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. The task that is being decided upon is, which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15793</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15793"/>
		<updated>2006-12-06T12:12:54Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Screenshots */ Updated for 0.3 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
These screenshots are taken with the 0.3 release:&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/cddb-info.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/codecs.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/other-settings.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/ripping-settings.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/0.3/status-window.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the gui first presents the info of a Cddb instance. And when the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. This is used as a communication channel of the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. It was improved by opening the main window with a fixed size. The tracklist becomes scrollable, if it is to large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* He also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. The task that is being decided upon is, which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15781</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15781"/>
		<updated>2006-12-04T22:12:20Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Adding a new frontend */ deleting some obsolete info, was too much anyway&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rubyripper Guides== &lt;br /&gt;
* [[Rubyripper Debian and Ubuntu Based Distro Installation]] guide for installing Rubyripper on Debian/Linux platforms.&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and aren&#039;t difficult to make, once you know your gui toolkit. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. From a starting point it would be best to use the current GTK2 or CLI code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
The basic idea is that the gui first presents the info of a Cddb instance. And when the user wants to start, a new Rubyripper instance is started with all the settings in a Hash as a parameter. You can copy most of the code from the other user interfaces. The user interface should also have an update function. This is used as a communication channel of the Rubyripper instance.&lt;br /&gt;
&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. It was improved by opening the main window with a fixed size. The tracklist becomes scrollable, if it is to large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* He also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. The task that is being decided upon is, which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15780</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15780"/>
		<updated>2006-12-04T22:04:39Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */ update for the 0.3 release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = [[Image:Rubyripper-screenshot.png|100px]] &lt;br /&gt;
| caption = Open-source secure ripper for Linux &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux, BSD should work but is untested. OS X can be supported in the near future if some tester stands up. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.3 was released on 4 December 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;cd-discid&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair. Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;cd-discid&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=8282&lt;br /&gt;
&lt;br /&gt;
See the README file for installation instructions or just type: make install&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
Please post any ideas, bugs or wishes at the Google bug tracker.&lt;br /&gt;
* http://code.google.com/p/rubyripper/issues/list&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
* &amp;lt;none&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rubyripper Guides== &lt;br /&gt;
* [[Rubyripper Debian and Ubuntu Based Distro Installation]] guide for installing Rubyripper on Debian/Linux platforms.&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. He won&#039;t implement this himself though, due to the fact that he is more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. He doesn&#039;t use any new features, therefore it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. &amp;lt;br&amp;gt;&lt;br /&gt;
Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact him at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. Being the only lead developer, the hope is you will be consistent with the current GTK2 interface design. If there are valid reasons to make any adjustments, please consult with him first. From a starting point it would be best to use the current GTK2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
What requirements would code for a new GUI have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &amp;lt;code&amp;gt;&#039;require ./rr_lib.rb&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Make a class of the GUI code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from &amp;lt;code&amp;gt;$HOME/rubyripper_settings&amp;lt;/code&amp;gt; if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the GUI. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the GUI.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class. This is done by passing the settings Hash as an argument. &#039;&#039;(In other languages sometimes called a dictionary)&#039;&#039;&lt;br /&gt;
# The hash should contain all settings: &amp;lt;code&amp;gt;&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped) &amp;lt;/code&amp;gt;&lt;br /&gt;
# All communication back to the GUI happens via the update function, that should be in the GUI, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* &amp;lt;code&amp;gt;ripping_progress&amp;lt;/code&amp;gt;. value is a float. &amp;lt;math&amp;gt;100 % = 1.0. &amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* &amp;lt;code&amp;gt;encoding_progress&amp;lt;/code&amp;gt;. value is a float. &amp;lt;math&amp;gt;100 % = 1.0.&amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* &amp;lt;code&amp;gt;log_change&amp;lt;/code&amp;gt;. value is a string. Used to update the status screen.&lt;br /&gt;
#* &amp;lt;code&amp;gt;track_finished.&amp;lt;/code&amp;gt; value is an integer. Used to deselect the track in the GUI.&lt;br /&gt;
#* &amp;lt;code&amp;gt;finished.&amp;lt;/code&amp;gt; value is not important. This means that the ripping and encoding are finished. Used to unlock the GUI-buttons.&lt;br /&gt;
#* &amp;lt;code&amp;gt;error.&amp;lt;/code&amp;gt; value is a string. Used to bring up a popup window with the error message.&lt;br /&gt;
#* &amp;lt;code&amp;gt;cddb_hit.&amp;lt;/code&amp;gt; value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
== Mac OS/X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows Mac OS/X [[core audio]] very well and can test any code if needed is a necessity. The main differences with Mac OS/X and Linux support are:&lt;br /&gt;
&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
This section was added in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
Currently work is being done on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. It was improved by opening the main window with a fixed size. The tracklist becomes scrollable, if it is to large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* He also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. The task that is being decided upon is, which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Talk:Rubyripper&amp;diff=15145</id>
		<title>Talk:Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Talk:Rubyripper&amp;diff=15145"/>
		<updated>2006-11-01T20:48:40Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: A big thanks to HotShotGG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;@HotShotGG: I really appreciate the work you&#039;re doing. As English is not my native language and my time is limited, I naturally make (hopefully small) mistakes. Your latest changes seem to be an improvement as well. I didn&#039;t realize that a personal viewpoint of writing isn&#039;t all that professional ;)&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15113</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=15113"/>
		<updated>2006-10-27T20:57:01Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Installation */ Add notion of svn source&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox Software&lt;br /&gt;
| name = Rubyripper&lt;br /&gt;
| screenshot = &lt;br /&gt;
| caption = &lt;br /&gt;
| maintainer = Bouke Woudstra&lt;br /&gt;
| stable_release = 0.2&lt;br /&gt;
| preview_release = 0.1.1&lt;br /&gt;
| operating_system = Linux&lt;br /&gt;
| use = Digital Audio Extraction&lt;br /&gt;
| license = GPL &lt;br /&gt;
| website = [http://rubyforge.org/projects/rubyripper/ Rubyforge Website] &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;. The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
SVN Checkout now possible. I finally got my lazy a** to set it up. It wasn&#039;t that difficult after all :) Use: &amp;lt;code&amp;gt;svn checkout http://rubyripper.googlecode.com/svn/trunk/ rubyripper &amp;lt;/code&amp;gt; to get the latest source code.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. I won&#039;t implement this myself though, due to the fact that I am more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. I don&#039;t use any new features, therefore I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. Being the only lead developer, I hope you will be consistent with the current GTK2 interface design. If there are valid reasons to make any adjustments, please consult with me first. From a starting point it would be best to use the current GTK2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
What requirements would code for a new GUI have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &amp;lt;code&amp;gt;&#039;require ./rr_lib.rb&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Make a class of the GUI code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from &amp;lt;code&amp;gt;$HOME/rubyripper_settings&amp;lt;/code&amp;gt; if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the GUI. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the GUI.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class. This is done by passing the settings Hash as an argument. &#039;&#039;(In other languages sometimes called a dictionary)&#039;&#039;&lt;br /&gt;
# The hash should contain all settings: &amp;lt;code&amp;gt;&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped) &amp;lt;/code&amp;gt;&lt;br /&gt;
# All communication back to the GUI happens via the update function, that should be in the GUI, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* &amp;lt;code&amp;gt;ripping_progress&amp;lt;/code&amp;gt;. value is a float. &amp;lt;math&amp;gt;100 % = 1.0. &amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* &amp;lt;code&amp;gt;encoding_progress&amp;lt;/code&amp;gt;. value is a float. &amp;lt;math&amp;gt;100 % = 1.0.&amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* &amp;lt;code&amp;gt;log_change&amp;lt;/code&amp;gt;. value is a string. Used to update the status screen.&lt;br /&gt;
#* &amp;lt;code&amp;gt;track_finished.&amp;lt;/code&amp;gt; value is an integer. Used to deselect the track in the GUI.&lt;br /&gt;
#* &amp;lt;code&amp;gt;finished.&amp;lt;/code&amp;gt; value is not important. This means that the ripping and encoding are finished. Used to unlock the GUI-buttons.&lt;br /&gt;
#* &amp;lt;code&amp;gt;error.&amp;lt;/code&amp;gt; value is a string. Used to bring up a popup window with the error message.&lt;br /&gt;
#* &amp;lt;code&amp;gt;cddb_hit.&amp;lt;/code&amp;gt; value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
==OS X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows OS X very well and can test any code if needed is a necessity. The main differences with OS X and Linux support are:&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
I added this section in order to figure out the right way to implement features into Rubyripper. &lt;br /&gt;
I am currently working on:&lt;br /&gt;
* The tracklist presentation. Someone on the forums suggested, the interface isn&#039;t perfect. I improved it by opening the main window with a fixed size. The tracklist becomes scrollable, if it is too large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window was added, instead of a tab. This can be seen in the previous screenshots. &lt;br /&gt;
* I also removed the status bars and the status tab from the main view. They were moved to a separate ripping window, like [[EAC]]. I am still working on which buttons should remain visible. If you have any ideas how to improve the GUI shown in the next screenshot, feel free to share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.rarewares.org/debian/packages/unstable/rubyripper_0.2-0rarewares1_i386.deb Debian Package] unstable Debian compile of Rubyripper. &lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:CD Rippers]]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12261</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12261"/>
		<updated>2006-08-12T13:32:18Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Developement progress */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. I won&#039;t implement this myself though, due to the fact that I am more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. I don&#039;t use any new features, therefore I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. Being the only lead developer, I hope you will be consistent with the current GTK2 interface design. If there are valid reasons to make any adjustments, please consult with me first. From a starting point it would be best to use the current GTK2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &amp;lt;code&amp;gt;&#039;require ./rr_lib.rb&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from &amp;lt;code&amp;gt;$HOME/rubyripper_settings&amp;lt;/code&amp;gt; if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class. This is done by passings the settings Hash as an argument. &#039;&#039;(In other languages sometimes called a dictionary)&#039;&#039;&lt;br /&gt;
# The hash should contain all settings: &amp;lt;code&amp;gt;&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped) &amp;lt;/code&amp;gt;&lt;br /&gt;
# All communication back to the GUI happens via the update function, that should be in the GUI, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. &amp;lt;math&amp;gt;100 % = 1.0. &amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. &amp;lt;math&amp;gt;100 % = 1.0.&amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the GUI.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the GUI-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup window with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
==OS X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows OS X very well and can test any code if needed is a necessity. The main differences with OS X and Linux support are:&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Development progress=&lt;br /&gt;
When implementing features, I often wonder what should be the right way. For this kind of discussion, I added this section.&lt;br /&gt;
I am currently working at:&lt;br /&gt;
* The tracklist presentation. As someone at the forums suggested, the interface isn&#039;t perfect. I improved it by opening the main window with a fixed size. The tracklist becomes scrollable, if it is too large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window, instead of a tab. As can be seen in the previous screenshots, I also removed the status bars and the status tab from the main view. They are moved to a separate ripping window, like [[EAC]]. Still working on which buttons should be visible though.If you have any ideas how to improve the looks as shown in the next screenshot, please share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12260</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12260"/>
		<updated>2006-08-12T12:22:20Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: Added development progress&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Development API=&lt;br /&gt;
This section will give some technical information, which should be useful for interested developers. It will outline how the code is structured and what the API of Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simple to add new frontends to the current codebase. Currently there are CLI and GTK2 frontends. A Qt frontend or a Cocoa Mac OS frontend, should not be terribly difficult to implement. I won&#039;t implement this myself though, due to the fact that I am more interested in fine tuning the Rubyripper logic codebase. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter &amp;quot;Until Trouble Strikes&amp;quot;. This is a somewhat dated version, but still perfectly usable. I don&#039;t use any new features, therefore I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a GUI-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at &#039;&#039;rubyripperdev@nospam@gmail.com&#039;&#039;. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Data files and class structures==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* &amp;lt;code&amp;gt;rr_lib.rb.&amp;lt;/code&amp;gt; This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** &amp;lt;code&amp;gt;Gui_Support.&amp;lt;/code&amp;gt; This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). This is were log file is generated and the error analysis takes place.&lt;br /&gt;
** &amp;lt;code&amp;gt;Cddb.&amp;lt;/code&amp;gt; This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that, it&#039;s using an old contact protocol and never  gives away any information on the current year. This is the main reason why the Cddb class handles all server contact.&lt;br /&gt;
** &amp;lt;code&amp;gt;Secure_rip.&amp;lt;/code&amp;gt; As might be expected, all error correction logic is put in here.&lt;br /&gt;
** &amp;lt;code&amp;gt;Encode. &amp;lt;/code&amp;gt; As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** &amp;lt;code&amp;gt;Rubyripper.&amp;lt;/code&amp;gt; Handles the usage of the different classes. It also performs some logical checks before starting at all.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_cli.rb.&amp;lt;/code&amp;gt; It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper_gtk.rb.M&amp;lt;/code&amp;gt; It has one class that contains the code for the GTK2 user interface frontend.&lt;br /&gt;
* &amp;lt;code&amp;gt;rubyripper.glade.&amp;lt;/code&amp;gt; This is a help file for the GTK interface. It&#039;s made with Glade, a program for designing user interfaces for GTK2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. Take for instance, the current GTK2 frontend, which consists of only 350 lines of code &#039;&#039;(+ the glade file, but this code is automatically created)&#039;&#039;&#039;. Being the only lead developer, I hope you will be consistent with the current GTK2 interface design. If there are valid reasons to make any adjustments, please consult with me first. From a starting point it would be best to use the current GTK2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &amp;lt;code&amp;gt;&#039;require ./rr_lib.rb&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from &amp;lt;code&amp;gt;$HOME/rubyripper_settings&amp;lt;/code&amp;gt; if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class. This is done by passings the settings Hash as an argument. &#039;&#039;(In other languages sometimes called a dictionary)&#039;&#039;&lt;br /&gt;
# The hash should contain all settings: &amp;lt;code&amp;gt;&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped) &amp;lt;/code&amp;gt;&lt;br /&gt;
# All communication back to the GUI happens via the update function, that should be in the GUI, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. &amp;lt;math&amp;gt;100 % = 1.0. &amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. &amp;lt;math&amp;gt;100 % = 1.0.&amp;lt;/math&amp;gt; Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the GUI.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the GUI-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup window with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is an effective way of getting a responsive GUI.&lt;br /&gt;
&lt;br /&gt;
==OS X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows OS X very well and can test any code if needed is a necessity. The main differences with OS X and Linux support are:&lt;br /&gt;
* Audio cd&#039;s may have to be unmounted before they can be ripped.&lt;br /&gt;
* Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In [[cdparanoia]] an option to set the cdrom device is missing, which is there in Linux.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developement progress=&lt;br /&gt;
When implementing features, I often wonder what should be the right way. For this kind of discussion, I added this section.&lt;br /&gt;
I am currently working at:&lt;br /&gt;
* The tracklist presentation. As someone at the forums suggested, the interface isn&#039;t perfect. I improved it by opening the main window with a fixed size. The tracklist becomes scrollable, if it is too large too fit. Screenshots:&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection1.png New tracklist loading 1]&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/track_selection2.png New tracklist loading 2]&lt;br /&gt;
* A separate status window, instead of a tab. As can be seen in the previous screenshots, I also removed the status bars and the status tab from the main view. They are moved to a separate ripping window, like [[EAC]]. Still working on which buttons should be visible though.If you have any ideas how to improve the looks as shown in the next screenshot, please share your opinion!&lt;br /&gt;
** [http://b-woudstra.speedlinq.nl/screenshots/status_window.png New separate status window]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12227</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12227"/>
		<updated>2006-08-07T10:11:12Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Developer info */ Added a subpage about OS X support&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developer info=&lt;br /&gt;
This section will give some technical information, which should be usefull for interested developers. It will outline how the code is structured and what the API of the Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simply to add new frontends to the current codebase. Currently there is a CLI and a GTK2 frontend. But a Qt frontend or a Cocoa Mac OS frontend isn&#039;t terribly difficult to achieve. I won&#039;t implement this myself though, as I&#039;m more interested to finetune the Rubyripper codebase.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter Until trouble strikes. This is a somewhat dated version, but still perfectly usable. As I don&#039;t use any new features I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a gui-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at rubyripperdev@nospam@gmail.com. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Rubyripper files and classes==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* rr_lib.rb. This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** Gui_Support. This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). Also the log file and error analyzing takes place in here.&lt;br /&gt;
** Cddb. This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that it is using an old contact protocol and it almost always don&#039;t give any year info. So the Cddb class handles all server contact.&lt;br /&gt;
** Secure_rip. As might be expected, all error correction logic is put in here.&lt;br /&gt;
** Encode. As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** Rubyripper. Handles the usage of the different classes. Also performs some logical checks before starting at all.&lt;br /&gt;
* rubyripper_cli.rb. It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* rubyripper_gtk.rb. It has one class that contains the code for the gtk2 user interface frontend.&lt;br /&gt;
* rubyripper.glade. This is a help file for the gtk interface. It&#039;s made with Glade, a program for designing user interfaces for gtk2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. For instance, current gtk2 frontend is only 350 lines of code (+ the glade file, but this code is automatically created). As lead developer I only hope you will be consistent with the current gtk2 interface design. If there are good reasons to do it differently, please have a chat with me.  &lt;br /&gt;
As a start it would be best to use the current Gtk2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &#039;require ./rr_lib.rb&#039;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from $HOME/rubyripper_settings if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class, passing the settings Hash as argument. (In other languages sometimes called a dictionary)&lt;br /&gt;
# The hash should contain all settings:&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped)&lt;br /&gt;
# All communication back to the gui, happens via the update function that should be in the gui, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the gui.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the gui-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is a good idea for getting a responsive gui.&lt;br /&gt;
&lt;br /&gt;
==OS X support==&lt;br /&gt;
Since the lead developer doesn&#039;t have a Mac, he cannot test anything. Therefore support from someone who knows a mac very well and can test any code is needed. Main differences with OS X and Linux support are:&lt;br /&gt;
* Audio-cd&#039;s may have to be unmounted before they can be ripped? Linux doesn&#039;t mount audio cd&#039;s at all.&lt;br /&gt;
* In cdparanoia an option to set cdrom is missing, which is there in Linux.&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12226</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12226"/>
		<updated>2006-08-07T10:00:21Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Adding a new frontend */ spelling mistake&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developer info=&lt;br /&gt;
This section will give some technical information, which should be usefull for interested developers. It will outline how the code is structured and what the API of the Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simply to add new frontends to the current codebase. Currently there is a CLI and a GTK2 frontend. But a Qt frontend or a Cocoa Mac OS frontend isn&#039;t terribly difficult to achieve. I won&#039;t implement this myself though, as I&#039;m more interested to finetune the Rubyripper codebase.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter Until trouble strikes. This is a somewhat dated version, but still perfectly usable. As I don&#039;t use any new features I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a gui-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at rubyripperdev@nospam@gmail.com. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Rubyripper files and classes==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* rr_lib.rb. This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** Gui_Support. This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). Also the log file and error analyzing takes place in here.&lt;br /&gt;
** Cddb. This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that it is using an old contact protocol and it almost always don&#039;t give any year info. So the Cddb class handles all server contact.&lt;br /&gt;
** Secure_rip. As might be expected, all error correction logic is put in here.&lt;br /&gt;
** Encode. As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** Rubyripper. Handles the usage of the different classes. Also performs some logical checks before starting at all.&lt;br /&gt;
* rubyripper_cli.rb. It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* rubyripper_gtk.rb. It has one class that contains the code for the gtk2 user interface frontend.&lt;br /&gt;
* rubyripper.glade. This is a help file for the gtk interface. It&#039;s made with Glade, a program for designing user interfaces for gtk2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. For instance, current gtk2 frontend is only 350 lines of code (+ the glade file, but this code is automatically created). As lead developer I only hope you will be consistent with the current gtk2 interface design. If there are good reasons to do it differently, please have a chat with me.  &lt;br /&gt;
As a start it would be best to use the current Gtk2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &#039;require ./rr_lib.rb&#039;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from $HOME/rubyripper_settings if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class, passing the settings Hash as argument. (In other languages sometimes called a dictionary)&lt;br /&gt;
# The hash should contain all settings:&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settings&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped)&lt;br /&gt;
# All communication back to the gui, happens via the update function that should be in the gui, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the gui.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the gui-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is a good idea for getting a responsive gui.&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12225</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12225"/>
		<updated>2006-08-07T09:58:47Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Becoming a developer */ Added a mail adress.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developer info=&lt;br /&gt;
This section will give some technical information, which should be usefull for interested developers. It will outline how the code is structured and what the API of the Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simply to add new frontends to the current codebase. Currently there is a CLI and a GTK2 frontend. But a Qt frontend or a Cocoa Mac OS frontend isn&#039;t terribly difficult to achieve. I won&#039;t implement this myself though, as I&#039;m more interested to finetune the Rubyripper codebase.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a Rubyripper developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter Until trouble strikes. This is a somewhat dated version, but still perfectly usable. As I don&#039;t use any new features I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a gui-toolkit in case you want to add a new frontend.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re ready, please contact me at rubyripperdev@nospam@gmail.com. You can leave out the @nospam part.&lt;br /&gt;
&lt;br /&gt;
==Rubyripper files and classes==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* rr_lib.rb. This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** Gui_Support. This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). Also the log file and error analyzing takes place in here.&lt;br /&gt;
** Cddb. This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that it is using an old contact protocol and it almost always don&#039;t give any year info. So the Cddb class handles all server contact.&lt;br /&gt;
** Secure_rip. As might be expected, all error correction logic is put in here.&lt;br /&gt;
** Encode. As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** Rubyripper. Handles the usage of the different classes. Also performs some logical checks before starting at all.&lt;br /&gt;
* rubyripper_cli.rb. It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* rubyripper_gtk.rb. It has one class that contains the code for the gtk2 user interface frontend.&lt;br /&gt;
* rubyripper.glade. This is a help file for the gtk interface. It&#039;s made with Glade, a program for designing user interfaces for gtk2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. For instance, current gtk2 frontend is only 350 lines of code (+ the glade file, but this code is automatically created). As lead developer I only hope you will be consistent with the current gtk2 interface design. If there are good reasons to do it differently, please have a chat with me.  &lt;br /&gt;
As a start it would be best to use the current Gtk2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &#039;require ./rr_lib.rb&#039;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from $HOME/rubyripper_settings if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class, passing the settings Hash as argument. (In other languages sometimes called a dictionary)&lt;br /&gt;
# The hash should contain all settings:&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settigns&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped)&lt;br /&gt;
# All communication back to the gui, happens via the update function that should be in the gui, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the gui.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the gui-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is a good idea for getting a responsive gui.&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12224</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12224"/>
		<updated>2006-08-07T09:51:05Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Adding a new frontend */ Give some more details&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developer info=&lt;br /&gt;
This section will give some technical information, which should be usefull for interested developers. It will outline how the code is structured and what the API of the Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simply to add new frontends to the current codebase. Currently there is a CLI and a GTK2 frontend. But a Qt frontend or a Cocoa Mac OS frontend isn&#039;t terribly difficult to achieve. I won&#039;t implement this myself though, as I&#039;m more interested to finetune the Rubyripper codebase.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter Until trouble strikes. This is a somewhat dated version, but still perfectly usable. As I don&#039;t use any new features I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a gui-toolkit in case you want to add a new frontend.  &lt;br /&gt;
&lt;br /&gt;
==Rubyripper files and classes==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* rr_lib.rb. This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** Gui_Support. This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). Also the log file and error analyzing takes place in here.&lt;br /&gt;
** Cddb. This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that it is using an old contact protocol and it almost always don&#039;t give any year info. So the Cddb class handles all server contact.&lt;br /&gt;
** Secure_rip. As might be expected, all error correction logic is put in here.&lt;br /&gt;
** Encode. As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** Rubyripper. Handles the usage of the different classes. Also performs some logical checks before starting at all.&lt;br /&gt;
* rubyripper_cli.rb. It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* rubyripper_gtk.rb. It has one class that contains the code for the gtk2 user interface frontend.&lt;br /&gt;
* rubyripper.glade. This is a help file for the gtk interface. It&#039;s made with Glade, a program for designing user interfaces for gtk2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. For instance, current gtk2 frontend is only 350 lines of code (+ the glade file, but this code is automatically created). As lead developer I only hope you will be consistent with the current gtk2 interface design. If there are good reasons to do it differently, please have a chat with me.  &lt;br /&gt;
As a start it would be best to use the current Gtk2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
What requirements would code for a new gui have to work correctly with the Rubyripper codebase?&lt;br /&gt;
# Load the Rubyripper codebase -&amp;gt; &#039;require ./rr_lib.rb&#039;&lt;br /&gt;
# Make a class of the gui code, we will later pass this to the Rubyripper codebase.&lt;br /&gt;
# Get info from the user which cdrom should be used (load it from $HOME/rubyripper_settings if it exists)&lt;br /&gt;
# Start a new instance of Cddb class -&amp;gt; @instance = Cddb.new(cdrom &amp;lt;string&amp;gt;, self &amp;lt;class&amp;gt;, multiple_freedb_hits? &amp;lt;bool&amp;gt;, verbose? &amp;lt;bool&amp;gt;)&lt;br /&gt;
# Test if @instance.disc_ok &amp;lt;bool&amp;gt; is true. If so, you can use @instance.track_numbers &amp;lt;int&amp;gt; and @instance.tracks_length &amp;lt;string&amp;gt; to update the amount and playlength of the tracks into the gui. Also start @instance.make_internet_contact()&lt;br /&gt;
# Test if @instance.internet_ok &amp;lt;bool&amp;gt; is true. If so, update the info of @instance.artist &amp;lt;string&amp;gt;, @instance.album &amp;lt;string&amp;gt;, @instance.year &amp;lt;string&amp;gt;, @instance.genre &amp;lt;string&amp;gt; and tracklist &amp;lt;array_of_strings&amp;gt; in the gui.&lt;br /&gt;
# As soon as the user wants to start the ripping process, start a new instance of the Rubyripper class, passing the settings Hash as argument. (In other languages sometimes called a dictionary)&lt;br /&gt;
# The hash should contain all settings:&lt;br /&gt;
#* @settings[&#039;instance&#039;] = the Gui instance -&amp;gt; self&lt;br /&gt;
#* @settings[&#039;cd_info&#039;] = the Cddb instance -&amp;gt; @instance&lt;br /&gt;
#* @settings[&#039;verbose&#039;] = bool&lt;br /&gt;
#* @settings[&#039;debug&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flac&#039;] = bool&lt;br /&gt;
#* @settings[&#039;vorbis&#039;] = bool&lt;br /&gt;
#* @settings[&#039;mp3&#039;] = bool&lt;br /&gt;
#* @settings[&#039;wav&#039;] = bool&lt;br /&gt;
#* @settings[&#039;flacsettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;vorbissettings&#039;] = string&lt;br /&gt;
#* @settings[&#039;mp3settigns&#039;] = string&lt;br /&gt;
#* @settings[&#039;playlist&#039;] = bool (m3u playlist wanted?)&lt;br /&gt;
#* @settings[&#039;use_threading&#039;] = bool (ripping and encoding don&#039;t wait for each other)&lt;br /&gt;
#* @settings[&#039;ripper&#039;] = string (cdda2wav or cdparanoia)&lt;br /&gt;
#* @settings[&#039;rippersettings&#039;] = string or false&lt;br /&gt;
#* @settings[&#039;max_tries&#039;] = int&lt;br /&gt;
#* @settings[&#039;cdrom&#039;] = string (same as the one passed to Cddb instance)&lt;br /&gt;
#* @settings[&#039;offset&#039;] = int&lt;br /&gt;
#* @settings[&#039;temp_dir&#039;] = string	&lt;br /&gt;
#* @settings[&#039;destination_dir&#039;] = string&lt;br /&gt;
#* @settings[&#039;save_log&#039;] = bool&lt;br /&gt;
#* @settings[&#039;tracklist&#039;] = array of integers (which tracks should be ripped)&lt;br /&gt;
# All communication back to the gui, happens via the update function that should be in the gui, accepting two parameters: modus &amp;lt;string&amp;gt; and value &amp;lt;can be anything, dependent on the modus&amp;gt;. Notice that this is a great ruby feature! The different modus are:&lt;br /&gt;
#* ripping_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* encoding_progress. value is a float. 100 % = 1.0. Used to update the progress bar.&lt;br /&gt;
#* log_change. value is a string. Used to update the status screen.&lt;br /&gt;
#* track_finished. value is an integer. Used to deselect the track in the gui.&lt;br /&gt;
#* finished. value is not important. This means that the ripping and encoding are finished. Used to unlock the gui-buttons.&lt;br /&gt;
#* error. value is a string. Used to bring up a popup with the error message.&lt;br /&gt;
#* cddb_hit. value is an array of strings with the multiple hits. Return the index of the array.&lt;br /&gt;
# Using a new thread for launching instances is a good idea for getting a responsive gui.&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12223</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12223"/>
		<updated>2006-08-06T20:54:55Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: Added some developer info, more will follow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* A command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* A detailed overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. A possibility still exists that with randomn results the same result will be wrong. &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000 \times 256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2&amp;lt;sup&amp;gt;8&amp;lt;/sup&amp;gt;=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1,000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3 \times 256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3 \times 2 \times 2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the GUI for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;br /&gt;
&lt;br /&gt;
=Developer info=&lt;br /&gt;
This section will give some technical information, which should be usefull for interested developers. It will outline how the code is structured and what the API of the Rubyripper codebase is for adding new user interfaces. Since version 0.2 it is quite simply to add new frontends to the current codebase. Currently there is a CLI and a GTK2 frontend. But a Qt frontend or a Cocoa Mac OS frontend isn&#039;t terribly difficult to achieve. I won&#039;t implement this myself though, as I&#039;m more interested to finetune the Rubyripper codebase.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Becoming a developer==&lt;br /&gt;
To become a developer you should have:&lt;br /&gt;
* Some basic knowledge of the Ruby programming language. Read for instance the [http://www.ruby-doc.org/docs/ProgrammingRuby/ free online book], at least until the chapter Until trouble strikes. This is a somewhat dated version, but still perfectly usable. As I don&#039;t use any new features I think it should be fine.&lt;br /&gt;
* Some basic knowledge of a gui-toolkit in case you want to add a new frontend.  &lt;br /&gt;
&lt;br /&gt;
==Rubyripper files and classes==&lt;br /&gt;
The 0.2 release has three ruby files and one glade file included:&lt;br /&gt;
* rr_lib.rb. This contains the Rubyripper codebase. It consists of five classes:&lt;br /&gt;
** Gui_Support. This class handles all feedback communication with the user interface and is used a lot by the other classes (except Cddb). Also the log file and error analyzing takes place in here.&lt;br /&gt;
** Cddb. This class handles the freedb fetching. It uses the Freedb class (dependent on ruby-freedb) to get info about the disc. The server contact is handled in the Cddb class itself. Some problems of the Freedb class made it impossible to rely on it. The biggest problem with using Freedb class is that it is using an old contact protocol and it almost always don&#039;t give any year info. So the Cddb class handles all server contact.&lt;br /&gt;
** Secure_rip. As might be expected, all error correction logic is put in here.&lt;br /&gt;
** Encode. As might be expected, this handles the encoding of the different formats supported.&lt;br /&gt;
** Rubyripper. Handles the usage of the different classes. Also performs some logical checks before starting at all.&lt;br /&gt;
* rubyripper_cli.rb. It has one class that contains the code for the command line interface frontend.&lt;br /&gt;
* rubyripper_gtk.rb. It has one class that contains the code for the gtk2 user interface frontend.&lt;br /&gt;
* rubyripper.glade. This is a help file for the gtk interface. It&#039;s made with Glade, a program for designing user interfaces for gtk2.&lt;br /&gt;
&lt;br /&gt;
==Adding a new frontend==&lt;br /&gt;
New frontends are encouraged and shouldn&#039;t be difficult to make. For instance, current gtk2 frontend is only 350 lines of code (+ the glade file, but this code is automatically created). As lead developer I only hope you will be consistent with the current gtk2 interface design. If there are good reasons to do it differently, please have a chat with me.  &lt;br /&gt;
As a start it would be best to use the current Gtk2 code and just plainly rewrite it for the other toolkit. The basic ideas should be more or less the same.&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12218</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12218"/>
		<updated>2006-08-05T08:37:25Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Screenshots */ Added some links to a few screenshots&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000*256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2^8=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3*256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3*2*2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Screenshots==&lt;br /&gt;
The theme used in the screenshots is GTK-Qt-theme.&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Cddb-info_GTK-QT-theme.png The Cddb-info tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Codecs_GTK-QT-theme.png The Codecs tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Other-settings_GTK-QT-theme.png The Other settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Ripping-settings_GTK-QT-theme.png The Ripping settings tab]&lt;br /&gt;
* [http://b-woudstra.speedlinq.nl/screenshots/Status_GTK-QT-theme.png The status tab]&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the Gui for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12217</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12217"/>
		<updated>2006-08-05T07:18:37Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000*256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2^8=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3*256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3*2*2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] or cdda2wav installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make all .rb files executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok. When launched from a terminal rubyripper should now tell which dependency it&#039;s missing.&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the Gui for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12216</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12216"/>
		<updated>2006-08-05T07:14:10Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Suggestions for next version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000*256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2^8=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3*256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3*2*2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the Gui for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12215</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12215"/>
		<updated>2006-08-05T06:41:04Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Correction mechanism */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OS X will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying Philosophy is that an erronous read of an underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1,000 bytes are erronous, than a false repair seems to be highly unlikely since there are &amp;lt;math&amp;gt;1000*256&amp;lt;/math&amp;gt; possibilities in theory. (As a byte consists of 8 bits, 2^8=256). This would need an infinite amount of trials to match. The main principle however is, the more trials that are needed, consequently the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean &amp;lt;math&amp;gt;3*256&amp;lt;/math&amp;gt; possibilities within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to &amp;lt;math&amp;gt;3*2*2 = 12&amp;lt;/math&amp;gt; possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent &#039;&#039;MD5-sum&#039;&#039; on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/frs/?group_id=1284&amp;amp;release_id=6293&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the G for OS X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he/she will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We don&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12212</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12212"/>
		<updated>2006-08-04T20:55:55Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */ Added Suggestions for next version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying philosophy is that an erronous read of the underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1000 bytes are erronous, than a false repair seems to be highly unlikely since there are 1000*256 possibilities in theory. This would need an infinite amount of trials to match. The main principle however is, the more trials needed, the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean 3*256 possibilities. Within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to 3*2*2 = 12 possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent MD5-sum on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==Suggestions for next version==&lt;br /&gt;
* Try to rip only parts that contain errors to save time&lt;br /&gt;
* Erronous parts should be matched more than once&lt;br /&gt;
* OS X support. As the only developer I need some help, for I don&#039;t have a Mac. A Mac user could help to get the cli-version working. A ruby programmer could help to make the gui for os X. I&#039;ll be glad to add support for this task.&lt;br /&gt;
* Let the user choose which freedb hit he will use&lt;br /&gt;
&lt;br /&gt;
==Known Bugs==&lt;br /&gt;
*If the first trial of a track has a different size than the second track, it assumes that the size of the first track is right. We can&#039;t know that for sure.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12211</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12211"/>
		<updated>2006-08-04T20:35:59Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Features */  Update the feature list because of new release&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Sophisticated error correction mechanism&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* Info can be edited after fetching&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* Direct offset support&lt;br /&gt;
* Detailed logfile creation&lt;br /&gt;
* An overview of hard-to-correct positions&lt;br /&gt;
* Create m3u playlists&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying philosophy is that an erronous read of the underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1000 bytes are erronous, than a false repair seems to be highly unlikely since there are 1000*256 possibilities in theory. This would need an infinite amount of trials to match. The main principle however is, the more trials needed, the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean 3*256 possibilities. Within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to 3*2*2 = 12 possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent MD5-sum on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12210</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12210"/>
		<updated>2006-08-04T20:17:14Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Correction mechanism */  More precise explanation of underlying idea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
The main underlying philosophy is that an erronous read of the underlying ripper will produce random results. This seems so far to be correct. However, with random results also a chance exists that the same result will still be the wrong result.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If the full 1000 bytes are erronous, than a false repair seems to be highly unlikely since there are 1000*256 possibilities in theory. This would need an infinite amount of trials to match. The main principle however is, the more trials needed, the higher a chance of a false repair.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Suppose only 3 bytes in a sample of 1000 bytes give random information. This would still mean 3*256 possibilities. Within each of these bytes, really 2 bits could be a problem. This reduces the possibilities to 3*2*2 = 12 possibilies. So, a false repair still seems to be possible. One has to wonder though: can 3 bytes actually be heard in a wav file that produces 180.000 bytes per second?&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
In conclusion: Rubyripper won&#039;t guarantee a consequent MD5-sum on tracks that needed correction. However it will repair any files so that it&#039;s impossible to succesfully blind-test with the original. The log file will report any position that needed more than 3 trials, so you can check the position yourself.&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12209</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12209"/>
		<updated>2006-08-04T19:30:20Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Installation */ oops forgot the &amp;lt;/code&amp;gt; tag&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12208</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12208"/>
		<updated>2006-08-04T19:29:28Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: (somewhat dated)&amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x *.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_gtk.rb (Launch gtk2 user interface)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper_cli.rb (Launch command line user interface)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12207</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12207"/>
		<updated>2006-08-04T19:27:09Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */  new version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.2 was released on 4 August 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* Also a command line interface (CLI) available&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: &amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x rubyripper.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper.rb (Launch executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12206</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12206"/>
		<updated>2006-08-04T17:52:30Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* External links */ (spelling mistake)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: &amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x rubyripper.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper.rb (Launch executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the official Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12205</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12205"/>
		<updated>2006-08-04T17:51:54Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Features */ Wav - NOT wavpack&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a digital audio extraction algorithm that uses [[cdparanoia]] or cdda2wav in a sophisticated way to make sure that a CD rip is done succesfully and accurately. It is very similiar to and inspired by [[EAC]]. Rubyripper is written in the ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (partial BSD support). OSX will most likely be supported in the near future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface&lt;br /&gt;
* CDDB-info is fetched via the &#039;&#039;ruby-freedb&#039;&#039; module&lt;br /&gt;
* The codecs supported are FLAC, Vorbis, MP3, and Wav&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can optionally specify the output directory&lt;br /&gt;
&lt;br /&gt;
==Correction mechanism== &lt;br /&gt;
&lt;br /&gt;
Rubyripper correction mechanism goes beyond that of [[cdparanoia]]. Every track gets ripped at least twice and is byte compared with the &#039;&#039;Ruby cmp&#039;&#039; feature. If any differences are found, each of the 1,000 bytes of the two files is compared. The next trial run looks to see if differing positions or a match can be found. &#039;&#039;(1,000 bytes is about 0.006 seconds)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Installation== &lt;br /&gt;
&lt;br /&gt;
Make sure to have &#039;&#039;ruby-freedb&#039;&#039;, &#039;&#039;ruby-libglade2&#039;&#039; and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you wish to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: &amp;lt;br&amp;gt;&lt;br /&gt;
http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal or console: &lt;br /&gt;
&lt;br /&gt;
:&amp;lt;code&amp;gt;cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;chmod +x rubyripper.rb (Make rubyripper.rb executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;./rubyripper.rb (Launch executable)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure the dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
==External links==&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Rubyripper] the offcial Rubyforge website&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread] the first public release of Rubyripper&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12187</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12187"/>
		<updated>2006-08-03T17:52:37Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* External links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a cd-ripper that uses [[cdparanoia]] or [[cdda2wav]] in a smart way to make sure that the rip is done succesfully. It is very much inspired by [[EAC]]. Rubyripper is written in the Ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (BSD will probably work too). OSX will probably be supported in the future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Features= &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=How to install= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;br /&gt;
* [http://www.hydrogenaudio.org/forums/index.php?showtopic=38418 Hydrogenaudio forum thread]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12186</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12186"/>
		<updated>2006-08-03T16:36:22Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a cd-ripper that uses [[cdparanoia]] or [[cdda2wav]] in a smart way to make sure that the rip is done succesfully. It is very much inspired by [[EAC]]. Rubyripper is written in the Ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (BSD will probably work too). OSX will probably be supported in the future. The source (same as executable) is published under the GPL license.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Features= &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=How to install= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12185</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12185"/>
		<updated>2006-08-03T16:35:18Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Rubyripper configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a cd-ripper that uses [[cdparanoia]] or [[cdda2wav]] in a smart way to make sure that the rip is done succesfully. It is very much inspired by [[EAC]]. Rubyripper is written in the Ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (BSD will probably work too). OSX will probably be supported in the future. The source (same as executable) is published under the (GPL license).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Features= &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=How to install= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12184</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12184"/>
		<updated>2006-08-03T16:34:25Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a cd-ripper that uses [[cdparanoia]] or [[cdda2wav]] in a smart way to make sure that the rip is done succesfully. It is very much inspired by [[EAC]]. Rubyripper is written in the Ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (BSD will probably work too). OSX will probably be supported in the future. The source (same as executable) is published under the (GPL license).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=Features= &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=Rubyripper configuration= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12183</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12183"/>
		<updated>2006-08-03T16:33:53Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is a cd-ripper that uses [[cdparanoia]] or [[cdda2wav]] in a smart way to make sure that the rip is done succesfully. It is very much inspired by [[EAC]]. Rubyripper is written in the Ruby programming language. &lt;br /&gt;
&lt;br /&gt;
It&#039;s currently available for Linux (BSD will probably work too). OSX will probably be supported in the future. The source (same as executable) is published under the (GPL license).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=Rubyripper configuration= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12182</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12182"/>
		<updated>2006-08-03T16:27:31Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is simple, but quite sophisticated digital audio extraction tool written in Python programming language that can create secure rip&#039;s in Linux/OSX (very similiar to [[EAC]]). The source (same as executable) is published under the (GPL license).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* A GTK2 user interface.&lt;br /&gt;
* Correction mechanism which goes further than standard [[cdparanoia]]. Every track gets ripped at least twice and is bytecompared with the Ruby cmp feature. If differences are found, each 1000 bytes of the two files is compared. Next trial looks if for the differing positions a match can be found. (1000 bytes is about 0,006 seconds)&lt;br /&gt;
* CDDB-info is fetched via the ruby-freedb module.&lt;br /&gt;
* Codecs supported are flac, mp3, vorbis and wav.&lt;br /&gt;
* Except wav, each codec can be configured. Sensible defaults are otherwise used.&lt;br /&gt;
* Multiple codecs can be used in one run&lt;br /&gt;
* You can set the output directory&lt;br /&gt;
&lt;br /&gt;
=Rubyripper configuration= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
	<entry>
		<id>https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12181</id>
		<title>Rubyripper</title>
		<link rel="alternate" type="text/html" href="https://wiki.hydrogenaudio.org/index.php?title=Rubyripper&amp;diff=12181"/>
		<updated>2006-08-03T16:16:10Z</updated>

		<summary type="html">&lt;p&gt;Frodoontop: /* Rubyripper configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction= &lt;br /&gt;
&lt;br /&gt;
What is Rubyripper? Rubyripper is simple, but quite sophisticated digital audio extraction tool written in Python programming language that can create secure rip&#039;s in Linux/OSX (very similiar to [[EAC]]). The source (same as executable) is published under the (GPL license).&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.1 was released on 12 February 2006.&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;UPDATE: New version 0.1.0 was released on 5 November 2005.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Features== &lt;br /&gt;
&lt;br /&gt;
* a command-line program which makes use of [[cdparanoia]].&lt;br /&gt;
* every track gets ripped twice and is compared with a &#039;&#039;160-bit SHA1 checksum&#039;&#039;&lt;br /&gt;
* if the checksums differ, the track will be ripped twice again until the checksum matches&lt;br /&gt;
* CDDB-info is fetched via the pycddb module.&lt;br /&gt;
* It can rip to FLAC, MP3, and Vorbis.&lt;br /&gt;
* Lame and Vorbis can be configured, default for lame is: -V2 --vbr-new, default for vorbis is -q 6&lt;br /&gt;
* You can choose the ripping device, otherwise default is used.&lt;br /&gt;
* See rubyripper --help for more information&lt;br /&gt;
* The files will be saved as &amp;quot;working directory/extension/artist (year) album/tracknumber - trackname.extension&lt;br /&gt;
&lt;br /&gt;
=Rubyripper configuration= &lt;br /&gt;
&lt;br /&gt;
Make sure to have ruby-freedb, ruby-libglade2 and [[cdparanoia]] installed as a minimum. You can optionally choose for Lame, Vorbis or FLAC, depending on the codec you like to use.&lt;br /&gt;
&lt;br /&gt;
Then download Rubyripper:&lt;br /&gt;
http://rubyforge.org/projects/rubyripper/&lt;br /&gt;
&lt;br /&gt;
Documentation of some of the ripping logic used can be found at: http://rubyforge.org/docman/view.php/1284/310/Rubyripper&#039;s%20ripping%20logic.pdf&lt;br /&gt;
&lt;br /&gt;
Currently there isn&#039;t an official installer available. Usage from a terminal:&lt;br /&gt;
&lt;br /&gt;
*cd &amp;lt;download_dir&amp;gt; (Go to the directory where you saved the downloaded archive)&lt;br /&gt;
*tar xfj &amp;lt;filename_download&amp;gt; (Unpack the archive)&lt;br /&gt;
*cd rubyripper-&amp;lt;version&amp;gt; (Move into the just unpacked directory)&lt;br /&gt;
*chmod +x rubyripper.rb (Make rubyripper.rb executable)&lt;br /&gt;
*./rubyripper.rb (Launch executable)&lt;br /&gt;
&lt;br /&gt;
If Rubyripper doesn&#039;t start make sure dependencies are ok.&lt;br /&gt;
&lt;br /&gt;
=External links=&lt;br /&gt;
* [http://rubyforge.org/projects/rubyripper/ Official website]&lt;/div&gt;</summary>
		<author><name>Frodoontop</name></author>
	</entry>
</feed>