mirror of
https://github.com/Escartem/AnimeWwise.git
synced 2026-06-04 23:40:25 +08:00
upload tools
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,3 @@
|
||||
tools/
|
||||
output/
|
||||
temp/
|
||||
*.pck
|
||||
|
||||
674
tools/ffmpeg/LICENSE.txt
Normal file
674
tools/ffmpeg/LICENSE.txt
Normal file
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
|
||||
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.
|
||||
|
||||
<one line to give the program's name and a brief idea of what it does.>
|
||||
Copyright (C) <year> <name of author>
|
||||
|
||||
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 <https://www.gnu.org/licenses/>.
|
||||
|
||||
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:
|
||||
|
||||
<program> Copyright (C) <year> <name of author>
|
||||
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
|
||||
<https://www.gnu.org/licenses/>.
|
||||
|
||||
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
|
||||
<https://www.gnu.org/licenses/why-not-lgpl.html>.
|
||||
99
tools/ffmpeg/README.txt
Normal file
99
tools/ffmpeg/README.txt
Normal file
@@ -0,0 +1,99 @@
|
||||
Zeranoe FFmpeg Builds <http://ffmpeg.zeranoe.com/builds/>
|
||||
|
||||
Build: ffmpeg-3.4.2-win64-static
|
||||
|
||||
Configuration:
|
||||
--enable-gpl
|
||||
--enable-version3
|
||||
--enable-sdl2
|
||||
--enable-bzlib
|
||||
--enable-fontconfig
|
||||
--enable-gnutls
|
||||
--enable-iconv
|
||||
--enable-libass
|
||||
--enable-libbluray
|
||||
--enable-libfreetype
|
||||
--enable-libmp3lame
|
||||
--enable-libopencore-amrnb
|
||||
--enable-libopencore-amrwb
|
||||
--enable-libopenjpeg
|
||||
--enable-libopus
|
||||
--enable-libshine
|
||||
--enable-libsnappy
|
||||
--enable-libsoxr
|
||||
--enable-libtheora
|
||||
--enable-libtwolame
|
||||
--enable-libvpx
|
||||
--enable-libwavpack
|
||||
--enable-libwebp
|
||||
--enable-libx264
|
||||
--enable-libx265
|
||||
--enable-libxml2
|
||||
--enable-libzimg
|
||||
--enable-lzma
|
||||
--enable-zlib
|
||||
--enable-gmp
|
||||
--enable-libvidstab
|
||||
--enable-libvorbis
|
||||
--enable-libvo-amrwbenc
|
||||
--enable-libmysofa
|
||||
--enable-libspeex
|
||||
--enable-libxvid
|
||||
--enable-libmfx
|
||||
--enable-cuda
|
||||
--enable-cuvid
|
||||
--enable-d3d11va
|
||||
--enable-nvenc
|
||||
--enable-dxva2
|
||||
--enable-avisynth
|
||||
|
||||
Libraries:
|
||||
SDL 2.0.7 <https://libsdl.org>
|
||||
bzip2 1.0.6 <http://bzip.org/>
|
||||
Fontconfig 2.12.6 <http://freedesktop.org/wiki/Software/fontconfig>
|
||||
GnuTLS 3.5.18 <http://gnutls.org>
|
||||
libiconv 1.15 <http://gnu.org/software/libiconv>
|
||||
libass 0.14.0 <https://github.com/libass/libass>
|
||||
libbluray 20180123-6021ff9 <http://videolan.org/developers/libbluray.html>
|
||||
FreeType 2.9 <http://freetype.sourceforge.net>
|
||||
LAME 3.100 <http://lame.sourceforge.net>
|
||||
OpenCORE AMR 20170731-07a5be4 <https://sourceforge.net/projects/opencore-amr>
|
||||
OpenJPEG 2.3.0 <https://github.com/uclouvain/openjpeg>
|
||||
Opus 1.2.1 <http://opus-codec.org>
|
||||
shine 3.1.1 <https://github.com/savonet/shine>
|
||||
Snappy 1.1.7 <https://github.com/google/snappy>
|
||||
libsoxr 20160605-5fa7eeb <http://sourceforge.net/projects/soxr>
|
||||
Theora 1.1.1 <http://theora.org>
|
||||
TwoLAME 0.3.13 <http://twolame.org>
|
||||
vpx 1.7.0 <http://webmproject.org>
|
||||
WavPack 5.1.0 <http://wavpack.com>
|
||||
WebP 0.6.1 <https://developers.google.com/speed/webp>
|
||||
x264 20180118-7d0ff22 <http://videolan.org/developers/x264.html>
|
||||
x265 20180215-7219376 <https://bitbucket.org/multicoreware/x265/wiki/Home>
|
||||
libxml2 2.9.7 <http://xmlsoft.org>
|
||||
z.lib 20180119-5f24b48 <https://github.com/sekrit-twc/zimg>
|
||||
XZ Utils 5.2.3 <http://tukaani.org/xz>
|
||||
zlib 1.2.11 <http://zlib.net>
|
||||
GMP 6.1.2 <https://gmplib.org>
|
||||
vid.stab 20170830-afc8ea9 <http://public.hronopik.de/vid.stab>
|
||||
Vorbis 1.3.5 <http://vorbis.com>
|
||||
VisualOn AMR-WB 20141107-3b3fcd0 <https://sourceforge.net/projects/opencore-amr>
|
||||
libmysofa 20171120-cec6eea <https://github.com/hoene/libmysofa>
|
||||
Speex 1.2.0 <http://speex.org>
|
||||
Xvid 1.3.5 <https://labs.xvid.com>
|
||||
libmfx 1.23 <https://software.intel.com/en-us/media-sdk>
|
||||
|
||||
Copyright (C) 2018 Kyle Schwarz
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
BIN
tools/ffmpeg/ffmpeg.exe
Normal file
BIN
tools/ffmpeg/ffmpeg.exe
Normal file
Binary file not shown.
48
tools/hpatchz/hdiff LICENSE.txt
Normal file
48
tools/hpatchz/hdiff LICENSE.txt
Normal file
@@ -0,0 +1,48 @@
|
||||
MIT License
|
||||
|
||||
HDiffPatch
|
||||
Copyright (c) 2012-2021 housisong
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
----------------------------------------------------------------------------------
|
||||
|
||||
libdivsufsort
|
||||
Copyright (c) 2003-2008 Yuta Mori All Rights Reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
BIN
tools/hpatchz/hdiffz.exe
Normal file
BIN
tools/hpatchz/hdiffz.exe
Normal file
Binary file not shown.
BIN
tools/hpatchz/hpatchz.exe
Normal file
BIN
tools/hpatchz/hpatchz.exe
Normal file
Binary file not shown.
BIN
tools/quickbms/quickbms.exe
Normal file
BIN
tools/quickbms/quickbms.exe
Normal file
Binary file not shown.
4676
tools/quickbms/quickbms.txt
Normal file
4676
tools/quickbms/quickbms.txt
Normal file
File diff suppressed because it is too large
Load Diff
67
tools/quickbms/wavescan.bms
Normal file
67
tools/quickbms/wavescan.bms
Normal file
@@ -0,0 +1,67 @@
|
||||
# modified version to ignore filenames (and wav)
|
||||
#
|
||||
# scan data for wave files
|
||||
# RIFF and RIFX header supported
|
||||
# note: There are wave files with a wrong file size after RIFF/RIFX
|
||||
# This script takes the stream size, adds the header size and writes the correct size after RIFF/RIFX
|
||||
# (c) 2012-06-26 by AlphaTwentyThree
|
||||
#
|
||||
# future update plans:
|
||||
# - option to also write data between found wave files to disk
|
||||
# - option to automatically transform the file to a playable or at least decodable format
|
||||
|
||||
for i = 1 # run through loop with count variable i
|
||||
FindLoc OFFSET string "WAVE" 0 "" # search for "WAVE", save position as variable OFFSET
|
||||
if OFFSET == "" # when nothing is found
|
||||
cleanexit # the script exits (e.g. at end of file)
|
||||
endif
|
||||
math OFFSET -= 8 # jump to possible
|
||||
goto OFFSET # RIFF/RIFX file start
|
||||
getDstring IDENT 4 # read string of 4 bytes, save variable as IDENT
|
||||
if IDENT == "RIFX" # differentiate between header possibilities
|
||||
endian big # set endianness to big, if file has RIFX identifier
|
||||
callfunction write 1 # see function section below
|
||||
elif IDENT == "RIFF" # endianness stays little
|
||||
callfunction write 1 # also run function
|
||||
else # string "WAVE" found, but doesn't belong to wave file
|
||||
set SIZE 0xc # do as if something with 0xc bytes was found to continue search from the right position
|
||||
endif
|
||||
set SEARCH OFFSET # set marker to position from where to search next
|
||||
math SEARCH += SIZE # (that would be after the file that was found)
|
||||
if SEARCH == FSIZE # in case the last found file ends with the main file, we exit
|
||||
cleanexit
|
||||
endif
|
||||
goto SEARCH # if we haven't exited the script above, we set out cursor to after the last found file
|
||||
next i
|
||||
|
||||
startfunction write # function "write" starts here, is called when a wave file is found above
|
||||
get NAME basename # save name without extension under variable NAME
|
||||
string NAME += "_" # add underscore to the name
|
||||
string NAME += i # add the loop variable to the name
|
||||
goto OFFSET # set cursor to the beginning of the found file
|
||||
get DUMMY long # RIFF/RIFX identifier, not needed
|
||||
get DUMMY long # riff size, not needed
|
||||
get DUMMY long # "WAVE", not needed, we arrive at the "fmt " section
|
||||
for # loop search for the "data" section at the start of the stream (get the stream size from there)
|
||||
getDstring AREA_NAME 4 # name of area in header
|
||||
get AREA_SIZE long # size of area in header
|
||||
savepos MYOFF # save position we are at
|
||||
if AREA_NAME == "data" # when we arrive at the needed "data" area:
|
||||
break # we exit the loop
|
||||
else # otherwise:
|
||||
math MYOFF += AREA_SIZE # not reached "data" area -> adjust cursor position...
|
||||
goto MYOFF # ... and go there
|
||||
endif
|
||||
next # remember: the cursor is now directly at the stream start
|
||||
set STREAMSIZE AREA_SIZE # the last AREA_SIZE is the size we need (size of the audio stream)
|
||||
set HEADERSIZE MYOFF #
|
||||
math HEADERSIZE -= OFFSET # calculate the size of the stream header (offset - offset = size)
|
||||
set SIZE HEADERSIZE #
|
||||
math SIZE += STREAMSIZE # calculate complete file size (header + stream = file)
|
||||
log MEMORY_FILE OFFSET SIZE # write file to memory
|
||||
math SIZE -= 8 # subtract 8 bytes to get the riff size
|
||||
putVarChr MEMORY_FILE 4 SIZE long # write the correct riff size to the header inside the memory
|
||||
string NAME += ".wem" # add extension to the name (the name could contain the name of the first marker if the file has markers)
|
||||
math SIZE += 8 # add the subtracted 8 bytes again
|
||||
log NAME 0 SIZE MEMORY_FILE # write file in memory to disk
|
||||
endfunction # remember that we continue with our next i now!
|
||||
22
tools/vgmstream/COPYING
Normal file
22
tools/vgmstream/COPYING
Normal file
@@ -0,0 +1,22 @@
|
||||
Copyright (c) 2008-2019 Adam Gashlin, Fastelbja, Ronny Elfert, bnnm,
|
||||
Christopher Snowhill, NicknineTheEagle, bxaimc,
|
||||
Thealexbarney, CyberBotX, et al
|
||||
|
||||
Portions Copyright (c) 2004-2008, Marko Kreen
|
||||
Portions Copyright 2001-2007 jagarl / Kazunori Ueno <jagarl@creator.club.ne.jp>
|
||||
Portions Copyright (c) 1998, Justin Frankel/Nullsoft Inc.
|
||||
Portions Copyright (C) 2006 Nullsoft, Inc.
|
||||
Portions Copyright (c) 2005-2007 Paul Hsieh
|
||||
Portions Public Domain originating with Sun Microsystems
|
||||
|
||||
Permission to use, copy, modify, and distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
104
tools/vgmstream/README.md
Normal file
104
tools/vgmstream/README.md
Normal file
@@ -0,0 +1,104 @@
|
||||
# vgmstream
|
||||
This is vgmstream, a library for playing streamed (prerecorded) video game audio.
|
||||
|
||||
Some of vgmstream's features:
|
||||
- [Hundreds of video game music formats and codecs](doc/FORMATS.md), from typical game engine files
|
||||
to obscure single-game codecs, aiming for high accuracy and compatibility.
|
||||
- Support for looped BGM, using file's internal metadata for smooth transitions, with accurate
|
||||
sample counts.
|
||||
- [Subsongs](doc/USAGE.md#subsongs), playing a format's multiple internal songs separately.
|
||||
- Many types of companion files (data split into multiple files) and custom containers.
|
||||
- Encryption keys, internal stream names, and many other unusual cases found in game audio.
|
||||
- [TXTH](doc/TXTH.md) function, to add external support for extra formats, including raw audio in
|
||||
many forms.
|
||||
- [TXTP](doc/TXTP.md) function, for real-time and per-file config, like forced looping, removing
|
||||
channels, playing certain subsong, or fusing multiple files into a single one.
|
||||
- Simple [external tagging](doc/USAGE.md#tagging) via .m3u files.
|
||||
- [Plugins](#getting-vgmstream) are available for various media player software and operating systems.
|
||||
|
||||
The main development repository: https://github.com/vgmstream/vgmstream/
|
||||
|
||||
Automated builds with the latest changes: https://vgmstream.org
|
||||
(https://github.com/vgmstream/vgmstream-releases/releases/tag/nightly)
|
||||
|
||||
Common releases: https://github.com/vgmstream/vgmstream/releases
|
||||
|
||||
Help can be found here: https://www.hcs64.com/
|
||||
|
||||
More documentation: https://github.com/vgmstream/vgmstream/tree/master/doc
|
||||
|
||||
## Getting vgmstream
|
||||
There are multiple end-user components:
|
||||
- [vgmstream-cli](doc/USAGE.md#testexevgmstream-cli-command-line-decoder): A command-line decoder.
|
||||
- [in_vgmstream](doc/USAGE.md#in_vgmstream-winamp-plugin): A Winamp plugin.
|
||||
- [foo_input_vgmstream](doc/USAGE.md#foo_input_vgmstream-foobar2000-plugin): A foobar2000 component.
|
||||
- [xmp-vgmstream](doc/USAGE.md#xmp-vgmstream-xmplay-plugin): An XMPlay plugin.
|
||||
- [vgmstream.so](doc/USAGE.md#audacious-plugin): An Audacious plugin.
|
||||
- [vgmstream123](doc/USAGE.md#vgmstream123-command-line-player): A command-line player.
|
||||
|
||||
The main library (plain *vgmstream*) is the code that handles the internal conversion, while the
|
||||
above components are what you use to get sound.
|
||||
|
||||
If you want to convert game audio to `.wav`, try getting *vgmstream-cli* (see below) then
|
||||
drag-and-drop one or more files to the executable (support may vary per O.S. or distro).
|
||||
This should create `(file.extension).wav`, if the format is supported. More user-friendly
|
||||
would be installing a player like *foobar2000* (for Windows) or *Audacious* (for Linux)
|
||||
and the vgmstream plugin. Then you can directly listen your files and set options like infinite
|
||||
looping, or convert to `.wav` with the player's options (also easier if your file has multiple
|
||||
"subsongs").
|
||||
|
||||
See [components](doc/USAGE.md#components) in the *usage guide* for full install instructions and
|
||||
explanations. The aim is feature parity, but there are a few differences between them due to
|
||||
missing parts on vgmstream's side or lack of support in the player.
|
||||
|
||||
Note that vgmstream cannot *encode* (convert from `.wav` to a video game format), it only *decodes*
|
||||
(plays game audio).
|
||||
|
||||
|
||||
### Windows
|
||||
Get the latest prebuilt binaries (CLI/plugins/etc) on our website:
|
||||
- https://vgmstream.org
|
||||
|
||||
Or the less frequent "official" releases on GitHub:
|
||||
- https://github.com/vgmstream/vgmstream/releases
|
||||
|
||||
The foobar2000 component is also available on https://www.foobar2000.org based on current
|
||||
release.
|
||||
|
||||
If the above links fail, you may also try the alternative versions built by
|
||||
[bnnm](https://github.com/bnnm):
|
||||
- https://github.com/bnnm/vgmstream-builds/raw/master/bin/vgmstream-latest-test-u.zip
|
||||
|
||||
You may compile from source as well, see the [build guide](doc/BUILD.md).
|
||||
|
||||
### Linux
|
||||
A prebuilt CLI binary is available. It's statically linked and should work on systems running
|
||||
Linux kernel v3.2 and above:
|
||||
- https://vgmstream.org
|
||||
- https://github.com/vgmstream/vgmstream/releases
|
||||
|
||||
Building from source will also give you *vgmstream.so* (Audacious plugin), and *vgmstream123*
|
||||
(command-line player).
|
||||
|
||||
When building, many extra components have to be installed or compiled separately, which the
|
||||
[build guide](doc/BUILD.md) describes in detail. For a quick build on Debian and Ubuntu-style
|
||||
distributions run `./make-build-cmake.sh`. The script will need to install various dependencies,
|
||||
so you may prefer to copy commands and run them manually.
|
||||
|
||||
### macOS
|
||||
A prebuilt CLI binary is available as well:
|
||||
- https://vgmstream.org
|
||||
- https://github.com/vgmstream/vgmstream/releases
|
||||
|
||||
Otherwise follow the [build guide](doc/BUILD.md).
|
||||
|
||||
|
||||
## More info
|
||||
- [Usage guide](doc/USAGE.md)
|
||||
- [List of supported audio formats](doc/FORMATS.md)
|
||||
- [Build guide](doc/BUILD.md)
|
||||
- [TXTH file format](doc/TXTH.md)
|
||||
- [TXTP file format](doc/TXTP.md)
|
||||
|
||||
|
||||
Enjoy! *hcs*
|
||||
911
tools/vgmstream/USAGE.md
Normal file
911
tools/vgmstream/USAGE.md
Normal file
@@ -0,0 +1,911 @@
|
||||
# Usage
|
||||
|
||||
## Needed extra files
|
||||
On Windows support for some codecs (Ogg Vorbis, MPEG audio, etc.) is done with external
|
||||
libraries, so you will need to put certain DLL files together.
|
||||
|
||||
In the case of components like foobar2000 they are all bundled for convenience,
|
||||
while other components include them but must be installed manually. You can also
|
||||
get them here: https://github.com/vgmstream/vgmstream/tree/master/ext_libs
|
||||
or compile them manually, even (see tech docs).
|
||||
|
||||
Put the following files somewhere Windows can find them:
|
||||
- `libvorbis.dll`
|
||||
- `libmpg123-0.dll`
|
||||
- `libg719_decode.dll`
|
||||
- `avcodec-vgmstream-59.dll`
|
||||
- `avformat-vgmstream-59.dll`
|
||||
- `avutil-vgmstream-57.dll`
|
||||
- `swresample-vgmstream-4.dll`
|
||||
- `libatrac9.dll`
|
||||
- `libcelt-0061.dll`
|
||||
- `libcelt-0110.dll`
|
||||
- `libspeex-1.dll`
|
||||
|
||||
For command line (`vgmstream-cli.exe`) and XMPlay this means in the directory with the main
|
||||
`.exe`, or possibly a directory in the PATH variable.
|
||||
|
||||
For Winamp, the above `.dll` also go near main `winamp.exe`, but note that `in_vgmstream.dll`
|
||||
plugin itself goes in `Plugins`.
|
||||
|
||||
On other OSs like Linux/Mac, libs need to be installed before compiling, then should be used
|
||||
automatically, though not all may enabled at the moment due to build scripts issues.
|
||||
|
||||
|
||||
## Components
|
||||
|
||||
### vgmstream-cli (command line decoder)
|
||||
*Windows*: unzip `vgmstream-cli` and follow the above instructions for installing needed extra files.
|
||||
This tool was called `test.exe` before for historical reasons (rename back if needed).
|
||||
|
||||
*Others*: build instructions can be found in the [BUILD.md](BUILD.md) document (can be compiled
|
||||
with CMake/Make/autotools).
|
||||
|
||||
Converts playable files to `.wav`. Typical usage would be:
|
||||
- `vgmstream-cli -o happy.wav happy.adx` to decode `happy.adx` to `happy.wav`.
|
||||
|
||||
If command-line isn't your thing you can simply drag and drop one or multiple
|
||||
files to the executable to decode them as `(filename.ext).wav`.
|
||||
|
||||
There are multiple options that alter how the file is converted, for example:
|
||||
- `vgmstream-cli -m file.adx`: print info but don't decode
|
||||
- `vgmstream-cli -i -o file_noloop.wav file.hca`: convert without looping
|
||||
- `vgmstream-cli -s 2 -F file.fsb`: write 2nd subsong + ending after 2.0 loops
|
||||
- `vgmstream-cli -l 3.0 -f 5.0 -d 3.0 file.wem`: 3 loops, 3s delay, 5s fade
|
||||
- `vgmstream-cli -o bgm_?f.wav file1.adx file2.adx`: convert multiple files to `bgm_(name).wav`
|
||||
|
||||
Available commands are printed when run with no flags. Note that you can also
|
||||
achieve similar results for other plugins using TXTP, described later.
|
||||
|
||||
Output filename in `-o` may use wildcards:
|
||||
- `?s`: sets current subsong (or 0 if format doesn't have subsongs)
|
||||
- `?0Ns`: same, but left pads subsong with up to `N` zeroes
|
||||
- `?n`: internal stream name, or input filename if format doesn't have name
|
||||
- `?f`: input filename
|
||||
|
||||
For example `vgmstream-cli -s 2 -o ?04s_?n.wav file.fsb` could generate `0002_song1.wav`.
|
||||
Default output filename is `?f.wav`, or `?f#?s.wav` if you set subsongs (`-s/-S`).
|
||||
|
||||
|
||||
### in_vgmstream (Winamp plugin)
|
||||
*Windows*: drop the `in_vgmstream.dll` in your Winamp Plugins directory,
|
||||
and follow the above instructions for installing needed extra files.
|
||||
|
||||
*Others*: may be possible to use through *Wine*.
|
||||
|
||||
Once installed, supported files should be playable. There is a simple config
|
||||
menu to tweak some options too. If the *Preferences... > Plug-ins > Input* shows
|
||||
vgmstream as *"NOT LOADED"* that means extra DLL files aren't in the correct
|
||||
place.
|
||||
|
||||
#### Plugin priority
|
||||
An (uncommon) issue is clashing extensions. When opening a file, Winamp first
|
||||
asks all plugins if they support the file. Here vgmstream accepts files it can
|
||||
play and rejects anything it can't, but if no plugin "claims" the file (and most
|
||||
don't), Winamp will just pass it to the *first* `.dll` in the plugin folder that
|
||||
reports the extension. Since vgmstream supports tons of extensions sometimes it
|
||||
may receive files it can't play (even after rejecting them before). This oddness
|
||||
can be solved by renaming the plugins' `.dll` so vgmstream goes *last*.
|
||||
|
||||
For example, vgmstream ignores sequenced `.vgm` but supports streamed `.vgm` (another
|
||||
format). If your *in_vgm* plugin version doesn't "claim" sequenced `.vgm` Winamp
|
||||
may send it to vgmstream by mistake (so won't be playable), depending on how it's
|
||||
named. Here vgmstream has higher priority and fail:
|
||||
```
|
||||
in_vgmstream.dll
|
||||
in_vgmW.dll
|
||||
```
|
||||
And here has lower and will be playable:
|
||||
```
|
||||
in_vgm.dll
|
||||
in_vgmstream.dll
|
||||
```
|
||||
|
||||
Note the above is also affected by vgmstream's options *Enable common exts* (vgmstream
|
||||
will accept and play common files like `.wav` or `.ogg`), and *Enable unknown exts* (will
|
||||
try to play files outside the known extension list, which is often possible through *TXTH*).
|
||||
|
||||
|
||||
### foo_input_vgmstream (foobar2000 plugin)
|
||||
*Windows*: every file should be installed automatically when opening the `.fb2k-component`
|
||||
bundle.
|
||||
|
||||
*Others*: may be possible to use through *Wine*.
|
||||
|
||||
Note that vgmstream currently requires at least foobar v1.5 to run.
|
||||
|
||||
#### Plugin priority
|
||||
If multiple plugins supports the same format, which plugin is used depends on config.
|
||||
You can change plugin's priority in **options > Playback > Decoding**. Due to the
|
||||
huge amount of supported formats, you may want to set it low enough.
|
||||
|
||||
Note the above is also affected by vgmstream's options *Enable common exts* (vgmstream
|
||||
will accept and play common files like `.wav` or `.ogg`), and *Enable unknown exts* (will
|
||||
try to play files outside the known extension list, which is often possible through *TXTH*).
|
||||
|
||||
#### Default title
|
||||
By default *vgmstream* auto-generates a `title` tag depending on subsongs, stream name
|
||||
and other details. You can change this by setting *"override title"* in the options,
|
||||
that uses foobar's default (filename without extension) and tweating the display format
|
||||
in *Preferences > Display > Default User Interface* (may need to add some conditionals
|
||||
to handle files with/out subsongs). *vgmstream* automatically exports these tags:
|
||||
- `STREAM_INDEX`: current subsong, if file has subsongs, starts from 1
|
||||
- `STREAM_COUNT`: total subsongs, if file has subsongs
|
||||
- `STREAM_NAME`: internal name, that also exists in some formats without subsongs
|
||||
For example: `[%artist% - ]%title% [%stream_index%][/ %stream_name%]`
|
||||
|
||||
You can also set an unique *Destination* pattern when converting to .wav (even without)
|
||||
setting *override title*). For example `[$num(%stream_index%,2)] %filename%[-%stream_name%]`
|
||||
may create a name like `02 BGM-EVENT_SAD`.
|
||||
|
||||
#### Playlist issues
|
||||
A known quirk is that when loop options or tags change, playlist time/info won't
|
||||
update automatically. You need to manually refresh it by selecting songs and doing
|
||||
**shift + right click > Tagging > Reload info from file(s)**.
|
||||
|
||||
|
||||
### xmp-vgmstream (XMPlay plugin)
|
||||
*Windows*: drop the `xmp-vgmstream.dll` in your XMPlay plugins directory,
|
||||
and follow the above instructions for installing the other files needed.
|
||||
|
||||
*Others*: may be possible to use through *Wine*.
|
||||
|
||||
Note that this has less features compared to *in_vgmstream* and has no config.
|
||||
Since XMPlay supports Winamp plugins you may also use `in_vgmstream.dll` instead.
|
||||
|
||||
#### Plugin priority
|
||||
Because the XMPlay MP3 decoder incorrectly tries to play some vgmstream extensions,
|
||||
you need to manually fix it by going to **options > plugins > input > vgmstream**
|
||||
and in the "priority filetypes" put: `ahx,asf,awc,ckd,fsb,genh,lwav,msf,p3d,rak,scd,txth,xvag`
|
||||
(or any other similar case).
|
||||
|
||||
#### Missing subsongs
|
||||
XMPlay cannot support vgmstream's type of mixed subsongs due to player limitations
|
||||
(with neither *xmp-vgmstream* nor *in_vgmstream* plugins). You can make one *TXTP*
|
||||
per subsong to play them instead (explained below).
|
||||
|
||||
|
||||
### Audacious plugin
|
||||
*Windows*: not possible at the moment.
|
||||
|
||||
*Others*: needs to be manually built. Instructions can be found in [BUILD.md](BUILD.md)
|
||||
document in vgmstream's source code (can be done with CMake or autotools).
|
||||
|
||||
#### Plugin priority
|
||||
vgmstream sets its priority on compile time, low enough for most other plugins to
|
||||
go first (but not all). Can be changed with `AUDACIOUS_VGMSTREAM_PRIORITY`.
|
||||
|
||||
|
||||
### vgmstream123 (command line player)
|
||||
*Windows/Linux*: needs to be manually built. Instructions can be found in the
|
||||
*[BUILD.md](BUILD.md)* document. On Windows it needs `libao.dll` and appropriate includes.
|
||||
|
||||
Usage: `vgmstream123 [options] INFILE ...`
|
||||
|
||||
The program is meant to be a simple stand-alone player, supporting playback of
|
||||
vgmstream files through libao. Most options should be similar to CLI's
|
||||
(`-m`, `-i`, `-s N` and so on, though not fully equivalent), use `-h` for full info.
|
||||
|
||||
#### Extra features
|
||||
On Linux, files compressed with gzip/bzip2/xz also work, as identified by a
|
||||
`.gz/.bz2/.xz` extension. The file will be decompressed to a temp dir using the
|
||||
respective utility program (which must be installed and accessible) and then
|
||||
loaded.
|
||||
|
||||
It also supports playlists, and will recognize a special extended-M3U tag
|
||||
specific to vgmstream of the following form:
|
||||
```
|
||||
#EXT-X-VGMSTREAM:LOOPCOUNT=2,FADETIME=10.0,FADEDELAY=0.0,STREAMINDEX=0
|
||||
```
|
||||
(Any subset of these four parameters may appear in the line, in any order)
|
||||
|
||||
When this "magic comment" appears in the playlist before a vgmstream-compatible
|
||||
file, the given parameters will be applied to the playback of said file. This makes
|
||||
it feasible to play vgmstream files directly instead of needing to make "arranged"
|
||||
WAV/MP3 conversions ahead of time.
|
||||
|
||||
The tag syntax follows the conventions established in Apple's HTTP Live Streaming
|
||||
standard, whose docs discuss extending M3U with arbitrary tags.
|
||||
|
||||
|
||||
## Special cases
|
||||
vgmstream aims to support most audio formats as-is, but some files require extra
|
||||
handling.
|
||||
|
||||
### Subsongs
|
||||
Certain container formats have multiple audio files, usually called "subsongs", often
|
||||
not meant to be extracted (no simple separation from container).
|
||||
|
||||
By default vgmstream plays first subsong and reports total subsongs, if the format
|
||||
is able to contain them. Easiest to use would be the *foobar/winamp/Audacious*
|
||||
plugins, that are able to "unpack" those subsongs automatically into the playlist.
|
||||
|
||||
With CLI tools, you can select a subsong using the `-s` flag followed by a number,
|
||||
for example: `vgmstream-cli -s 5 file.bank` or `vgmstream123 -s 5 file.bank`.
|
||||
|
||||
Using *vgmstream-cli* you can convert multiple subsongs at once using the `-S` flag.
|
||||
**WARNING, MAY TAKE A LOT OF SPACE!** Some files have been observed to contain +20000
|
||||
subsongs, so don't use this lightly. Remember to set an output name (`-o`) with subsong
|
||||
wildcards (or leave it alone for the defaults).
|
||||
- `vgmstream-cli -s 1 -S 100 file.bank`: writes from subsong 1 to subsong 100
|
||||
- `vgmstream-cli -s 101 -S 0 file.bank`: writes from subsong 101 to max subsong (automatically changes 0 to max)
|
||||
- `vgmstream-cli -S 0 file.bank`: writes from subsong 1 to max subsong
|
||||
- `vgmstream-cli -s 1 -S 5 -o bgm.wav file.bank`: writes 5 subsongs, but all overwrite the same file = wrong.
|
||||
- `vgmstream-cli -s 1 -S 5 -o bgm_?02s.wav file.bank`: writes 5 subsongs, each named differently = correct.
|
||||
|
||||
For other players without support, or to play only a few choice subsongs, you
|
||||
can create multiple `.txtp` (explained later) to select one, like `bgm.sxd#10.txtp`
|
||||
(plays subsong 10 in `bgm.sxd`).
|
||||
|
||||
You can use this python script to autogenerate one `.txtp` per subsong:
|
||||
https://github.com/vgmstream/vgmstream/tree/master/cli/tools/txtp_maker.py
|
||||
Put in the same dir as *vgmstream-cli*, then to drag-and-drop files with
|
||||
subsongs to `txtp_maker.py` (it has CLI options to control output too).
|
||||
|
||||
### Common and unknown extensions
|
||||
A few extensions that vgmstream supports clash with common ones. Since players
|
||||
like foobar or Winamp don't react well to that, they may be renamed to these
|
||||
"designated fake extensions" to make them playable through vgmstream.
|
||||
- `.aac` to `.laac` (tri-Ace games)
|
||||
- `.ac3` to `.lac3` (standard AC3)
|
||||
- `.aif` to `.laif` (standard Mac AIF, Asobo AIF, Ogg)
|
||||
- `.aiff/aifc` to `.laiff/laifc` (standard Mac AIF)
|
||||
- `.asf` to `.lasf` (EA games, Argonaut ASF)
|
||||
- `.bin` to `.lbin` (various formats)
|
||||
- `.flac` to `.lflac` (standard FLAC)
|
||||
- `.mp2` to `.lmp2` (standard MP2)
|
||||
- `.mp3` to `.lmp3` (standard MP3)
|
||||
- `.mp4` to `.lmp4` (standard M4A)
|
||||
- `.mpc` to `.lmpc` (standard MPC)
|
||||
- `.ogg` to `.logg` (standard OGG)
|
||||
- `.opus` to `.lopus` (standard OPUS or Switch OPUS)
|
||||
- `.stm` to `.lstm` (Rockstar STM)
|
||||
- `.wav` to `.lwav` (standard WAV, various formats)
|
||||
- `.wma` to `.lwma` (standard WMA)
|
||||
- `.(any)` to `.vgmstream` (FFmpeg formats or TXTH)
|
||||
|
||||
Command line tools don't have this restriction and will accept the original
|
||||
filename.
|
||||
|
||||
The main advantage of renaming here is that vgmstream may use the file's internal
|
||||
loop info, or apply subtle fixes, but is also limited in some ways (like ignoring
|
||||
standard tags). `.vgmstream` is a catch-all extension that may work as a last resort
|
||||
to make a file playable.
|
||||
|
||||
Some plugins have options that allow "*common extensions*" to be played, making any
|
||||
renaming unnecessary. You may need to adjust plugin priority in player's options
|
||||
first. Note that vgmstream also accepts certain extension-less files as-is too.
|
||||
|
||||
Similarly, vgmstream has a curated list of known extensions, that plugins may take
|
||||
into account and ignore unknowns. Through *TXTH* you can make unknown files playable,
|
||||
but you also need to either rename or set plugin options to allow "*unknown extensions*"
|
||||
(or, preferably, report this new extension so it can be added to the known list).
|
||||
|
||||
It's also possible to make a .txtp file that opens files with those common/unknown
|
||||
extensions as a way to force them into vgmstream without renaming.
|
||||
|
||||
#### Related issues
|
||||
Also be aware that other plugins (not vgmstream) can tell the player they handle
|
||||
some extension, then not actually play it. This makes the file unplayable as
|
||||
vgmstream doesn't even get the chance to parse it, so you may need to disable
|
||||
the offending plugin or rename the file to the fake extension shown above (for
|
||||
example this may happen with `.asf` in foobar2000/Winamp, may be fixed in newer
|
||||
versions).
|
||||
|
||||
When extracting from a bigfile, sometimes internal files don't have a proper
|
||||
extension. Those should be renamed to its correct one when possible, as the
|
||||
extractor program may guess wrong (like `.wav` instead of `.at3` or `.wem`).
|
||||
If there is no known extension, usually the header id/magic string may be used instead.
|
||||
|
||||
#### Windows 10 folder bugs
|
||||
Windows 10's *Web Media Extensions* is a pre-installed package seems to read metadata
|
||||
from files like `.ogg`, `.opus`, `.flac` and so on when opening a folder. However
|
||||
it tends to noticeably slow down opening folders, also seems to crash and leave files
|
||||
unusable when reading unsupported formats like Switch Opus (rather than Ogg Opus).
|
||||
|
||||
Renaming extensions should prevent those issues, or just uninstall those *Web
|
||||
Media Extension* for better experience anyway.
|
||||
|
||||
#### Fallout SFX .ACM
|
||||
Due to technical limitations, to play Fallout 1/2 SFX you need to rename them from
|
||||
`.acm` to `.wavc` (forces mono).
|
||||
|
||||
### Demuxed videos
|
||||
vgmstream also supports audio from videos, but usually must be demuxed (extracted
|
||||
without modification) first, since vgmstream doesn't attempt to support most of them
|
||||
(it does support a few video formats as-is though).
|
||||
|
||||
The easiest way to do this is using *VGMToolBox*'s "Video Demultiplexer" option
|
||||
for common game video formats (`.bik`, `.vp6`, `.pss`, `.pam`, `.pmf`, `.usm`, `.xmv`, etc).
|
||||
|
||||
For standard videos formats (`.avi`, `.mp4`, `.webm`, `.m2v`, `.ogv`, etc) not supported
|
||||
by VGMToolBox, FFmpeg binary may work:
|
||||
- `ffmpeg.exe -i (input file) -vn -acodec copy (output file)`
|
||||
Output extension may need to be adjusted to some appropriate audio file depending
|
||||
on the audio codec used. `ffprobe.exe` can list this codec, though the correct audio
|
||||
extension depends on the video itself (like `.avi` to `.wav/mp2/mp3` or `.ogv` to `.ogg`).
|
||||
|
||||
Some games use custom video formats, demuxer scripts in `.bms` format may be found
|
||||
on the internet.
|
||||
|
||||
### Companion files
|
||||
Some formats have companion files with external info, that should be left together:
|
||||
- `.mus`: playlist with `.acm`
|
||||
- `.ogg.sli` or `.sli`: loop info for `.ogg`
|
||||
- `.ogg.sfl` : loop info for `.ogg`
|
||||
- `.opus.sli`: loop info for `.opus`
|
||||
- `.pos`: loop info for .wav
|
||||
- `.acb`: names for `.awb`
|
||||
- `.xsb`: names for `.xwb`
|
||||
|
||||
Similarly some formats split header+body data in separate files, examples:
|
||||
- `.abk`+`.ast`
|
||||
- `.bnm`+`.apm/wav`
|
||||
- `.ktsl2asbin`+`.ktsl2stbin`
|
||||
- `.mih`+`.mib`
|
||||
- `.mpf`+`.mus`
|
||||
- `.pk`+`.spk`
|
||||
- `.sb0`+`.sp0` (or other numbers instead of `0`)
|
||||
- `.sgh`+`.sgd`
|
||||
- `.snr`+`.sns`
|
||||
- `.spt`+`.spd`
|
||||
- `.sts`+`.int`
|
||||
- `.xwh`+`.xwb`
|
||||
- `.xps`+`dat`
|
||||
- `.wav.str`+`.wav`
|
||||
- `.wav`+`.dcs`
|
||||
- `.wbh`+`.wbd`
|
||||
|
||||
Both are needed to play and must be together. The usual rule is you open the
|
||||
bigger file (body), save a few formats where the smaller (header) file is opened
|
||||
instead for technical reasons (mainly some bank formats).
|
||||
|
||||
Generally companion files are named the same (`bgm.awb`+`bgm.acb`), or internally
|
||||
point to another file `sfx.sb0`+`STREAM.sb0`. A few formats may have different names
|
||||
which are hardcoded instead of being listed in the header file (e.g. `.mpf+.mus`).
|
||||
In these cases, you can use *TXTM* format to specify associated companion files.
|
||||
See *Artificial files* below for more information.
|
||||
|
||||
#### Dual stereo
|
||||
A special case of the above is "dual file stereo", where 2 similarly named mono
|
||||
files are fused together to make 1 stereo song.
|
||||
- `(file)_L.dsp`+`(file)_R.dsp`
|
||||
- `(file)-l.dsp`+`(file)-l.dsp`
|
||||
- `(file).L`+`(file).R`
|
||||
- `(file)_0.dsp`+`(file)_1.dsp`
|
||||
- `(file)_Left.dsp`+`(file)_Right.dsp`
|
||||
- `(file).v0`+`(file).v1`
|
||||
|
||||
vgmstream automatically detects these pairs and makes a stereo song from `L` + `R`.
|
||||
You can open either `L` or `R` and you'll get the same stereo. If you rename one
|
||||
of the files the "pair" won't be found, and both will be played as mono. This
|
||||
is only done for a few choice formats (mainly `.dsp` and `.vag`) that commonly
|
||||
split audio like that, though.
|
||||
|
||||
#### OS case sensitiveness
|
||||
When using OS with case sensitive filesystem (mainly Linux), a known issue with
|
||||
companion files is that vgmstream generally tries to find them using lowercase
|
||||
extension.
|
||||
|
||||
This means that if the developer used uppercase instead (e.g. `bgm.ABK`+`bgm.AST`)
|
||||
loading will fail. It's technically complex to fix this, so for the time being
|
||||
the only option is renaming the companion extension to lowercase.
|
||||
|
||||
A particularly nasty variation of that is that some formats load files by full
|
||||
name (e.g. `STREAM.SS0`), but sometimes the actual filename is in other case
|
||||
(`Stream.ss0`), and some files could even point to that with yet another case.
|
||||
You could try adding *symlinks* in various upper/lower/mixed cases to handle this,
|
||||
though only a few formats do this, mainly *Ubisoft* banks.
|
||||
|
||||
Regular formats without companion files should work fine in upper/lowercase. For
|
||||
`.(ext).txth` files make sure `(ext)` matches case too.
|
||||
|
||||
### Decryption keys
|
||||
Certain formats have encrypted data, and need a key to decrypt. vgmstream
|
||||
will try to find the correct key from a list, but it can be provided by
|
||||
a companion file:
|
||||
- `.adx`: `.adxkey` (keystring, 8-byte keycode, or derived 6 byte start/mult/add key)
|
||||
- `.ahx`: `.ahxkey` (keystring, or derived 6-byte start/mult/add key)
|
||||
- `.hca`: `.hcakey` (8-byte decryption key, a 64-bit number)
|
||||
- `.awb`/`.acb` also may use `.hcakey`, and will combine with an internal AWB subkey
|
||||
- May set a 8-byte key followed a 2-byte AWB subkey for newer HCA
|
||||
- `.fsb`: `.fsbkey` (decryption key in hex, usually between 8-32 bytes)
|
||||
- `.bnsf`: `.bnsfkey` (decryption key, a string up to 24 chars)
|
||||
|
||||
The key file can be `.(ext)key` (for the whole folder), or `(name).(ext)key"
|
||||
(for a single file). The format is made up to suit vgmstream.
|
||||
|
||||
### Artificial files
|
||||
In some cases a file only has raw data, while important header info (codec type,
|
||||
sample rate, channels, etc) is stored in the .exe or other hard to locate places.
|
||||
Or maybe the file plays normally, but has many layers at once that are silenced
|
||||
dynamically during gameplay, or looping metadata is stored externally.
|
||||
|
||||
Cases like those can be supported using an artificial files with info vgmstream
|
||||
needs.
|
||||
|
||||
Creation of these files is meant for advanced users, full docs can be found in
|
||||
vgmstream source.
|
||||
|
||||
#### TXTH
|
||||
Text files describing a format's header, to make unsupported files playable
|
||||
(helps vgmstream understand the file you are trying to open).
|
||||
|
||||
Must be named `.txth` or `.(ext).txth` (used for the whole folder), or
|
||||
`(name.ext).txth` (used for a single file). `.txth` are indirectly used when
|
||||
a `(file.ext)` is opened but vgmstream can't play it by default.
|
||||
|
||||
`.txth` contains static values, or dynamic text commands to read data from the
|
||||
original file, serving as a fake header of sorts.
|
||||
|
||||
Usage example (used when opening an unknown file named `bgm_01.pcm`):
|
||||
|
||||
**.pcm.txth**
|
||||
```
|
||||
codec = PCM16LE #standard PCM wave data
|
||||
channels = @0x04 #read in the file, at offset 4
|
||||
sample_rate = 48000 #hardcoded
|
||||
start_offset = 0x10 #first 0x10 bytes are the header
|
||||
num_samples = data_size #auto
|
||||
```
|
||||
|
||||
#### TXTP
|
||||
Text files that apply playback parameters, to customize how other files are
|
||||
played.
|
||||
|
||||
Must be named `(any name).txtp` and opened directly. Useful when games play songs
|
||||
in various non-standard ways, so we can tell vgmstream to handle files differently.
|
||||
|
||||
`.txtp` can do multiple things (can be combined, too):
|
||||
- join a playlist of files (for separate intro + loop songs)
|
||||
- play a list of single-channel files as a single multichannel file
|
||||
- install looping to any file (for files with looping done in code)
|
||||
- remove unwanted channels (for layered exploration + action songs)
|
||||
- select a subsong in an audio bank
|
||||
- playback config such as volume or max playable time
|
||||
- apply complex real-time mixing
|
||||
- many other features
|
||||
|
||||
Usage examples (open directly, name can be set freely):
|
||||
|
||||
**bgm01-full.txtp**
|
||||
```
|
||||
# plays 2 files as a single one
|
||||
bgm01_intro.vag
|
||||
bgm01_loop.vag
|
||||
loop_mode = auto
|
||||
```
|
||||
|
||||
**bgm-subsong10.txtp**
|
||||
```
|
||||
# plays subsong number 10
|
||||
bgm.sxd#10
|
||||
```
|
||||
|
||||
**song01-looped.txtp**
|
||||
```
|
||||
# force looping an .mp3 from 10 seconds up to file end
|
||||
song02.mp3 #I 10.0
|
||||
```
|
||||
|
||||
**music01-demux2.txtp**
|
||||
```
|
||||
# plays channels 3 and 4 only, removes rest
|
||||
music01.bfstm #C3,4
|
||||
```
|
||||
|
||||
#### TXTM
|
||||
A text file named `.txtm` for some formats with companion files. It lists
|
||||
name combos determining which companion files to load for each main file.
|
||||
|
||||
It is needed for formats where name combos are hardcoded, so vgmstream doesn't
|
||||
know which companion file(s) to load if its name doesn't match the main file.
|
||||
Note that companion file order is usually important.
|
||||
|
||||
Usage example (used when opening files in the left part of the list):
|
||||
```
|
||||
# Harry Potter and the Chamber of Secrets (PS2)
|
||||
exterior.mpf: exterior.mus,ext_o.mus
|
||||
willow.mpf: willow.mus,willow_o.mus
|
||||
```
|
||||
```
|
||||
# Metal Gear Solid: Snake Eater 3D (3DS) names for .awb
|
||||
bgm_2_streamfiles.awb: bgm_2.acb
|
||||
```
|
||||
```
|
||||
# Snack World (Switch) names for .awb (single .acb for all .awb, order matters)
|
||||
bgm.awb: bgm.acb
|
||||
bgm_DLC1.awb: bgm.acb
|
||||
```
|
||||
In rare cases you need to setup some extra flags
|
||||
```
|
||||
event_stream2.awb: event_stream2.acb
|
||||
event_stream2_dlc1.awb: event_stream2.acb
|
||||
event_stream2_dlc2.awb: event_stream2.acb
|
||||
event_stream2_dlc3.awb: event_stream2.acb
|
||||
# next "flag" allows both effect.acb and even_stream2.acb in the same file
|
||||
#@reset-pos
|
||||
effect.awb: effect.acb
|
||||
effect_dlc2.awb: effect.acb
|
||||
effect_dlc3.awb: effect.acb
|
||||
```
|
||||
|
||||
#### GENH
|
||||
A byte header placed right before the original data, modifying it.
|
||||
The resulting file must be `(name).genh`. Contains static header data.
|
||||
|
||||
Programs like VGMToolbox can help to create *GENH*, but consider using *TXTH*
|
||||
instead, *GENH* is mostly deprecated. *TXTH* is recommended over *GENH* as
|
||||
it's far easier to create and has many more functions, plus doesn't modify
|
||||
original data.
|
||||
|
||||
|
||||
### Plugin conflicts
|
||||
Since vgmstream supports a huge amount of formats it's possibly that some of
|
||||
them are also supported in other plugins, and this sometimes causes conflicts.
|
||||
If a file that should isn't playing or looping, first make sure vgmstream is
|
||||
really opening it (should show "VGMSTREAM" somewhere in the file info), and
|
||||
try to remove a few other plugins.
|
||||
|
||||
foobar's FFmpeg plugin and foo_adpcm are known to cause issues, but in
|
||||
modern versions (+1.4.x) you can configure plugin priority (go to *Preferences*
|
||||
then *playback > decoding* and move *vgmstream* higher or other plugins lower).
|
||||
|
||||
In Audacious, vgmstream is set with slightly higher priority than FFmpeg,
|
||||
since it steals many formats that you normally want to loop (like `.adx`).
|
||||
However other plugins may set themselves higher, stealing formats instead.
|
||||
If current Audacious version doesn't let to change plugin priority you may
|
||||
need to disable some plugins (requires restart) or set priority on compile
|
||||
time. Particularly, mpg123 plugin may steal formats that aren't even MP3,
|
||||
making impossible for vgmstream to play them properly.
|
||||
|
||||
### Channel issues
|
||||
Some games layer a huge number of channels, that are disabled or downmixed
|
||||
during gameplay. The player may be unable to play those files (for example
|
||||
foobar can only play up to 8 channels, and Winamp depends on your sound
|
||||
card). For those files you can set the "downmix" option in vgmstream, that
|
||||
can reduce the number of channels to a playable amount.
|
||||
|
||||
Note that this type of downmixing is very generic (not meant to be used when
|
||||
converting to other formats), channels are re-assigned and volumes modified
|
||||
in simplistic ways, since it can't guess how the file should be properly
|
||||
adjusted. Most likely it will sound a bit quieter than usual.
|
||||
|
||||
You can also choose which channels to play using *TXTP*. For example, create
|
||||
a file named `song.adx#C1,2.txtp` to play only channels 1 and 2 from `song.adx`.
|
||||
*TXTP* also has command to set how files are downmixed, like `song.adx #@downmix.txtp`
|
||||
for standard 5.1/4.0/etc audio to stereo, or manual (per-channel) mixing.
|
||||
|
||||
### Average bitrate
|
||||
Note that vgmstream shows the "file bitrate" (counts all data) as opposed to
|
||||
"codec bitrate" (counts pure audio-only parts). This means bitrate may be
|
||||
slightly higher (or much higher, if file is bloated) than what encoder
|
||||
tools or other players may report.
|
||||
|
||||
Calculating 100% correct codec bitrate usually needs manual reading of the whole
|
||||
file, slowing down opening files and needing extra effort by devs for minimal
|
||||
benefit, so it's not done.
|
||||
|
||||
In some cases it's debatable what the codec bitrate is. Unlike MP3/AAC, 48kbps
|
||||
of raw Vorbis/Opus is unplayable/unusable unless it's packed into .ogg/wem/etc
|
||||
with extra data, that does increase final file size (thus bitrate) by some percent.
|
||||
|
||||
Also, keep in mind video game audio bitrate isn't always a great indicator of quality.
|
||||
There are many factors in play like encoder, type of codec, sample rate and so on.
|
||||
A higher bitrate `.wav` can sound worse than a lower `.ogg` (like mono 22050hz `.wav`
|
||||
vs stereo 48000hz `.ogg`).
|
||||
|
||||
### Containers
|
||||
Some formats are *audio containers* of other common audio formats. For example
|
||||
`.acb`/`.awb` may contain standard `.hca` inside. Rather than extracting the
|
||||
internal "files", it's recommended that you keep data unmodified for preservation
|
||||
purposes. Sometimes containers have useful data (like loop info or names), that
|
||||
you may be unknowingly throwing away if you extract internal files.
|
||||
|
||||
It's a good practice (and simpler) to just let containers be and play them
|
||||
directly with vgmstream. Newer `.acb`/`.awb` have extra data needed to decrypt
|
||||
the `.hca`, so if you are already used to those containers you don't need to
|
||||
worry about extracted `.hca` not working later. Plus you can use TXTH's "subfile"
|
||||
function to easily make unsupported containers playable:
|
||||
```
|
||||
# Simple container with an Ogg inside. Maybe values 0x00..0x10 could contain
|
||||
# loops or other useful info, that other users are able to figure out:
|
||||
subfile_extension = ogg
|
||||
subfile_offset = 0x10
|
||||
```
|
||||
With unmodified data, you can always extract the internal files later if you
|
||||
change your mind, but you can't get the (potentially useful) container data back
|
||||
once extracted.
|
||||
|
||||
However, if your file is a *generic container* (like a `.zip`, that could hold
|
||||
graphics or audio) you may safely extract the internal files without worry.
|
||||
|
||||
Note that some formats are *audio banks* rather than *containers* (like `.fsb`),
|
||||
in that info for playing the audio is part of the bank header, and extracting
|
||||
internal files as-is isn't really possible. Or, perhaps you could to transmogrify
|
||||
the original header into something else, but for data preservation purposes
|
||||
it's preferable to leave it as-is (plus can use TXTH to play unsupported formats).
|
||||
|
||||
If your main motivation for extracting is to rename or have loose files, remember
|
||||
you can simply use TXTP to point to a subsong, and name that `.txtp` whatever you
|
||||
want, without having to touch original data or needing custom extractors.
|
||||
|
||||
### Cue formats
|
||||
Some formats that vgmstream supports (SQEX's .sab, CRI's .acb+awb, Wwise's .bnk+wem,
|
||||
Microsoft's .xss+.xwb....) are "cue" formats. The way these work is (more or less),
|
||||
they have a bunch of named audio "cues"/"events" in a section of the file, that are
|
||||
called to play one or multiple audio "waves"/"materials" in another section.
|
||||
|
||||
Rather than handling cues, vgmstream shows and plays waves, then assigns cue names
|
||||
that point to the wave if possible, since vgmstream mainly deals with streamed/wave
|
||||
audio and simulating cues is out of scope. Figuring out a whole cue format can be a
|
||||
*huge* time investment, so handling waves only is often enough.
|
||||
|
||||
Cues can be *very* complex, like N cues pointing to 1 wave with varying pitch, or
|
||||
1 cue playing one random wave out of 3. Sometimes not all waves are referenced by
|
||||
cues, or cues do undesirable effects that make only playing waves a good compromise.
|
||||
Simulating cues is better handled with external tools that allow more flexibility
|
||||
(for example, this project simulates Wwise's extremely complex cues/events by creating
|
||||
.TXTP telling vgmstream which config and waves to play, and one can filter desired
|
||||
cues/TXTP: https://github.com/bnnm/wwiser).
|
||||
|
||||
## Logged errors and unplayable supported files
|
||||
Some formats should normally play, but somehow don't. In those cases plugins
|
||||
can print vgmstream's error info to console (for example, `.fsb` with an unknown
|
||||
codec, `.hca/awb` with missing decryption key, bank has no audio, `.txth` is
|
||||
malformed, or `.wav` has an incorrectly ripped size).
|
||||
|
||||
Console location and format depends on plugin:
|
||||
- *foobar2000*: found in *View menu > Console*
|
||||
- *Winamp*: open vgmstream's config (*Preferences... > Plug-ins > vgmstream* + *Configure*
|
||||
button) then press "Open Log"
|
||||
- *Audacious*: start with `audacious -V` from terminal
|
||||
- CLI utils: printed to stdout directly
|
||||
|
||||
Only a few errors types are printed but may be helpful for more common cases.
|
||||
|
||||
## Tagging
|
||||
Some of vgmstream's plugins support simple read-only tagging via external files.
|
||||
|
||||
Tags are loaded from a text/M3U-like file named *!tags.m3u* in the song folder.
|
||||
You don't have to load your songs with this M3U though, but you can (for pre-made
|
||||
order). The format is meant to be both a quick playlist and tags, but the tagfile
|
||||
itself just 'looks' like an M3U. you can load files manually or using other playlists
|
||||
and still get tags.
|
||||
|
||||
Format is:
|
||||
```
|
||||
# ignored comment
|
||||
# $GLOBAL_COMMAND (extra features)
|
||||
# @GLOBAL_TAG text (applies all following tracks)
|
||||
|
||||
# %LOCAL_TAG text (applies to next track only)
|
||||
filename1
|
||||
# %LOCAL_TAG text (applies to next track only)
|
||||
filename2
|
||||
```
|
||||
Accepted tags depend on the player (foobar: any; Winamp: see ATF config, Audacious:
|
||||
few standard ones), typically *ALBUM/ARTIST/TITLE/DISC/TRACK/COMPOSER/etc*, lower
|
||||
or uppercase, separated by one or multiple spaces. Repeated tags overwrite previous
|
||||
(ex.- may define *@COMPOSER* multiple times for "sections"). It only reads up to
|
||||
current *filename* though, so any *@TAG* below would be ignored.
|
||||
|
||||
*GLOBAL_COMMAND*s currently can be:
|
||||
- *AUTOTRACK*: sets *%TRACK* tag automatically (1..N as files are encountered
|
||||
in the tag file).
|
||||
- *AUTOALBUM*: sets *%ALBUM* tag automatically using the containing dir as album.
|
||||
- *EXACTMATCH*: disables matching .txtp with regular files (explained below).
|
||||
|
||||
Playlist title formatting (how tags are shown) should follow player's config, as
|
||||
vgmstream simply passes tags to the player. It's better to name the file lowercase
|
||||
`!tags.m3u` rather than `!Tags.m3u` (Windows accepts both but Linux is case sensitive).
|
||||
|
||||
Example:
|
||||
```
|
||||
# @ALBUM God Hand
|
||||
# @ARTIST Masafumi Takada, Jun Fukuda
|
||||
# * Global tags apply to all songs, unless overwritten
|
||||
# Better use ARTIST instead of ALBUMARTIST (more compatible)
|
||||
# Tags usually go in CAPS for readability but no differences
|
||||
|
||||
# $AUTOTRACK
|
||||
# * This adds TRACK tags automatically from 1 to N
|
||||
|
||||
# %ARTIST Masafumi Takada
|
||||
# %TITLE Be ready for it
|
||||
godhand_ver1.adx
|
||||
|
||||
#... (more songs)
|
||||
|
||||
# %ARTIST Jun Fukuda
|
||||
# %TITLE Duel Storm
|
||||
Boss8_DevilHandHONKI_Ver9.adx
|
||||
|
||||
#... (more songs)
|
||||
|
||||
```
|
||||
|
||||
Note that with global tags you don't need to put all files or info inside. This would be
|
||||
a perfectly valid *!tags.m3u*:
|
||||
```
|
||||
# @ALBUM Game
|
||||
# @ARTIST Various Artists
|
||||
```
|
||||
|
||||
### Compatibility and non-English filenames and tags
|
||||
For best compatibility save `!tags.m3u` as *"ANSI"* or *"UTF-8" (with BOM)*.
|
||||
|
||||
Tags and filenames using extended characters (like Japanese) should work, as long
|
||||
as `!tags.m3u` is saved as *"UTF-8 with BOM"* (UTF-8 is a way to define non-English
|
||||
characters, and BOM is a helper "byte-order" mark). Windows' *notepad* creates files
|
||||
*"with BOM"* when selecting UTF-8 encoding in *save as* dialog, or you may use other
|
||||
programs like *notepad++.exe* to convert them.
|
||||
|
||||
More exactly, vgmstream needs the file saved in *UTF-8* to match tags and filenames
|
||||
(and ignores *BOM*), while foobar/Winamp won't understand UTF-8 *filenames* unless
|
||||
`.m3u` is saved *with BOM* (ignoring tags). Whereas if saved in what Windows calls
|
||||
"Unicode" (UTF-16) neither may work.
|
||||
|
||||
Conversely, if your *filenames* only use English/ANSI characters you may ommit *BOM*,
|
||||
and if your tags are English only you may save the `.m3u` as ANSI. Or if you only use
|
||||
`!tags.m3u` for tags and not for opening files (for example opening them manually
|
||||
or with a `playlist.m3u8`) you won't need BOM either.
|
||||
|
||||
Other players may not need BOM (or CRLF), but for consistency use them when dealing
|
||||
with non-ASCII names and tags.
|
||||
|
||||
### Tags with spaces
|
||||
Some players like foobar accept tags with spaces. To use them surround the tag
|
||||
with both characters.
|
||||
```
|
||||
# @GLOBAL TAG WITH SPACES@ text
|
||||
# ...
|
||||
# %LOCAL TAG WITH SPACES% text
|
||||
filename1
|
||||
```
|
||||
As a side effect if text has @/% inside you also need them: `# @ALBUMARTIST@ Tom-H@ck`
|
||||
|
||||
For interoperability with other plugins, consider using only common tags without spaces,
|
||||
and tags that are commonly accepted in all players like ARTIST instead of ALBUMARTIST.
|
||||
|
||||
### ReplayGain
|
||||
foobar2000/Winamp can apply the following replaygain tags (if ReplayGain is
|
||||
enabled in preferences):
|
||||
```
|
||||
# %replaygain_track_gain N.NN dB
|
||||
# %replaygain_track_peak N.NNN
|
||||
# @replaygain_album_gain N.NN dB
|
||||
# @replaygain_album_peak N.NNN
|
||||
```
|
||||
|
||||
### TXTP matching
|
||||
To ease *TXTP* config, tags with plain files will match `.txtp` with config, and tags
|
||||
with `.txtp` config also match plain files:
|
||||
|
||||
**!tags.m3u**
|
||||
```
|
||||
# @TITLE Title1
|
||||
BGM01.adx #P 3.0.txtp
|
||||
# @TITLE Title2
|
||||
BGM02.wav
|
||||
```
|
||||
**config.m3u**
|
||||
```
|
||||
# matches "Title1" (1:1)
|
||||
BGM01.adx #P 3.0.txtp
|
||||
# matches "Title1" (plain file matches config tag)
|
||||
BGM01.adx
|
||||
# matches "Title2" (config file matches plain tag)
|
||||
BGM02.wav #P 3.0.txtp
|
||||
# doesn't match anything (different config can't match)
|
||||
BGM01.adx #P 10.0.txtp
|
||||
```
|
||||
|
||||
Since it matches when a tag is found, some cases that depend on order won't work.
|
||||
You can disable this feature manually then:
|
||||
|
||||
**!tags.m3u**
|
||||
```
|
||||
# $EXACTMATCH
|
||||
#
|
||||
# %TITLE Title3 (without config)
|
||||
BGM01.adx
|
||||
# %TITLE Title3 (with config)
|
||||
BGM01.adx #I 1.0 90.0 .txtp
|
||||
```
|
||||
**config.m3u**
|
||||
```
|
||||
# Would match "Title3 (without config)" without "$EXACTMATCH", as it's found first
|
||||
# Could use "BGM01.adx.txtp" as first entry in !tags.m3u instead (different configs won't match)
|
||||
BGM01.adx #I 1.0 90.0 .txtp
|
||||
```
|
||||
|
||||
### Issues
|
||||
If your player isn't picking tags make sure vgmstream is detecting the song
|
||||
(as other plugins can steal its extensions, see above), `.m3u` is properly
|
||||
named and that filenames inside match the song filename. For Winamp you need
|
||||
to make sure *options > titles > advanced title formatting* checkbox is set and
|
||||
the format defined.
|
||||
|
||||
When tags change behavior varies depending on player:
|
||||
- *Winamp*: should refresh tags when a different file is played.
|
||||
- *foobar2000*: needs to force refresh (for reasons outside vgmstream's control)
|
||||
- **select songs > shift + right click > Tagging > Reload info from file(s)**.
|
||||
- *Audacious*: files need to be re-added to the playlist
|
||||
|
||||
Currently there is no tool to aid in the creation of these tags, but you can create
|
||||
a base `.m3u` and edit as a text file. You may try this python script to make the
|
||||
base file: https://raw.githubusercontent.com/bnnm/vgm-tools/master/py/tags-maker.py
|
||||
|
||||
vgmstream's "m3u tagging" is meant to be simple to make and share (just a text
|
||||
file), easier to support in multiple players (rather than needing a custom plugin),
|
||||
allow OST-like ordering but also mixable with other `.m3u`, and be flexible enough
|
||||
to have commands. If you are not satisfied with vgmstream's tagging format,
|
||||
foobar2000 has other plugins (with write support) that may be of use:
|
||||
- m-TAGS: http://www.m-tags.org/
|
||||
- foo_external_tags: https://foobar.hyv.fi/?view=foo_external_tags
|
||||
|
||||
|
||||
## Virtual TXTP files
|
||||
Some of vgmstream's plugins (and CLI) allow you to use virtual `.txtp` files, that
|
||||
combined with playlists let you make quick song configs.
|
||||
|
||||
Normally you can create a physical .txtp file that points to another file with
|
||||
config, and `.txtp` have a "mini-txtp" mode that configures files with only the
|
||||
filename.
|
||||
|
||||
Instead of manually creating `.txtp` files you can put non-existing virtual `.txtp`
|
||||
in a `.m3u` playlist:
|
||||
```
|
||||
# playlist that opens subsongs directly without having to create .txtp
|
||||
# notice the full filename, then #(config), then ".txtp" (spaces are optional)
|
||||
bank_bgm_full.nub #s1 .txtp
|
||||
bank_bgm_full.nub #s10 .txtp
|
||||
```
|
||||
|
||||
Combine with tagging (see above) for extra fun OST-like config.
|
||||
```
|
||||
# @ALBUM GOD HAND
|
||||
|
||||
# play 1 loop, delay and do a longer fade
|
||||
# %TITLE Too Hot !!
|
||||
circus_a_mix_ver2.adx #l 1.0 #d 5.0 #f 15.0 .txtp
|
||||
|
||||
# play 1 loop instead of the default 2 then fade with the song's internal fading
|
||||
# %TITLE Yet... Oh see mind
|
||||
boss2_3ningumi_ver6.adx #l 1.0 #F .txtp
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
You can also use it in CLI for quick access to some txtp-exclusive functions:
|
||||
```
|
||||
# force change sample rate to 22050 (don't forget to use " with spaces)
|
||||
vgmstream-cli -o btl_koopa1_44k_lp.wav "btl_koopa1_44k_lp.brstm #h22050.txtp"
|
||||
```
|
||||
|
||||
Support for this feature is limited by player itself, as foobar and Winamp allow
|
||||
non-existent files referenced in a `.m3u`, while other players may filter them
|
||||
first.
|
||||
|
||||
You can use this python script to autogenerate one `.txtp` per virtual-txtp:
|
||||
https://github.com/vgmstream/vgmstream/tree/master/cli/tools/txtp_dumper.py
|
||||
Drag and drop the `.m3u`, or any text file with .txtp (it has CLI options
|
||||
to control output too).
|
||||
|
||||
|
||||
## Sequences and streams
|
||||
Roughly, there are two types of game audio:
|
||||
- streams: prerecorded audio where all instruments are pre-mixed into a single
|
||||
file, often compressed with some custom format.
|
||||
- sequences: series of instrument notes, typically in MIDI-like formats with
|
||||
a bank of instrument sounds.
|
||||
|
||||
As the name implies, vgmstream plays "streams". Old games mainly use sequences
|
||||
(very small and more dynamic), while other games use streams (easier to handle
|
||||
but lot bigger and sometimes CPU-intensive).
|
||||
|
||||
vgmstream's internals are tailored to play streams so, in other words, it's not
|
||||
possible to add support for sequenced audio unless massive changes were done,
|
||||
basically becoming another program entirely. There are other projects better
|
||||
suited for playing sequences.
|
||||
BIN
tools/vgmstream/avcodec-vgmstream-59.dll
Normal file
BIN
tools/vgmstream/avcodec-vgmstream-59.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/avformat-vgmstream-59.dll
Normal file
BIN
tools/vgmstream/avformat-vgmstream-59.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/avutil-vgmstream-57.dll
Normal file
BIN
tools/vgmstream/avutil-vgmstream-57.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/in_vgmstream.dll
Normal file
BIN
tools/vgmstream/in_vgmstream.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/jansson.dll
Normal file
BIN
tools/vgmstream/jansson.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libatrac9.dll
Normal file
BIN
tools/vgmstream/libatrac9.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libcelt-0061.dll
Normal file
BIN
tools/vgmstream/libcelt-0061.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libcelt-0110.dll
Normal file
BIN
tools/vgmstream/libcelt-0110.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libg719_decode.dll
Normal file
BIN
tools/vgmstream/libg719_decode.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libmpg123-0.dll
Normal file
BIN
tools/vgmstream/libmpg123-0.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libspeex-1.dll
Normal file
BIN
tools/vgmstream/libspeex-1.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/libvorbis.dll
Normal file
BIN
tools/vgmstream/libvorbis.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/swresample-vgmstream-4.dll
Normal file
BIN
tools/vgmstream/swresample-vgmstream-4.dll
Normal file
Binary file not shown.
BIN
tools/vgmstream/vgmstream-cli.exe
Normal file
BIN
tools/vgmstream/vgmstream-cli.exe
Normal file
Binary file not shown.
BIN
tools/vgmstream/xmp-vgmstream.dll
Normal file
BIN
tools/vgmstream/xmp-vgmstream.dll
Normal file
Binary file not shown.
Reference in New Issue
Block a user