From 6eabb15f076f3073cc3cd1330a002fd7114584d9 Mon Sep 17 00:00:00 2001 From: "Raybz@Raybz" Date: Thu, 16 May 2013 10:43:33 +0200 Subject: [PATCH] added library for audio-processing --- AudioProcessing/JLayer.LICENSE | 504 +++++++++++++ AudioProcessing/LICENSE | 674 ++++++++++++++++++ AudioProcessing/lib/jl1.0.1.jar | Bin 0 -> 105363 bytes AudioProcessing/lib/mp3spi1.9.5.jar | Bin 0 -> 24696 bytes AudioProcessing/lib/tritonus_aos-0.3.6.jar | Bin 0 -> 10411 bytes AudioProcessing/lib/tritonus_share-0.3.6.jar | Bin 0 -> 105684 bytes AudioProcessing/pom.xml | 52 ++ .../java/org/wyrez/audio/AudioDevice.java | 97 +++ .../java/org/wyrez/audio/AudioProcessor.java | 418 +++++++++++ .../java/org/wyrez/audio/analysis/DFT.java | 135 ++++ .../java/org/wyrez/audio/analysis/FFT.java | 238 +++++++ .../audio/analysis/FourierTransform.java | 662 +++++++++++++++++ .../java/org/wyrez/audio/decoder/Decoder.java | 67 ++ .../wyrez/audio/decoder/DecoderFactory.java | 73 ++ .../org/wyrez/audio/decoder/MP3Decoder.java | 365 ++++++++++ .../org/wyrez/audio/decoder/WaveDecoder.java | 198 +++++ .../main/java/org/wyrez/audio/util/Band.java | 56 ++ .../audio/util/EndianDataInputStream.java | 54 ++ .../org/wyrez/audio/util/SampleHelper.java | 100 +++ AudioProcessing/tritonus.LICENSE | 481 +++++++++++++ 20 files changed, 4174 insertions(+) create mode 100644 AudioProcessing/JLayer.LICENSE create mode 100644 AudioProcessing/LICENSE create mode 100644 AudioProcessing/lib/jl1.0.1.jar create mode 100644 AudioProcessing/lib/mp3spi1.9.5.jar create mode 100644 AudioProcessing/lib/tritonus_aos-0.3.6.jar create mode 100644 AudioProcessing/lib/tritonus_share-0.3.6.jar create mode 100644 AudioProcessing/pom.xml create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/AudioDevice.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/AudioProcessor.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/analysis/DFT.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/analysis/FFT.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/analysis/FourierTransform.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/decoder/Decoder.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/decoder/DecoderFactory.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/decoder/MP3Decoder.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/decoder/WaveDecoder.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/util/Band.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/util/EndianDataInputStream.java create mode 100644 AudioProcessing/src/main/java/org/wyrez/audio/util/SampleHelper.java create mode 100644 AudioProcessing/tritonus.LICENSE diff --git a/AudioProcessing/JLayer.LICENSE b/AudioProcessing/JLayer.LICENSE new file mode 100644 index 0000000..cbee875 --- /dev/null +++ b/AudioProcessing/JLayer.LICENSE @@ -0,0 +1,504 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/AudioProcessing/LICENSE b/AudioProcessing/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/AudioProcessing/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/AudioProcessing/lib/jl1.0.1.jar b/AudioProcessing/lib/jl1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..bd5fb8b8eb28746e4a3d7cfee2b54c4fd54f5043 GIT binary patch literal 105363 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

(H>r|Sz$es;n6q4t!9osGU^)b#AiEhi^s}TD` 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

W(94n+m(@89xah6`eR%%`DDLQJ z@Aw-tzAuT|%L0%GK<*i@V2Akr4eM@f3U;=%2Sy>6YsHYQLyEK|Z8bpL11_>F}YRuJ#JGFcwh-A`V6?P`n%x%Z*Y#rY~0twp7PN3*a12I3Y5yr*v}s+&yP&# zdYIT>-6EwD$Pr}w8(TVd>&T)3#c>M-GRIRQf23Zo`6c~Y#_&1s||(pA8~*3 zH#28kbvgk20OTI1CqGl3AHU3>p?~%^eue<^AV9+d*vvnvm*t&I?s~4cgA2&U($mzD zQe0WW#m@NmC5hTx`!yd>GqZpW@@ieWC;u<(>n+>%lU>h*s|M9D?t~>iW#je6v|d1&9s6 zb+vIi{ZG{2RHz)qO?*4R3K@VEt~O5drvIkwpNlI~wVO%^pzLJ;_|>`#acVut_owv?%mQkhV3n_!p>}v!%^%jDUDUniLKw{dqv?zkE9TBjx$I+g?xo?k(vb zEtZOlkrBwwH8o_YNTLDy^l$qz=Z2x#V>0@Kv1(~W13{se_|_;;VMUoS(v(ILJLu#g=v zA`|~57?pf!^x6apPaLUHYdO6%py{b3mX@NKXu4zX2E96*NNae?*%(gN%MRwX#Ln zM4bT8^gy|~I(Kt^_TTX4j(?fvHw_`Ffyo*HAYc->u1;u^>i?SnXH#3Sy(7rd@i&8Z zrykQ_MPN&K=aE` z53(!1MP0ofD-W^*ng4Fa7Khs^nF^qAfWm$ihqQJ*?vE2dT3f%31pvkN|7zs=`fqS9 z&cJX+)B2MXNPQ5^i+>#2XO42b+;s(P|+jc^Xw@A5RJJ6G%& z_U<>#KMc0+Gt#8C;6Ong0lm=GVNo|w%&v2`iie%Eg{hOJ6R@HI^l;ZZyW!OO-5ns~ zguq2|Maf=h=xebc7k1#F%FB}iA={f|vHPEI17j=B4#Qi~UngEcQXx+}`bB*q|8LYQJA)y?kVoqL0@o^D z3%>S%9Y`wV(Hg&~(5lx`Wqy0m1|%ACd-N}KlJye&wkP`%>WUo3JHgdkNgEM0iJ367xW3{UzcK*aUm1zg`JK*mS>V&ZsS%lsKFp(G0nOyi)SRDgfygiuhx J<3Ql2{{u2lHQE3G literal 0 HcmV?d00001 diff --git a/AudioProcessing/lib/mp3spi1.9.5.jar b/AudioProcessing/lib/mp3spi1.9.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..0c74daeb198276e1058da3e23c18728284fe7051 GIT binary patch literal 24696 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 literal 0 HcmV?d00001 diff --git a/AudioProcessing/lib/tritonus_aos-0.3.6.jar b/AudioProcessing/lib/tritonus_aos-0.3.6.jar new file mode 100644 index 0000000000000000000000000000000000000000..2287391d3e73674c4ffbfa130fff49694629c2ef GIT binary patch literal 10411 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 TAN!Dm@VE~=sqzQbiV*(~XD2Mu literal 0 HcmV?d00001 diff --git a/AudioProcessing/pom.xml b/AudioProcessing/pom.xml new file mode 100644 index 0000000..a04339e --- /dev/null +++ b/AudioProcessing/pom.xml @@ -0,0 +1,52 @@ + + 4.0.0 + org.wyrez + AudioProcessing + 1.0 + jar + AudioProcessing + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.3.2 + + 1.7 + 1.7 + + + + + + + javazoom.jl + jlayer + 1.0.1 + system + ${basedir}/lib/jl1.0.1.jar + + + javazoom.jl + mp3spi + 1.9.5 + system + ${basedir}/lib/mp3spi1.9.5.jar + + + org.tritonus + share + 0.3.6 + system + ${basedir}/lib/tritonus_share-0.3.6.jar + + + org.tritonus + aos + 0.3.6 + system + ${basedir}/lib/tritonus_aos-0.3.6.jar + + + diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/AudioDevice.java b/AudioProcessing/src/main/java/org/wyrez/audio/AudioDevice.java new file mode 100644 index 0000000..e057c4f --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/AudioDevice.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * This Code is based on the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/AudioDevice.java + */ +package org.wyrez.audio; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.SourceDataLine; + +/** + * Class that allows directly passing PCM float data to the sound card for + * playback. + * + * @author Darth Affe + */ +public class AudioDevice { + + private final SourceDataLine out; + private byte[] buffer; + + /** + * Constructor, initializes the audio system for 16-bit signed stereo output + * with a sampling rate of 44100 and a buffer size of 2048. + * + * @throws Exception in case the audio system could not be initialized + */ + public AudioDevice() throws Exception { + this(44100, 2); + } + + /** + * Constructor, initializes the audio system for 16-bit signed output. Sets + * the buffer size to 1024*channels + * + * @param samplingRate The sampling rate + * @param channels The number of channels + * @throws Exception in case the audio system could not be initialized + */ + public AudioDevice(float samplingRate, int channels) throws Exception { + this(samplingRate, channels, 1024 * channels); + } + + /** + * Constructor, initializes the audio system for 16-bit signed output. + * + * @param samplingRate The sampling rate + * @param channels The number of channels + * @param bufferSize The buffer size (have to be a even number) + * @throws Exception in case the audio system could not be initialized + */ + public AudioDevice(float samplingRate, int channels, int bufferSize) throws Exception { + AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, + samplingRate, 16, channels, channels * 2, samplingRate, false); + buffer = new byte[bufferSize * 2]; + out = AudioSystem.getSourceDataLine(format); + out.open(format); + out.start(); + } + + /** + * Writes the given samples to the audio device. The samples have to be in + * the range [-1,1]. + * + * @param samples The samples. + */ + public void writeSamples(float[] samples) { + fillBuffer(samples); + out.write(buffer, 0, buffer.length); + } + + private void fillBuffer(float[] samples) { + for (int i = 0, j = 0; i < samples.length; i++, j += 2) { + short value = (short) (samples[i] * Short.MAX_VALUE); + buffer[j] = (byte) (value | 0xff); + buffer[j + 1] = (byte) (value >> 8); + } + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/AudioProcessor.java b/AudioProcessing/src/main/java/org/wyrez/audio/AudioProcessor.java new file mode 100644 index 0000000..9438532 --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/AudioProcessor.java @@ -0,0 +1,418 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * This code is based on a tutorial by http://www.badlogicgames.com (as of 16.05.2013). + * The whole tutorial can be found here: + * http://www.badlogicgames.com/wordpress/?cat=18&paged=3 + */ +package org.wyrez.audio; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.wyrez.audio.analysis.FFT; +import org.wyrez.audio.decoder.Decoder; +import org.wyrez.audio.util.Band; +import org.wyrez.audio.util.SampleHelper; + +/** + * Processor to create analysis-data of audio samples + * + * @author Darth Affe + */ +public class AudioProcessor { + + private Band band; + private int bufferSize; + private final float[] samples; + private float[] spectralFlux; + private float[] threshold; + private float[] prunedSpectralFlux; + private float[] peaks; + private float peakAverage; + private final float samplingRate; + private float bpm; + + /** + * Constructor, initializes an AudioProcessor for the given Decoder. + * + * @param decoder The decoder to process + */ + public AudioProcessor(Decoder decoder) { + this.samples = SampleHelper.readAllSamples(decoder); + this.samplingRate = decoder.getSamplingRate(); + } + + /** + * Constructor, initializes an AudioProcessor for the given Decoder and + * band. + * + * @param decoder The decoder to process + * @param band The band to process + */ + public AudioProcessor(Decoder decoder, Band band) { + this.samples = SampleHelper.readAllSamples(decoder); + this.samplingRate = decoder.getSamplingRate(); + this.band = band; + } + + /** + * Removes cached objects to save some memory. + */ + public void clean() { + spectralFlux = null; + threshold = null; + prunedSpectralFlux = null; + peaks = null; + bpm = 0f; + bufferSize = 0; + } + + /** + * Calculates a full analysis of the samples data using default values: + * BufferSize = 1024 ThresholdWindowSize = 10 ThresholdMultiplier = 1.5 + */ + public void calculate() { + calculate(1024, 10, 1.5f); + } + + /** + * Calculates a full analysis of the samples data using a given threshold. + * + * @param thresholdWindowSize The window -size used to calculate the + * threshold + * @param thresholdMultiplier The multiplier used to calculate the threshold + */ + public void calculate(int thresholdWindowSize, float thresholdMultiplier) { + calculate(1024, thresholdWindowSize, thresholdMultiplier); + } + + /** + * Calculates a full analysis of the samples data using a given threshold + * and a custom buffer size. + * + * @param bufferSize The size of the buffer + * @param thresholdWindowSize The window -size used to calculate the + * threshold + * @param thresholdMultiplier The multiplier used to calculate the threshold + */ + public void calculate(int bufferSize, int thresholdWindowSize, float thresholdMultiplier) { + calculate(bufferSize, thresholdWindowSize, thresholdMultiplier, -1f, -1); + } + + /** + * Calculates a full analysis of the samples data using a given + * threshold-multiplier and cuts fast peaks. + * + * @param thresholdWindowSize The window -size used to calculate the + * threshold + * @param minPeakDiff The minimum difference in samples between to peaks + */ + public void calculate(int thresholdWindowSize, float thresholdMultiplier, int minPeakDiff) { + calculate(bufferSize, thresholdWindowSize, thresholdMultiplier, -1f, -1); + } + + /** + * Calculates a full analysis of the samples data using a given + * threshold-multiplier and cuts low peaks. + * + * @param thresholdWindowSize The window -size used to calculate the + * threshold + * @param percentageToKeep The minimum amplitude in percent of the avarage + * amplitude + */ + public void calculate(int thresholdWindowSize, float thresholdMultiplier, float percentageToKeep) { + calculate(bufferSize, thresholdWindowSize, thresholdMultiplier, percentageToKeep, -1); + } + + /** + * Calculates a full analysis of the samples data. + * + * @param bufferSize The size of the buffer + * @param thresholdWindowSize The window -size used to calculate the + * threshold + * @param thresholdMultiplier The multiplier used to calculate the threshold + * @param percentageToKeep The minimum amplitude in percent of the avarage + * amplitude + * @param minPeakDiff The minimum difference in samples between to peaks + */ + public void calculate(int bufferSize, int thresholdWindowSize, float thresholdMultiplier, float percentageToKeep, int minPeakDiff) { + if ((bufferSize & (bufferSize - 1)) != 0) { + throw new IllegalArgumentException("FFT: bufferSize must be a power of two."); + } + this.bufferSize = bufferSize; + calculateSpectralFlux(); + calculateThreshold(thresholdWindowSize, thresholdMultiplier); + calculatePrunedSpectralFlux(); + calculatePeaks(); + if (percentageToKeep > 0f) { + cutLowPeaks(percentageToKeep); + } + if (minPeakDiff > 0) { + cutFastPeaks(minPeakDiff); + } + } + + private void calculateSpectralFlux() { + FFT fft = new FFT(bufferSize, samplingRate); + fft.window(FFT.HAMMING); + float[] buffer; + float[] spectrum = new float[fft.getBandSize(band)]; + float[] lastSpectrum = new float[spectrum.length]; + List spectralFlux = new ArrayList(); + + for (int i = 0; i < samples.length; i += bufferSize) { + buffer = SampleHelper.splitSampleArray(samples, i, bufferSize); + fft.forward(buffer); + System.arraycopy(spectrum, 0, lastSpectrum, 0, spectrum.length); + System.arraycopy(fft.getSpectrum(band), 0, spectrum, 0, spectrum.length); + + float flux = 0; + for (int j = 0; j < spectrum.length; j++) { + float value = (spectrum[j] - lastSpectrum[j]); + flux += value < 0 ? 0 : value; + } + spectralFlux.add(flux); + } + this.spectralFlux = SampleHelper.convertToFloatArray(spectralFlux); + } + + private void calculateThreshold(int thresholdWindowSize, float multiplier) { + threshold = new float[spectralFlux.length]; + for (int i = 0; i < spectralFlux.length; i++) { + int start = Math.max(0, i - thresholdWindowSize); + int end = Math.min(spectralFlux.length - 1, i + thresholdWindowSize); + float mean = 0; + for (int j = start; j <= end; j++) { + mean += spectralFlux[j]; + } + mean /= (end - start); + threshold[i] = mean * multiplier; + } + } + + private void calculatePrunedSpectralFlux() { + prunedSpectralFlux = new float[threshold.length]; + for (int i = 0; i < threshold.length; i++) { + prunedSpectralFlux[i] = (threshold[i] <= spectralFlux[i]) ? spectralFlux[i] - threshold[i] : 0f; + } + } + + private void calculatePeaks() { + peaks = new float[prunedSpectralFlux.length - 1]; + for (int i = 0; i < prunedSpectralFlux.length - 1; i++) { + peaks[i] = (prunedSpectralFlux[i] > prunedSpectralFlux[i + 1]) ? prunedSpectralFlux[i] : 0f; + } + calculatePeakData(); + } + + private void calculatePeakData() { + calculatePeakAverage(); + calculateBPM(); + } + + private void calculatePeakAverage() { + int counter = 0; + float sum = 0f; + for (int i = 0; i < peaks.length; i++) { + if (peaks[i] > 0f) { + sum += peaks[i]; + counter++; + } + } + peakAverage = sum / counter; + } + + private void calculateBPM() { + HashMap peakDiff = new HashMap(); + int counter = 0; + boolean first = true; + for (int i = 0; i < peaks.length; i++) { + if (peaks[i] > 0f) { + if (!first) { + Integer value = peakDiff.get(counter); + if (value == null) { + value = 1; + } else { + value += 1; + } + peakDiff.put(counter, value); + } else { + first = false; + } + counter = 1; + } else { + counter++; + } + } + + int most = -1; + int highestCount = -1; + for (Integer i : peakDiff.keySet()) { + if (peakDiff.get(i) > highestCount) { + highestCount = peakDiff.get(i); + most = i; + } + } + float timePerPeak = (1 / samplingRate) * bufferSize; + bpm = 1f / (timePerPeak * most) * 60f; + } + + /** + * Cuts the last calculated peaks. Removes every peak with a amplitude lower + * than peakAverage*percentageToKeep. + */ + public void cutLowPeaks(float percentageToKeep) { + if (peaks == null) { + return; + } + float valueToKeep = peakAverage * percentageToKeep; + for (int i = 0; i < peaks.length; i++) { + if (peaks[i] < valueToKeep) { + peaks[i] = 0f; + } + } + calculatePeakData(); + } + + /** + * Cuts the last calculated peaks. Removes peaks witch a sample difference + * lower than minPeakDiff. (This algorithm does NOT analyse the whole data + * therfore the result may be a bit inaccurately) + */ + public void cutFastPeaks(int minPeakDiff) { + if (peaks == null) { + return; + } + int counter = 1; + boolean first = true; + for (int i = 0; i < peaks.length; i++) { + if (peaks[i] > 0f) { + if (!first) { + if (counter < minPeakDiff) { + peaks[i] = 0f; + } else { + counter = 1; + } + } else { + first = false; + } + } else { + counter++; + } + } + calculatePeakData(); + } + + /** + * Returns the samples which are analysed. + * + * @returns A float array containing the samples + */ + public float[] getSamples() { + return samples; + } + + /** + * Returns the last calculated spectral flux. + * + * @returns A float array containing the spectral flux data + */ + public float[] getSpectralFlux() { + return spectralFlux; + } + + /** + * Returns the last calculated threshold. + * + * @returns A float array containing the threshold data + */ + public float[] getThreshold() { + return threshold; + } + + /** + * Returns the last calculated pruned spectral flux. + * + * @returns A float array containing the pruned spectral flux data + */ + public float[] getPrunedSpectralFlux() { + return prunedSpectralFlux; + } + + /** + * Returns the last calculated peaks. + * + * @returns A float array containing the peaks + */ + public float[] getPeaks() { + return peaks; + } + + /** + * Returns the last calculated avarage peak amplitude. + * + * @returns The avarage peak amplitude as float + */ + public float getPeakAverage() { + return peakAverage; + } + + /** + * Returns the sampling rate of the used samples. + * + * @return The sampling rate as float + */ + public float getSamplingRate() { + return samplingRate; + } + + /** + * Returns the last calculated bpm. + * + * @returns The bpm as float + */ + public float getBpm() { + return bpm; + } + + /** + * Returns the buffer size used for the last calculation. + * + * @returns The buffer size as int + */ + public int getBufferSize() { + return bufferSize; + } + + /** + * Returns the band used for the last calculation. + * + * @returns The band + */ + public Band getBand() { + return band; + } + + /** + * Sets the band. + * + * @param band Band to use + */ + public void setBand(Band band) { + this.band = band; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/analysis/DFT.java b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/DFT.java new file mode 100644 index 0000000..f33dd1d --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/DFT.java @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2007 - 2008 by Damien Di Fede + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * This Code is taken from the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/analysis/DFT.java + */ +package org.wyrez.audio.analysis; + +/** + * DFT stands for Discrete Fourier Transform and is the most widely used Fourier + * Transform. You will never want to use this class due to the fact that it is a + * brute force implementation of the DFT and as such is quite slow. Use an FFT + * instead. This exists primarily as a way to ensure that other implementations + * of the DFT are working properly. This implementation expects an even + * timeSize and will throw and IllegalArgumentException if this is + * not the case. + * + * @author Damien Di Fede + * + * @see FourierTransform + * @see FFT + * @see The Discrete Fourier + * Transform + * + */ +public class DFT extends FourierTransform { + + /** + * Constructs a DFT that expects audio buffers of length + * timeSize that have been recorded with a sample rate of + * sampleRate. Will throw an IllegalArgumentException if + * timeSize is not even. + * + * @param timeSize the length of the audio buffers you plan to analyze + * @param sampleRate the sample rate of the audio samples you plan to + * analyze + */ + public DFT(int timeSize, float sampleRate) { + super(timeSize, sampleRate); + if (timeSize % 2 != 0) { + throw new IllegalArgumentException("DFT: timeSize must be even."); + } + buildTrigTables(); + } + + protected void allocateArrays() { + spectrum = new float[timeSize / 2 + 1]; + real = new float[timeSize / 2 + 1]; + imag = new float[timeSize / 2 + 1]; + } + + /** + * Not currently implemented. + */ + public void scaleBand(int i, float s) { + } + + /** + * Not currently implemented. + */ + public void setBand(int i, float a) { + } + + public void forward(float[] samples) { + if (samples.length != timeSize) { + throw new IllegalArgumentException("DFT.forward: The length of the passed sample buffer must be equal to DFT.timeSize()."); + } + doWindow(samples); + int N = samples.length; + for (int f = 0; f <= N / 2; f++) { + real[f] = 0.0f; + imag[f] = 0.0f; + for (int t = 0; t < N; t++) { + real[f] += samples[t] * cos(t * f); + imag[f] += samples[t] * -sin(t * f); + } + } + fillSpectrum(); + } + + public void inverse(float[] buffer) { + int N = buffer.length; + real[0] /= N; + imag[0] = -imag[0] / (N / 2); + real[N / 2] /= N; + imag[N / 2] = -imag[0] / (N / 2); + for (int i = 0; i < N / 2; i++) { + real[i] /= (N / 2); + imag[i] = -imag[i] / (N / 2); + } + for (int t = 0; t < N; t++) { + buffer[t] = 0.0f; + for (int f = 0; f < N / 2; f++) { + buffer[t] += real[f] * cos(t * f) + imag[f] * sin(t * f); + } + } + } + // lookup table data and functions + private float[] sinlookup; + private float[] coslookup; + + private void buildTrigTables() { + int N = spectrum.length * timeSize; + sinlookup = new float[N]; + coslookup = new float[N]; + for (int i = 0; i < N; i++) { + sinlookup[i] = (float) Math.sin(i * TWO_PI / timeSize); + coslookup[i] = (float) Math.cos(i * TWO_PI / timeSize); + } + } + + private float sin(int i) { + return sinlookup[i]; + } + + private float cos(int i) { + return coslookup[i]; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FFT.java b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FFT.java new file mode 100644 index 0000000..a1ebc9e --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FFT.java @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2007 - 2008 by Damien Di Fede + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * This Code is taken from the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/analysis/FFT.java + */ +package org.wyrez.audio.analysis; + +/** + * FFT stands for Fast Fourier Transform. It is an efficient way to calculate + * the Complex Discrete Fourier Transform. There is not much to say about this + * class other than the fact that when you want to analyze the spectrum of an + * audio buffer you will almost always use this class. One restriction of this + * class is that the audio buffers you want to analyze must have a length that + * is a power of two. If you try to construct an FFT with a + * timeSize that is not a power of two, an IllegalArgumentException + * will be thrown. + * + * @see FourierTransform + * @see The Fast Fourier + * Transform + * + * @author Damien Di Fede + * + */ +public class FFT extends FourierTransform { + + /** + * Constructs an FFT that will accept sample buffers that are + * timeSize long and have been recorded with a sample rate of + * sampleRate. + * timeSize must be a power of two. This will throw an + * exception if it is not. + * + * @param timeSize the length of the sample buffers you will be analyzing + * @param sampleRate the sample rate of the audio you will be analyzing + */ + public FFT(int timeSize, float sampleRate) { + super(timeSize, sampleRate); + if ((timeSize & (timeSize - 1)) != 0) { + throw new IllegalArgumentException( + "FFT: timeSize must be a power of two."); + } + buildReverseTable(); + buildTrigTables(); + } + + protected void allocateArrays() { + spectrum = new float[timeSize / 2 + 1]; + real = new float[timeSize]; + imag = new float[timeSize]; + } + + public void scaleBand(int i, float s) { + if (s < 0) { + throw new IllegalArgumentException("Can't scale a frequency band by a negative value."); + } + if (spectrum[i] != 0) { + real[i] /= spectrum[i]; + imag[i] /= spectrum[i]; + spectrum[i] *= s; + real[i] *= spectrum[i]; + imag[i] *= spectrum[i]; + } + if (i != 0 && i != timeSize / 2) { + real[timeSize - i] = real[i]; + imag[timeSize - i] = -imag[i]; + } + } + + public void setBand(int i, float a) { + if (a < 0) { + throw new IllegalArgumentException("Can't set a frequency band to a negative value."); + } + if (real[i] == 0 && imag[i] == 0) { + real[i] = a; + spectrum[i] = a; + } else { + real[i] /= spectrum[i]; + imag[i] /= spectrum[i]; + spectrum[i] = a; + real[i] *= spectrum[i]; + imag[i] *= spectrum[i]; + } + if (i != 0 && i != timeSize / 2) { + real[timeSize - i] = real[i]; + imag[timeSize - i] = -imag[i]; + } + } + + // performs an in-place fft on the data in the real and imag arrays + // bit reversing is not necessary as the data will already be bit reversed + private void fft() { + for (int halfSize = 1; halfSize < real.length; halfSize *= 2) { + // float k = -(float)Math.PI/halfSize; + // phase shift step + // float phaseShiftStepR = (float)Math.cos(k); + // float phaseShiftStepI = (float)Math.sin(k); + // using lookup table + float phaseShiftStepR = cos(halfSize); + float phaseShiftStepI = sin(halfSize); + // current phase shift + float currentPhaseShiftR = 1.0f; + float currentPhaseShiftI = 0.0f; + for (int fftStep = 0; fftStep < halfSize; fftStep++) { + for (int i = fftStep; i < real.length; i += 2 * halfSize) { + int off = i + halfSize; + float tr = (currentPhaseShiftR * real[off]) - (currentPhaseShiftI * imag[off]); + float ti = (currentPhaseShiftR * imag[off]) + (currentPhaseShiftI * real[off]); + real[off] = real[i] - tr; + imag[off] = imag[i] - ti; + real[i] += tr; + imag[i] += ti; + } + float tmpR = currentPhaseShiftR; + currentPhaseShiftR = (tmpR * phaseShiftStepR) - (currentPhaseShiftI * phaseShiftStepI); + currentPhaseShiftI = (tmpR * phaseShiftStepI) + (currentPhaseShiftI * phaseShiftStepR); + } + } + } + + public void forward(float[] buffer) { + if (buffer.length != timeSize) { + throw new IllegalArgumentException("FFT.forward: The length of the passed sample buffer must be equal to timeSize()."); + } + doWindow(buffer); + // copy samples to real/imag in bit-reversed order + bitReverseSamples(buffer); + // perform the fft + fft(); + // fill the spectrum buffer with amplitudes + fillSpectrum(); + } + + /** + * Performs a forward transform on the passed buffers. + * + * @param buffReal the real part of the time domain signal to transform + * @param buffImag the imaginary part of the time domain signal to transform + */ + public void forward(float[] buffReal, float[] buffImag) { + if (buffReal.length != timeSize || buffImag.length != timeSize) { + throw new IllegalArgumentException("FFT.forward: The length of the passed buffers must be equal to timeSize()."); + } + setComplex(buffReal, buffImag); + bitReverseComplex(); + fft(); + fillSpectrum(); + } + + public void inverse(float[] buffer) { + if (buffer.length > real.length) { + throw new IllegalArgumentException("FFT.inverse: the passed array's length must equal FFT.timeSize()."); + } + // conjugate + for (int i = 0; i < timeSize; i++) { + imag[i] *= -1; + } + bitReverseComplex(); + fft(); + // copy the result in real into buffer, scaling as we do + for (int i = 0; i < buffer.length; i++) { + buffer[i] = real[i] / real.length; + } + } + private int[] reverse; + + private void buildReverseTable() { + int N = timeSize; + reverse = new int[N]; + + // set up the bit reversing table + reverse[0] = 0; + for (int limit = 1, bit = N / 2; limit < N; limit <<= 1, bit >>= 1) { + for (int i = 0; i < limit; i++) { + reverse[i + limit] = reverse[i] + bit; + } + } + } + + // copies the values in the samples array into the real array + // in bit reversed order. the imag array is filled with zeros. + private void bitReverseSamples(float[] samples) { + for (int i = 0; i < samples.length; i++) { + real[i] = samples[reverse[i]]; + imag[i] = 0.0f; + } + } + + // bit reverse real[] and imag[] + private void bitReverseComplex() { + float[] revReal = new float[real.length]; + float[] revImag = new float[imag.length]; + for (int i = 0; i < real.length; i++) { + revReal[i] = real[reverse[i]]; + revImag[i] = imag[reverse[i]]; + } + real = revReal; + imag = revImag; + } + // lookup tables + private float[] sinlookup; + private float[] coslookup; + + private float sin(int i) { + return sinlookup[i]; + } + + private float cos(int i) { + return coslookup[i]; + } + + private void buildTrigTables() { + int N = timeSize; + sinlookup = new float[N]; + coslookup = new float[N]; + for (int i = 0; i < N; i++) { + sinlookup[i] = (float) Math.sin(-(float) Math.PI / i); + coslookup[i] = (float) Math.cos(-(float) Math.PI / i); + } + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FourierTransform.java b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FourierTransform.java new file mode 100644 index 0000000..ceca7bb --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/analysis/FourierTransform.java @@ -0,0 +1,662 @@ +/* + * Copyright (c) 2007 - 2008 by Damien Di Fede + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Library General Public License as published + * by the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * This Code is taken from the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/analysis/FourierTransform.java + */ +//########## Added Code ########## +package org.wyrez.audio.analysis; + +import java.util.ArrayList; +import org.wyrez.audio.util.Band; +import org.wyrez.audio.util.SampleHelper; +//#######End of Added Code ####### + +/** + * A Fourier Transform is an algorithm that transforms a signal in the time + * domain, such as a sample buffer, into a signal in the frequency domain, often + * called the spectrum. The spectrum does not represent individual frequencies, + * but actually represents frequency bands centered on particular frequencies. + * The center frequency of each band is usually expressed as a fraction of the + * sampling rate of the time domain signal and is equal to the index of the + * frequency band divided by the total number of bands. The total number of + * frequency bands is usually equal to the length of the time domain signal, but + * access is only provided to frequency bands with indices less than half the + * length, because they correspond to frequencies below the Nyquist frequency. + * In other words, given a signal of length + * N, there will be + * N/2 frequency bands in the spectrum. + *

+ * As an example, if you construct a FourierTransform with a + * timeSize of 1024 and and a + * sampleRate of 44100 Hz, then the spectrum will contain values + * for frequencies below 22010 Hz, which is the Nyquist frequency (half the + * sample rate). If you ask for the value of band number 5, this will correspond + * to a frequency band centered on + * 5/1024 * 44100 = 0.0048828125 * 44100 = 215 Hz. The width of + * that frequency band is equal to + * 2/1024, expressed as a fraction of the total bandwidth of the + * spectrum. The total bandwith of the spectrum is equal to the Nyquist + * frequency, which in this case is 22100, so the bandwidth is equal to about 50 + * Hz. It is not necessary for you to remember all of these relationships, + * though it is good to be aware of them. The function + * getFreq() allows you to query the spectrum with a frequency in + * Hz and the function + * getBandWidth() will return the bandwidth in Hz of each frequency + * band in the spectrum. + *

+ * Usage + *

+ * A typical usage of a FourierTransform is to analyze a signal so that the + * frequency spectrum may be represented in some way, typically with vertical + * lines. You could do this in Processing with the following code, where + * audio is an AudioSource and + * fft is an FFT (one of the derived classes of FourierTransform). + * + *

+ * fft.forward(audio.left);
+ * for (int i = 0; i < fft.specSize(); i++)
+ * {
+ *   // draw the line for frequency band i, scaling it by 4 so we can see it a bit better
+ *   line(i, height, i, height - fft.getBand(i) * 4);
+ * }
+ * 
+ * + * Windowing + *

+ * Windowing is the process of shaping the audio samples before transforming + * them to the frequency domain. If you call the + * window() function with an appropriate constant, such as + * FourierTransform.HAMMING, the sample buffers passed to the object for + * analysis will be shaped by the current window before being transformed. The + * result of using a window is to reduce the noise in the spectrum somewhat. + *

+ * Averages + *

+ * FourierTransform also has functions that allow you to request the creation of + * an average spectrum. An average spectrum is simply a spectrum with fewer + * bands than the full spectrum where each average band is the average of the + * amplitudes of some number of contiguous frequency bands in the full spectrum. + *

+ * linAverages() allows you to specify the number of averages that + * you want and will group frequency bands into groups of equal number. So if + * you have a spectrum with 512 frequency bands and you ask for 64 averages, + * each average will span 8 bands of the full spectrum. + *

+ * logAverages() will group frequency bands by octave and allows + * you to specify the size of the smallest octave to use (in Hz) and also how + * many bands to split each octave into. So you might ask for the smallest + * octave to be 60 Hz and to split each octave into two bands. The result is + * that the bandwidth of each average is different. One frequency is an octave + * above another when it's frequency is twice that of the lower frequency. So, + * 120 Hz is an octave above 60 Hz, 240 Hz is an octave above 120 Hz, and so on. + * When octaves are split, they are split based on Hz, so if you split the + * octave 60-120 Hz in half, you will get 60-90Hz and 90-120Hz. You can see how + * these bandwidths increase as your octave sizes grow. For instance, the last + * octave will always span + * sampleRate/4 - sampleRate/2, which in the case of audio sampled + * at 44100 Hz is 11025-22010 Hz. These logarithmically spaced averages are + * usually much more useful than the full spectrum or the linearly spaced + * averages because they map more directly to how humans perceive sound. + *

+ * calcAvg() allows you to specify the frequency band you want an + * average calculated for. You might ask for 60-500Hz and this function will + * group together the bands from the full spectrum that fall into that range and + * average their amplitudes for you. + *

+ * If you don't want any averages calculated, then you can call + * noAverages(). This will not impact your ability to use + * calcAvg(), it will merely prevent the object from calculating an + * average array every time you use + * forward(). + *

+ * Inverse Transform + *

+ * FourierTransform also supports taking the inverse transform of a spectrum. + * This means that a frequency spectrum will be transformed into a time domain + * signal and placed in a provided sample buffer. The length of the time domain + * signal will be + * timeSize() long. The + * set and + * scale functions allow you the ability to shape the spectrum + * already stored in the object before taking the inverse transform. You might + * use these to filter frequencies in a spectrum or modify it in some other way. + * + * @author Damien Di Fede + * @see The Discrete Fourier + * Transform + */ +public abstract class FourierTransform { + + /** + * A constant indicating no window should be used on sample buffers. + */ + public static final int NONE = 0; + /** + * A constant indicating a Hamming window should be used on sample buffers. + */ + public static final int HAMMING = 1; + protected static final int LINAVG = 2; + protected static final int LOGAVG = 3; + protected static final int NOAVG = 4; + protected static final float TWO_PI = (float) (2 * Math.PI); + protected int timeSize; + protected int sampleRate; + protected float bandWidth; + protected int whichWindow; + protected float[] real; + protected float[] imag; + protected float[] spectrum; + protected float[] averages; + protected int whichAverage; + protected int octaves; + protected int avgPerOctave; + + /** + * Construct a FourierTransform that will analyze sample buffers that are + * ts samples long and contain samples with a + * sr sample rate. + * + * @param ts the length of the buffers that will be analyzed + * @param sr the sample rate of the samples that will be analyzed + */ + FourierTransform(int ts, float sr) { + timeSize = ts; + sampleRate = (int) sr; + bandWidth = (2f / timeSize) * ((float) sampleRate / 2f); + noAverages(); + allocateArrays(); + whichWindow = NONE; + } + + // allocating real, imag, and spectrum are the responsibility of derived + // classes + // because the size of the arrays will depend on the implementation being used + // this enforces that responsibility + protected abstract void allocateArrays(); + + protected void setComplex(float[] r, float[] i) { + if (real.length != r.length && imag.length != i.length) { + throw new IllegalArgumentException("This won't work"); + } else { + System.arraycopy(r, 0, real, 0, r.length); + System.arraycopy(i, 0, imag, 0, i.length); + } + } + + // fill the spectrum array with the amps of the data in real and imag + // used so that this class can handle creating the average array + // and also do spectrum shaping if necessary + protected void fillSpectrum() { + for (int i = 0; i < spectrum.length; i++) { + spectrum[i] = (float) Math.sqrt(real[i] * real[i] + imag[i] * imag[i]); + } + + if (whichAverage == LINAVG) { + int avgWidth = (int) spectrum.length / averages.length; + for (int i = 0; i < averages.length; i++) { + float avg = 0; + int j; + for (j = 0; j < avgWidth; j++) { + int offset = j + i * avgWidth; + if (offset < spectrum.length) { + avg += spectrum[offset]; + } else { + break; + } + } + avg /= j + 1; + averages[i] = avg; + } + } else if (whichAverage == LOGAVG) { + for (int i = 0; i < octaves; i++) { + float lowFreq, hiFreq, freqStep; + if (i == 0) { + lowFreq = 0; + } else { + lowFreq = (sampleRate / 2) / (float) Math.pow(2, octaves - i); + } + hiFreq = (sampleRate / 2) / (float) Math.pow(2, octaves - i - 1); + freqStep = (hiFreq - lowFreq) / avgPerOctave; + float f = lowFreq; + for (int j = 0; j < avgPerOctave; j++) { + int offset = j + i * avgPerOctave; + averages[offset] = calcAvg(f, f + freqStep); + f += freqStep; + } + } + } + } + + /** + * Sets the object to not compute averages. + * + */ + public void noAverages() { + averages = new float[0]; + whichAverage = NOAVG; + } + + /** + * Sets the number of averages used when computing the spectrum and spaces + * the averages in a linear manner. In other words, each average band will + * be + * specSize() / numAvg bands wide. + * + * @param numAvg how many averages to compute + */ + public void linAverages(int numAvg) { + if (numAvg > spectrum.length / 2) { + throw new IllegalArgumentException("The number of averages for this transform can be at most " + spectrum.length / 2 + "."); + } else { + averages = new float[numAvg]; + } + whichAverage = LINAVG; + } + + /** + * Sets the number of averages used when computing the spectrum based on the + * minimum bandwidth for an octave and the number of bands per octave. For + * example, with audio that has a sample rate of 44100 Hz, + * logAverages(11, 1) will result in 12 averages, each + * corresponding to an octave, the first spanning 0 to 11 Hz. To ensure that + * each octave band is a full octave, the number of octaves is computed by + * dividing the Nyquist frequency by two, and then the result of that by + * two, and so on. This means that the actual bandwidth of the lowest octave + * may not be exactly the value specified. + * + * @param minBandwidth the minimum bandwidth used for an octave + * @param bandsPerOctave how many bands to split each octave into + */ + public void logAverages(int minBandwidth, int bandsPerOctave) { + float nyq = (float) sampleRate / 2f; + octaves = 1; + while ((nyq /= 2) > minBandwidth) { + octaves++; + } + avgPerOctave = bandsPerOctave; + averages = new float[octaves * bandsPerOctave]; + whichAverage = LOGAVG; + } + + /** + * Sets the window to use on the samples before taking the forward + * transform. If an invalid window is asked for, an error will be reported + * and the current window will not be changed. + * + * @param which FourierTransform.HAMMING or FourierTransform.NONE + */ + public void window(int which) { + if (which < 0 || which > 1) { + throw new IllegalArgumentException("Invalid window type."); + } else { + whichWindow = which; + } + } + + protected void doWindow(float[] samples) { + switch (whichWindow) { + case HAMMING: + hamming(samples); + break; + } + } + + // windows the data in samples with a Hamming window + protected void hamming(float[] samples) { + for (int i = 0; i < samples.length; i++) { + samples[i] *= (0.54f - 0.46f * Math.cos(TWO_PI * i / (samples.length - 1))); + } + } + + /** + * Returns the length of the time domain signal expected by this transform. + * + * @return the length of the time domain signal expected by this transform + */ + public int timeSize() { + return timeSize; + } + + /** + * Returns the size of the spectrum created by this transform. In other + * words, the number of frequency bands produced by this transform. This is + * typically equal to + * timeSize()/2 + 1, see above for an explanation. + * + * @return the size of the spectrum + */ + public int specSize() { + return spectrum.length; + } + + /** + * Returns the amplitude of the requested frequency band. + * + * @param i the index of a frequency band + * @return the amplitude of the requested frequency band + */ + public float getBand(int i) { + if (i < 0) { + i = 0; + } + if (i > spectrum.length - 1) { + i = spectrum.length - 1; + } + return spectrum[i]; + } + + /** + * Returns the width of each frequency band in the spectrum (in Hz). It + * should be noted that the bandwidth of the first and last frequency bands + * is half as large as the value returned by this function. + * + * @return the width of each frequency band in Hz. + */ + public float getBandWidth() { + return bandWidth; + } + + /** + * Sets the amplitude of the + * ith frequency band to + * a. You can use this to shape the spectrum before using + * inverse(). + * + * @param i the frequency band to modify + * @param a the new amplitude + */ + public abstract void setBand(int i, float a); + + /** + * Scales the amplitude of the + * ith frequency band by + * s. You can use this to shape the spectrum before using + * inverse(). + * + * @param i the frequency band to modify + * @param s the scaling factor + */ + public abstract void scaleBand(int i, float s); + + /** + * Returns the index of the frequency band that contains the requested + * frequency. + * + * @param freq the frequency you want the index for (in Hz) + * @return the index of the frequency band that contains freq + */ + public int freqToIndex(float freq) { + // special case: freq is lower than the bandwidth of spectrum[0] + if (freq < getBandWidth() / 2) { + return 0; + } + // special case: freq is within the bandwidth of spectrum[spectrum.length - 1] + if (freq > sampleRate / 2 - getBandWidth() / 2) { + return spectrum.length - 1; + } + // all other cases + float fraction = freq / (float) sampleRate; + int i = Math.round(timeSize * fraction); + return i; + } + + /** + * Returns the middle frequency of the ith band. + * + * @param i the index of the band you want to middle frequency of + */ + public float indexToFreq(int i) { + float bw = getBandWidth(); + // special case: the width of the first bin is half that of the others. + // so the center frequency is a quarter of the way. + if (i == 0) { + return bw * 0.25f; + } + // special case: the width of the last bin is half that of the others. + if (i == spectrum.length - 1) { + float lastBinBeginFreq = (sampleRate / 2) - (bw / 2); + float binHalfWidth = bw * 0.25f; + return lastBinBeginFreq + binHalfWidth; + } + // the center frequency of the ith band is simply i*bw + // because the first band is half the width of all others. + // treating it as if it wasn't offsets us to the middle + // of the band. + return i * bw; + } + + /** + * Returns the center frequency of the ith average band. + * + * @param i which average band you want the center frequency of. + */ + public float getAverageCenterFrequency(int i) { + if (whichAverage == LINAVG) { + // an average represents a certain number of bands in the spectrum + int avgWidth = (int) spectrum.length / averages.length; + // the "center" bin of the average, this is fudgy. + int centerBinIndex = i * avgWidth + avgWidth / 2; + return indexToFreq(centerBinIndex); + + } else if (whichAverage == LOGAVG) { + // which "octave" is this index in? + int octave = i / avgPerOctave; + // which band within that octave is this? + int offset = i % avgPerOctave; + float lowFreq, hiFreq, freqStep; + // figure out the low frequency for this octave + if (octave == 0) { + lowFreq = 0; + } else { + lowFreq = (sampleRate / 2) / (float) Math.pow(2, octaves - octave); + } + // and the high frequency for this octave + hiFreq = (sampleRate / 2) / (float) Math.pow(2, octaves - octave - 1); + // each average band within the octave will be this big + freqStep = (hiFreq - lowFreq) / avgPerOctave; + // figure out the low frequency of the band we care about + float f = lowFreq + offset * freqStep; + // the center of the band will be the low plus half the width + return f + freqStep / 2; + } + + return 0; + } + + /** + * Gets the amplitude of the requested frequency in the spectrum. + * + * @param freq the frequency in Hz + * @return the amplitude of the frequency in the spectrum + */ + public float getFreq(float freq) { + return getBand(freqToIndex(freq)); + } + + /** + * Sets the amplitude of the requested frequency in the spectrum to + * a. + * + * @param freq the frequency in Hz + * @param a the new amplitude + */ + public void setFreq(float freq, float a) { + setBand(freqToIndex(freq), a); + } + + /** + * Scales the amplitude of the requested frequency by + * a. + * + * @param freq the frequency in Hz + * @param s the scaling factor + */ + public void scaleFreq(float freq, float s) { + scaleBand(freqToIndex(freq), s); + } + + /** + * Returns the number of averages currently being calculated. + * + * @return the length of the averages array + */ + public int avgSize() { + return averages.length; + } + + /** + * Gets the value of the + * ith average. + * + * @param i the average you want the value of + * @return the value of the requested average band + */ + public float getAvg(int i) { + float ret; + if (averages.length > 0) { + ret = averages[i]; + } else { + ret = 0; + } + return ret; + } + + /** + * Calculate the average amplitude of the frequency band bounded by + * lowFreq and + * hiFreq, inclusive. + * + * @param lowFreq the lower bound of the band + * @param hiFreq the upper bound of the band + * @return the average of all spectrum values within the bounds + */ + public float calcAvg(float lowFreq, float hiFreq) { + int lowBound = freqToIndex(lowFreq); + int hiBound = freqToIndex(hiFreq); + float avg = 0; + for (int i = lowBound; i <= hiBound; i++) { + avg += spectrum[i]; + } + avg /= (hiBound - lowBound + 1); + return avg; + } + + /** + * Performs a forward transform on + * buffer. + * + * @param buffer the buffer to analyze + */ + public abstract void forward(float[] buffer); + + /** + * Performs a forward transform on values in + * buffer. + * + * @param buffer the buffer of samples + * @param startAt the index to start at in the buffer. there must be at + * least timeSize() samples between the starting index and the end of the + * buffer. If there aren't, an error will be issued and the operation will + * not be performed. + * + */ + public void forward(float[] buffer, int startAt) { + if (buffer.length - startAt < timeSize) { + throw new IllegalArgumentException("FourierTransform.forward: not enough samples in the buffer between " + startAt + " and " + buffer.length + " to perform a transform."); + } + + // copy the section of samples we want to analyze + float[] section = new float[timeSize]; + System.arraycopy(buffer, startAt, section, 0, section.length); + forward(section); + } + + /** + * Performs an inverse transform of the frequency spectrum and places the + * result in + * buffer. + * + * @param buffer the buffer to place the result of the inverse transform in + */ + public abstract void inverse(float[] buffer); + + /** + * Performs an inverse transform of the frequency spectrum represented by + * freqReal and freqImag and places the result in buffer. + * + * @param freqReal the real part of the frequency spectrum + * @param freqImag the imaginary part the frequency spectrum + * @param buffer the buffer to place the inverse transform in + */ + public void inverse(float[] freqReal, float[] freqImag, float[] buffer) { + setComplex(freqReal, freqImag); + inverse(buffer); + } + + /** + * @return the spectrum of the last FourierTransform.forward() call. + */ + public float[] getSpectrum() { + return spectrum; + } + + //########## Added Code ########## + /** + * @return the spectrum of the last FourierTransform.forward() call for the + * specified range. + */ + public float[] getSpectrum(Band band) { + if (band == null) { + return spectrum; + } + ArrayList spec = new ArrayList(); + for (float f = band.getLowFrequenzy(); f < band.getHighFrequenzy() + getBandWidth(); f += getBandWidth()) { + spec.add(getFreq(f)); + } + return SampleHelper.convertToFloatArray(spec); + } + + public int getBandSize(Band band) { + if (band == null) { + return spectrum.length; + } + int counter = 0; + for (float f = band.getLowFrequenzy(); f < band.getHighFrequenzy() + getBandWidth(); f += getBandWidth()) { + counter++; + } + return counter; + } + //#######End of Added Code ####### + + /** + * @return the real part of the last FourierTransform.forward() call. + */ + public float[] getRealPart() { + return real; + } + + /** + * @return the imaginary part of the last FourierTransform.forward() call. + */ + public float[] getImaginaryPart() { + return imag; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/decoder/Decoder.java b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/Decoder.java new file mode 100644 index 0000000..a6e4705 --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/Decoder.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * This Code is based on the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/Decoder.java + */ +package org.wyrez.audio.decoder; + +/** + * Interface for audio decoders that return successive amplitude frames. + * + * @author Darth Affe + */ +public interface Decoder { + + /** + * Reads in samples.length stereo samples from the decoder. Returns the + * actual number read in. If this number is smaller than samples.length then + * the end of stream has been reached. + * + * @param samples The samples array to write the samples to + * @returns The number of samples actually read + */ + public int readSamplesStereo(float[] samples); + + /** + * Reads in samples.length mono samples from the decoder. If the audio + * source isn't mono they channels are merged. Returns the actual number + * read in. If this number is smaller than samples.length then the end of + * stream has been reached. All Channels are merged by calculating the + * average. + * + * @param samples The samples array to write the samples to + * @returns The number of samples actually read + */ + public int readSamplesMergedMono(float[] samples); + + /** + * Returns the number of channels in the audio source. + * + * @returns The channel count + */ + public int getChannelCount(); + + /** + * Returns the sampling rate in Hz of the audio source. + * + * @returns the sampling rate as float + */ + public float getSamplingRate(); +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/decoder/DecoderFactory.java b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/DecoderFactory.java new file mode 100644 index 0000000..e401c60 --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/DecoderFactory.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.audio.decoder; + +import java.io.FileInputStream; +import java.io.InputStream; + +/** + * Factory used to create Audio-Decoder. + * + * @author Darth Affe + */ +public enum DecoderFactory { + + WAVE, MP3; + + /** + * Creates a decoder for the selected codec. + * + * @returns The new decoder + * @throws Exception in case the Decoder could not be created + */ + public Decoder create(InputStream is) throws Exception { + switch (this) { + case WAVE: + return new WaveDecoder(is); + case MP3: + return new MP3Decoder(is); + default: //impossible + return null; + } + } + + /** + * Creates a decoder for the given file, if there isn't one an exception is + * thrown. + * + * @returns The new decoder + * @throws Exception in case the Decoder could not be created + * @throws IllegalArgumentException in case there is now decoder for the + * given file + */ + public static Decoder create(String file) throws Exception, IllegalArgumentException { + int i = file.lastIndexOf('.'); + if (i == 0) { + throw new IllegalArgumentException("Can't detect a filetype"); + } + String extension = file.substring(i + 1); + switch (extension.toUpperCase()) { + case "MP3": + return MP3.create(new FileInputStream(file)); + case "WAV": + case "WAVE": + return WAVE.create(new FileInputStream(file)); + default: + throw new IllegalArgumentException("Filetype \"" + extension + "\" is not supported."); + } + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/decoder/MP3Decoder.java b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/MP3Decoder.java new file mode 100644 index 0000000..76367e0 --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/MP3Decoder.java @@ -0,0 +1,365 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * This Code is based on the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/MP3Decoder.java + */ +package org.wyrez.audio.decoder; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.PushbackInputStream; +import java.util.HashMap; +import javax.sound.sampled.AudioFileFormat; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.UnsupportedAudioFileException; +import javazoom.jl.decoder.Bitstream; +import javazoom.jl.decoder.Header; +import javazoom.spi.mpeg.sampled.file.MpegAudioFileFormat; +import javazoom.spi.mpeg.sampled.file.MpegAudioFormat; +import javazoom.spi.mpeg.sampled.file.MpegEncoding; +import javazoom.spi.mpeg.sampled.file.MpegFileFormatType; +import org.tritonus.share.TDebug; +import org.tritonus.share.sampled.FloatSampleBuffer; +import org.tritonus.share.sampled.file.TAudioFileReader; + +/** + * A decoder for MP3 files with a maximum of 2 channels. + * + * @author Darth Affe + */ +public class MP3Decoder implements Decoder { + + private AudioInputStream in; + private FloatSampleBuffer buffer; + private byte[] bytes; + private int channels; + private float samplingRate; + + /** + * Constructor, sets the input stream to read the MP3 file from. Audio files + * with more than 2 channels aren't supported! + * + * @param stream The input stream. + * @throws Exception in case the input stream couldn't be read properly + */ + public MP3Decoder(InputStream stream) throws Exception { + InputStream in = new BufferedInputStream(stream, 1024 * 1024); + this.in = new MP3AudioFileReader().getAudioInputStream(in); + AudioFormat baseFormat = this.in.getFormat(); + this.channels = baseFormat.getChannels(); + if (channels > 2) { + throw new IllegalArgumentException("more than 2 channels aren't supported"); + } + this.samplingRate = baseFormat.getSampleRate(); + AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, + baseFormat.getSampleRate(), 16, + baseFormat.getChannels(), + baseFormat.getChannels() * 2, + baseFormat.getSampleRate(), false); + this.in = AudioSystem.getAudioInputStream(format, this.in); + } + + /** + * Tries to read in samples.length stereo samples. Returns the number of + * samples actually read. Guarantees that samples.length samples are read in + * if there was enough data in the stream. + * + * @param samples The samples array to write the samples to + * @return The number of samples actually read + */ + @Override + public int readSamplesStereo(float[] samples) { + if (buffer == null || buffer.getSampleCount() < samples.length / 2) { + buffer = new FloatSampleBuffer(in.getFormat().getChannels(), samples.length / 2, in.getFormat().getSampleRate()); + bytes = new byte[buffer.getByteArrayBufferSize(in.getFormat())]; + } + + int read = 0; + int readBytes = 0; + try { + readBytes = in.read(bytes, read, bytes.length - read); + } catch (IOException e) { + return 0; + } + if (readBytes == -1) { + return 0; + } + + read += readBytes; + while (readBytes != -1 && read != bytes.length) { + try { + readBytes = in.read(bytes, read, bytes.length - read); + } catch (IOException e) { + return 0; + } + read += readBytes; + } + + int frameCount = bytes.length / in.getFormat().getFrameSize(); + buffer.setSamplesFromBytes(bytes, 0, in.getFormat(), 0, frameCount); + + for (int i = 0, j = 0; i < buffer.getSampleCount(); i++, j += 2) { + samples[j] = buffer.getChannel(0)[i]; + samples[j + 1] = buffer.getChannel(buffer.getChannelCount() == 2 ? 1 : 0)[i]; + } + return buffer.getSampleCount() * 2; + } + + /** + * Tries to read in samples.length samples, merging stereo to a mono channel + * by averaging. Returns the number of samples actually read. Guarantees + * that samples.length samples are read in if there was enough data in the + * stream. + * + * @param samples The samples array to write the samples to + * @return The number of samples actually read + */ + @Override + public int readSamplesMergedMono(float[] samples) { + if (buffer == null || buffer.getSampleCount() < samples.length) { + buffer = new FloatSampleBuffer(in.getFormat().getChannels(), samples.length, in.getFormat().getSampleRate()); + bytes = new byte[buffer.getByteArrayBufferSize(in.getFormat())]; + } + + int read = 0; + int readBytes = 0; + try { + readBytes = in.read(bytes, read, bytes.length - read); + } catch (IOException e) { + return 0; + } + if (readBytes == -1) { + return 0; + } + + read += readBytes; + while (readBytes != -1 && read != bytes.length) { + try { + readBytes = in.read(bytes, read, bytes.length - read); + } catch (IOException e) { + return 0; + } + read += readBytes; + } + + int frameCount = bytes.length / in.getFormat().getFrameSize(); + buffer.setSamplesFromBytes(bytes, 0, in.getFormat(), 0, frameCount); + + for (int i = 0; i < buffer.getSampleCount(); i++) { + if (buffer.getChannelCount() == 2) { + samples[i] = (buffer.getChannel(0)[i] + buffer.getChannel(1)[i]) / 2; + } else { + samples[i] = buffer.getChannel(0)[i]; + } + } + return buffer.getSampleCount(); + } + + /** + * Returns the number of channels in the audio source. (This value can't be + * greater than 2) + * + * @returns The channel count + */ + @Override + public int getChannelCount() { + return channels; + } + + /** + * Returns the sampling rate in Hz of the audio source. + * + * @returns the sampling rate as float + */ + @Override + public float getSamplingRate() { + return samplingRate; + } + + class MP3AudioFileReader extends TAudioFileReader { + + public static final int INITAL_READ_LENGTH = 128000; + private static final int MARK_LIMIT = INITAL_READ_LENGTH + 1; + private final AudioFormat.Encoding[][] sm_aEncodings = { + {MpegEncoding.MPEG2L1, MpegEncoding.MPEG2L2, MpegEncoding.MPEG2L3}, + {MpegEncoding.MPEG1L1, MpegEncoding.MPEG1L2, MpegEncoding.MPEG1L3}, + {MpegEncoding.MPEG2DOT5L1, MpegEncoding.MPEG2DOT5L2, + MpegEncoding.MPEG2DOT5L3},}; + + protected MP3AudioFileReader() { + super(MARK_LIMIT, true); + } + + @Override + protected AudioFileFormat getAudioFileFormat(InputStream inputStream, long mediaLength) + throws UnsupportedAudioFileException, IOException { + HashMap aff_properties = new HashMap(); + HashMap af_properties = new HashMap(); + int mLength = (int) mediaLength; + int size = inputStream.available(); + PushbackInputStream pis = new PushbackInputStream(inputStream, MARK_LIMIT); + byte head[] = new byte[22]; + pis.read(head); + + // Check for WAV, AU, and AIFF, Ogg Vorbis, Flac, MAC file formats. + // Next check for Shoutcast (supported) and OGG (unsupported) streams. + if ((head[0] == 'R') && (head[1] == 'I') && (head[2] == 'F') + && (head[3] == 'F') && (head[8] == 'W') && (head[9] == 'A') + && (head[10] == 'V') && (head[11] == 'E')) { + int isPCM = ((head[21] << 8) & 0x0000FF00) | ((head[20]) & 0x00000FF); + throw new UnsupportedAudioFileException("WAV PCM stream found"); + + } else if ((head[0] == '.') && (head[1] == 's') && (head[2] == 'n') + && (head[3] == 'd')) { + throw new UnsupportedAudioFileException("AU stream found"); + } else if ((head[0] == 'F') && (head[1] == 'O') && (head[2] == 'R') + && (head[3] == 'M') && (head[8] == 'A') && (head[9] == 'I') + && (head[10] == 'F') && (head[11] == 'F')) { + throw new UnsupportedAudioFileException("AIFF stream found"); + } else if (((head[0] == 'M') | (head[0] == 'm')) + && ((head[1] == 'A') | (head[1] == 'a')) + && ((head[2] == 'C') | (head[2] == 'c'))) { + throw new UnsupportedAudioFileException("APE stream found"); + } else if (((head[0] == 'F') | (head[0] == 'f')) + && ((head[1] == 'L') | (head[1] == 'l')) + && ((head[2] == 'A') | (head[2] == 'a')) + && ((head[3] == 'C') | (head[3] == 'c'))) { + throw new UnsupportedAudioFileException("FLAC stream found"); + } // Shoutcast stream ? + else if (((head[0] == 'I') | (head[0] == 'i')) + && ((head[1] == 'C') | (head[1] == 'c')) + && ((head[2] == 'Y') | (head[2] == 'y'))) { + pis.unread(head); + // Load shoutcast meta data. + } // Ogg stream ? + else if (((head[0] == 'O') | (head[0] == 'o')) + && ((head[1] == 'G') | (head[1] == 'g')) + && ((head[2] == 'G') | (head[2] == 'g'))) { + throw new UnsupportedAudioFileException("Ogg stream found"); + } // No, so pushback. + else { + pis.unread(head); + } + // MPEG header info. + int nVersion = AudioSystem.NOT_SPECIFIED; + int nLayer = AudioSystem.NOT_SPECIFIED; + // int nSFIndex = AudioSystem.NOT_SPECIFIED; + int nMode = AudioSystem.NOT_SPECIFIED; + int FrameSize = AudioSystem.NOT_SPECIFIED; + // int nFrameSize = AudioSystem.NOT_SPECIFIED; + int nFrequency = AudioSystem.NOT_SPECIFIED; + int nTotalFrames = AudioSystem.NOT_SPECIFIED; + float FrameRate = AudioSystem.NOT_SPECIFIED; + int BitRate = AudioSystem.NOT_SPECIFIED; + int nChannels = AudioSystem.NOT_SPECIFIED; + int nHeader = AudioSystem.NOT_SPECIFIED; + int nTotalMS = AudioSystem.NOT_SPECIFIED; + boolean nVBR = false; + AudioFormat.Encoding encoding = null; + try { + Bitstream m_bitstream = new Bitstream(pis); + aff_properties.put("mp3.header.pos", + new Integer(m_bitstream.header_pos())); + Header m_header = m_bitstream.readFrame(); + // nVersion = 0 => MPEG2-LSF (Including MPEG2.5), nVersion = 1 => MPEG1 + nVersion = m_header.version(); + if (nVersion == 2) { + aff_properties.put("mp3.version.mpeg", Float.toString(2.5f)); + } else { + aff_properties.put("mp3.version.mpeg", + Integer.toString(2 - nVersion)); + } + // nLayer = 1,2,3 + nLayer = m_header.layer(); + aff_properties.put("mp3.version.layer", Integer.toString(nLayer)); + // nSFIndex = m_header.sample_frequency(); + nMode = m_header.mode(); + aff_properties.put("mp3.mode", new Integer(nMode)); + nChannels = nMode == 3 ? 1 : 2; + aff_properties.put("mp3.channels", new Integer(nChannels)); + nVBR = m_header.vbr(); + af_properties.put("vbr", new Boolean(nVBR)); + aff_properties.put("mp3.vbr", new Boolean(nVBR)); + aff_properties.put("mp3.vbr.scale", new Integer(m_header.vbr_scale())); + FrameSize = m_header.calculate_framesize(); + aff_properties.put("mp3.framesize.bytes", new Integer(FrameSize)); + if (FrameSize < 0) { + throw new UnsupportedAudioFileException("Invalid FrameSize : " + FrameSize); + } + nFrequency = m_header.frequency(); + aff_properties.put("mp3.frequency.hz", new Integer(nFrequency)); + FrameRate = (float) ((1.0 / (m_header.ms_per_frame())) * 1000.0); + aff_properties.put("mp3.framerate.fps", new Float(FrameRate)); + if (FrameRate < 0) { + throw new UnsupportedAudioFileException("Invalid FrameRate : " + FrameRate); + } + if (mLength != AudioSystem.NOT_SPECIFIED) { + aff_properties.put("mp3.length.bytes", new Integer(mLength)); + nTotalFrames = m_header.max_number_of_frames(mLength); + aff_properties.put("mp3.length.frames", new Integer(nTotalFrames)); + } + BitRate = m_header.bitrate(); + af_properties.put("bitrate", new Integer(BitRate)); + aff_properties.put("mp3.bitrate.nominal.bps", new Integer(BitRate)); + nHeader = m_header.getSyncHeader(); + encoding = sm_aEncodings[nVersion][nLayer - 1]; + aff_properties.put("mp3.version.encoding", encoding.toString()); + if (mLength != AudioSystem.NOT_SPECIFIED) { + nTotalMS = Math.round(m_header.total_ms(mLength)); + aff_properties.put("duration", new Long((long) nTotalMS * 1000L)); + } + aff_properties.put("mp3.copyright", new Boolean(m_header.copyright())); + aff_properties.put("mp3.original", new Boolean(m_header.original())); + aff_properties.put("mp3.crc", new Boolean(m_header.checksums())); + aff_properties.put("mp3.padding", new Boolean(m_header.padding())); + InputStream id3v2 = m_bitstream.getRawID3v2(); + if (id3v2 != null) { + aff_properties.put("mp3.id3tag.v2", id3v2); + } + if (TDebug.TraceAudioFileReader) { + TDebug.out(m_header.toString()); + } + } catch (Exception e) { + throw new UnsupportedAudioFileException("not a MPEG stream:" + + e.getMessage()); + } + // Deeper checks ? + int cVersion = (nHeader >> 19) & 0x3; + if (cVersion == 1) { + throw new UnsupportedAudioFileException( + "not a MPEG stream: wrong version"); + } + int cSFIndex = (nHeader >> 10) & 0x3; + if (cSFIndex == 3) { + + throw new UnsupportedAudioFileException( + "not a MPEG stream: wrong sampling rate"); + } + + AudioFormat format = new MpegAudioFormat(encoding, (float) nFrequency, + AudioSystem.NOT_SPECIFIED, nChannels, -1, FrameRate, true, af_properties); + return new MpegAudioFileFormat(MpegFileFormatType.MP3, format, + nTotalFrames, mLength, aff_properties); + } + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/decoder/WaveDecoder.java b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/WaveDecoder.java new file mode 100644 index 0000000..e5462c4 --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/decoder/WaveDecoder.java @@ -0,0 +1,198 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * This Code is based on the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/WaveDecoder.java + */ +package org.wyrez.audio.decoder; + +import java.io.BufferedInputStream; +import java.io.InputStream; +import org.wyrez.audio.util.EndianDataInputStream; + +/** + * A simple converter that can read in the PCM data from a Wav file, converting + * the data to signed 32-bit floats in the range [-1,1]. This only supports + * 16-bit Wav files with a maximum of 2 channels. + * + * @author Darth Affe + */ +public class WaveDecoder implements Decoder { + + private final float MAX_VALUE = 1.0f / Short.MAX_VALUE;//inverse max short value as float + private final EndianDataInputStream in; + private final int channels; + private final float samplingRate; + + /** + * Constructor, sets the input stream to read the Wav file from. Audio files + * with more than 2 channels aren't supported! + * + * @param stream The input stream. + * @throws Exception in case the input stream couldn't be read properly + */ + public WaveDecoder(InputStream stream) throws Exception { + if (stream == null) { + throw new IllegalArgumentException("Input stream must not be null"); + } + + in = new EndianDataInputStream(new BufferedInputStream(stream, 1024 * 1024)); + if (!in.read4ByteString().equals("RIFF")) { + throw new IllegalArgumentException("not a wav"); + } + + in.readIntLittleEndian(); + + if (!in.read4ByteString().equals("WAVE")) { + throw new IllegalArgumentException("expected WAVE tag"); + } + + if (!in.read4ByteString().equals("fmt ")) { + throw new IllegalArgumentException("expected fmt tag"); + } + + if (in.readIntLittleEndian() != 16) { + throw new IllegalArgumentException("expected wave chunk size to be 16"); + } + + if (in.readShortLittleEndian() != 1) { + throw new IllegalArgumentException("expected format to be 1"); + } + + channels = in.readShortLittleEndian(); + if (channels > 2) { + throw new IllegalArgumentException("more than 2 channels aren't supported"); + } + samplingRate = in.readIntLittleEndian(); + + in.readIntLittleEndian(); + in.readShortLittleEndian(); + int fmt = in.readShortLittleEndian(); + + if (fmt != 16) { + throw new IllegalArgumentException("Only 16-bit signed format supported"); + } + + if (!in.read4ByteString().equals("data")) { + throw new RuntimeException("expected data tag"); + } + + in.readIntLittleEndian(); + } + + /** + * Tries to read in samples.length stereo samples, converting non float + * formats to float 32-bit. Returns the number of samples actually read. + * Guarantees that samples.length samples are read in if there was enough + * data in the stream. + * + * @param samples The samples array to write the samples to + * @return The number of samples actually read + */ + @Override + public int readSamplesStereo(float[] samples) { + switch (channels) { + case 1: + return readMonoAsStereo(samples); + case 2: + return readRealStereo(samples); + default: + return 0; + } + } + + private int readRealStereo(float[] samples) { + int readSamples = 0; + for (int i = 0; i < samples.length - 1; i += 2) { + try { + samples[i] = in.readShortLittleEndian() * MAX_VALUE; + samples[i + 1] = in.readShortLittleEndian() * MAX_VALUE; + readSamples += 2; + } catch (Exception ex) { + break; + } + } + return readSamples; + } + + private int readMonoAsStereo(float[] samples) { + int readSamples = 0; + for (int i = 0; i < samples.length - 1; i += 2) { + try { + float sample = in.readShortLittleEndian() * MAX_VALUE; + samples[i] = sample; + samples[i + 1] = sample; + readSamples += 2; + } catch (Exception ex) { + break; + } + } + return readSamples; + } + + /** + * Tries to read in samples.length samples, merging stereo to a mono channel + * by averaging and converting non float formats to float 32-bit. Returns + * the number of samples actually read. Guarantees that samples.length + * samples are read in if there was enough data in the stream. + * + * @param samples The samples array to write the samples to + * @return The number of samples actually read + */ + @Override + public int readSamplesMergedMono(float[] samples) { + int readSamples = 0; + for (int i = 0; i < samples.length; i++) { + float sample = 0; + try { + for (int j = 0; j < channels; j++) { + int shortValue = in.readShortLittleEndian(); + sample += (shortValue * MAX_VALUE); + } + sample /= channels; + samples[i] = sample; + readSamples++; + } catch (Exception ex) { + break; + } + } + return readSamples; + } + + /** + * Returns the number of channels in the audio source. (This value can't be + * greater than 2) + * + * @returns The channel count + */ + @Override + public int getChannelCount() { + return channels; + } + + /** + * Returns the sampling rate in Hz of the audio source. + * + * @returns the sampling rate as floatF + */ + @Override + public float getSamplingRate() { + return samplingRate; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/util/Band.java b/AudioProcessing/src/main/java/org/wyrez/audio/util/Band.java new file mode 100644 index 0000000..515709d --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/util/Band.java @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.audio.util; + +/** + * Defines a band between of two frequencies. + * + * @author Darth Affe + */ +public class Band { + + private float lowFrequenzy; + private float highFrequenzy; + + public Band(float lowFrequenzy, float highFrequenzy) { + if (lowFrequenzy <= highFrequenzy) { + this.lowFrequenzy = lowFrequenzy; + this.highFrequenzy = highFrequenzy; + } else { + this.lowFrequenzy = highFrequenzy; + this.highFrequenzy = lowFrequenzy; + } + } + + /** + * Returns the lower frequency of the band. + * + * @return The frequency as float + */ + public float getLowFrequenzy() { + return lowFrequenzy; + } + + /** + * Returns the higher frequency of the band. + * + * @return The frequency as float + */ + public float getHighFrequenzy() { + return highFrequenzy; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/util/EndianDataInputStream.java b/AudioProcessing/src/main/java/org/wyrez/audio/util/EndianDataInputStream.java new file mode 100644 index 0000000..0975fda --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/util/EndianDataInputStream.java @@ -0,0 +1,54 @@ +/* + * This Code is taken from the source provided with a tutorial by + * http://www.badlogicgames.com (as of 16.05.2013). + * The original source can be found here: + * http://code.google.com/p/audio-analysis/source/browse/trunk/src/com/badlogic/audio/io/EndianDataInputStream.java + */ +package org.wyrez.audio.util; + +import java.io.DataInputStream; +import java.io.InputStream; + +public class EndianDataInputStream extends DataInputStream { + + public EndianDataInputStream(InputStream in) { + super(in); + } + + public String read4ByteString() throws Exception { + byte[] bytes = new byte[4]; + readFully(bytes); + return new String(bytes, "US-ASCII"); + } + + public short readShortLittleEndian() throws Exception { + int result = readUnsignedByte(); + result |= readUnsignedByte() << 8; + return (short) result; + } + + public int readIntLittleEndian() throws Exception { + int result = readUnsignedByte(); + result |= readUnsignedByte() << 8; + result |= readUnsignedByte() << 16; + result |= readUnsignedByte() << 24; + return result; + } + + public int readInt24BitLittleEndian() throws Exception { + int result = readUnsignedByte(); + result |= readUnsignedByte() << 8; + result |= readUnsignedByte() << 16; + if ((result & (1 << 23)) == 8388608) { + result |= 0xff000000; + } + return result; + } + + public int readInt24Bit() throws Exception { + int result = readUnsignedByte() << 16; + result |= readUnsignedByte() << 8; + result |= readUnsignedByte(); + return result; + } +} diff --git a/AudioProcessing/src/main/java/org/wyrez/audio/util/SampleHelper.java b/AudioProcessing/src/main/java/org/wyrez/audio/util/SampleHelper.java new file mode 100644 index 0000000..852514e --- /dev/null +++ b/AudioProcessing/src/main/java/org/wyrez/audio/util/SampleHelper.java @@ -0,0 +1,100 @@ +/* + * Copyright (C) 2013 Darth Affe and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package org.wyrez.audio.util; + +import java.util.ArrayList; +import java.util.List; +import org.wyrez.audio.decoder.Decoder; + +/** + * Helper class for sample-processing. + * + * @author Darth Affe + */ +public class SampleHelper { + + /** + * Converts a list of floats to an array of floats. + * + * @param samples The List to convert + * @returns The new float array + */ + public static float[] convertToFloatArray(List samples) { + float[] array = new float[samples.size()]; + for (int i = 0; i < array.length; i++) { + array[i] = samples.get(i); + } + return array; + } + + /** + * Creates an float array with the given length containing only the one + * given value. + * + * @param f The value to fill the array with + * @param length The length of the array + * @returns The new array + */ + public static float[] createFloatArray(float f, int length) { + float[] result = new float[length]; + for (int i = 0; i < length; i++) { + result[i] = f; + } + return result; + } + + /** + * Splits an array of floats. + * + * @param samples The source array to split + * @param offset The offset to split from + * @param length The length of the new array + * + * @retrn The new array + * + * @throws IllegalArgumentException Thrown if there aren't enough samples to + * proceed + */ + public static float[] splitSampleArray(float[] samples, int offset, int length) + throws IllegalArgumentException { + if (offset + length > samples.length) { + throw new IllegalArgumentException("There aren't enough samples in order to do that"); + } + float[] result = new float[length]; + for (int i = 0, j = offset; i < length; i++, j++) { + result[i] = samples[j]; + } + return result; + } + + /** + * Reads all samples mono merged from the given decoder. + * + * @param deocder The decoder to read from + * @returns The float array containing the samples + */ + public static float[] readAllSamples(Decoder decoder) { + List samples = new ArrayList(); + float[] buffer = new float[1024]; + while (decoder.readSamplesMergedMono(buffer) > 0) { + for (int i = 0; i < buffer.length; i++) { + samples.add(buffer[i]); + } + } + return convertToFloatArray(samples); + } +} diff --git a/AudioProcessing/tritonus.LICENSE b/AudioProcessing/tritonus.LICENSE new file mode 100644 index 0000000..5bc8fb2 --- /dev/null +++ b/AudioProcessing/tritonus.LICENSE @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it!