Merge branch 'release-0.1'
This commit is contained in:
commit
9d72369a92
116 files changed
+64243
-2986
No files matched your search
+674
@@ -0,0 +1,674 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 3, 29 June 2007
|
||||
|
||||
Copyright (C) 2007 Free Software Foundation, Inc. <http://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 <http://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
|
||||
<http://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
|
||||
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||
@@ -0,0 +1,10 @@
|
||||
This work is licensed under the Creative Commons license by-sa 3.0.
|
||||
(http://creativecommons.org/licenses/by-sa/3.0/)
|
||||
|
||||
Author:
|
||||
DJad (http://www.jamendo.com/de/artist/DJad)
|
||||
|
||||
Distributed by:
|
||||
Site: jamendo.com
|
||||
File: DJad - Walking Alone.mp3
|
||||
URL: http://www.jamendo.com/de/track/543970
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -2,10 +2,28 @@
|
||||
<root>
|
||||
<Font1>
|
||||
<Name>Normal</Name>
|
||||
<Outline>0,00</Outline>
|
||||
<OutlineColorR>0,00</OutlineColorR>
|
||||
<OutlineColorG>0,00</OutlineColorG>
|
||||
<OutlineColorB>0,00</OutlineColorB>
|
||||
<OutlineColorA>1,00</OutlineColorA>
|
||||
<Folder>FreeSans</Folder>
|
||||
<FileNormal>FreeSans.ttf</FileNormal>
|
||||
<FileBold>FreeSansBold.ttf</FileBold>
|
||||
<FileItalic>FreeSansOblique.ttf</FileItalic>
|
||||
<FileBoldItalic>FreeSansBoldOblique.ttf</FileBoldItalic>
|
||||
</Font1>
|
||||
<Font2>
|
||||
<Name>Outline</Name>
|
||||
<Outline>0,10</Outline>
|
||||
<OutlineColorR>0,00</OutlineColorR>
|
||||
<OutlineColorG>0,00</OutlineColorG>
|
||||
<OutlineColorB>0,00</OutlineColorB>
|
||||
<OutlineColorA>1,00</OutlineColorA>
|
||||
<Folder>FreeSans</Folder>
|
||||
<FileNormal>FreeSans.ttf</FileNormal>
|
||||
<FileBold>FreeSansBold.ttf</FileBold>
|
||||
<FileItalic>FreeSansOblique.ttf</FileItalic>
|
||||
<FileBoldItalic>FreeSansBoldOblique.ttf</FileBoldItalic>
|
||||
</Font2>
|
||||
</root>
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 65 KiB |
@@ -84,6 +84,10 @@
|
||||
<!--Config: Timer-Look-->
|
||||
<TR_CONFIG_TIMERLOOK_NORMAL>Normal</TR_CONFIG_TIMERLOOK_NORMAL>
|
||||
<TR_CONFIG_TIMERLOOK_EXPANDED>Erweitert</TR_CONFIG_TIMERLOOK_EXPANDED>
|
||||
<!--Config: Background-Music-Source-->
|
||||
<TR_CONFIG_OWN_MUSIC>Eigene Musik und Hintergrundmusik</TR_CONFIG_OWN_MUSIC>
|
||||
<TR_CONFIG_NO_OWN_MUSIC>Keine eigene Musik</TR_CONFIG_NO_OWN_MUSIC>
|
||||
<TR_CONFIG_ONLY_OWN_MUSIC>Nur eigene Musik</TR_CONFIG_ONLY_OWN_MUSIC>
|
||||
<!--Screens-->
|
||||
<!--ScreenLoad-->
|
||||
<TR_SCREENLOAD_LOADING>Laden</TR_SCREENLOAD_LOADING>
|
||||
@@ -159,6 +163,9 @@
|
||||
<TR_SCREENORECORD_BUTTON_DELAYTEST>Verzögerungs-Test</TR_SCREENORECORD_BUTTON_DELAYTEST>
|
||||
<!--ScreenOptionsSound-->
|
||||
<TR_SCREENOSOUND_OPTIONS>Soundeinstellungen</TR_SCREENOSOUND_OPTIONS>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSIC>Hintergrundmusik</TR_SCREENOSOUND_BACKGROUNDMUSIC>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>Hintergrundmusiklautstärke</TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>Hintergrundmusikquelle</TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>
|
||||
<!--ScreenOptionsTheme-->
|
||||
<TR_SCREENOTHEME_OPTIONS>Designeinstellungen</TR_SCREENOTHEME_OPTIONS>
|
||||
<TR_SCREENOTHEME_THEME>Design</TR_SCREENOTHEME_THEME>
|
||||
|
||||
@@ -84,6 +84,10 @@
|
||||
<!--Config: Timer-Look-->
|
||||
<TR_CONFIG_TIMERLOOK_NORMAL>Normal</TR_CONFIG_TIMERLOOK_NORMAL>
|
||||
<TR_CONFIG_TIMERLOOK_EXPANDED>Expanded</TR_CONFIG_TIMERLOOK_EXPANDED>
|
||||
<!--Config: Background-Music-Source-->
|
||||
<TR_CONFIG_OWN_MUSIC>Own Music and Background Music</TR_CONFIG_OWN_MUSIC>
|
||||
<TR_CONFIG_NO_OWN_MUSIC>No own Music</TR_CONFIG_NO_OWN_MUSIC>
|
||||
<TR_CONFIG_ONLY_OWN_MUSIC>Only own Music</TR_CONFIG_ONLY_OWN_MUSIC>
|
||||
<!--Screens-->
|
||||
<!--ScreenLoad-->
|
||||
<TR_SCREENLOAD_LOADING>Loading</TR_SCREENLOAD_LOADING>
|
||||
@@ -159,6 +163,9 @@
|
||||
<TR_SCREENORECORD_BUTTON_DELAYTEST>Delay Test</TR_SCREENORECORD_BUTTON_DELAYTEST>
|
||||
<!--ScreenOptionsSound-->
|
||||
<TR_SCREENOSOUND_OPTIONS>Options Sound</TR_SCREENOSOUND_OPTIONS>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSIC>Background Music</TR_SCREENOSOUND_BACKGROUNDMUSIC>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>Background Music Volume</TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>Background Music Source</TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>
|
||||
<!--ScreenOptionsTheme-->
|
||||
<TR_SCREENOTHEME_OPTIONS>Theme Options</TR_SCREENOTHEME_OPTIONS>
|
||||
<TR_SCREENOTHEME_THEME>Theme</TR_SCREENOTHEME_THEME>
|
||||
|
||||
@@ -84,6 +84,10 @@
|
||||
<!--Config: Timer-Look-->
|
||||
<TR_CONFIG_TIMERLOOK_NORMAL>Normal</TR_CONFIG_TIMERLOOK_NORMAL>
|
||||
<TR_CONFIG_TIMERLOOK_EXPANDED>Développé</TR_CONFIG_TIMERLOOK_EXPANDED>
|
||||
<!--Config: Background-Music-Source-->
|
||||
<TR_CONFIG_OWN_MUSIC>Musique personnelle et Musique de fond</TR_CONFIG_OWN_MUSIC>
|
||||
<TR_CONFIG_NO_OWN_MUSIC>Pas de Musique personnelle</TR_CONFIG_NO_OWN_MUSIC>
|
||||
<TR_CONFIG_ONLY_OWN_MUSIC>Seulement la Musique personnelle</TR_CONFIG_ONLY_OWN_MUSIC>
|
||||
<!--Screens-->
|
||||
<!--ScreenLoad-->
|
||||
<TR_SCREENLOAD_LOADING>Chargement</TR_SCREENLOAD_LOADING>
|
||||
@@ -159,6 +163,9 @@
|
||||
<TR_SCREENORECORD_BUTTON_DELAYTEST>Test du Retard</TR_SCREENORECORD_BUTTON_DELAYTEST>
|
||||
<!--ScreenOptionsSound-->
|
||||
<TR_SCREENOSOUND_OPTIONS>Options du Son</TR_SCREENOSOUND_OPTIONS>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSIC>Musique de fond</TR_SCREENOSOUND_BACKGROUNDMUSIC>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>Volume de la Musique de fond</TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>Source de la Musique de fond</TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>
|
||||
<!--ScreenOptionsTheme-->
|
||||
<TR_SCREENOTHEME_OPTIONS>Options du Thème</TR_SCREENOTHEME_OPTIONS>
|
||||
<TR_SCREENOTHEME_THEME>Thème</TR_SCREENOTHEME_THEME>
|
||||
|
||||
@@ -0,0 +1,184 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<root>
|
||||
<Info>
|
||||
<Name>Español</Name>
|
||||
</Info>
|
||||
<Texts>
|
||||
<!--General-->
|
||||
<TR_PROGRAM_NAME>Vocaluxe</TR_PROGRAM_NAME>
|
||||
<TR_GENERAL_AND>y</TR_GENERAL_AND>
|
||||
<!--General: Buttons-->
|
||||
<TR_BUTTON_EXIT>Salir</TR_BUTTON_EXIT>
|
||||
<TR_BUTTON_SAVE>Guardar</TR_BUTTON_SAVE>
|
||||
<TR_BUTTON_BACK>Volver</TR_BUTTON_BACK>
|
||||
<TR_BUTTON_START>Comenzar</TR_BUTTON_START>
|
||||
<!--General: Debug-->
|
||||
<TR_DEBUG_AUDIO_STREAMS>Streams de audio</TR_DEBUG_AUDIO_STREAMS>
|
||||
<TR_DEBUG_VIDEO_STREAMS>Streams de video</TR_DEBUG_VIDEO_STREAMS>
|
||||
<TR_DEBUG_TEXTURES>Texturas</TR_DEBUG_TEXTURES>
|
||||
<TR_DEBUG_TONE_ABS>ToneAbs</TR_DEBUG_TONE_ABS>
|
||||
<TR_DEBUG_MAX_VOLUME>Volumen Máx</TR_DEBUG_MAX_VOLUME>
|
||||
<TR_DEBUG_MOUSE>Mouse</TR_DEBUG_MOUSE>
|
||||
<!--General: Game-Modes-->
|
||||
<TR_GAMEMODE_NORMAL>Normal</TR_GAMEMODE_NORMAL>
|
||||
<TR_GAMEMODE_DUET>Dueto</TR_GAMEMODE_DUET>
|
||||
<TR_GAMEMODE_MEDLEY>Medley</TR_GAMEMODE_MEDLEY>
|
||||
<!--General: Ratings-->
|
||||
<TR_RATING_VOCAL_HERO>Héroe Vocal</TR_RATING_VOCAL_HERO>
|
||||
<TR_RATING_SUPERSTAR>Superestrella</TR_RATING_SUPERSTAR>
|
||||
<TR_RATING_LEAD_SINGER>Vocalista Principal</TR_RATING_LEAD_SINGER>
|
||||
<TR_RATING_RISING_STAR>Estrella Naciente</TR_RATING_RISING_STAR>
|
||||
<TR_RATING_HOPEFUL>Prometedor</TR_RATING_HOPEFUL>
|
||||
<TR_RATING_WANNABE>Aspirante</TR_RATING_WANNABE>
|
||||
<TR_RATING_AMATEUR>Amateur</TR_RATING_AMATEUR>
|
||||
<TR_RATING_TONE_DEAF>Sordo</TR_RATING_TONE_DEAF>
|
||||
<!--Config-->
|
||||
<!--Config: Renderer-->
|
||||
<TR_CONFIG_SOFTWARE>Software</TR_CONFIG_SOFTWARE>
|
||||
<TR_CONFIG_OPENGL>OpenGL</TR_CONFIG_OPENGL>
|
||||
<TR_CONFIG_DIRECT3D>Direct3D</TR_CONFIG_DIRECT3D>
|
||||
<!--Config: Texture-Quality-->
|
||||
<TR_CONFIG_TEXTURE_LOWEST>Muy Baja</TR_CONFIG_TEXTURE_LOWEST>
|
||||
<TR_CONFIG_TEXTURE_LOW>Baja</TR_CONFIG_TEXTURE_LOW>
|
||||
<TR_CONFIG_TEXTURE_MEDIUM>Media</TR_CONFIG_TEXTURE_MEDIUM>
|
||||
<TR_CONFIG_TEXTURE_HIGH>Alta</TR_CONFIG_TEXTURE_HIGH>
|
||||
<TR_CONFIG_TEXTURE_HIGHEST>Muy Alta</TR_CONFIG_TEXTURE_HIGHEST>
|
||||
<!--Config: On/Off-->
|
||||
<TR_CONFIG_OFF>Off</TR_CONFIG_OFF>
|
||||
<TR_CONFIG_ON>On</TR_CONFIG_ON>
|
||||
<!--Config: Debug-Level-->
|
||||
<TR_CONFIG_ONLY_FPS>Solo FPS</TR_CONFIG_ONLY_FPS>
|
||||
<TR_CONFIG_LEVEL1>Nivel 1</TR_CONFIG_LEVEL1>
|
||||
<TR_CONFIG_LEVEL2>Nivel 2</TR_CONFIG_LEVEL2>
|
||||
<TR_CONFIG_LEVEL3>Nivel 3</TR_CONFIG_LEVEL3>
|
||||
<TR_CONFIG_LEVEL_MAX>Máx</TR_CONFIG_LEVEL_MAX>
|
||||
<!--Config: Song-Menu-Style-->
|
||||
<TR_CONFIG_LIST>Lista</TR_CONFIG_LIST>
|
||||
<TR_CONFIG_DREIDEL>Dreidel</TR_CONFIG_DREIDEL>
|
||||
<TR_CONFIG_TILE_BOARD>Cuadrícula</TR_CONFIG_TILE_BOARD>
|
||||
<TR_CONFIG_BOOK>Libro</TR_CONFIG_BOOK>
|
||||
<!--Config: Cover-Loading-->
|
||||
<TR_CONFIG_COVERLOADING_ONDEMAND>Según Sean Necesarias</TR_CONFIG_COVERLOADING_ONDEMAND>
|
||||
<TR_CONFIG_COVERLOADING_ATSTART>Al Iniciar</TR_CONFIG_COVERLOADING_ATSTART>
|
||||
<TR_CONFIG_COVERLOADING_DYNAMIC>Dinámica</TR_CONFIG_COVERLOADING_DYNAMIC>
|
||||
<!--Config: Song-Sorting-->
|
||||
<TR_CONFIG_NONE>Ninguno</TR_CONFIG_NONE>
|
||||
<TR_CONFIG_RANDOM>Al Azar</TR_CONFIG_RANDOM>
|
||||
<TR_CONFIG_FOLDER>Carpeta</TR_CONFIG_FOLDER>
|
||||
<TR_CONFIG_ARTIST>Artista</TR_CONFIG_ARTIST>
|
||||
<TR_CONFIG_ARTIST_LETTER>Letra del Artista</TR_CONFIG_ARTIST_LETTER>
|
||||
<TR_CONFIG_TITLE_LETTER>Letra del Título</TR_CONFIG_TITLE_LETTER>
|
||||
<TR_CONFIG_EDITION>Edición</TR_CONFIG_EDITION>
|
||||
<TR_CONFIG_GENRE>Género</TR_CONFIG_GENRE>
|
||||
<TR_CONFIG_YEAR>Año</TR_CONFIG_YEAR>
|
||||
<TR_CONFIG_DECADE>Década</TR_CONFIG_DECADE>
|
||||
<TR_CONFIG_LANGUAGE>Idioma</TR_CONFIG_LANGUAGE>
|
||||
<!--Config: Game-Difficulty-->
|
||||
<TR_CONFIG_EASY>Fácil</TR_CONFIG_EASY>
|
||||
<TR_CONFIG_NORMAL>Normal</TR_CONFIG_NORMAL>
|
||||
<TR_CONFIG_HARD>Difícil</TR_CONFIG_HARD>
|
||||
<!--Config: Timer-Mode-->
|
||||
<TR_CONFIG_TIMERMODE_CURRENT>Actual</TR_CONFIG_TIMERMODE_CURRENT>
|
||||
<TR_CONFIG_TIMERMODE_REMAINING>Restante</TR_CONFIG_TIMERMODE_REMAINING>
|
||||
<TR_CONFIG_TIMERMODE_TOTAL>Total</TR_CONFIG_TIMERMODE_TOTAL>
|
||||
<!--Config: Timer-Look-->
|
||||
<TR_CONFIG_TIMERLOOK_NORMAL>Normal</TR_CONFIG_TIMERLOOK_NORMAL>
|
||||
<TR_CONFIG_TIMERLOOK_EXPANDED>Expandido</TR_CONFIG_TIMERLOOK_EXPANDED>
|
||||
<!--Config: Background-Music-Source-->
|
||||
<TR_CONFIG_OWN_MUSIC>Canciones del juego y tema Vocaluxe</TR_CONFIG_OWN_MUSIC>
|
||||
<TR_CONFIG_NO_OWN_MUSIC>Sin canciones del juego</TR_CONFIG_NO_OWN_MUSIC>
|
||||
<TR_CONFIG_ONLY_OWN_MUSIC>Solo canciones del juego</TR_CONFIG_ONLY_OWN_MUSIC>
|
||||
<!--Screens-->
|
||||
<!--ScreenLoad-->
|
||||
<TR_SCREENLOAD_LOADING>Cargando...</TR_SCREENLOAD_LOADING>
|
||||
<TR_SCREENLOAD_TOTAL>Total</TR_SCREENLOAD_TOTAL>
|
||||
<TR_SCREENLOAD_SONGS>Canciones</TR_SCREENLOAD_SONGS>
|
||||
<TR_SCREENLOAD_LOADED>cargadas</TR_SCREENLOAD_LOADED>
|
||||
<!--ScreenMain-->
|
||||
<TR_SCREENMAIN_MENU>Menú Principal</TR_SCREENMAIN_MENU>
|
||||
<TR_SCREENMAIN_BUTTON_SING>Cantar</TR_SCREENMAIN_BUTTON_SING>
|
||||
<TR_SCREENMAIN_BUTTON_OPTIONS>Opciones</TR_SCREENMAIN_BUTTON_OPTIONS>
|
||||
<TR_SCREENMAIN_BUTTON_PROFILES>Perfiles</TR_SCREENMAIN_BUTTON_PROFILES>
|
||||
<!--ScreenNames-->
|
||||
<TR_SCREENNAMES_MENU>Selección de Jugadores</TR_SCREENNAMES_MENU>
|
||||
<TR_SCREENNAMES_BUTTON_1PLAYER>Jugador 1</TR_SCREENNAMES_BUTTON_1PLAYER>
|
||||
<TR_SCREENNAMES_BUTTON_2PLAYER>Jugador 2</TR_SCREENNAMES_BUTTON_2PLAYER>
|
||||
<TR_SCREENNAMES_BUTTON_3PLAYER>Jugador 3</TR_SCREENNAMES_BUTTON_3PLAYER>
|
||||
<TR_SCREENNAMES_WARNING_SG>Advertencia: ¡No hay micrófonos asignados al jugador %v!</TR_SCREENNAMES_WARNING_SG>
|
||||
<TR_SCREENNAMES_WARNING_PL>Advertencia: ¡No hay micrófonos asignados a los jugadores %v!</TR_SCREENNAMES_WARNING_PL>
|
||||
<!--ScreenSong-->
|
||||
<TR_SCREENSONG_MENU>Selección de Canciones</TR_SCREENSONG_MENU>
|
||||
<TR_SCREENSONG_SEARCH>Buscar:</TR_SCREENSONG_SEARCH>
|
||||
<TR_SCREENSONG_NOLANGUAGE>Sin Idioma</TR_SCREENSONG_NOLANGUAGE>
|
||||
<TR_SCREENSONG_NOYEAR>Sin Año</TR_SCREENSONG_NOYEAR>
|
||||
<TR_SCREENSONG_NOGENRE>Sin Género</TR_SCREENSONG_NOGENRE>
|
||||
<TR_SCREENSONG_NOEDITION>Sin Edición</TR_SCREENSONG_NOEDITION>
|
||||
<TR_SCREENSONG_ALLSONGS>Todas las Canciones</TR_SCREENSONG_ALLSONGS>
|
||||
<TR_SCREENSONG_NUMSONGS>(%v Canciones)</TR_SCREENSONG_NUMSONGS>
|
||||
<TR_SCREENSONG_NUMSONG>(%v Canción)</TR_SCREENSONG_NUMSONG>
|
||||
<!--ScreenSing-->
|
||||
<TR_SCREENSING_PAUSE>Pausa</TR_SCREENSING_PAUSE>
|
||||
<TR_SCREENSING_BUTTON_CANCEL>Dejar de cantar</TR_SCREENSING_BUTTON_CANCEL>
|
||||
<TR_SCREENSING_BUTTON_CONTINUE>Continuar</TR_SCREENSING_BUTTON_CONTINUE>
|
||||
<!--ScreenScore-->
|
||||
<TR_SCREENSCORE_SCORES>Resultados</TR_SCREENSCORE_SCORES>
|
||||
<TR_SCREENSCORE_RATING>Rating</TR_SCREENSCORE_RATING>
|
||||
<TR_SCREENSCORE_POINTS>Puntuación</TR_SCREENSCORE_POINTS>
|
||||
<TR_SCREENSCORE_GAMEDIFFICULTY>Dificultad</TR_SCREENSCORE_GAMEDIFFICULTY>
|
||||
<!--ScreenHighscore-->
|
||||
<TR_SCREENHIGHSCORE_HIGHSCORE>Alta Puntuación</TR_SCREENHIGHSCORE_HIGHSCORE>
|
||||
<!--ScreenProfiles-->
|
||||
<TR_SCREENPROFILES_PROFILES>Perfiles</TR_SCREENPROFILES_PROFILES>
|
||||
<TR_SCREENPROFILES_PLAYERNAME>Nombre del Jugador</TR_SCREENPROFILES_PLAYERNAME>
|
||||
<TR_SCREENPROFILES_GAMEDIFFICULTY>Dificultad del Juego</TR_SCREENPROFILES_GAMEDIFFICULTY>
|
||||
<TR_SCREENPROFILES_AVATAR>Avatar</TR_SCREENPROFILES_AVATAR>
|
||||
<TR_SCREENPROFILES_GUESTPROFILE>Perfil Invitado</TR_SCREENPROFILES_GUESTPROFILE>
|
||||
<TR_SCREENPROFILES_ACTIVE>Activa</TR_SCREENPROFILES_ACTIVE>
|
||||
<TR_SCREENPROFILES_BUTTON_NEW>Nuevo</TR_SCREENPROFILES_BUTTON_NEW>
|
||||
<TR_SCREENPROFILES_BUTTON_DELETE>Eliminar</TR_SCREENPROFILES_BUTTON_DELETE>
|
||||
<!--ScreenOptions-->
|
||||
<TR_SCREENO_OPTIONS>Opciones del Menú</TR_SCREENO_OPTIONS>
|
||||
<TR_SCREENO_BUTTON_GAME>Juego</TR_SCREENO_BUTTON_GAME>
|
||||
<TR_SCRENNO_BUTTON_SOUND>Sonido</TR_SCRENNO_BUTTON_SOUND>
|
||||
<TR_SCREENO_BUTTON_RECORD>Grabación</TR_SCREENO_BUTTON_RECORD>
|
||||
<TR_SCREENO_BUTTON_VIDEO>Video</TR_SCREENO_BUTTON_VIDEO>
|
||||
<TR_SCREENO_BUTTON_THEME>Estilos</TR_SCREENO_BUTTON_THEME>
|
||||
<!--ScreenOptionsGame-->
|
||||
<TR_SCREENOGAME_OPTIONS>Opciones del Juego</TR_SCREENOGAME_OPTIONS>
|
||||
<TR_SCREENOGAME_LANGUAGE>Idioma</TR_SCREENOGAME_LANGUAGE>
|
||||
<TR_SCREENOGAME_DEBUGLEVEL>Nivel de Depuración</TR_SCREENOGAME_DEBUGLEVEL>
|
||||
<TR_SCREENOGAME_SONGMENU>Menú de Canciones</TR_SCREENOGAME_SONGMENU>
|
||||
<TR_SCREENOGAME_SONGSORTING>Organización de Canciones</TR_SCREENOGAME_SONGSORTING>
|
||||
<TR_SCREENOGAME_TABS>Etiquetas</TR_SCREENOGAME_TABS>
|
||||
<TR_SCREENOGAME_DIFFICULTY>Dificultad del Juego</TR_SCREENOGAME_DIFFICULTY>
|
||||
<TR_SCREENOGAME_TIMERMODE>Modo del Timer</TR_SCREENOGAME_TIMERMODE>
|
||||
<!--ScreenOptionsRecord-->
|
||||
<TR_SCREENORECORD_OPTIONS>Opciones de Grabación</TR_SCREENORECORD_OPTIONS>
|
||||
<TR_SCREENORECORD_DEVICE>Dispositivo</TR_SCREENORECORD_DEVICE>
|
||||
<TR_SCREENORECORD_INPUT>Entrada</TR_SCREENORECORD_INPUT>
|
||||
<TR_SCREENORECORD_CHANNEL_1>Canal 1</TR_SCREENORECORD_CHANNEL_1>
|
||||
<TR_SCREENORECORD_CHANNEL_2>Canal 2</TR_SCREENORECORD_CHANNEL_2>
|
||||
<TR_SCREENORECORD_MIC_DELAY>Retraso del Micrófono</TR_SCREENORECORD_MIC_DELAY>
|
||||
<TR_SCREENORECORD_MIC_WARNING>Advertencia: Al menos un jugador ha sido asignado a dos micrófonos.</TR_SCREENORECORD_MIC_WARNING>
|
||||
<TR_SCREENORECORD_BUTTON_DELAYTEST>Prueba de Retraso</TR_SCREENORECORD_BUTTON_DELAYTEST>
|
||||
<!--ScreenOptionsSound-->
|
||||
<TR_SCREENOSOUND_OPTIONS>Opciones de Sonido</TR_SCREENOSOUND_OPTIONS>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSIC>Música de Fondo</TR_SCREENOSOUND_BACKGROUNDMUSIC>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>Volumen de la Música de Fondo</TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME>
|
||||
<TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>Origen de la Música de Fondo</TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE>
|
||||
<!--ScreenOptionsTheme-->
|
||||
<TR_SCREENOTHEME_OPTIONS>Opciones de Estilo</TR_SCREENOTHEME_OPTIONS>
|
||||
<TR_SCREENOTHEME_THEME>Estilo</TR_SCREENOTHEME_THEME>
|
||||
<TR_SCREENOTHEME_SKIN>Skin</TR_SCREENOTHEME_SKIN>
|
||||
<TR_SCREENOTHEME_COVERTHEME>Estilo de Carátulas</TR_SCREENOTHEME_COVERTHEME>
|
||||
<TR_SCREENOTHEME_NOTELINES>Mostrar Líneas de las Notas</TR_SCREENOTHEME_NOTELINES>
|
||||
<TR_SCREENOTHEME_TONEHELPER>Mostrar Guía de Tonos</TR_SCREENOTHEME_TONEHELPER>
|
||||
<TR_SCREENOTHEME_TIMERLOOK>Aspecto del Timer</TR_SCREENOTHEME_TIMERLOOK>
|
||||
<TR_SCREENOTHEME_COVERLOADING>Comportamiento de la Carga de Carátulas</TR_SCREENOTHEME_COVERLOADING>
|
||||
<!--ScreenOptionsVideo-->
|
||||
<TR_SCREENOVIDEO_OPTIONS>Opciones de Video</TR_SCREENOVIDEO_OPTIONS>
|
||||
<TR_SCREENOVIDEO_VIDEOBACKGROUNDS>Videos de Fondo</TR_SCREENOVIDEO_VIDEOBACKGROUNDS>
|
||||
<TR_SCREENOVIDEO_VIDEOPREVIEW>Previsualización del Video</TR_SCREENOVIDEO_VIDEOPREVIEW>
|
||||
<TR_SCREENOVIDEO_VIDEOINSONGS>Videos al Cantar</TR_SCREENOVIDEO_VIDEOINSONGS>
|
||||
</Texts>
|
||||
</root>
|
||||
@@ -1,31 +0,0 @@
|
||||
Microsoft Public License (Ms-PL)
|
||||
|
||||
This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.
|
||||
|
||||
1. Definitions
|
||||
|
||||
The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law.
|
||||
|
||||
A "contribution" is the original software, or any additions or changes to the software.
|
||||
|
||||
A "contributor" is any person that distributes its contribution under this license.
|
||||
|
||||
"Licensed patents" are a contributor's patent claims that read directly on its contribution.
|
||||
|
||||
2. Grant of Rights
|
||||
|
||||
(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.
|
||||
|
||||
(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.
|
||||
|
||||
3. Conditions and Limitations
|
||||
|
||||
(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks.
|
||||
|
||||
(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.
|
||||
|
||||
(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.
|
||||
|
||||
(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.
|
||||
|
||||
(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
<configuration>
|
||||
<dllmap os="linux" dll="PortAudio.dll" target="libportaudio.so"/>
|
||||
</configuration>
|
||||
@@ -0,0 +1,127 @@
|
||||
Vocaluxe 0.1 README
|
||||
----------------------------
|
||||
|
||||
=================================
|
||||
= 1. About =
|
||||
= 2. Release Notes =
|
||||
= 3. Command-Line Parameters =
|
||||
= 4. Controls =
|
||||
= 5. Help & Support =
|
||||
= 6. Source Code =
|
||||
=================================
|
||||
|
||||
|
||||
=================================
|
||||
= 1. About =
|
||||
=================================
|
||||
|
||||
Vocaluxe is a free and open source singing game. It allows up to three players (currently) to sing
|
||||
along with music using microphones in order to score points, depending on the pitch of the voice
|
||||
and the rhythm of singing.
|
||||
|
||||
Vocaluxe is an entirely new development in C#, inspired by the original UltraStar (developed by corvus5)
|
||||
and the great Ultrastar Deluxe project.
|
||||
|
||||
Supported Operating Systems / Requirements:
|
||||
- WinXP, Vista, Windows 7 with .NET 2.0
|
||||
- 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support
|
||||
|
||||
|
||||
=================================
|
||||
= 2. Release Notes =
|
||||
=================================
|
||||
|
||||
- The program supports 32bit and 64bit (Vocaluxe_x64.exe) operating systems.
|
||||
|
||||
- The program uses OpenGL as the default renderer. If your graphics card driver does not or not
|
||||
properly support OpenGL, you can try the Direct3D renderer by editing your Config.xml in the
|
||||
application's main directory:
|
||||
|
||||
<Graphics>
|
||||
<!--Renderer: TR_CONFIG_SOFTWARE, TR_CONFIG_OPENGL, TR_CONFIG_DIRECT3D-->
|
||||
<Renderer>TR_CONFIG_DIRECT3D</Renderer>
|
||||
|
||||
- To add your existing song collection to Vocaluxe, put your songs into the 'Songs' subfolder.
|
||||
|
||||
Alternatively, you can add multiple song paths to Vocaluxe by editing your Config.xml:
|
||||
|
||||
<Game>
|
||||
<!--SongFolder: SongFolder1, SongFolder2, SongFolder3, ...-->
|
||||
<SongFolder1>C:\Vocaluxe\Songs</SongFolder1>
|
||||
<SongFolder2>D:\EvenMore\Songs</SongFolder2>
|
||||
|
||||
- To use your highscore database from UltraStar deluxe 1.0.1, UltraStar deluxe CMD Mod or
|
||||
UltraStar deluxe 1.1, simply copy your Ultrastar.db (rename if necessary) into the main
|
||||
directory. Your highscore database will be imported into the HighscoreDB.sqlite file when
|
||||
Vocaluxe is started. Upon successful import, the old database is deleted.
|
||||
|
||||
- To add your own player avatars, simply add some picture files to the 'Profiles' subfolder.
|
||||
Supported file types: png, jpg (jpeg), bmp.
|
||||
Images should have square proportions, e.g. 400x400 px.
|
||||
|
||||
|
||||
=================================
|
||||
= 3. Command-Line Parameters =
|
||||
=================================
|
||||
The following command-line parameters may be passed to the game when starting it through a shortcut
|
||||
or from the console:
|
||||
|
||||
-ConfigFile [Path\File]: Use [Path\File] as configuration file instead of Config.xml in the main folder.
|
||||
The path to the file has to exist and needs to be an absolute path.
|
||||
If only a filename is specified, the file is assumed to be in the current directory.
|
||||
Examples: Vocaluxe.exe -ConfigFile MyConfig.xml
|
||||
Vocaluxe.exe -ConfigFile C:\Vocaluxe\Configs\MyConfig.xml
|
||||
|
||||
-ScoreFile [Path\File] : Use [File] as score database instead of HighscoreDB.sqlite in the application's
|
||||
main folder. The path to the file has to exist and needs to be an absolute path.
|
||||
If only a filename is specified, the file is assumed to be in the current directory.
|
||||
Examples: Vocaluxe.exe -ScoreFile MyHighscoreDB.sqlite
|
||||
Vocaluxe.exe -Scorefile C:\Vocaluxe\Highscores\MyHighscoreDB.sqlite
|
||||
|
||||
-SongFolder [Path] : Use [Path] as song folder. The path has to exist and needs to be an absolute path.
|
||||
Note that any song folders set in the config file will be ignored.
|
||||
This parameter may be used multiple times to use different song folders.
|
||||
Examples: Vocaluxe.exe -SongFolder D:\MySongCollection
|
||||
Vocaluxe.exe -SongFolder D:\MySongCollection -SongFolder E:\MoreSongs
|
||||
|
||||
-SongPath [Path] : Deprecated, see SongFolder [Path]. This alias is provided for convenience.
|
||||
|
||||
Complete example:
|
||||
Vocaluxe.exe -ConfigFile MyConfig.xml -ScoreFile C:\Vocaluxe\Highscores\MyHighscoreDB.sqlite -SongFolder D:\MySongCollection
|
||||
|
||||
|
||||
=================================
|
||||
= 4. Controls =
|
||||
=================================
|
||||
[Mouse] to navigate through the screens: Left button: select/manipulate elements,
|
||||
Right button: go to previous screen.
|
||||
[Cursor] to navigate through the screens.
|
||||
[Enter] to confirm
|
||||
[Escape] or [Back] to go to the previous screen.
|
||||
|
||||
[ALT] + [P] to take a ScreenShot. Screenshots are saved in the directory "Screenshots".
|
||||
[ALT] + [ENTER] to toggle full screen mode.
|
||||
[SHIFT] + [F1] to toggle theme edit mode. The theme edit mode is experimental. It allows you
|
||||
to change the size and position of the element on the screens. You can save
|
||||
your changes with [S] before leaving the theme edit mode.
|
||||
[TAB] to open the background music controls (not on all screens).
|
||||
|
||||
Songscreen
|
||||
[CTRL] + [R] to select a random song
|
||||
[F3] to open/close the song search menu
|
||||
[A] to sing all songs from a category
|
||||
|
||||
|
||||
=================================
|
||||
= 5. Help & Suppport =
|
||||
=================================
|
||||
GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki
|
||||
Support Forum (German): http://www.ultra-star.de
|
||||
Song-DataBase (USDB): http://usdb.animux.de/
|
||||
|
||||
|
||||
=================================
|
||||
= 6. Source Code =
|
||||
=================================
|
||||
Source Code (GitHub): https://github.com/Vocaluxe/Vocaluxe
|
||||
SF.Net Page: http://sourceforge.net/projects/vocaluxe/
|
||||
@@ -1,12 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<ThemeSystemVersion>4</ThemeSystemVersion>
|
||||
<ThemeSystemVersion>5</ThemeSystemVersion>
|
||||
<Info>
|
||||
<Name>Ambient</Name>
|
||||
<Author>bohning</Author>
|
||||
<SkinFolder>Ambient</SkinFolder>
|
||||
<ThemeVersionMajor>0</ThemeVersionMajor>
|
||||
<ThemeVersionMinor>1</ThemeVersionMinor>
|
||||
<ThemeVersionMinor>2</ThemeVersionMinor>
|
||||
</Info>
|
||||
<Cursor>
|
||||
<Skin>Cursor</Skin>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENHIGHSCORE_HIGHSCORE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -92,7 +92,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -119,7 +119,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -146,7 +146,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -173,7 +173,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -200,7 +200,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -227,7 +227,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -254,7 +254,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -281,7 +281,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -308,7 +308,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -335,7 +335,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -362,7 +362,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -389,7 +389,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -416,7 +416,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -443,7 +443,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -470,7 +470,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -497,7 +497,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -524,7 +524,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -551,7 +551,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -578,7 +578,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -605,7 +605,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -632,7 +632,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -659,7 +659,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -686,7 +686,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -713,7 +713,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -740,7 +740,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -767,7 +767,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -794,7 +794,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -821,7 +821,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -848,7 +848,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -875,7 +875,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -902,7 +902,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -929,7 +929,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -956,7 +956,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -983,7 +983,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1010,7 +1010,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1037,7 +1037,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1064,7 +1064,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1091,7 +1091,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1118,7 +1118,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1145,7 +1145,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1172,7 +1172,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1199,7 +1199,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<ScreenVersion>1</ScreenVersion>
|
||||
<Background1>
|
||||
<!--<Type>: Background type: None, Color, Texture, Video-->
|
||||
<Type>None</Type>
|
||||
<Type>Texture</Type>
|
||||
<!--<Video>: Background video name-->
|
||||
<Video>BG_Video</Video>
|
||||
<!--<Skin>: Background Texture name-->
|
||||
@@ -49,7 +49,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_PROGRAM_NAME</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -76,7 +76,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENLOAD_LOADING</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -103,7 +103,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
|
||||
@@ -29,33 +29,6 @@
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</StaticMenuBar>
|
||||
<Text1>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>58</X>
|
||||
<Y>41</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>Invisible</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<Color>Invisible</Color>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENMAIN_MENU</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text1>
|
||||
<ButtonSing>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Button</Skin>
|
||||
@@ -92,7 +65,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENMAIN_BUTTON_SING</Text>
|
||||
</Text>
|
||||
@@ -147,7 +120,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENMAIN_BUTTON_OPTIONS</Text>
|
||||
</Text>
|
||||
@@ -202,7 +175,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENMAIN_BUTTON_PROFILES</Text>
|
||||
</Text>
|
||||
@@ -257,7 +230,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_EXIT</Text>
|
||||
</Text>
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENNAMES_MENU</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -93,7 +93,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -136,7 +136,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -191,7 +191,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_START</Text>
|
||||
</Text>
|
||||
@@ -246,7 +246,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENNAMES_BUTTON_1PLAYER</Text>
|
||||
</Text>
|
||||
@@ -293,7 +293,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENNAMES_BUTTON_2PLAYER</Text>
|
||||
</Text>
|
||||
@@ -340,7 +340,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENNAMES_BUTTON_3PLAYER</Text>
|
||||
</Text>
|
||||
@@ -386,13 +386,13 @@
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<Color>Player1Dim</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<SColor>Player1Dim</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<HColor>Player1</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
@@ -404,13 +404,13 @@
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<TextSColor>Player1</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>186,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -451,13 +451,13 @@
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<Color>Player2Dim</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<SColor>Player2Dim</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<HColor>Player2</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
@@ -469,13 +469,13 @@
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<TextSColor>Player2</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>186,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -516,13 +516,13 @@
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<Color>Player3Dim</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<SColor>Player3Dim</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<HColor>Player3</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
@@ -534,13 +534,13 @@
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextColor</TextSColor>
|
||||
<TextSColor>Player3</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>186,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -92,7 +92,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_BUTTON_GAME</Text>
|
||||
</Text>
|
||||
@@ -147,7 +147,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCRENNO_BUTTON_SOUND</Text>
|
||||
</Text>
|
||||
@@ -202,7 +202,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_BUTTON_RECORD</Text>
|
||||
</Text>
|
||||
@@ -257,7 +257,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_BUTTON_VIDEO</Text>
|
||||
</Text>
|
||||
@@ -312,7 +312,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENO_BUTTON_THEME</Text>
|
||||
</Text>
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -172,7 +172,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_LANGUAGE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -199,7 +199,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_DEBUGLEVEL</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -226,7 +226,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_SONGMENU</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -253,7 +253,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_SONGSORTING</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -280,7 +280,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_TABS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -307,7 +307,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOGAME_TIMERMODE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -350,7 +350,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -428,7 +428,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -493,7 +493,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -558,7 +558,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -623,7 +623,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -688,7 +688,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>308,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -753,7 +753,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -204,7 +204,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_DEVICE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -231,7 +231,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_INPUT</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -258,7 +258,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_CHANNEL_1</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -285,7 +285,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_CHANNEL_2</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -312,7 +312,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_MIC_DELAY</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -340,7 +340,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_MIC_WARNING</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -367,7 +367,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -394,7 +394,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -437,7 +437,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -492,7 +492,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENORECORD_BUTTON_DELAYTEST</Text>
|
||||
</Text>
|
||||
@@ -570,7 +570,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -635,7 +635,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -700,7 +700,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>154,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -765,7 +765,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>154,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -830,7 +830,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>123,20</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<ScreenOptionsSound>
|
||||
<ScreenVersion>1</ScreenVersion>
|
||||
<ScreenVersion>2</ScreenVersion>
|
||||
<Background1>
|
||||
<!--<Type>: Background type: None, Color, Texture, Video-->
|
||||
<Type>Video</Type>
|
||||
@@ -55,12 +55,343 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOSOUND_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text1>
|
||||
<Text2>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>105</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOSOUND_BACKGROUNDMUSIC</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text2>
|
||||
<Text3>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>165</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text3>
|
||||
<Text4>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>225</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>TextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text4>
|
||||
<ButtonExit>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Button</Skin>
|
||||
<!--<SkinSelected>: Texture name for selected button-->
|
||||
<SkinSelected>Button</SkinSelected>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: Button position, width and height-->
|
||||
<X>145</X>
|
||||
<Y>600</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>150</W>
|
||||
<H>50</H>
|
||||
<!--<Color>: Button color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonColor</Color>
|
||||
<!--<SColor>: Selected button color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonSColor</SColor>
|
||||
<Text>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>75</X>
|
||||
<Y>10</Y>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>142</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>ButtonTextColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>ButtonTextSColor</SColor>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Center</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
<Reflection>
|
||||
<Space>10</Space>
|
||||
<Height>26</Height>
|
||||
</Reflection>
|
||||
<!--<SReflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space of selected button-->
|
||||
<!-- <Height>: Reflection Height of selected button-->
|
||||
<SReflection>
|
||||
<Space>10</Space>
|
||||
<Height>26</Height>
|
||||
</SReflection>
|
||||
</ButtonExit>
|
||||
<SelectSlideBackgroundMusic>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
|
||||
<!--<SkinArrowRight>: Texture name of right arrow-->
|
||||
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
|
||||
<!--<SkinSelected>: Texture name for selected SelectSlide-->
|
||||
<SkinSelected>SelectSlide</SkinSelected>
|
||||
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
|
||||
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
|
||||
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
|
||||
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
|
||||
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
|
||||
<SkinHighlighted>SelectSlide</SkinHighlighted>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
|
||||
<X>500</X>
|
||||
<Y>100</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>700</W>
|
||||
<H>50</H>
|
||||
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
|
||||
<ArrowLeftX>505</ArrowLeftX>
|
||||
<ArrowLeftY>105</ArrowLeftY>
|
||||
<ArrowLeftZ>0,00</ArrowLeftZ>
|
||||
<ArrowLeftW>40</ArrowLeftW>
|
||||
<ArrowLeftH>40</ArrowLeftH>
|
||||
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
|
||||
<ArrowRightX>1170</ArrowRightX>
|
||||
<ArrowRightY>105</ArrowRightY>
|
||||
<ArrowRightZ>0,00</ArrowRightZ>
|
||||
<ArrowRightW>40</ArrowRightW>
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
|
||||
<ArrowSColor>ArrowSColor</ArrowSColor>
|
||||
<!--<TextColor>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>3</NumVisible>
|
||||
</SelectSlideBackgroundMusic>
|
||||
<SelectSlideBackgroundMusicVolume>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
|
||||
<!--<SkinArrowRight>: Texture name of right arrow-->
|
||||
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
|
||||
<!--<SkinSelected>: Texture name for selected SelectSlide-->
|
||||
<SkinSelected>SelectSlide</SkinSelected>
|
||||
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
|
||||
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
|
||||
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
|
||||
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
|
||||
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
|
||||
<SkinHighlighted>SelectSlide</SkinHighlighted>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
|
||||
<X>500</X>
|
||||
<Y>160</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>700</W>
|
||||
<H>50</H>
|
||||
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
|
||||
<ArrowLeftX>505</ArrowLeftX>
|
||||
<ArrowLeftY>165</ArrowLeftY>
|
||||
<ArrowLeftZ>0,00</ArrowLeftZ>
|
||||
<ArrowLeftW>40</ArrowLeftW>
|
||||
<ArrowLeftH>40</ArrowLeftH>
|
||||
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
|
||||
<ArrowRightX>1170</ArrowRightX>
|
||||
<ArrowRightY>165</ArrowRightY>
|
||||
<ArrowRightZ>0,00</ArrowRightZ>
|
||||
<ArrowRightW>40</ArrowRightW>
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
|
||||
<ArrowSColor>ArrowSColor</ArrowSColor>
|
||||
<!--<TextColor>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>3</NumVisible>
|
||||
</SelectSlideBackgroundMusicVolume>
|
||||
<SelectSlideBackgroundMusicSource>
|
||||
<!--<Skin>: Texture name-->
|
||||
<Skin>Invisible</Skin>
|
||||
<!--<SkinArrowLeft>: Texture name of left arrow-->
|
||||
<SkinArrowLeft>SelectSlideArrowLeft</SkinArrowLeft>
|
||||
<!--<SkinArrowRight>: Texture name of right arrow-->
|
||||
<SkinArrowRight>SelectSlideArrowRight</SkinArrowRight>
|
||||
<!--<SkinSelected>: Texture name for selected SelectSlide-->
|
||||
<SkinSelected>SelectSlide</SkinSelected>
|
||||
<!--<SkinArrowLeftSelected>: Texture name of selected left arrow-->
|
||||
<SkinArrowLeftSelected>SelectSlideArrowLeft</SkinArrowLeftSelected>
|
||||
<!--<SkinArrowRightSelected>: Texture name of selected right arrow-->
|
||||
<SkinArrowRightSelected>SelectSlideArrowRight</SkinArrowRightSelected>
|
||||
<!--<SkinHighlighted>: Texture name for highlighted SelectSlide-->
|
||||
<SkinHighlighted>SelectSlide</SkinHighlighted>
|
||||
<!--<X>, <Y>, <Z>, <W>, <H>: SelectSlide position, width and height-->
|
||||
<X>500</X>
|
||||
<Y>220</Y>
|
||||
<Z>0,00</Z>
|
||||
<W>700</W>
|
||||
<H>50</H>
|
||||
<!--<ArrowLeftX>, <ArrowLeftY>, <ArrowLeftZ>, <ArrowLeftW>, <ArrowLeftH>: Left arrow position, width and height-->
|
||||
<ArrowLeftX>505</ArrowLeftX>
|
||||
<ArrowLeftY>225</ArrowLeftY>
|
||||
<ArrowLeftZ>0,00</ArrowLeftZ>
|
||||
<ArrowLeftW>40</ArrowLeftW>
|
||||
<ArrowLeftH>40</ArrowLeftH>
|
||||
<!--<ArrowRightX>, <ArrowRightY>, <ArrowRightZ>, <ArrowRightW>, <ArrowRightH>: Right arrow position, width and height-->
|
||||
<ArrowRightX>1170</ArrowRightX>
|
||||
<ArrowRightY>225</ArrowRightY>
|
||||
<ArrowRightZ>0,00</ArrowRightZ>
|
||||
<ArrowRightW>40</ArrowRightW>
|
||||
<ArrowRightH>40</ArrowRightH>
|
||||
<!--<Color>: SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>SelectSlideColor</Color>
|
||||
<!--<SColor>: Selected SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<SColor>SelectSlideSColor</SColor>
|
||||
<!--<HColor>: Highlighted SelectSlide color from ColorScheme (high priority)-->
|
||||
<!--or <HR>, <HG>, <HB>, <HA> (lower priority)-->
|
||||
<HColor>SelectSlideHColor</HColor>
|
||||
<!--<ArrowColor>: Arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowR>, <ArrowG>, <ArrowB>, <ArrowA> (lower priority)-->
|
||||
<ArrowColor>ArrowColor</ArrowColor>
|
||||
<!--<ArrowSColor>: Selected arrow color from ColorScheme (high priority)-->
|
||||
<!--or <ArrowSR>, <ArrowSG>, <ArrowSB>, <ArrowSA> (lower priority)-->
|
||||
<ArrowSColor>ArrowSColor</ArrowSColor>
|
||||
<!--<TextColor>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <TextR>, <TextG>, <TextB>, <TextA> (lower priority)-->
|
||||
<TextColor>TextColor</TextColor>
|
||||
<!--<TextSColor>: Selected text color from ColorScheme (high priority)-->
|
||||
<!--or <TextSR>, <TextSG>, <TextSB>, <TextSA> (lower priority)-->
|
||||
<TextSColor>TextSColor</TextSColor>
|
||||
<!--<TextH>: Text height-->
|
||||
<TextH>32,00</TextH>
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>500,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
<NumVisible>1</NumVisible>
|
||||
</SelectSlideBackgroundMusicSource>
|
||||
</ScreenOptionsSound>
|
||||
</root>
|
||||
@@ -161,7 +161,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -188,7 +188,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_THEME</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -215,7 +215,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_SKIN</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -242,7 +242,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_COVERTHEME</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -269,7 +269,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_NOTELINES</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -296,7 +296,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_TONEHELPER</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -323,7 +323,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_TIMERLOOK</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -350,7 +350,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOTHEME_COVERLOADING</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -393,7 +393,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -471,7 +471,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -536,7 +536,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -601,7 +601,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>308,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -666,7 +666,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>308,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -731,7 +731,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>308,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -796,7 +796,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>308,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -861,7 +861,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>616,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOVIDEO_OPTIONS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -124,7 +124,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOVIDEO_VIDEOBACKGROUNDS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -151,7 +151,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOVIDEO_VIDEOPREVIEW</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -178,7 +178,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENOVIDEO_VIDEOINSONGS</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -221,7 +221,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -299,7 +299,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -364,7 +364,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -429,7 +429,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>205,33</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -145,7 +145,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_PROFILES</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -172,7 +172,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_PLAYERNAME</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -199,7 +199,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_GAMEDIFFICULTY</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -226,7 +226,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_AVATAR</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -253,7 +253,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_GUESTPROFILE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -280,7 +280,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_ACTIVE</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -323,7 +323,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
</Text>
|
||||
@@ -370,7 +370,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_BACK</Text>
|
||||
</Text>
|
||||
@@ -425,7 +425,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_BUTTON_SAVE</Text>
|
||||
</Text>
|
||||
@@ -480,7 +480,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_BUTTON_NEW</Text>
|
||||
</Text>
|
||||
@@ -535,7 +535,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENPROFILES_BUTTON_DELETE</Text>
|
||||
</Text>
|
||||
@@ -613,7 +613,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>219,20</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -678,7 +678,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>208,67</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -743,7 +743,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>208,67</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -808,7 +808,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>313,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
@@ -873,7 +873,7 @@
|
||||
<!--<TextMaxW>: Maximum text width (if exists)-->
|
||||
<TextMaxW>313,00</TextMaxW>
|
||||
<!--<TextFont>: Text font name-->
|
||||
<TextFont>Normal</TextFont>
|
||||
<TextFont>Outline</TextFont>
|
||||
<!--<TextStyle>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<TextStyle>Bold</TextStyle>
|
||||
<!--<NumVisible>: Number of visible elements in the slide-->
|
||||
|
||||
@@ -398,7 +398,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENSCORE_SCORES</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -425,7 +425,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -452,7 +452,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -479,7 +479,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -506,7 +506,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -533,7 +533,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -560,7 +560,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -587,7 +587,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -614,7 +614,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -641,7 +641,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -668,7 +668,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -695,7 +695,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -722,7 +722,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -749,7 +749,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -776,7 +776,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -803,7 +803,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -830,7 +830,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -857,7 +857,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -884,7 +884,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -911,7 +911,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -938,7 +938,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -965,7 +965,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -992,7 +992,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1019,7 +1019,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1046,7 +1046,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -1073,7 +1073,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
<!--<Type>: Background type: None, Color, Texture, Video-->
|
||||
<Type>None</Type>
|
||||
<!--<Video>: Background video name-->
|
||||
<Video />
|
||||
<!--<Skin>: Background Texture name-->
|
||||
<Skin />
|
||||
<!--<Color>: Background color for type "Color" from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
</Background1>
|
||||
@@ -117,10 +119,7 @@
|
||||
<H>9</H>
|
||||
<!--<Color>: Static color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<R>0,675</R>
|
||||
<G>0,890</G>
|
||||
<B>0,969</B>
|
||||
<A>0,400</A>
|
||||
<Color>TimeBar</Color>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
@@ -136,7 +135,7 @@
|
||||
<H>9</H>
|
||||
<!--<Color>: Static color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<Color>TimeBarSentence</Color>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
@@ -609,7 +608,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENSING_BUTTON_CANCEL</Text>
|
||||
</Text>
|
||||
@@ -664,7 +663,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENSING_BUTTON_CONTINUE</Text>
|
||||
</Text>
|
||||
|
||||
@@ -53,34 +53,6 @@
|
||||
<Height>26</Height>
|
||||
</Reflection>
|
||||
</StaticSearchBar>
|
||||
<Text1>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>50</X>
|
||||
<Y>41</Y>
|
||||
<!--<Z>: Text position-->
|
||||
<Z>0,00</Z>
|
||||
<!--<H>: Text height-->
|
||||
<H>32</H>
|
||||
<!--<MaxW>: Maximum text width (if exists)-->
|
||||
<MaxW>180</MaxW>
|
||||
<!--<Color>: Text color from ColorScheme (high priority)-->
|
||||
<!--or <R>, <G>, <B>, <A> (lower priority)-->
|
||||
<Color>StaticColor</Color>
|
||||
<!--<SColor>: Selected Text color from ColorScheme (high priority)-->
|
||||
<!--or <SR>, <SG>, <SB>, <SA> (lower priority)-->
|
||||
<Color>TextSColor</Color>
|
||||
<!--<Align>: Text align: Left, Center, Right-->
|
||||
<Align>Left</Align>
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENSONG_MENU</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
<!-- <Space>: Reflection Space-->
|
||||
<!-- <Height>: Reflection Height-->
|
||||
</Text1>
|
||||
<TextCategory>
|
||||
<!--<X>, <Y>: Text position-->
|
||||
<X>220</X>
|
||||
@@ -102,7 +74,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -134,7 +106,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -165,7 +137,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text>TR_SCREENSONG_SEARCH</Text>
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -192,7 +164,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -257,7 +229,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -285,7 +257,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
@@ -313,7 +285,7 @@
|
||||
<!--<Style>: Text style: Normal, Italic, Bold, BoldItalic-->
|
||||
<Style>Bold</Style>
|
||||
<!--<Font>: Text font name-->
|
||||
<Font>Normal</Font>
|
||||
<Font>Outline</Font>
|
||||
<!--<Text>: Text or translation tag-->
|
||||
<Text />
|
||||
<!--<Reflection> If exists:-->
|
||||
|
||||
@@ -46,6 +46,42 @@
|
||||
</Player6>
|
||||
</Colors>
|
||||
<ColorSchemes>
|
||||
<Player1Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player1Dim>
|
||||
<Player2Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player2Dim>
|
||||
<Player3Dim>
|
||||
<R>0,000</R>
|
||||
<G>1,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player3Dim>
|
||||
<Player4Dim>
|
||||
<R>0,500</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player4Dim>
|
||||
<Player5Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,500</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player5Dim>
|
||||
<Player6Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,500</B>
|
||||
<A>0,500</A>
|
||||
</Player6Dim>
|
||||
<BackgroundColor>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
@@ -178,6 +214,18 @@
|
||||
<B>0,300</B>
|
||||
<A>1,000</A>
|
||||
</LyricSubColor>
|
||||
<TimeBar>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</TimeBar>
|
||||
<TimeBarSentence>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,850</A>
|
||||
</TimeBarSentence>
|
||||
</ColorSchemes>
|
||||
<Skins>
|
||||
<BG_Default>[Blue]BG_Default.png</BG_Default>
|
||||
@@ -218,9 +266,9 @@
|
||||
<Invisible>Invisible.png</Invisible>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Blue]BG_Video.mkv</BG_Video>
|
||||
<IntroIn>[Blue]IntroIn.mkv</IntroIn>
|
||||
<IntroMid>[Blue]IntroMid.mkv</IntroMid>
|
||||
<IntroOut>[Blue]IntroOut.mkv</IntroOut>
|
||||
<BG_Video>[Blue]BG_Video.mp4</BG_Video>
|
||||
<IntroIn>[Blue]IntroIn.mp4</IntroIn>
|
||||
<IntroMid>[Blue]IntroMid.mp4</IntroMid>
|
||||
<IntroOut>[Blue]IntroOut.mp4</IntroOut>
|
||||
</Videos>
|
||||
</root>
|
||||
@@ -46,6 +46,42 @@
|
||||
</Player6>
|
||||
</Colors>
|
||||
<ColorSchemes>
|
||||
<Player1Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player1Dim>
|
||||
<Player2Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player2Dim>
|
||||
<Player3Dim>
|
||||
<R>0,000</R>
|
||||
<G>1,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player3Dim>
|
||||
<Player4Dim>
|
||||
<R>0,500</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player4Dim>
|
||||
<Player5Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,500</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player5Dim>
|
||||
<Player6Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,500</B>
|
||||
<A>0,500</A>
|
||||
</Player6Dim>
|
||||
<BackgroundColor>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
@@ -178,6 +214,18 @@
|
||||
<B>0,300</B>
|
||||
<A>1,000</A>
|
||||
</LyricSubColor>
|
||||
<TimeBar>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</TimeBar>
|
||||
<TimeBarSentence>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,850</A>
|
||||
</TimeBarSentence>
|
||||
</ColorSchemes>
|
||||
<Skins>
|
||||
<BG_Default>[Green]BG_Default.png</BG_Default>
|
||||
@@ -218,9 +266,9 @@
|
||||
<Invisible>Invisible.png</Invisible>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Green]BG_Video.mkv</BG_Video>
|
||||
<IntroIn>[Green]IntroIn.mkv</IntroIn>
|
||||
<IntroMid>[Green]IntroMid.mkv</IntroMid>
|
||||
<IntroOut>[Green]IntroOut.mkv</IntroOut>
|
||||
<BG_Video>[Green]BG_Video.mp4</BG_Video>
|
||||
<IntroIn>[Green]IntroIn.mp4</IntroIn>
|
||||
<IntroMid>[Green]IntroMid.mp4</IntroMid>
|
||||
<IntroOut>[Green]IntroOut.mp4</IntroOut>
|
||||
</Videos>
|
||||
</root>
|
||||
@@ -46,6 +46,42 @@
|
||||
</Player6>
|
||||
</Colors>
|
||||
<ColorSchemes>
|
||||
<Player1Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player1Dim>
|
||||
<Player2Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player2Dim>
|
||||
<Player3Dim>
|
||||
<R>0,000</R>
|
||||
<G>1,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player3Dim>
|
||||
<Player4Dim>
|
||||
<R>0,500</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player4Dim>
|
||||
<Player5Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,500</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player5Dim>
|
||||
<Player6Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,500</B>
|
||||
<A>0,500</A>
|
||||
</Player6Dim>
|
||||
<BackgroundColor>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
@@ -178,6 +214,18 @@
|
||||
<B>0,300</B>
|
||||
<A>1,000</A>
|
||||
</LyricSubColor>
|
||||
<TimeBar>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</TimeBar>
|
||||
<TimeBarSentence>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,850</A>
|
||||
</TimeBarSentence>
|
||||
</ColorSchemes>
|
||||
<Skins>
|
||||
<BG_Default>[Red]BG_Default.png</BG_Default>
|
||||
@@ -218,9 +266,9 @@
|
||||
<Invisible>Invisible.png</Invisible>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Red]BG_Video.mkv</BG_Video>
|
||||
<IntroIn>[Red]IntroIn.mkv</IntroIn>
|
||||
<IntroMid>[Red]IntroMid.mkv</IntroMid>
|
||||
<IntroOut>[Red]IntroOut.mkv</IntroOut>
|
||||
<BG_Video>[Red]BG_Video.mp4</BG_Video>
|
||||
<IntroIn>[Red]IntroIn.mp4</IntroIn>
|
||||
<IntroMid>[Red]IntroMid.mp4</IntroMid>
|
||||
<IntroOut>[Red]IntroOut.mp4</IntroOut>
|
||||
</Videos>
|
||||
</root>
|
||||
@@ -46,6 +46,42 @@
|
||||
</Player6>
|
||||
</Colors>
|
||||
<ColorSchemes>
|
||||
<Player1Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player1Dim>
|
||||
<Player2Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player2Dim>
|
||||
<Player3Dim>
|
||||
<R>0,000</R>
|
||||
<G>1,000</G>
|
||||
<B>0,000</B>
|
||||
<A>0,500</A>
|
||||
</Player3Dim>
|
||||
<Player4Dim>
|
||||
<R>0,500</R>
|
||||
<G>0,000</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player4Dim>
|
||||
<Player5Dim>
|
||||
<R>0,000</R>
|
||||
<G>0,500</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</Player5Dim>
|
||||
<Player6Dim>
|
||||
<R>1,000</R>
|
||||
<G>0,000</G>
|
||||
<B>0,500</B>
|
||||
<A>0,500</A>
|
||||
</Player6Dim>
|
||||
<BackgroundColor>
|
||||
<R>0,000</R>
|
||||
<G>0,000</G>
|
||||
@@ -178,6 +214,18 @@
|
||||
<B>0,300</B>
|
||||
<A>1,000</A>
|
||||
</LyricSubColor>
|
||||
<TimeBar>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,500</A>
|
||||
</TimeBar>
|
||||
<TimeBarSentence>
|
||||
<R>0,800</R>
|
||||
<G>0,950</G>
|
||||
<B>1,000</B>
|
||||
<A>0,850</A>
|
||||
</TimeBarSentence>
|
||||
</ColorSchemes>
|
||||
<Skins>
|
||||
<BG_Default>[Yellow]BG_Default.png</BG_Default>
|
||||
@@ -218,9 +266,9 @@
|
||||
<Invisible>Invisible.png</Invisible>
|
||||
</Skins>
|
||||
<Videos>
|
||||
<BG_Video>[Yellow]BG_Video.mkv</BG_Video>
|
||||
<IntroIn>[Yellow]IntroIn.mkv</IntroIn>
|
||||
<IntroMid>[Yellow]IntroMid.mkv</IntroMid>
|
||||
<IntroOut>[Yellow]IntroOut.mkv</IntroOut>
|
||||
<BG_Video>[Yellow]BG_Video.mp4</BG_Video>
|
||||
<IntroIn>[Yellow]IntroIn.mp4</IntroIn>
|
||||
<IntroMid>[Yellow]IntroMid.mp4</IntroMid>
|
||||
<IntroOut>[Yellow]IntroOut.mp4</IntroOut>
|
||||
</Videos>
|
||||
</root>
|
||||
@@ -0,0 +1,18 @@
|
||||
ScreenOptionsSound
|
||||
|
||||
++++++++++
|
||||
Version 2:
|
||||
|
||||
Add:
|
||||
|
||||
<ButtonExit>
|
||||
|
||||
<SelectSlideBackgroundMusic>
|
||||
<SelectSlideBackgroundMusicVolume>
|
||||
<SelectSlideBackgroundMusicSource>
|
||||
|
||||
and some texts for description (Text2, Text3, Text4)
|
||||
"TR_SCREENOSOUND_BACKGROUNDMUSIC"
|
||||
"TR_SCREENOSOUND_BACKGROUNDMUSICVOLUME"
|
||||
"TR_SCREENOSOUND_BACKGROUNDMUSICSOURCE"
|
||||
++++++++++
|
||||
@@ -1,5 +1,18 @@
|
||||
Theme System
|
||||
|
||||
++++++++++
|
||||
Version 5:
|
||||
|
||||
Added:
|
||||
<Outline> outline thickness 0..1
|
||||
<OutlineColorR> outline color red
|
||||
<OutlineColorG> outline color green
|
||||
<OutlineColorB> outline color blue
|
||||
<OutlineColorA> outline color alpha
|
||||
|
||||
to Fonts
|
||||
|
||||
|
||||
++++++++++
|
||||
Version 4:
|
||||
|
||||
|
||||
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
<configuration>
|
||||
<dllmap os="linux" dll="acinerella.dll" target="libacinerella.so"/>
|
||||
</configuration>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+57639
File diff suppressed because it is too large.
Load diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,48 @@
|
||||
__ __ _
|
||||
\ \ / /__ ___ __ _| |_ ___ _____
|
||||
\ \ / / _ \ / __/ _` | | | | \ \/ / _ \
|
||||
\ V / (_) | (_| (_| | | |_| |> < __/
|
||||
\_/ \___/ \___\__,_|_|\__,_/_/\_\___|
|
||||
|
||||
|
||||
=================================
|
||||
= 1. About =
|
||||
= 2. Download =
|
||||
= 3. Development Guidelines =
|
||||
= 4. Help & Support =
|
||||
=================================
|
||||
|
||||
|
||||
=================================
|
||||
= 1. About =
|
||||
=================================
|
||||
Vocaluxe is a free and open source singing game, inspired by the original UltraStar (developed by corvus5) and the great Ultrastar Deluxe project - yet it is an entirely new development in C#. It allows up to three players (currently) to sing along with music using microphones in order to score points, depending on the pitch of the voice and the rhythm of singing. It features mouse and keyboard navigation, a multi-language interface, and singer profiles with avatars and supports songs in CP1250/52 and UTF8 encodings.
|
||||
|
||||
Supported Operating Systems / Requirements:
|
||||
- WinXP, Vista, Windows 7 with .NET 2.0
|
||||
- 1 GHz CPU, 512 MB RAM, Graphics card with OpenGL 2.1 or DirectX 9.0 support
|
||||
|
||||
|
||||
=================================
|
||||
= 2. Download =
|
||||
=================================
|
||||
You can download precompiled Windows binaries at SourceForge:
|
||||
|
||||
http://sourceforge.net/projects/vocaluxe/
|
||||
|
||||
|
||||
=================================
|
||||
= 3. Development Guidelines =
|
||||
=================================
|
||||
The development of Vocaluxe uses this git branching model:
|
||||
|
||||
http://nvie.com/posts/a-successful-git-branching-model/
|
||||
|
||||
|
||||
=================================
|
||||
= 4. Help & Suppport =
|
||||
=================================
|
||||
GitHub Wiki: https://github.com/Vocaluxe/Vocaluxe/wiki
|
||||
GitGub Issues Tracker: https://github.com/Vocaluxe/Vocaluxe/issues
|
||||
Support Forum (German): http://www.ultra-star.de
|
||||
Song-DataBase (USDB): http://usdb.animux.de/
|
||||
@@ -5,12 +5,18 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Vocaluxe", "Vocaluxe\Vocalu
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Debug|x64.Build.0 = Debug|x64
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Debug|x86.ActiveCfg = Debug|x86
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Debug|x86.Build.0 = Debug|x86
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Release|x64.ActiveCfg = Release|x64
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Release|x64.Build.0 = Release|x64
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Release|x86.ActiveCfg = Release|x86
|
||||
{2A1E0F2D-5392-4BB7-B0A1-A9DFA13E79FF}.Release|x86.Build.0 = Release|x86
|
||||
EndGlobalSection
|
||||
|
||||
@@ -0,0 +1,225 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
using System.Diagnostics;
|
||||
using Vocaluxe.Lib.Song;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
{
|
||||
static class CBackgroundMusic
|
||||
{
|
||||
private static CHelper Helper = new CHelper();
|
||||
private static int _CurrentMusicStream = -1;
|
||||
private static string _CurrentMusicFilePath = String.Empty;
|
||||
|
||||
private static List<string> _AllFileNames = new List<string>();
|
||||
private static List<string> _NotPlayedFileNames = new List<string>();
|
||||
private static List<string> _BGMusicFileNames = new List<string>();
|
||||
|
||||
private static bool _OwnMusicAdded;
|
||||
private static bool _BackgroundMusicAdded;
|
||||
private static bool _Playing;
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.mp3", true, true));
|
||||
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wav", true, true));
|
||||
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.ogg", true, true));
|
||||
_BGMusicFileNames.AddRange(Helper.ListFiles(CSettings.sFolderBackgroundMusic, "*.wma", true, true));
|
||||
|
||||
if(CConfig.BackgroundMusicSource != EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC)
|
||||
AddBackgroundMusic();
|
||||
|
||||
_Playing = false;
|
||||
}
|
||||
|
||||
public static void Play()
|
||||
{
|
||||
if (CConfig.BackgroundMusic == EOffOn.TR_CONFIG_ON)
|
||||
{
|
||||
if (_AllFileNames.Count > 0)
|
||||
{
|
||||
if (_CurrentMusicStream != -1)
|
||||
{
|
||||
CSound.Fade(_CurrentMusicStream, CConfig.BackgroundMusicVolume, CSettings.BackgroundMusicFadeTime);
|
||||
CSound.Play(_CurrentMusicStream);
|
||||
_Playing = true;
|
||||
}
|
||||
else
|
||||
Next();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void Stop()
|
||||
{
|
||||
CSound.FadeAndStop(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime);
|
||||
|
||||
_CurrentMusicFilePath = String.Empty;
|
||||
_Playing = false;
|
||||
}
|
||||
|
||||
public static void Pause()
|
||||
{
|
||||
CSound.FadeAndPause(_CurrentMusicStream, 0f, CSettings.BackgroundMusicFadeTime);
|
||||
_Playing = false;
|
||||
}
|
||||
|
||||
public static void Update()
|
||||
{
|
||||
if (_AllFileNames.Count > 0 && _CurrentMusicStream != -1)
|
||||
{
|
||||
float timeToPlay = CSound.GetLength(_CurrentMusicStream) - CSound.GetPosition(_CurrentMusicStream);
|
||||
bool finished = CSound.IsFinished(_CurrentMusicStream);
|
||||
if (_Playing && (timeToPlay <= CSettings.BackgroundMusicFadeTime || finished))
|
||||
Next();
|
||||
}
|
||||
}
|
||||
|
||||
public static void Next()
|
||||
{
|
||||
if (_AllFileNames.Count > 0)
|
||||
{
|
||||
Stop();
|
||||
|
||||
if (_NotPlayedFileNames.Count == 0)
|
||||
_NotPlayedFileNames.AddRange(_AllFileNames);
|
||||
|
||||
_CurrentMusicFilePath = _NotPlayedFileNames[CGame.Rand.Next(_NotPlayedFileNames.Count)];
|
||||
_NotPlayedFileNames.Remove(_CurrentMusicFilePath);
|
||||
|
||||
_CurrentMusicStream = CSound.Load(_CurrentMusicFilePath);
|
||||
CSound.SetStreamVolume(_CurrentMusicStream, 0f);
|
||||
Play();
|
||||
}
|
||||
else
|
||||
Stop();
|
||||
}
|
||||
|
||||
public static void ApplyVolume()
|
||||
{
|
||||
CSound.SetStreamVolume(_CurrentMusicStream, CConfig.BackgroundMusicVolume);
|
||||
}
|
||||
|
||||
public static void AddOwnMusic()
|
||||
{
|
||||
if (!_OwnMusicAdded)
|
||||
{
|
||||
foreach (CSong song in CSongs.AllSongs)
|
||||
{
|
||||
_AllFileNames.Add(song.GetMP3());
|
||||
_NotPlayedFileNames.Add(song.GetMP3());
|
||||
}
|
||||
}
|
||||
_OwnMusicAdded = true;
|
||||
}
|
||||
|
||||
public static void RemoveOwnMusic()
|
||||
{
|
||||
_AllFileNames.Clear();
|
||||
_NotPlayedFileNames.Clear();
|
||||
|
||||
if (_BackgroundMusicAdded)
|
||||
{
|
||||
_AllFileNames.AddRange(_BGMusicFileNames);
|
||||
_NotPlayedFileNames.AddRange(_BGMusicFileNames);
|
||||
}
|
||||
|
||||
if (IsPlaying() && !IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0)
|
||||
Next();
|
||||
|
||||
_OwnMusicAdded = false;
|
||||
}
|
||||
|
||||
public static void AddBackgroundMusic()
|
||||
{
|
||||
if (!_BackgroundMusicAdded)
|
||||
{
|
||||
_AllFileNames.AddRange(_BGMusicFileNames);
|
||||
_NotPlayedFileNames.AddRange(_BGMusicFileNames);
|
||||
_BackgroundMusicAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
public static void RemoveBackgroundMusic()
|
||||
{
|
||||
if (_BackgroundMusicAdded)
|
||||
{
|
||||
_AllFileNames.Clear();
|
||||
_OwnMusicAdded = false;
|
||||
AddOwnMusic();
|
||||
_BackgroundMusicAdded = false;
|
||||
|
||||
if (IsPlaying() && IsBackgroundFile(_CurrentMusicFilePath) || _AllFileNames.Count == 0)
|
||||
Next();
|
||||
}
|
||||
}
|
||||
|
||||
public static void CheckAndApplyConfig(EOffOn NewOnOff, EBackgroundMusicSource NewSource, float NewVolume)
|
||||
{
|
||||
if (CConfig.BackgroundMusic != NewOnOff)
|
||||
{
|
||||
CConfig.BackgroundMusic = NewOnOff;
|
||||
if (NewOnOff == EOffOn.TR_CONFIG_ON)
|
||||
Play();
|
||||
else
|
||||
Pause();
|
||||
}
|
||||
|
||||
if (CConfig.BackgroundMusicSource != NewSource)
|
||||
{
|
||||
CConfig.BackgroundMusicSource = NewSource;
|
||||
|
||||
switch (NewSource)
|
||||
{
|
||||
case EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC:
|
||||
if (!_BackgroundMusicAdded)
|
||||
AddBackgroundMusic();
|
||||
|
||||
RemoveOwnMusic();
|
||||
break;
|
||||
|
||||
case EBackgroundMusicSource.TR_CONFIG_ONLY_OWN_MUSIC:
|
||||
if (!_OwnMusicAdded)
|
||||
AddOwnMusic();
|
||||
|
||||
RemoveBackgroundMusic();
|
||||
break;
|
||||
case EBackgroundMusicSource.TR_CONFIG_OWN_MUSIC:
|
||||
if (!_BackgroundMusicAdded)
|
||||
AddBackgroundMusic();
|
||||
|
||||
if (!_OwnMusicAdded)
|
||||
AddOwnMusic();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (CConfig.BackgroundMusicVolume != NewVolume)
|
||||
{
|
||||
CConfig.BackgroundMusicVolume = (int)NewVolume;
|
||||
ApplyVolume();
|
||||
}
|
||||
|
||||
CConfig.SaveConfig();
|
||||
}
|
||||
|
||||
public static bool IsPlaying()
|
||||
{
|
||||
return CSound.IsPlaying(_CurrentMusicStream);
|
||||
}
|
||||
|
||||
private static bool IsBackgroundFile(string FilePath)
|
||||
{
|
||||
foreach (string file in _BGMusicFileNames)
|
||||
{
|
||||
if (file == FilePath)
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
+71
-18
@@ -66,17 +66,27 @@ namespace Vocaluxe.Base
|
||||
TR_CONFIG_LEVEL_MAX //all debug infos
|
||||
}
|
||||
|
||||
public enum EBufferSize
|
||||
{
|
||||
b0 = 0,
|
||||
b512 = 512,
|
||||
b1024 = 1024,
|
||||
b1536 = 1536,
|
||||
b2048 = 2048,
|
||||
b2560 = 2560,
|
||||
b3072 = 3072,
|
||||
b3584 = 3584,
|
||||
b4096 = 4096
|
||||
}
|
||||
|
||||
public enum EPlaybackLib
|
||||
{
|
||||
BASS,
|
||||
PortAudio,
|
||||
NAudio,
|
||||
OpenAL
|
||||
}
|
||||
|
||||
public enum ERecordLib
|
||||
{
|
||||
BASS,
|
||||
PortAudio
|
||||
}
|
||||
|
||||
@@ -87,10 +97,10 @@ namespace Vocaluxe.Base
|
||||
|
||||
public enum ESongMenu
|
||||
{
|
||||
TR_CONFIG_LIST, //a simple list
|
||||
TR_CONFIG_DREIDEL, //as in ultrastar deluxe
|
||||
//TR_CONFIG_LIST, //a simple list
|
||||
//TR_CONFIG_DREIDEL, //as in ultrastar deluxe
|
||||
TR_CONFIG_TILE_BOARD, //chessboard like
|
||||
TR_CONFIG_BOOK //for playlists
|
||||
//TR_CONFIG_BOOK //for playlists
|
||||
}
|
||||
|
||||
public enum ESongSorting
|
||||
@@ -134,6 +144,14 @@ namespace Vocaluxe.Base
|
||||
TR_CONFIG_TIMERLOOK_NORMAL,
|
||||
TR_CONFIG_TIMERLOOK_EXPANDED
|
||||
}
|
||||
|
||||
public enum EBackgroundMusicSource
|
||||
{
|
||||
TR_CONFIG_NO_OWN_MUSIC,
|
||||
TR_CONFIG_OWN_MUSIC,
|
||||
TR_CONFIG_ONLY_OWN_MUSIC
|
||||
}
|
||||
|
||||
#endregion Enums
|
||||
|
||||
static class CConfig
|
||||
@@ -144,7 +162,7 @@ namespace Vocaluxe.Base
|
||||
public static EDebugLevel DebugLevel = EDebugLevel.TR_CONFIG_OFF;
|
||||
|
||||
// Graphics
|
||||
public static ERenderer Renderer = ERenderer.TR_CONFIG_OPENGL;
|
||||
public static ERenderer Renderer = ERenderer.TR_CONFIG_DIRECT3D;
|
||||
public static ETextureQuality TextureQuality = ETextureQuality.TR_CONFIG_TEXTURE_MEDIUM;
|
||||
public static float MaxFPS = 60f;
|
||||
|
||||
@@ -172,16 +190,20 @@ namespace Vocaluxe.Base
|
||||
// Sound
|
||||
public static EPlaybackLib PlayBackLib = EPlaybackLib.PortAudio;
|
||||
public static ERecordLib RecordLib = ERecordLib.PortAudio;
|
||||
public static uint PortAudioBufferSize = 1024;
|
||||
public static EBufferSize AudioBufferSize = EBufferSize.b2048;
|
||||
public static int AudioLatency = 0;
|
||||
public static int BackgroundMusicVolume = 50;
|
||||
public static EOffOn BackgroundMusic = EOffOn.TR_CONFIG_ON;
|
||||
public static EBackgroundMusicSource BackgroundMusicSource = EBackgroundMusicSource.TR_CONFIG_NO_OWN_MUSIC;
|
||||
|
||||
// Game
|
||||
public static List<string> SongFolder = new List<string>();
|
||||
public static ESongMenu SongMenu = ESongMenu.TR_CONFIG_TILE_BOARD;
|
||||
public static ESongSorting SongSorting = ESongSorting.TR_CONFIG_FOLDER;
|
||||
public static ESongSorting SongSorting = ESongSorting.TR_CONFIG_ARTIST;
|
||||
public static float ScoreAnimationTime = 10;
|
||||
public static ETimerMode TimerMode = ETimerMode.TR_CONFIG_TIMERMODE_REMAINING;
|
||||
public static int NumPlayer = 2;
|
||||
public static EOffOn Tabs = EOffOn.TR_CONFIG_ON;
|
||||
public static EOffOn Tabs = EOffOn.TR_CONFIG_OFF;
|
||||
public static string Language = "English";
|
||||
public static EOffOn LyricsOnTop = EOffOn.TR_CONFIG_OFF;
|
||||
|
||||
@@ -213,14 +235,10 @@ namespace Vocaluxe.Base
|
||||
MicConfig = new SMicConfig[CSettings.MaxNumPlayer];
|
||||
|
||||
// Init config file
|
||||
if (File.Exists(CSettings.sFileConfig))
|
||||
{
|
||||
LoadConfig();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!File.Exists(CSettings.sFileConfig))
|
||||
SaveConfig();
|
||||
}
|
||||
|
||||
LoadConfig();
|
||||
}
|
||||
|
||||
public static bool LoadConfig()
|
||||
@@ -259,6 +277,12 @@ namespace Vocaluxe.Base
|
||||
#region Graphics
|
||||
CHelper.TryGetEnumValueFromXML<ERenderer>("//root/Graphics/Renderer", navigator, ref Renderer);
|
||||
CHelper.TryGetEnumValueFromXML<ETextureQuality>("//root/Graphics/TextureQuality", navigator, ref TextureQuality);
|
||||
CHelper.TryGetIntValueFromXML("//root/Graphics/CoverSize", navigator, ref CoverSize);
|
||||
if (CoverSize > 1024)
|
||||
CoverSize = 1024;
|
||||
if (CoverSize < 32)
|
||||
CoverSize = 32;
|
||||
|
||||
CHelper.TryGetIntValueFromXML("//root/Graphics/ScreenW", navigator, ref ScreenW);
|
||||
CHelper.TryGetIntValueFromXML("//root/Graphics/ScreenH", navigator, ref ScreenH);
|
||||
CHelper.TryGetEnumValueFromXML<EAntiAliasingModes>("//root/Graphics/AAMode", navigator, ref AAMode);
|
||||
@@ -282,6 +306,17 @@ namespace Vocaluxe.Base
|
||||
#region Sound
|
||||
CHelper.TryGetEnumValueFromXML<EPlaybackLib>("//root/Sound/PlayBackLib", navigator, ref PlayBackLib);
|
||||
CHelper.TryGetEnumValueFromXML<ERecordLib>("//root/Sound/RecordLib", navigator, ref RecordLib);
|
||||
CHelper.TryGetEnumValueFromXML<EBufferSize>("//root/Sound/AudioBufferSize", navigator, ref AudioBufferSize);
|
||||
|
||||
CHelper.TryGetIntValueFromXML("//root/Sound/AudioLatency", navigator, ref AudioLatency);
|
||||
if (AudioLatency < -500)
|
||||
AudioLatency = -500;
|
||||
if (AudioLatency > 500)
|
||||
AudioLatency = 500;
|
||||
|
||||
CHelper.TryGetEnumValueFromXML("//root/Sound/BackgroundMusic", navigator, ref BackgroundMusic);
|
||||
CHelper.TryGetIntValueFromXML("//root/Sound/BackgroundMusicVolume", navigator, ref BackgroundMusicVolume);
|
||||
CHelper.TryGetEnumValueFromXML("//root/Sound/BackgroundMusicSource", navigator, ref BackgroundMusicSource);
|
||||
#endregion Sound
|
||||
|
||||
#region Game
|
||||
@@ -411,7 +446,10 @@ namespace Vocaluxe.Base
|
||||
|
||||
writer.WriteComment("TextureQuality: " + ListStrings(Enum.GetNames(typeof(ETextureQuality))));
|
||||
writer.WriteElementString("TextureQuality", Enum.GetName(typeof(ETextureQuality), TextureQuality));
|
||||
|
||||
|
||||
writer.WriteComment("CoverSize (pixels): 32, 64, 128, 256, 512, 1024 (default: 128)");
|
||||
writer.WriteElementString("CoverSize", CoverSize.ToString());
|
||||
|
||||
writer.WriteComment("Screen width and height (pixels)");
|
||||
writer.WriteElementString("ScreenW", ScreenW.ToString());
|
||||
writer.WriteElementString("ScreenH", ScreenH.ToString());
|
||||
@@ -473,6 +511,21 @@ namespace Vocaluxe.Base
|
||||
writer.WriteComment("RecordLib: " + ListStrings(Enum.GetNames(typeof(ERecordLib))));
|
||||
writer.WriteElementString("RecordLib", Enum.GetName(typeof(ERecordLib), RecordLib));
|
||||
|
||||
writer.WriteComment("AudioBufferSize: " + ListStrings(Enum.GetNames(typeof(EBufferSize))));
|
||||
writer.WriteElementString("AudioBufferSize", Enum.GetName(typeof(EBufferSize), AudioBufferSize));
|
||||
|
||||
writer.WriteComment("AudioLatency from -500 to 500 ms");
|
||||
writer.WriteElementString("AudioLatency", AudioLatency.ToString());
|
||||
|
||||
writer.WriteComment("Background Music");
|
||||
writer.WriteElementString("BackgroundMusic", Enum.GetName(typeof(EOffOn), BackgroundMusic));
|
||||
|
||||
writer.WriteComment("Background Music Volume from 0 to 100");
|
||||
writer.WriteElementString("BackgroundMusicVolume", BackgroundMusicVolume.ToString());
|
||||
|
||||
writer.WriteComment("Background Music Source");
|
||||
writer.WriteElementString("BackgroundMusicSource", Enum.GetName(typeof(EBackgroundMusicSource), BackgroundMusicSource));
|
||||
|
||||
writer.WriteEndElement();
|
||||
#endregion Sound
|
||||
|
||||
|
||||
@@ -238,13 +238,13 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
_Cover.Clear();
|
||||
List<string> cover = CHelper.GetValuesFromXML("Cover", navigator);
|
||||
for (int i = 1; i <= cover.Count; i++)
|
||||
for (int i = 0; i < cover.Count; i++)
|
||||
{
|
||||
SCover sk = new SCover();
|
||||
string name = String.Empty;
|
||||
string value = String.Empty;
|
||||
CHelper.GetValueFromXML("//root/Cover/Cover" + i + "/Name", navigator, ref name, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Cover/Cover" + i + "/Path", navigator, ref value, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Cover/" + cover[i] + "/Name", navigator, ref name, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Cover/" + cover[i] + "/Path", navigator, ref value, String.Empty);
|
||||
sk.Name = name;
|
||||
sk.Value = Path.Combine(coverTheme.Folder,value);
|
||||
if (File.Exists(Path.Combine(CSettings.sFolderCover, Path.Combine(coverTheme.Folder, value))))
|
||||
|
||||
+960
-76
File diff suppressed because it is too large.
Load diff
+151
-146
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
using Vocaluxe.Lib.Draw;
|
||||
@@ -12,8 +13,6 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
static class CDraw
|
||||
{
|
||||
private static Object mutex = new object();
|
||||
|
||||
private static IDraw _Draw = null;
|
||||
|
||||
public static void InitDraw()
|
||||
@@ -23,11 +22,38 @@ namespace Vocaluxe.Base
|
||||
case ERenderer.TR_CONFIG_SOFTWARE:
|
||||
_Draw = new CDrawWinForm();
|
||||
break;
|
||||
|
||||
case ERenderer.TR_CONFIG_OPENGL:
|
||||
_Draw = new COpenGL();
|
||||
try
|
||||
{
|
||||
_Draw = new COpenGL();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message + " - Error in initializing of OpenGL. Please check whether" +
|
||||
" your graphic card drivers are up to date.");
|
||||
CLog.LogError(e.Message + " - Error in initializing of OpenGL. Please check whether" +
|
||||
" your graphic card drivers are up to date.");
|
||||
Environment.Exit(Environment.ExitCode);
|
||||
}
|
||||
break;
|
||||
|
||||
case ERenderer.TR_CONFIG_DIRECT3D:
|
||||
_Draw = new CDirect3D();
|
||||
try
|
||||
{
|
||||
_Draw = new CDirect3D();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show(e.Message + " - Error in initializing of Direct3D. Please check if " +
|
||||
"your DirectX redistributables and graphic card drivers are up to date. You can " +
|
||||
"download the DirectX runtimes at http://www.microsoft.com/download/en/details.aspx?id=8109",
|
||||
CSettings.sProgramName, MessageBoxButtons.OK, MessageBoxIcon.Error);
|
||||
CLog.LogError(e.Message + " - Error in initializing of Direct3D. Please check if " +
|
||||
"your DirectX redistributables and graphic card drivers are up to date. You can " +
|
||||
"download the DirectX runtimes at http://www.microsoft.com/download/en/details.aspx?id=8109");
|
||||
Environment.Exit(Environment.ExitCode);
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -50,259 +76,177 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static int GetScreenWidth()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.GetScreenWidth();
|
||||
}
|
||||
return _Draw.GetScreenWidth();
|
||||
}
|
||||
|
||||
public static int GetScreenHeight()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.GetScreenHeight();
|
||||
}
|
||||
return _Draw.GetScreenHeight();
|
||||
}
|
||||
|
||||
public static RectangleF GetTextBounds(CText text)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.GetTextBounds(text);
|
||||
}
|
||||
return _Draw.GetTextBounds(text);
|
||||
}
|
||||
|
||||
public static RectangleF GetTextBounds(CText text, float Height)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.GetTextBounds(text, Height);
|
||||
}
|
||||
return _Draw.GetTextBounds(text, Height);
|
||||
}
|
||||
|
||||
public static void DrawLine(int a, int r, int g, int b, int w, int x1, int y1, int x2, int y2)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawLine(a, r, g, b, w, x1, y1, x2, y2);
|
||||
}
|
||||
_Draw.DrawLine(a, r, g, b, w, x1, y1, x2, y2);
|
||||
}
|
||||
|
||||
public static void DrawRect(SColorF Color, SRectF Rect, float Thickness)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
if (Thickness <= 0f)
|
||||
return;
|
||||
if (Thickness <= 0f)
|
||||
return;
|
||||
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y - Thickness / 2, Rect.W + Thickness, Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y + Rect.H - Thickness / 2, Rect.W + Thickness, Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y - Thickness / 2, Thickness, Rect.H + Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X + Rect.W - Thickness / 2, Rect.Y - Thickness / 2, Thickness, Rect.H + Thickness, Rect.Z));
|
||||
}
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y - Thickness / 2, Rect.W + Thickness, Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y + Rect.H - Thickness / 2, Rect.W + Thickness, Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X - Thickness / 2, Rect.Y - Thickness / 2, Thickness, Rect.H + Thickness, Rect.Z));
|
||||
_Draw.DrawColor(Color, new SRectF(Rect.X + Rect.W - Thickness / 2, Rect.Y - Thickness / 2, Thickness, Rect.H + Thickness, Rect.Z));
|
||||
}
|
||||
|
||||
public static void DrawColor(SColorF color, SRectF rect)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawColor(color, rect);
|
||||
}
|
||||
_Draw.DrawColor(color, rect);
|
||||
}
|
||||
|
||||
public static void ClearScreen()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.ClearScreen();
|
||||
}
|
||||
_Draw.ClearScreen();
|
||||
}
|
||||
|
||||
public static STexture CopyScreen()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.CopyScreen();
|
||||
}
|
||||
return _Draw.CopyScreen();
|
||||
}
|
||||
|
||||
public static void CopyScreen(ref STexture Texture)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.CopyScreen(ref Texture);
|
||||
}
|
||||
_Draw.CopyScreen(ref Texture);
|
||||
}
|
||||
|
||||
public static void MakeScreenShot()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.MakeScreenShot();
|
||||
}
|
||||
_Draw.MakeScreenShot();
|
||||
}
|
||||
|
||||
// Draw Basic Text (must be deleted later)
|
||||
public static void DrawText(string Text, int x, int y, int h)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawText(Text, x, y, h);
|
||||
}
|
||||
_Draw.DrawText(Text, x, y, h);
|
||||
}
|
||||
|
||||
public static STexture AddTexture(Bitmap Bitmap)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.AddTexture(Bitmap);
|
||||
}
|
||||
return _Draw.AddTexture(Bitmap);
|
||||
}
|
||||
|
||||
public static STexture AddTexture(string TexturePath)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.AddTexture(TexturePath);
|
||||
}
|
||||
return _Draw.AddTexture(TexturePath);
|
||||
}
|
||||
|
||||
public static STexture AddTexture(string TexturePath, int MaxSize)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
if (MaxSize == 0)
|
||||
return _Draw.AddTexture(TexturePath);
|
||||
if (MaxSize == 0)
|
||||
return _Draw.AddTexture(TexturePath);
|
||||
|
||||
if (!System.IO.File.Exists(TexturePath))
|
||||
return new STexture(-1);
|
||||
if (!System.IO.File.Exists(TexturePath))
|
||||
return new STexture(-1);
|
||||
|
||||
Bitmap origin = new Bitmap(TexturePath);
|
||||
int w = MaxSize;
|
||||
int h = MaxSize;
|
||||
Bitmap origin = new Bitmap(TexturePath);
|
||||
int w = MaxSize;
|
||||
int h = MaxSize;
|
||||
|
||||
if (origin.Width >= origin.Height && origin.Width > w)
|
||||
h = (int)Math.Round((float)w / origin.Width * origin.Height);
|
||||
else if (origin.Height > origin.Width && origin.Height > h)
|
||||
w = (int)Math.Round((float)h / origin.Height * origin.Width);
|
||||
if (origin.Width >= origin.Height && origin.Width > w)
|
||||
h = (int)Math.Round((float)w / origin.Width * origin.Height);
|
||||
else if (origin.Height > origin.Width && origin.Height > h)
|
||||
w = (int)Math.Round((float)h / origin.Height * origin.Width);
|
||||
|
||||
Bitmap bmp = new Bitmap(origin, w, h);
|
||||
STexture tex = _Draw.AddTexture(bmp);
|
||||
bmp.Dispose();
|
||||
return tex;
|
||||
}
|
||||
Bitmap bmp = new Bitmap(origin, w, h);
|
||||
STexture tex = _Draw.AddTexture(bmp);
|
||||
bmp.Dispose();
|
||||
return tex;
|
||||
}
|
||||
|
||||
public static STexture AddTexture(int W, int H, IntPtr Data)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.AddTexture(W, H, Data);
|
||||
}
|
||||
return _Draw.AddTexture(W, H, Data);
|
||||
}
|
||||
|
||||
public static STexture AddTexture(int W, int H, ref byte[] Data)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.AddTexture(W, H, ref Data);
|
||||
}
|
||||
return _Draw.AddTexture(W, H, ref Data);
|
||||
}
|
||||
|
||||
public static STexture QuequeTexture(int W, int H, ref byte[] Data)
|
||||
{
|
||||
return _Draw.QuequeTexture(W, H, ref Data);
|
||||
}
|
||||
|
||||
public static bool UpdateTexture(ref STexture Texture, ref byte[] Data)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.UpdateTexture(ref Texture, ref Data);
|
||||
}
|
||||
return _Draw.UpdateTexture(ref Texture, ref Data);
|
||||
}
|
||||
|
||||
public static bool UpdateTexture(ref STexture Texture, IntPtr Data)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.UpdateTexture(ref Texture, Data);
|
||||
}
|
||||
return _Draw.UpdateTexture(ref Texture, Data);
|
||||
}
|
||||
|
||||
public static void RemoveTexture(ref STexture Texture)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.RemoveTexture(ref Texture);
|
||||
}
|
||||
_Draw.RemoveTexture(ref Texture);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture);
|
||||
}
|
||||
_Draw.DrawTexture(Texture);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect, SColorF color)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect, color);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect, color);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect, SColorF color, SRectF bounds)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect, color, bounds);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect, color, bounds);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect, SColorF color,bool mirrored)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect, color, mirrored);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect, color, mirrored);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect, SColorF color, SRectF bounds, bool mirrored)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect, color, bounds, mirrored);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect, color, bounds, mirrored);
|
||||
}
|
||||
|
||||
public static void DrawTexture(STexture Texture, SRectF rect, SColorF color, float begin, float end)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTexture(Texture, rect, color, begin, end);
|
||||
}
|
||||
_Draw.DrawTexture(Texture, rect, color, begin, end);
|
||||
}
|
||||
|
||||
public static void DrawTextureReflection(STexture Texture, SRectF rect, SColorF color, SRectF bounds, float space, float height)
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
_Draw.DrawTextureReflection(Texture, rect, color, bounds, space, height);
|
||||
}
|
||||
_Draw.DrawTextureReflection(Texture, rect, color, bounds, space, height);
|
||||
}
|
||||
|
||||
public static int TextureCount()
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
return _Draw.TextureCount();
|
||||
}
|
||||
return _Draw.TextureCount();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -319,6 +263,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
#region private vars
|
||||
private string _TextureName;
|
||||
private STexture _Texture;
|
||||
private SRectF _Rect;
|
||||
private float _Size;
|
||||
private SColorF _Color;
|
||||
@@ -333,12 +278,12 @@ namespace Vocaluxe.Base
|
||||
private float _Vsize; //size changing speed: period [s]
|
||||
private float _LastTime;
|
||||
private EParticeType _Type;
|
||||
|
||||
|
||||
private Stopwatch _Timer;
|
||||
#endregion private vars
|
||||
|
||||
#region public vars
|
||||
public bool Visible;
|
||||
//public bool Visible;
|
||||
public float Alpha2 = 1f;
|
||||
|
||||
public float X
|
||||
@@ -386,6 +331,7 @@ namespace Vocaluxe.Base
|
||||
public CParticle(string textureName, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize, EParticeType type)
|
||||
{
|
||||
_TextureName = textureName;
|
||||
_Texture = new STexture(-1);
|
||||
_Color = color;
|
||||
_Rect = new SRectF(x, y, size, size, z);
|
||||
_Size = size;
|
||||
@@ -403,6 +349,29 @@ namespace Vocaluxe.Base
|
||||
_MaxAge = maxage;
|
||||
_Rotation = (float)(CGame.Rand.NextDouble() * 360.0);
|
||||
}
|
||||
|
||||
public CParticle(STexture texture, SColorF color, float x, float y, float size, float maxage, float z, float vx, float vy, float vr, float vsize, EParticeType type)
|
||||
{
|
||||
_TextureName = String.Empty;
|
||||
_Texture = texture;
|
||||
_Color = color;
|
||||
_Rect = new SRectF(x, y, size, size, z);
|
||||
_Size = size;
|
||||
_Alpha = 1f;
|
||||
_Angle = 0f;
|
||||
_Vx = vx;
|
||||
_Vy = vy;
|
||||
_Vr = vr;
|
||||
_Vsize = vsize;
|
||||
_LastTime = 0f;
|
||||
_Type = type;
|
||||
|
||||
_Timer = new Stopwatch();
|
||||
_Age = 0f;
|
||||
_MaxAge = maxage;
|
||||
_Rotation = (float)(CGame.Rand.NextDouble() * 360.0);
|
||||
}
|
||||
|
||||
#endregion Constructors
|
||||
|
||||
public void Update()
|
||||
@@ -553,7 +522,10 @@ namespace Vocaluxe.Base
|
||||
|
||||
public void Draw()
|
||||
{
|
||||
CDraw.DrawTexture(CTheme.GetSkinTexture(_TextureName), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
|
||||
if (_TextureName != String.Empty)
|
||||
CDraw.DrawTexture(CTheme.GetSkinTexture(_TextureName), _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
|
||||
else
|
||||
CDraw.DrawTexture(_Texture, _Rect, new SColorF(_Color.R, _Color.G, _Color.B, _Color.A * Alpha2 * _Alpha));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -561,6 +533,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
private List<CParticle> _Stars;
|
||||
private string _TextureName;
|
||||
private STexture _Texture;
|
||||
private int _MaxNumber;
|
||||
private SRectF _Area;
|
||||
private SColorF _Color;
|
||||
@@ -579,12 +552,33 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
public SRectF Area
|
||||
{
|
||||
get { return _Area; }
|
||||
set { _Area = value; }
|
||||
}
|
||||
|
||||
public CParticleEffect(int MaxNumber, SColorF Color, SRectF Area, string TextureName, float Size, EParticeType Type)
|
||||
{
|
||||
_Stars = new List<CParticle>();
|
||||
_Area = Area;
|
||||
_Color = Color;
|
||||
_TextureName = TextureName;
|
||||
_Texture = new STexture(-1);
|
||||
_MaxNumber = MaxNumber;
|
||||
_Size = Size;
|
||||
_Type = Type;
|
||||
_SpawnTimer = new Stopwatch();
|
||||
_NextSpawnTime = 0f;
|
||||
}
|
||||
|
||||
public CParticleEffect(int MaxNumber, SColorF Color, SRectF Area, STexture texture, float Size, EParticeType Type)
|
||||
{
|
||||
_Stars = new List<CParticle>();
|
||||
_Area = Area;
|
||||
_Color = Color;
|
||||
_TextureName = String.Empty;
|
||||
_Texture = texture;
|
||||
_MaxNumber = MaxNumber;
|
||||
_Size = Size;
|
||||
_Type = Type;
|
||||
@@ -682,10 +676,21 @@ namespace Vocaluxe.Base
|
||||
if (h < 0)
|
||||
h = 0;
|
||||
|
||||
CParticle star = new CParticle(_TextureName, _Color,
|
||||
CGame.Rand.Next(w) + _Area.X - size / 4f,
|
||||
CGame.Rand.Next(h) + _Area.Y - size / 4f,
|
||||
size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
|
||||
CParticle star;
|
||||
if (_TextureName != String.Empty)
|
||||
{
|
||||
star = new CParticle(_TextureName, _Color,
|
||||
CGame.Rand.Next(w) + _Area.X - size / 4f,
|
||||
CGame.Rand.Next(h) + _Area.Y - size / 4f,
|
||||
size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
|
||||
}
|
||||
else
|
||||
{
|
||||
star = new CParticle(_Texture, _Color,
|
||||
CGame.Rand.Next(w) + _Area.X - size / 4f,
|
||||
CGame.Rand.Next(h) + _Area.Y - size / 4f,
|
||||
size, lifetime, _Area.Z, vx, vy, vr, vsize, _Type);
|
||||
}
|
||||
|
||||
_Stars.Add(star);
|
||||
}
|
||||
|
||||
+114
-11
@@ -2,6 +2,7 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.Drawing.Drawing2D;
|
||||
using System.Drawing.Imaging;
|
||||
using System.Drawing.Text;
|
||||
using System.IO;
|
||||
@@ -11,6 +12,7 @@ using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using Vocaluxe.Lib.Draw;
|
||||
using Vocaluxe.Menu;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
{
|
||||
@@ -31,13 +33,14 @@ namespace Vocaluxe.Base
|
||||
|
||||
class CGlyph
|
||||
{
|
||||
public readonly float SIZEh = 100f;
|
||||
public readonly float SIZEh = 50f;
|
||||
public STexture Texture;
|
||||
public char Chr;
|
||||
public int width;
|
||||
|
||||
public CGlyph(char chr)
|
||||
{
|
||||
float outline = CFonts.Outline;
|
||||
TextFormatFlags flags = TextFormatFlags.NoPadding | TextFormatFlags.NoPrefix;
|
||||
|
||||
float factor = GetFactor(chr, flags);
|
||||
@@ -53,19 +56,53 @@ namespace Vocaluxe.Base
|
||||
g.Dispose();
|
||||
bmp.Dispose();
|
||||
|
||||
bmp = new Bitmap((int)(sizeB.Width * 1.5f), sizeB.Height);
|
||||
bmp = new Bitmap((int)(sizeB.Width * 2f), sizeB.Height);
|
||||
g = System.Drawing.Graphics.FromImage(bmp);
|
||||
g.Clear(System.Drawing.Color.Transparent);
|
||||
|
||||
g.SmoothingMode = SmoothingMode.AntiAlias;
|
||||
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
|
||||
g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;
|
||||
CFonts.Height = SIZEh;
|
||||
fo = CFonts.GetFont();
|
||||
g.DrawString(chr.ToString(), fo, Brushes.White, new PointF((sizeB.Width - size.Width) / 2f, (sizeB.Height - size.Height - (size.Height + SIZEh/4f) * (1f - factor)) / 2f));
|
||||
|
||||
PointF point = new PointF(
|
||||
outline * Math.Abs(sizeB.Width - size.Width) + (sizeB.Width - size.Width) / 2f + SIZEh / 5f,
|
||||
(sizeB.Height - size.Height - (size.Height + SIZEh/4f) * (1f - factor)) / 2f);
|
||||
|
||||
GraphicsPath path = new GraphicsPath();
|
||||
path.AddString(
|
||||
chr.ToString(),
|
||||
fo.FontFamily,
|
||||
(int)fo.Style,
|
||||
SIZEh,
|
||||
point,
|
||||
new StringFormat());
|
||||
|
||||
Pen pen = new Pen(
|
||||
Color.FromArgb(
|
||||
(int)CFonts.OutlineColor.A * 255,
|
||||
(int)CFonts.OutlineColor.R * 255,
|
||||
(int)CFonts.OutlineColor.G * 255,
|
||||
(int)CFonts.OutlineColor.B * 255),
|
||||
SIZEh * outline);
|
||||
|
||||
pen.LineJoin = LineJoin.Round;
|
||||
g.DrawPath(pen, path);
|
||||
g.FillPath(Brushes.White, path);
|
||||
|
||||
/*
|
||||
g.DrawString(
|
||||
chr.ToString(),
|
||||
fo,
|
||||
Brushes.White,
|
||||
point);
|
||||
* */
|
||||
|
||||
Texture = CDraw.AddTexture(bmp);
|
||||
|
||||
//bmp.Save("test.png", ImageFormat.Png);
|
||||
Chr = chr;
|
||||
width = (int)(sizeB.Width * Texture.width/factor / bmp.Width);
|
||||
width = (int)((1f + outline / 2f) * sizeB.Width * Texture.width/factor / bmp.Width);
|
||||
|
||||
bmp.Dispose();
|
||||
g.Dispose();
|
||||
@@ -97,7 +134,7 @@ namespace Vocaluxe.Base
|
||||
sizeB = TextRenderer.MeasureText(g, chr.ToString(), fo, new Size(int.MaxValue, int.MaxValue), flags);
|
||||
//size = g.MeasureString(chr.ToString(), fo);
|
||||
float h_style = sizeB.Height;
|
||||
|
||||
g.Dispose();
|
||||
return h_normal / h_style;
|
||||
}
|
||||
}
|
||||
@@ -146,7 +183,8 @@ namespace Vocaluxe.Base
|
||||
CFonts.Height = h;
|
||||
CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]];
|
||||
float factor = h / glyph.Texture.height;
|
||||
CDraw.DrawTexture(glyph.Texture, new SRectF(x, y, glyph.Texture.width * factor, h, z), color);
|
||||
float d = glyph.SIZEh / 5f * factor;
|
||||
CDraw.DrawTexture(glyph.Texture, new SRectF(x - d, y, glyph.Texture.width * factor, h, z), color);
|
||||
}
|
||||
|
||||
public void DrawGlyphReflection(char chr, float x, float y, float h, float z, SColorF color, float rspace, float rheight)
|
||||
@@ -156,7 +194,8 @@ namespace Vocaluxe.Base
|
||||
CFonts.Height = h;
|
||||
CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]];
|
||||
float factor = h / glyph.Texture.height;
|
||||
SRectF rect = new SRectF(x, y, glyph.Texture.width * factor, h, z);
|
||||
float d = glyph.SIZEh / 5f * factor;
|
||||
SRectF rect = new SRectF(x - d, y, glyph.Texture.width * factor, h, z);
|
||||
CDraw.DrawTextureReflection(glyph.Texture, rect, color, rect, rspace, rheight);
|
||||
}
|
||||
|
||||
@@ -168,8 +207,9 @@ namespace Vocaluxe.Base
|
||||
CGlyph glyph = _Glyphs[(int)_htGlyphs[chr]];
|
||||
float factor = h / glyph.Texture.height;
|
||||
float width = glyph.Texture.width * factor;
|
||||
|
||||
CDraw.DrawTexture(glyph.Texture, new SRectF(x, y, width, h, z), color, begin, end);
|
||||
float d = glyph.SIZEh / 5f * factor;
|
||||
|
||||
CDraw.DrawTexture(glyph.Texture, new SRectF(x - d, y, width, h, z), color, begin, end);
|
||||
}
|
||||
|
||||
public float GetWidth(char chr)
|
||||
@@ -215,6 +255,9 @@ namespace Vocaluxe.Base
|
||||
public string FileBold;
|
||||
public string FileBoldItalic;
|
||||
|
||||
public float Outline; //0..1, 0=not outline 1=100% outline
|
||||
public SColorF OutlineColor;
|
||||
|
||||
public CFont Normal;
|
||||
public CFont Italic;
|
||||
public CFont Bold;
|
||||
@@ -252,6 +295,30 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
|
||||
public static float Outline
|
||||
{
|
||||
get { return _Fonts[_CurrentFont].Outline; }
|
||||
set
|
||||
{
|
||||
SFont font = _Fonts[_CurrentFont];
|
||||
font.Outline = value;
|
||||
if (font.Outline < 0f)
|
||||
font.Outline = 0f;
|
||||
if (font.Outline > 1f)
|
||||
font.Outline = 1f;
|
||||
}
|
||||
}
|
||||
|
||||
public static SColorF OutlineColor
|
||||
{
|
||||
get { return _Fonts[_CurrentFont].OutlineColor; }
|
||||
set
|
||||
{
|
||||
SFont font = _Fonts[_CurrentFont];
|
||||
font.OutlineColor = value;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
_settings.Indent = true;
|
||||
@@ -485,7 +552,18 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public static RectangleF GetTextBounds(CText text)
|
||||
{
|
||||
return GetTextBounds(text, text.Height);
|
||||
}
|
||||
|
||||
public static RectangleF GetTextBounds(CText text, float height)
|
||||
{
|
||||
Height = height;
|
||||
return new RectangleF(text.X, text.Y, GetTextWidth(CLanguage.Translate(text.Text)), GetTextHeight(CLanguage.Translate(text.Text)));
|
||||
}
|
||||
|
||||
public static float GetTextWidth(string text)
|
||||
{
|
||||
float dx = 0;
|
||||
@@ -610,6 +688,15 @@ namespace Vocaluxe.Base
|
||||
f = new CFont(value);
|
||||
sf.BoldItalic = f;
|
||||
|
||||
sf.Outline = 0f;
|
||||
CHelper.TryGetFloatValueFromXML("//root/Font" + i.ToString() + "/Outline", navigator, ref sf.Outline);
|
||||
|
||||
sf.OutlineColor = new SColorF(0f, 0f, 0f, 1f);
|
||||
CHelper.TryGetFloatValueFromXML("//root/Font" + i.ToString() + "/OutlineColorR", navigator, ref sf.OutlineColor.R);
|
||||
CHelper.TryGetFloatValueFromXML("//root/Font" + i.ToString() + "/OutlineColorG", navigator, ref sf.OutlineColor.G);
|
||||
CHelper.TryGetFloatValueFromXML("//root/Font" + i.ToString() + "/OutlineColorB", navigator, ref sf.OutlineColor.B);
|
||||
CHelper.TryGetFloatValueFromXML("//root/Font" + i.ToString() + "/OutlineColorA", navigator, ref sf.OutlineColor.A);
|
||||
|
||||
_Fonts.Add(sf);
|
||||
i++;
|
||||
}
|
||||
@@ -662,6 +749,15 @@ namespace Vocaluxe.Base
|
||||
f = new CFont(value);
|
||||
sf.BoldItalic = f;
|
||||
|
||||
sf.Outline = 0f;
|
||||
ok &= CHelper.TryGetFloatValueFromXML("//root/Fonts/Font" + i.ToString() + "/Outline", navigator, ref sf.Outline);
|
||||
|
||||
sf.OutlineColor = new SColorF(0f, 0f, 0f, 1f);
|
||||
ok &= CHelper.TryGetFloatValueFromXML("//root/Fonts/Font" + i.ToString() + "/OutlineColorR", navigator, ref sf.OutlineColor.R);
|
||||
ok &= CHelper.TryGetFloatValueFromXML("//root/Fonts/Font" + i.ToString() + "/OutlineColorG", navigator, ref sf.OutlineColor.G);
|
||||
ok &= CHelper.TryGetFloatValueFromXML("//root/Fonts/Font" + i.ToString() + "/OutlineColorB", navigator, ref sf.OutlineColor.B);
|
||||
ok &= CHelper.TryGetFloatValueFromXML("//root/Fonts/Font" + i.ToString() + "/OutlineColorA", navigator, ref sf.OutlineColor.A);
|
||||
|
||||
if (ok)
|
||||
_Fonts.Add(sf);
|
||||
else
|
||||
@@ -698,6 +794,13 @@ namespace Vocaluxe.Base
|
||||
|
||||
writer.WriteElementString("Name", _Fonts[Index].Name);
|
||||
writer.WriteElementString("Folder", _Fonts[Index].Folder);
|
||||
|
||||
writer.WriteElementString("Outline", _Fonts[Index].Outline.ToString("#0.00"));
|
||||
writer.WriteElementString("ColorR", _Fonts[Index].OutlineColor.R.ToString("#0.00"));
|
||||
writer.WriteElementString("ColorG", _Fonts[Index].OutlineColor.G.ToString("#0.00"));
|
||||
writer.WriteElementString("ColorB", _Fonts[Index].OutlineColor.B.ToString("#0.00"));
|
||||
writer.WriteElementString("ColorA", _Fonts[Index].OutlineColor.A.ToString("#0.00"));
|
||||
|
||||
writer.WriteElementString("FileNormal", _Fonts[Index].FileNormal);
|
||||
writer.WriteElementString("FileBold", _Fonts[Index].FileBold);
|
||||
writer.WriteElementString("FileItalic", _Fonts[Index].FileItalic);
|
||||
|
||||
+39
-51
@@ -229,7 +229,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static void UpdatePoints(float Time)
|
||||
{
|
||||
const bool DEBUG_HIT = false;
|
||||
bool DEBUG_HIT = false;
|
||||
|
||||
CSong song = _GameMode.GetSong();
|
||||
|
||||
@@ -247,72 +247,60 @@ namespace Vocaluxe.Base
|
||||
|
||||
for (int p = 0; p < _NumPlayer; p++)
|
||||
{
|
||||
CSound.AnalyzeBuffer(p);
|
||||
|
||||
if (CSound.RecordToneValid(p) || DEBUG_HIT)
|
||||
|
||||
for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++)
|
||||
{
|
||||
for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++)
|
||||
{
|
||||
CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line;
|
||||
int Line = -1;
|
||||
CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line;
|
||||
int Line = -1;
|
||||
|
||||
for (int j = 0; j < lines.Length; j++)
|
||||
for (int j = 0; j < lines.Length; j++)
|
||||
{
|
||||
if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat)
|
||||
{
|
||||
if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat)
|
||||
{
|
||||
Line = j;
|
||||
break;
|
||||
}
|
||||
Line = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (Line >= 0)
|
||||
{
|
||||
if (Line != _Player[p].CurrentLine)
|
||||
_Player[p].CurrentNote = -1;
|
||||
|
||||
_Player[p].CurrentLine = Line;
|
||||
|
||||
while (_Player[p].SingLine.Count <= Line)
|
||||
{
|
||||
_Player[p].SingLine.Add(new CLine());
|
||||
}
|
||||
|
||||
if (Line >= 0)
|
||||
CNote[] notes = lines[Line].Notes;
|
||||
int Note = -1;
|
||||
for (int j = 0; j < notes.Length; j++)
|
||||
{
|
||||
if (Line != _Player[p].CurrentLine)
|
||||
_Player[p].CurrentNote = -1;
|
||||
|
||||
_Player[p].CurrentLine = Line;
|
||||
|
||||
while (_Player[p].SingLine.Count <= Line)
|
||||
if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat)
|
||||
{
|
||||
_Player[p].SingLine.Add(new CLine());
|
||||
Note = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
CNote[] notes = lines[Line].Notes;
|
||||
int Note = -1;
|
||||
for (int j = 0; j < notes.Length; j++)
|
||||
{
|
||||
if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat)
|
||||
{
|
||||
if (notes[j].PointsForBeat > 0)
|
||||
Note = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (Note >= 0)
|
||||
{
|
||||
_Player[p].CurrentNote = Note;
|
||||
|
||||
if (Note >= 0)
|
||||
if (Line == lines.Length - 1)
|
||||
{
|
||||
if (Line == lines.Length - 1)
|
||||
if (Note == lines[Line].NoteCount - 1)
|
||||
{
|
||||
if (Note == lines[Line].NoteCount - 1)
|
||||
{
|
||||
if (notes[Note].EndBeat == beat)
|
||||
_Player[p].SongFinished = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Note >= 0 && notes[Note].PointsForBeat > 0)
|
||||
CSound.AnalyzeBuffer(p);
|
||||
if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT))
|
||||
{
|
||||
_Player[p].CurrentNote = Note;
|
||||
|
||||
if (Line == lines.Length - 1)
|
||||
{
|
||||
if (Note == lines[Line].NoteCount - 1)
|
||||
{
|
||||
if (notes[Note].EndBeat == beat)
|
||||
_Player[p].SongFinished = true;
|
||||
}
|
||||
}
|
||||
|
||||
int Tone = notes[Note].Tone;
|
||||
int TonePlayer = CSound.RecordGetTone(p);
|
||||
|
||||
@@ -383,8 +371,8 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
_OldBeatD = _CurrentBeatD;
|
||||
|
||||
@@ -77,6 +77,9 @@ namespace Vocaluxe.Base
|
||||
|
||||
public static string Translate(string KeyWord)
|
||||
{
|
||||
if (KeyWord == null)
|
||||
return null;
|
||||
|
||||
if (KeyWord.Length < 3)
|
||||
return KeyWord;
|
||||
|
||||
|
||||
+19
-7
@@ -22,8 +22,14 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
if (_LogFile != null)
|
||||
{
|
||||
_LogFile.Flush();
|
||||
_LogFile.Close();
|
||||
try
|
||||
{
|
||||
_LogFile.Flush();
|
||||
_LogFile.Close();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +38,14 @@ namespace Vocaluxe.Base
|
||||
if (_LogFile == null)
|
||||
Open();
|
||||
|
||||
_LogFile.WriteLine(Text);
|
||||
_LogFile.Flush();
|
||||
try
|
||||
{
|
||||
_LogFile.WriteLine(Text);
|
||||
_LogFile.Flush();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private void Open()
|
||||
@@ -56,7 +68,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
private static int _NumErrors;
|
||||
private static Stopwatch[] _BenchmarkTimer;
|
||||
private static long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
|
||||
private static double nanosecPerTick = (1000.0 * 1000.0 * 1000.0) / Stopwatch.Frequency;
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
@@ -129,8 +141,8 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
|
||||
float ms;
|
||||
if (Stopwatch.IsHighResolution)
|
||||
ms = (float)(((double)nanosecPerTick * (double)_BenchmarkTimer[BenchmarkNr].ElapsedTicks) / (1000.0 * 1000.0));
|
||||
if (Stopwatch.IsHighResolution && nanosecPerTick != 0.0)
|
||||
ms = (float)((nanosecPerTick * _BenchmarkTimer[BenchmarkNr].ElapsedTicks) / (1000.0 * 1000.0));
|
||||
else
|
||||
ms = (float)_BenchmarkTimer[BenchmarkNr].ElapsedMilliseconds;
|
||||
|
||||
|
||||
@@ -237,7 +237,7 @@ namespace Vocaluxe.Base
|
||||
public static bool IsGuestProfile(int ProfileNr)
|
||||
{
|
||||
if (ProfileNr < 0 || ProfileNr >= _Profiles.Count)
|
||||
return false;
|
||||
return true; // this will prevent from saving dummy profiles to highscore db
|
||||
|
||||
return _Profiles[ProfileNr].GuestProfile == EOffOn.TR_CONFIG_ON;
|
||||
}
|
||||
@@ -246,7 +246,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
if (ProfileNr < 0 || ProfileNr >= _Profiles.Count)
|
||||
return false;
|
||||
return _Profiles[ProfileNr].GuestProfile == EOffOn.TR_CONFIG_ON;
|
||||
return _Profiles[ProfileNr].Active == EOffOn.TR_CONFIG_ON;
|
||||
}
|
||||
|
||||
public static void SetAvatar(int ProfileNr, int AvatarNr)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace Vocaluxe.Base
|
||||
@@ -19,8 +20,23 @@ namespace Vocaluxe.Base
|
||||
Release
|
||||
}
|
||||
|
||||
enum EArch
|
||||
{
|
||||
x86,
|
||||
x64
|
||||
}
|
||||
|
||||
static class CSettings
|
||||
{
|
||||
#if ARCH_X86
|
||||
public const EArch ARCH = EArch.x86;
|
||||
#endif
|
||||
|
||||
#if ARCH_X64
|
||||
public const EArch ARCH = EArch.x64;
|
||||
#endif
|
||||
|
||||
|
||||
public static EGameState GameState = EGameState.Start;
|
||||
|
||||
public const string sProgramName = "Vocaluxe";
|
||||
@@ -29,12 +45,13 @@ namespace Vocaluxe.Base
|
||||
public const int iVersionMajor = 0;
|
||||
public const int iVersionMinor = 1; // milestones
|
||||
public const int iVersionSub = 0; // steps
|
||||
public const ERevision VersionRevision = ERevision.Alpha;
|
||||
public const ERevision VersionRevision = ERevision.Release;
|
||||
|
||||
public const int iBuild = 50; // Increase on every published version! Never Reset!
|
||||
public const int iBuild = 60; // Increase on every published version! Never Reset!
|
||||
|
||||
public const int iDatabaseHighscoreVersion = 1;
|
||||
public const int iDatabaseCoverVersion = 1;
|
||||
public const int iDatabaseCreditsRessourcesVersion = 1;
|
||||
|
||||
|
||||
public static int iRenderW = 1280;
|
||||
@@ -44,16 +61,20 @@ namespace Vocaluxe.Base
|
||||
public static int zFar = 100;
|
||||
|
||||
public static bool bFullScreen = false;
|
||||
public static int iVertexBufferElements = 10000;
|
||||
|
||||
public const string sIcon = "Vocaluxe.ico";
|
||||
public const string sLogo = "Logo.png";
|
||||
public const string FallbackLanguage = "English";
|
||||
public static string sBassRegistration = "Registration.xml";
|
||||
public static string sFileConfig = "Config.xml";
|
||||
public const string sFileCover = "Cover.xml";
|
||||
public const string sFileFonts = "Fonts.xml";
|
||||
|
||||
public const string sFileOldHighscoreDB = "Ultrastar.db";
|
||||
public static string sFileHighscoreDB = "HighscoreDB.sqlite";
|
||||
public const string sFileCoverDB = "CoverDB.sqlite";
|
||||
public const string sFileCreditsRessourcesDB = "CreditsRessourcesDB.sqlite";
|
||||
public const string sFilePerformanceLog = "Performance.log";
|
||||
public const string sFileErrorLog = "Error.log";
|
||||
public const string sFileBenchmarkLog = "Benchmark.log";
|
||||
@@ -61,6 +82,7 @@ namespace Vocaluxe.Base
|
||||
public const string sSoundT440 = "440Hz.mp3";
|
||||
|
||||
public const string sFolderCover = "Cover";
|
||||
public const string sFolderGraphics = "Graphics";
|
||||
public const string sFolderFonts = "Fonts";
|
||||
public const string sFolderThemes = "Themes";
|
||||
public const string sFolderSkins = "Skins";
|
||||
@@ -71,6 +93,7 @@ namespace Vocaluxe.Base
|
||||
public const string sFolderSounds = "Sounds";
|
||||
public const string sFolderLanguages = "Languages";
|
||||
public const string sFolderScreenshots = "Screenshots";
|
||||
public const string sFolderBackgroundMusic = "BackgroundMusic";
|
||||
|
||||
//public const String[] ToneStrings = new String[]{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
|
||||
public const int ToneMin = -36;
|
||||
@@ -89,13 +112,15 @@ namespace Vocaluxe.Base
|
||||
public const float LyricHelperMoveTime = 1.5f;
|
||||
public const float LyricHelperMinTime = 0.2f;
|
||||
|
||||
public const bool TabNavigation = false;
|
||||
|
||||
public static bool TabNavigation = false;
|
||||
|
||||
public const float BackgroundMusicFadeTime = 0.5f;
|
||||
|
||||
public static string GetVersionText()
|
||||
{
|
||||
string sVersion = "v" + iVersionMajor.ToString() + "." +
|
||||
iVersionMinor.ToString() + "." +
|
||||
iVersionSub.ToString();
|
||||
iVersionSub.ToString() + " (" + Enum.GetName(typeof(EArch), ARCH) + ")";
|
||||
|
||||
if (VersionRevision != ERevision.Release)
|
||||
sVersion += " " + GetVersionStatus() + String.Format(" ({0:0000)}", iBuild);
|
||||
@@ -137,5 +162,25 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
MouseMoveDiffMin = 3;
|
||||
}
|
||||
|
||||
public static void CreateFolders()
|
||||
{
|
||||
List<string> Folders = new List<string>();
|
||||
|
||||
Folders.Add(sFolderCover);
|
||||
Folders.Add(sFolderFonts);
|
||||
Folders.Add(sFolderProfiles);
|
||||
Folders.Add(sFolderSongs);
|
||||
Folders.Add(sFolderScreenshots);
|
||||
Folders.Add(sFolderBackgroundMusic);
|
||||
Folders.Add(sFolderSounds);
|
||||
|
||||
foreach (string folder in Folders)
|
||||
{
|
||||
string path = Path.Combine(Environment.CurrentDirectory, folder);
|
||||
if (!Directory.Exists(path))
|
||||
Directory.CreateDirectory(path);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+70
-17
@@ -4,6 +4,7 @@ using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading;
|
||||
|
||||
using Vocaluxe.Lib.Draw;
|
||||
using Vocaluxe.Lib.Song;
|
||||
@@ -60,6 +61,8 @@ namespace Vocaluxe.Base
|
||||
private static string _SearchFilter = String.Empty;
|
||||
private static EOffOn _Tabs = CConfig.Tabs;
|
||||
|
||||
private static Thread _CoverLoaderThread = new Thread(new ThreadStart(_LoadCover));
|
||||
|
||||
public static string SearchFilter
|
||||
{
|
||||
get { return _SearchFilter; }
|
||||
@@ -826,17 +829,49 @@ namespace Vocaluxe.Base
|
||||
CLog.StopBenchmark(2, "Sort Songs");
|
||||
Category = -1;
|
||||
_SongsLoaded = true;
|
||||
|
||||
if (CConfig.Renderer != ERenderer.TR_CONFIG_SOFTWARE && CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_ATSTART)
|
||||
{
|
||||
CLog.StartBenchmark(2, "Load Cover");
|
||||
for (int i = 0; i < _Songs.Count; i++)
|
||||
{
|
||||
CSong song = _Songs[i];
|
||||
|
||||
song.ReadNotes();
|
||||
STexture texture = song.CoverTextureSmall;
|
||||
song.CoverTextureBig = texture;
|
||||
_CoverLoadIndex++;
|
||||
}
|
||||
|
||||
_CoverLoaded = true;
|
||||
CDataBase.CommitCovers();
|
||||
CLog.StopBenchmark(2, "Load Cover");
|
||||
}
|
||||
CLog.StopBenchmark(1, "Load Songs ");
|
||||
}
|
||||
|
||||
public static void LoadCover(long WaitTime)
|
||||
public static void LoadCover(long WaitTime, int NumLoads)
|
||||
{
|
||||
if (CConfig.Renderer == ERenderer.TR_CONFIG_SOFTWARE)
|
||||
return; //should be removed as soon as the other renderer are ready for queque
|
||||
|
||||
if (!SongsLoaded)
|
||||
return;
|
||||
|
||||
if (CoverLoaded)
|
||||
return;
|
||||
|
||||
if (_CoverLoaderThread.ThreadState == System.Threading.ThreadState.Unstarted)
|
||||
{
|
||||
_CoverLoaderThread.Name = "CoverLoader";
|
||||
_CoverLoaderThread.Priority = ThreadPriority.BelowNormal;
|
||||
_CoverLoaderThread.IsBackground = true;
|
||||
_CoverLoaderThread.Start();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
|
||||
if (!_CoverLoadTimer.IsRunning)
|
||||
{
|
||||
_CoverLoadTimer.Reset();
|
||||
@@ -846,26 +881,44 @@ namespace Vocaluxe.Base
|
||||
STexture texture = new STexture(-1);
|
||||
if (_CoverLoadTimer.ElapsedMilliseconds >= WaitTime)
|
||||
{
|
||||
CSong song = new CSong();
|
||||
int i = GetNextSongWithoutCover(ref song);
|
||||
for (int i = 0; i < NumLoads; i++)
|
||||
{
|
||||
CSong song = new CSong();
|
||||
int n = GetNextSongWithoutCover(ref song);
|
||||
|
||||
if (i < 0)
|
||||
return;
|
||||
if (n < 0)
|
||||
return;
|
||||
|
||||
song.ReadNotes();
|
||||
texture = song.CoverTextureSmall;
|
||||
|
||||
SetCoverSmall(n, texture);
|
||||
SetCoverBig(n, texture);
|
||||
|
||||
if (CoverLoaded)
|
||||
CDataBase.CommitCovers();
|
||||
|
||||
_CoverLoadTimer.Reset();
|
||||
_CoverLoadTimer.Start();
|
||||
}
|
||||
}
|
||||
* */
|
||||
}
|
||||
|
||||
private static void _LoadCover()
|
||||
{
|
||||
for (int i = 0; i < _Songs.Count; i++)
|
||||
{
|
||||
CSong song = _Songs[i];
|
||||
|
||||
song.ReadNotes();
|
||||
if (song.CoverFileName != String.Empty)
|
||||
{
|
||||
if (!CDataBase.GetCover(Path.Combine(song.Folder, song.CoverFileName), ref texture, CConfig.CoverSize))
|
||||
texture = CCover.NoCover;
|
||||
}
|
||||
else
|
||||
texture = CCover.NoCover;
|
||||
SetCoverSmall(i, texture);
|
||||
SetCoverBig(i, texture);
|
||||
|
||||
_CoverLoadTimer.Reset();
|
||||
_CoverLoadTimer.Start();
|
||||
STexture texture = song.CoverTextureSmall;
|
||||
song.CoverTextureBig = texture;
|
||||
_CoverLoadIndex++;
|
||||
}
|
||||
|
||||
_CoverLoaded = true;
|
||||
CDataBase.CommitCovers();
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
-21
@@ -22,24 +22,16 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
switch (CConfig.PlayBackLib)
|
||||
{
|
||||
case EPlaybackLib.BASS:
|
||||
_Playback = new CBassPlay();
|
||||
break;
|
||||
|
||||
case EPlaybackLib.PortAudio:
|
||||
_Playback = new CPortAudioPlay();
|
||||
break;
|
||||
|
||||
case EPlaybackLib.NAudio:
|
||||
_Playback = new CNAudioPlay();
|
||||
break;
|
||||
|
||||
case EPlaybackLib.OpenAL:
|
||||
_Playback = new COpenALPlay();
|
||||
break;
|
||||
|
||||
default:
|
||||
_Playback = new CBassPlay();
|
||||
_Playback = new CPortAudioPlay();
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
@@ -101,6 +93,11 @@ namespace Vocaluxe.Base
|
||||
_Playback.Fade(Stream, TargetVolume, Seconds);
|
||||
}
|
||||
|
||||
public static void FadeAndPause(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
_Playback.FadeAndPause(Stream, TargetVolume, Seconds);
|
||||
}
|
||||
|
||||
public static void FadeAndStop(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
_Playback.FadeAndStop(Stream, TargetVolume, Seconds);
|
||||
@@ -181,16 +178,12 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
switch (CConfig.RecordLib)
|
||||
{
|
||||
case ERecordLib.BASS:
|
||||
_Record = new CBassRecord();
|
||||
break;
|
||||
|
||||
case ERecordLib.PortAudio:
|
||||
_Record = new CPortAudioRecord();
|
||||
break;
|
||||
|
||||
default:
|
||||
_Record = new CBassRecord();
|
||||
_Record = new CPortAudioRecord();
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -504,11 +497,11 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
get
|
||||
{
|
||||
long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
|
||||
double nanosecPerTick = (1000.0 * 1000.0 * 1000.0) / Stopwatch.Frequency;
|
||||
long ticks = _Timer.ElapsedTicks;
|
||||
float dt = _Timer.ElapsedMilliseconds / 1000f;
|
||||
|
||||
if (nanosecPerTick > 0L)
|
||||
if (Stopwatch.IsHighResolution && ticks != 0)
|
||||
dt = (float)(ticks * nanosecPerTick / 1000000000.0);
|
||||
|
||||
return _SetValue + dt;
|
||||
@@ -584,11 +577,11 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
get
|
||||
{
|
||||
long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
|
||||
double nanosecPerTick = (1000.0 * 1000.0 * 1000.0) / Stopwatch.Frequency;
|
||||
long ticks = _STimer.ElapsedTicks;
|
||||
float dt = _STimer.ElapsedMilliseconds / 1000f;
|
||||
|
||||
if (nanosecPerTick > 0L)
|
||||
if (Stopwatch.IsHighResolution && ticks != 0)
|
||||
dt = (float)(ticks * nanosecPerTick / 1000000000.0);
|
||||
|
||||
return _CurrentTime + dt;
|
||||
@@ -620,13 +613,13 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
_STimer.Stop();
|
||||
|
||||
long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
|
||||
double nanosecPerTick = (1000.0 * 1000.0 * 1000.0) / Stopwatch.Frequency;
|
||||
long ticks = _STimer.ElapsedTicks;
|
||||
float dt = _STimer.ElapsedMilliseconds / 1000f;
|
||||
|
||||
if (nanosecPerTick > 0L)
|
||||
if (Stopwatch.IsHighResolution && ticks != 0)
|
||||
dt = (float)(ticks * nanosecPerTick / 1000000000.0);
|
||||
|
||||
|
||||
float Ts = 0f;
|
||||
if (dt > 0)
|
||||
Ts = 1 / (_T / dt + 1);
|
||||
|
||||
+51
-34
@@ -2,6 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
@@ -45,7 +46,7 @@ namespace Vocaluxe.Base
|
||||
public string Path;
|
||||
public string FileName;
|
||||
|
||||
public List<SkinElement> SkinList;
|
||||
public Dictionary<string, SkinElement> SkinList;
|
||||
public List<SkinElement> VideoList;
|
||||
|
||||
public SColors ThemeColors;
|
||||
@@ -82,7 +83,7 @@ namespace Vocaluxe.Base
|
||||
static class CTheme
|
||||
{
|
||||
// Version number for main theme and skin files. Increment it, if you've changed something on the theme files!
|
||||
const int ThemeSystemVersion = 4;
|
||||
const int ThemeSystemVersion = 5;
|
||||
const int SkinSystemVersion = 3;
|
||||
|
||||
#region Vars
|
||||
@@ -163,30 +164,49 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
string value = String.Empty;
|
||||
|
||||
|
||||
// load skins/textures
|
||||
for (int i = 0; i < _Skins[index].SkinList.Count; i++)
|
||||
List<string> keys = new List<string>(_Skins[index].SkinList.Keys);
|
||||
|
||||
foreach (string name in keys)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Skins/" + _Skins[index].SkinList[i].Name, navigator, ref value, String.Empty);
|
||||
SkinElement sk = new SkinElement();
|
||||
sk.Name = _Skins[index].SkinList[i].Name;
|
||||
sk.Value = value;
|
||||
sk.VideoIndex = -1;
|
||||
sk.Texture = CDraw.AddTexture(Path.Combine(_Skins[index].Path, sk.Value));
|
||||
_Skins[index].SkinList[i] = sk;
|
||||
try
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Skins/" + name, navigator, ref value, String.Empty);
|
||||
SkinElement sk = _Skins[index].SkinList[name];
|
||||
sk.Value = value;
|
||||
sk.VideoIndex = -1;
|
||||
sk.Texture = CDraw.AddTexture(Path.Combine(_Skins[index].Path, sk.Value));
|
||||
_Skins[index].SkinList[name] = sk;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Error on loading texture \"" + name + "\": " + e.Message + e.StackTrace);
|
||||
CLog.LogError("Error on loading texture \"" + name + "\": " + e.Message + e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// load videos
|
||||
for (int i = 0; i < _Skins[index].VideoList.Count; i++)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Videos/" + _Skins[index].VideoList[i].Name, navigator, ref value, String.Empty);
|
||||
SkinElement sk = new SkinElement();
|
||||
sk.Name = _Skins[index].VideoList[i].Name;
|
||||
sk.Value = value;
|
||||
sk.VideoIndex = CVideo.VdLoad(Path.Combine(_Skins[index].Path, sk.Value));
|
||||
CVideo.VdSetLoop(sk.VideoIndex, true);
|
||||
CVideo.VdPause(sk.VideoIndex);
|
||||
sk.Texture = new STexture(-1);
|
||||
_Skins[index].VideoList[i] = sk;
|
||||
try
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Videos/" + _Skins[index].VideoList[i].Name, navigator, ref value, String.Empty);
|
||||
SkinElement sk = new SkinElement();
|
||||
sk.Name = _Skins[index].VideoList[i].Name;
|
||||
sk.Value = value;
|
||||
sk.VideoIndex = CVideo.VdLoad(Path.Combine(_Skins[index].Path, sk.Value));
|
||||
CVideo.VdSetLoop(sk.VideoIndex, true);
|
||||
CVideo.VdPause(sk.VideoIndex);
|
||||
sk.Texture = new STexture(-1);
|
||||
_Skins[index].VideoList[i] = sk;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
MessageBox.Show("Error on loading video \"" + _Skins[index].VideoList[i].Name + "\": " + e.Message + e.StackTrace);
|
||||
CLog.LogError("Error on loading video \"" + _Skins[index].VideoList[i].Name + "\": " + e.Message + e.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
// load colors
|
||||
@@ -199,9 +219,9 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
for (int i = 0; i < _Skins.Count; i++)
|
||||
{
|
||||
for (int j = 0; j < _Skins[i].SkinList.Count; j++)
|
||||
foreach (SkinElement sk in _Skins[i].SkinList.Values)
|
||||
{
|
||||
STexture Texture = _Skins[i].SkinList[j].Texture;
|
||||
STexture Texture = sk.Texture;
|
||||
CDraw.RemoveTexture(ref Texture);
|
||||
}
|
||||
|
||||
@@ -335,7 +355,7 @@ namespace Vocaluxe.Base
|
||||
#region Skins
|
||||
writer.WriteStartElement("Skins");
|
||||
|
||||
foreach (SkinElement element in _Skins[SkinIndex].SkinList)
|
||||
foreach (SkinElement element in _Skins[SkinIndex].SkinList.Values)
|
||||
{
|
||||
writer.WriteElementString(element.Name, element.Value);
|
||||
}
|
||||
@@ -482,17 +502,21 @@ namespace Vocaluxe.Base
|
||||
if (skin.Name != String.Empty)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Info/Author", navigator, ref skin.Author, String.Empty);
|
||||
CHelper.TryGetIntValueFromXML("//root/Info/SkinVersionMajor", navigator, ref skin.SkinVersionMajor);
|
||||
CHelper.TryGetIntValueFromXML("//root/Info/SkinVersionMinor", navigator, ref skin.SkinVersionMinor);
|
||||
|
||||
|
||||
skin.Path = path;
|
||||
skin.FileName = file;
|
||||
|
||||
skin.SkinList = new List<SkinElement>();
|
||||
skin.SkinList = new Dictionary<string, SkinElement>();
|
||||
List<string> names = CHelper.GetValuesFromXML("Skins", navigator);
|
||||
foreach (string str in names)
|
||||
{
|
||||
SkinElement sk = new SkinElement();
|
||||
sk.Name = str;
|
||||
sk.Value = String.Empty;
|
||||
skin.SkinList.Add(sk);
|
||||
skin.SkinList[str] = sk;
|
||||
}
|
||||
|
||||
skin.VideoList = new List<SkinElement>();
|
||||
@@ -569,16 +593,9 @@ namespace Vocaluxe.Base
|
||||
public static STexture GetSkinTexture(string TextureName)
|
||||
{
|
||||
int SkinIndex = GetSkinIndex();
|
||||
if (SkinIndex != -1)
|
||||
if (SkinIndex != -1 && TextureName != null && _Skins[SkinIndex].SkinList.ContainsKey(TextureName))
|
||||
{
|
||||
for (int i = 0; i < _Skins[SkinIndex].SkinList.Count; i++)
|
||||
{
|
||||
SkinElement sk = _Skins[SkinIndex].SkinList[i];
|
||||
if (sk.Name == TextureName)
|
||||
{
|
||||
return sk.Texture;
|
||||
}
|
||||
}
|
||||
return _Skins[SkinIndex].SkinList[TextureName].Texture;
|
||||
}
|
||||
return new STexture(-1);
|
||||
}
|
||||
@@ -595,7 +612,7 @@ namespace Vocaluxe.Base
|
||||
|
||||
private static string GetSkinFileName(string SkinName, int SkinIndex, bool ReturnPath)
|
||||
{
|
||||
foreach (SkinElement sk in _Skins[SkinIndex].SkinList)
|
||||
foreach (SkinElement sk in _Skins[SkinIndex].SkinList.Values)
|
||||
{
|
||||
if (sk.Name == SkinName)
|
||||
{
|
||||
|
||||
+24
-21
@@ -69,8 +69,11 @@ namespace Vocaluxe.Base
|
||||
public int Y;
|
||||
public bool LB; //left button click
|
||||
public bool RB; //right button click
|
||||
public bool MB; //middle button click
|
||||
|
||||
public bool LBH; //left button hold (when moving)
|
||||
public bool RBH; //right button hold (when moving)
|
||||
public bool MBH; //middle button hold (when moving)
|
||||
|
||||
public bool ModALT;
|
||||
public bool ModSHIFT;
|
||||
@@ -79,15 +82,17 @@ namespace Vocaluxe.Base
|
||||
public Modifier Mod;
|
||||
public int Wheel;
|
||||
|
||||
public MouseEvent(bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool rb, int wheel, bool lbh, bool rbh)
|
||||
public MouseEvent(bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool rb, int wheel, bool lbh, bool rbh, bool mb, bool mbh)
|
||||
{
|
||||
X = x;
|
||||
Y = y;
|
||||
LB = lb;
|
||||
RB = rb;
|
||||
MB = mb;
|
||||
|
||||
LBH = lbh;
|
||||
RBH = rbh;
|
||||
MBH = mbh;
|
||||
|
||||
ModALT = alt;
|
||||
ModSHIFT = shift;
|
||||
@@ -119,7 +124,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
private static Stopwatch _Stopwatch = new Stopwatch();
|
||||
private static float _fps = 0.0f;
|
||||
private static long nanosecPerTick = (1000L * 1000L * 1000L) / Stopwatch.Frequency;
|
||||
private static double nanosecPerTick = (1000.0 * 1000.0 * 1000.0) / Stopwatch.Frequency;
|
||||
|
||||
public static void Reset()
|
||||
{
|
||||
@@ -147,8 +152,9 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
if (_Stopwatch.IsRunning)
|
||||
{
|
||||
if (Stopwatch.IsHighResolution)
|
||||
return (float)(((double)nanosecPerTick * (double)_Stopwatch.ElapsedTicks) / (1000.0 * 1000.0));
|
||||
long ticks = _Stopwatch.ElapsedTicks;
|
||||
if (Stopwatch.IsHighResolution && ticks != 0)
|
||||
return (float)((nanosecPerTick * ticks) / (1000.0 * 1000.0));
|
||||
else
|
||||
return (float)_Stopwatch.ElapsedMilliseconds;
|
||||
}
|
||||
@@ -310,7 +316,7 @@ namespace Vocaluxe.Base
|
||||
class CMouse
|
||||
{
|
||||
private List<MouseEvent> _EventsPool;
|
||||
private List<MouseEvent> _ActualPool;
|
||||
private List<MouseEvent> _CurrentPool;
|
||||
|
||||
private int _x = 0;
|
||||
private int _y = 0;
|
||||
@@ -320,8 +326,6 @@ namespace Vocaluxe.Base
|
||||
private bool _ModALT;
|
||||
private bool _ModCTRL;
|
||||
private bool _ModSHIFT;
|
||||
|
||||
private System.Diagnostics.Stopwatch _timer;
|
||||
|
||||
public int X
|
||||
{
|
||||
@@ -342,15 +346,14 @@ namespace Vocaluxe.Base
|
||||
_ModSHIFT = false;
|
||||
|
||||
_EventsPool = new List<MouseEvent>();
|
||||
_ActualPool = new List<MouseEvent>();
|
||||
_timer = new System.Diagnostics.Stopwatch();
|
||||
_CurrentPool = new List<MouseEvent>();
|
||||
}
|
||||
|
||||
private void Add(bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool rb, int wheel, bool lbh, bool rbh)
|
||||
private void Add(bool alt, bool shift, bool ctrl, int x, int y, bool lb, bool rb, int wheel, bool lbh, bool rbh, bool mb, bool mbh)
|
||||
{
|
||||
x = (int)((float)x * (float)CSettings.iRenderW / (float)CDraw.GetScreenWidth());
|
||||
y = (int)((float)y * (float)CSettings.iRenderH / (float)CDraw.GetScreenHeight());
|
||||
MouseEvent pool = new MouseEvent(alt, shift, ctrl, x, y, lb, rb, -wheel/120, lbh, rbh);
|
||||
MouseEvent pool = new MouseEvent(alt, shift, ctrl, x, y, lb, rb, -wheel/120, lbh, rbh, mb, mbh);
|
||||
|
||||
lock (_CopyLock)
|
||||
{
|
||||
@@ -358,14 +361,11 @@ namespace Vocaluxe.Base
|
||||
}
|
||||
_x = x;
|
||||
_y = y;
|
||||
|
||||
_timer.Reset();
|
||||
_timer.Start();
|
||||
}
|
||||
|
||||
private void Del(int index)
|
||||
{
|
||||
_ActualPool.RemoveAt(index);
|
||||
_CurrentPool.RemoveAt(index);
|
||||
}
|
||||
|
||||
private void CheckModifiers()
|
||||
@@ -380,19 +380,22 @@ namespace Vocaluxe.Base
|
||||
public void MouseMove(MouseEventArgs e)
|
||||
{
|
||||
CheckModifiers();
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, false, false, e.Delta, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right);
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, false, false, e.Delta, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right,
|
||||
false, e.Button == MouseButtons.Middle);
|
||||
}
|
||||
|
||||
public void MouseWheel(MouseEventArgs e)
|
||||
{
|
||||
CheckModifiers();
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, false, false, e.Delta, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right);
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, false, false, e.Delta, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right,
|
||||
false, e.Button == MouseButtons.Middle);
|
||||
}
|
||||
|
||||
public void MouseDown(MouseEventArgs e)
|
||||
{
|
||||
CheckModifiers();
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right, e.Delta, false, false);
|
||||
Add(_ModALT, _ModSHIFT, _ModCTRL, e.X, e.Y, e.Button == MouseButtons.Left, e.Button == MouseButtons.Right, e.Delta, false, false,
|
||||
e.Button == MouseButtons.Middle, false);
|
||||
}
|
||||
|
||||
public void MouseUp(MouseEventArgs e)
|
||||
@@ -403,9 +406,9 @@ namespace Vocaluxe.Base
|
||||
|
||||
public bool PollEvent(ref MouseEvent MouseEvent)
|
||||
{
|
||||
if (_ActualPool.Count > 0)
|
||||
if (_CurrentPool.Count > 0)
|
||||
{
|
||||
MouseEvent = _ActualPool[0];
|
||||
MouseEvent = _CurrentPool[0];
|
||||
Del(0);
|
||||
return true;
|
||||
}
|
||||
@@ -418,7 +421,7 @@ namespace Vocaluxe.Base
|
||||
{
|
||||
foreach (MouseEvent e in _EventsPool)
|
||||
{
|
||||
_ActualPool.Add(e);
|
||||
_CurrentPool.Add(e);
|
||||
}
|
||||
_EventsPool.Clear();
|
||||
}
|
||||
|
||||
+19
-28
@@ -72,45 +72,36 @@
|
||||
|
||||
-------------------------------------------------------------
|
||||
+ v0.1.0:
|
||||
- Menu Background Music
|
||||
- Theme System Update
|
||||
- A nicer Theme!
|
||||
|
||||
+ v0.2.0:
|
||||
- Menu Background Music
|
||||
- Medley
|
||||
- WiiMote Support
|
||||
- Jukebox light (bg music controls)
|
||||
- Show Avatars and Player Name in Sing Screen (and perhaps some other screens)
|
||||
- New Lyric Effects
|
||||
|
||||
|
||||
-----------------
|
||||
just some ideas:
|
||||
- Installer
|
||||
- More Song List Views
|
||||
- Tile Board: Show title and artist under each tile
|
||||
- OnScreen Keyboard?
|
||||
- Kinect Support?
|
||||
|
||||
+ v0.3.0:
|
||||
- Song Editor
|
||||
- Help System
|
||||
- Duet (full support)
|
||||
- Party Mode: Casting Show
|
||||
- More Player at once
|
||||
- Mark newly added songs
|
||||
- Playlist-Support
|
||||
- Theme System Update (Theme Editor)
|
||||
|
||||
+ v0.4.0:
|
||||
- Challenge Mode (with more than 2 player at once)
|
||||
|
||||
+ v0.5.0:
|
||||
- Theme Editor
|
||||
- Jukebox
|
||||
- Tournament Mode
|
||||
- Party Mode: Team-Battle
|
||||
- Party Mode: Tic, Tac, Toe
|
||||
- Party Mode: 4 in a row
|
||||
|
||||
+ v0.6.0:
|
||||
- Jukebox
|
||||
|
||||
+ v0.7.0:
|
||||
- Tournament Mode
|
||||
|
||||
+ v0.8.0:
|
||||
- Party Mode: Casting Show
|
||||
|
||||
+ v0.9.0:
|
||||
- ?
|
||||
|
||||
+ v1.0.0:
|
||||
- ?
|
||||
|
||||
|
||||
- Challenge Mode (with more than 2 player at once)
|
||||
- Song Editor
|
||||
- Duet (full support, choose/toggle names)
|
||||
+792
-258
File diff suppressed because it is too large.
Load diff
@@ -153,6 +153,27 @@ namespace Vocaluxe.Lib.Draw
|
||||
_Run = false;
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
switch (m.Msg)
|
||||
{
|
||||
case 0x112: // WM_SYSCOMMAND
|
||||
switch ((int)m.WParam & 0xFFF0)
|
||||
{
|
||||
case 0xF100: // SC_KEYMENU
|
||||
m.Result = IntPtr.Zero;
|
||||
break;
|
||||
default:
|
||||
base.WndProc(ref m);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
base.WndProc(ref m);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void OnKeyDownEvent(object sender, System.Windows.Forms.KeyEventArgs e)
|
||||
{
|
||||
_Keys.KeyDown(e);
|
||||
@@ -256,7 +277,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
CFonts.Height = Height;
|
||||
CFonts.SetFont(text.Fon);
|
||||
CFonts.Style = text.Style;
|
||||
return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(text.Text));
|
||||
return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(CLanguage.Translate(text.Text)));
|
||||
}
|
||||
|
||||
public void ClearScreen()
|
||||
@@ -300,7 +321,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
string file = "Screenshot_";
|
||||
string path = Path.Combine(Environment.CurrentDirectory, CSettings.sFolderScreenshots);
|
||||
|
||||
|
||||
int i = 0;
|
||||
while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".png")))
|
||||
i++;
|
||||
@@ -400,6 +421,11 @@ namespace Vocaluxe.Lib.Draw
|
||||
return new STexture(-1);
|
||||
}
|
||||
|
||||
public STexture QuequeTexture(int W, int H, ref byte[] Data)
|
||||
{
|
||||
return AddTexture(W, H, ref Data);
|
||||
}
|
||||
|
||||
public STexture AddTexture(int W, int H, ref byte[] Data)
|
||||
{
|
||||
Bitmap bmp = new Bitmap(W, H);
|
||||
|
||||
+246
-76
@@ -18,14 +18,21 @@ using Vocaluxe.Menu;
|
||||
|
||||
namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
public struct SClientRect
|
||||
struct SClientRect
|
||||
{
|
||||
public Point location;
|
||||
public int width;
|
||||
public int height;
|
||||
};
|
||||
|
||||
|
||||
struct STextureQueque
|
||||
{
|
||||
public int ID;
|
||||
public int width;
|
||||
public int height;
|
||||
public byte[] data;
|
||||
}
|
||||
|
||||
class COpenGL : Form, IDraw
|
||||
{
|
||||
#region private vars
|
||||
@@ -39,7 +46,11 @@ namespace Vocaluxe.Lib.Draw
|
||||
private SClientRect _restore;
|
||||
private bool _fullscreen = false;
|
||||
|
||||
private List<STexture> _Textures;
|
||||
private Dictionary<int, STexture> _Textures;
|
||||
private Queue<int> _IDs;
|
||||
private List<STextureQueque> _Queque;
|
||||
|
||||
private Object MutexTexture = new Object();
|
||||
|
||||
private int h = 1;
|
||||
private int w = 1;
|
||||
@@ -54,7 +65,14 @@ namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
this.Icon = new System.Drawing.Icon(Path.Combine(System.Environment.CurrentDirectory, CSettings.sIcon));
|
||||
|
||||
_Textures = new List<STexture>();
|
||||
_Textures = new Dictionary<int, STexture>();
|
||||
_Queque = new List<STextureQueque>();
|
||||
_IDs = new Queue<int>(1000000);
|
||||
|
||||
for (int i = 1; i < 1000000; i++)
|
||||
{
|
||||
_IDs.Enqueue(i);
|
||||
}
|
||||
|
||||
//Check AA Mode
|
||||
CConfig.AAMode = (EAntiAliasingModes)CheckAntiAliasingMode((int)CConfig.AAMode);
|
||||
@@ -103,7 +121,6 @@ namespace Vocaluxe.Lib.Draw
|
||||
control.MouseEnter += new EventHandler(this.OnMouseEnter);
|
||||
|
||||
this.ClientSize = new Size(CConfig.ScreenW, CConfig.ScreenH);
|
||||
//this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.Opaque, true);
|
||||
this.CenterToScreen();
|
||||
}
|
||||
|
||||
@@ -267,8 +284,15 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
this.DesktopBounds = new Rectangle(Screen.AllScreens[ScreenNr].Bounds.Location,
|
||||
new Size(Screen.AllScreens[ScreenNr].Bounds.Width, Screen.AllScreens[ScreenNr].Bounds.Height));
|
||||
this.TopMost = true;
|
||||
this.Show();
|
||||
|
||||
if (this.WindowState == FormWindowState.Maximized)
|
||||
{
|
||||
this.WindowState = FormWindowState.Normal;
|
||||
RResize();
|
||||
this.WindowState = FormWindowState.Maximized;
|
||||
}
|
||||
else
|
||||
RResize();
|
||||
|
||||
CConfig.SaveConfig();
|
||||
}
|
||||
@@ -281,8 +305,6 @@ namespace Vocaluxe.Lib.Draw
|
||||
this.FormBorderStyle = FormBorderStyle.Sizable;
|
||||
this.DesktopBounds = new Rectangle(_restore.location, new Size(_restore.width, _restore.height));
|
||||
|
||||
this.TopMost = false;
|
||||
|
||||
CConfig.SaveConfig();
|
||||
}
|
||||
#endregion Helpers
|
||||
@@ -315,6 +337,27 @@ namespace Vocaluxe.Lib.Draw
|
||||
control.ClientSize = this.ClientSize;
|
||||
RResize();
|
||||
}
|
||||
|
||||
protected override void WndProc(ref Message m)
|
||||
{
|
||||
switch (m.Msg)
|
||||
{
|
||||
case 0x112: // WM_SYSCOMMAND
|
||||
switch ((int)m.WParam & 0xFFF0)
|
||||
{
|
||||
case 0xF100: // SC_KEYMENU
|
||||
m.Result = IntPtr.Zero;
|
||||
break;
|
||||
default:
|
||||
base.WndProc(ref m);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
base.WndProc(ref m);
|
||||
break;
|
||||
}
|
||||
}
|
||||
#endregion form events
|
||||
|
||||
#region mouse event handlers
|
||||
@@ -401,7 +444,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
|
||||
#region implementation
|
||||
|
||||
#region main stuff
|
||||
public bool Init()
|
||||
{
|
||||
this.Text = CSettings.GetFullVersionText();
|
||||
@@ -430,7 +473,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
CSettings.bFullScreen = true;
|
||||
EnterFullScreen();
|
||||
}
|
||||
|
||||
|
||||
while (_Run)
|
||||
{
|
||||
Application.DoEvents();
|
||||
@@ -438,18 +481,20 @@ namespace Vocaluxe.Lib.Draw
|
||||
if (_Run)
|
||||
{
|
||||
ClearScreen();
|
||||
|
||||
_Run = _Run && CGraphics.Draw();
|
||||
|
||||
_Run = CGraphics.UpdateGameLogic(_Keys, _Mouse);
|
||||
control.SwapBuffers();
|
||||
|
||||
|
||||
if ((CSettings.bFullScreen && !_fullscreen) || (!CSettings.bFullScreen && _fullscreen))
|
||||
ToggleFullScreen();
|
||||
|
||||
CheckQueque();
|
||||
|
||||
if (CTime.IsRunning())
|
||||
delay = (int)Math.Floor(CConfig.CalcCycleTime() - CTime.GetMilliseconds());
|
||||
|
||||
if (delay >= 1)
|
||||
|
||||
if (delay >= 1 && CConfig.VSync == EOffOn.TR_CONFIG_OFF)
|
||||
System.Threading.Thread.Sleep(delay);
|
||||
|
||||
CTime.CalculateFPS();
|
||||
@@ -462,11 +507,13 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
public bool Unload()
|
||||
{
|
||||
while (_Textures.Count > 0)
|
||||
STexture[] textures = new STexture[_Textures.Count];
|
||||
_Textures.Values.CopyTo(textures, 0);
|
||||
for (int i = 0; i < _Textures.Count; i++ )
|
||||
{
|
||||
STexture tex = _Textures[0];
|
||||
RemoveTexture(ref tex);
|
||||
RemoveTexture(ref textures[i]);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -490,9 +537,10 @@ namespace Vocaluxe.Lib.Draw
|
||||
CFonts.Height = Height;
|
||||
CFonts.SetFont(text.Fon);
|
||||
CFonts.Style = text.Style;
|
||||
return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(text.Text));
|
||||
return new RectangleF(text.X, text.Y, CFonts.GetTextWidth(CLanguage.Translate(text.Text)), CFonts.GetTextHeight(CLanguage.Translate(text.Text)));
|
||||
}
|
||||
|
||||
#endregion main stuff
|
||||
|
||||
#region Basic Draw Methods
|
||||
public void ClearScreen()
|
||||
{
|
||||
@@ -505,7 +553,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.index = id;
|
||||
texture.ID = id;
|
||||
|
||||
texture.width = w;
|
||||
texture.height = h;
|
||||
@@ -529,21 +577,26 @@ namespace Vocaluxe.Lib.Draw
|
||||
// Add to Texture List
|
||||
texture.color = new SColorF(1f, 1f, 1f, 1f);
|
||||
texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
|
||||
_Textures.Add(texture);
|
||||
|
||||
lock (MutexTexture)
|
||||
{
|
||||
texture.index = _IDs.Dequeue();
|
||||
_Textures[texture.index] = texture;
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
public void CopyScreen(ref STexture Texture)
|
||||
{
|
||||
if (!_TextureExists(Texture) || (Texture.width != GetScreenWidth()) || (Texture.height != GetScreenHeight()))
|
||||
if (!_TextureExists(ref Texture) || (Texture.width != GetScreenWidth()) || (Texture.height != GetScreenHeight()))
|
||||
{
|
||||
RemoveTexture(ref Texture);
|
||||
Texture = CopyScreen();
|
||||
}
|
||||
else
|
||||
{
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, 0, 0,
|
||||
(int)Texture.width, (int)Texture.height);
|
||||
@@ -556,7 +609,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
string file = "Screenshot_";
|
||||
string path = Path.Combine(Environment.CurrentDirectory, CSettings.sFolderScreenshots);
|
||||
|
||||
|
||||
int i = 0;
|
||||
while (File.Exists(Path.Combine(path, file + i.ToString("00000") + ".bmp")))
|
||||
i++;
|
||||
@@ -611,6 +664,8 @@ namespace Vocaluxe.Lib.Draw
|
||||
#endregion Basic Draw Methods
|
||||
|
||||
#region Textures
|
||||
|
||||
#region adding
|
||||
public STexture AddTexture(string TexturePath)
|
||||
{
|
||||
if (System.IO.File.Exists(TexturePath))
|
||||
@@ -643,10 +698,6 @@ namespace Vocaluxe.Lib.Draw
|
||||
if (bmp.Height == 0 || bmp.Width == 0)
|
||||
return texture;
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.index = id;
|
||||
|
||||
int MaxSize;
|
||||
switch (CConfig.TextureQuality)
|
||||
{
|
||||
@@ -673,18 +724,22 @@ namespace Vocaluxe.Lib.Draw
|
||||
int w = bmp.Width;
|
||||
int h = bmp.Height;
|
||||
|
||||
if (h >= w && w > MaxSize)
|
||||
if (w > MaxSize)
|
||||
{
|
||||
h = (int)Math.Round((float)MaxSize / bmp.Width * bmp.Height);
|
||||
w = MaxSize;
|
||||
}
|
||||
|
||||
if (w >= h && h > MaxSize)
|
||||
if (h > MaxSize)
|
||||
{
|
||||
w = (int)Math.Round((float)MaxSize / bmp.Height * bmp.Width);
|
||||
h = MaxSize;
|
||||
}
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.ID = id;
|
||||
|
||||
texture.width = w;
|
||||
texture.height = h;
|
||||
|
||||
@@ -696,7 +751,8 @@ namespace Vocaluxe.Lib.Draw
|
||||
g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
|
||||
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
|
||||
g.DrawImage(bmp, new Rectangle(0, 0, bmp2.Width, bmp2.Height));
|
||||
|
||||
g.Dispose();
|
||||
|
||||
texture.width_ratio = 1f;
|
||||
texture.height_ratio = 1f;
|
||||
|
||||
@@ -727,7 +783,12 @@ namespace Vocaluxe.Lib.Draw
|
||||
texture.color = new SColorF(1f, 1f, 1f, 1f);
|
||||
texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
|
||||
texture.TexturePath = String.Empty;
|
||||
_Textures.Add(texture);
|
||||
|
||||
lock (MutexTexture)
|
||||
{
|
||||
texture.index = _IDs.Dequeue();
|
||||
_Textures[texture.index] = texture;
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
@@ -753,7 +814,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.index = id;
|
||||
texture.ID = id;
|
||||
|
||||
texture.width = W;
|
||||
texture.height = H;
|
||||
@@ -786,8 +847,13 @@ namespace Vocaluxe.Lib.Draw
|
||||
texture.color = new SColorF(1f, 1f, 1f, 1f);
|
||||
texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
|
||||
texture.TexturePath = String.Empty;
|
||||
_Textures.Add(texture);
|
||||
|
||||
lock (MutexTexture)
|
||||
{
|
||||
texture.index = _IDs.Dequeue();
|
||||
_Textures[texture.index] = texture;
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
@@ -813,7 +879,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.index = id;
|
||||
texture.ID = id;
|
||||
|
||||
texture.width = W;
|
||||
texture.height = H;
|
||||
@@ -846,14 +912,43 @@ namespace Vocaluxe.Lib.Draw
|
||||
texture.color = new SColorF(1f, 1f, 1f, 1f);
|
||||
texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
|
||||
texture.TexturePath = String.Empty;
|
||||
_Textures.Add(texture);
|
||||
|
||||
lock (MutexTexture)
|
||||
{
|
||||
texture.index = _IDs.Dequeue();
|
||||
_Textures[texture.index] = texture;
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
|
||||
public STexture QuequeTexture(int W, int H, ref byte[] Data)
|
||||
{
|
||||
STexture texture = new STexture(-1);
|
||||
STextureQueque queque = new STextureQueque();
|
||||
|
||||
queque.data = Data;
|
||||
queque.height = H;
|
||||
queque.width = W;
|
||||
texture.height = H;
|
||||
texture.width = W;
|
||||
|
||||
lock (MutexTexture)
|
||||
{
|
||||
texture.index = _IDs.Dequeue();
|
||||
queque.ID = texture.index;
|
||||
_Queque.Add(queque);
|
||||
_Textures[texture.index] = texture;
|
||||
}
|
||||
|
||||
return texture;
|
||||
}
|
||||
#endregion adding
|
||||
|
||||
#region updating
|
||||
public bool UpdateTexture(ref STexture Texture, IntPtr Data)
|
||||
{
|
||||
if (_TextureExists(Texture))
|
||||
if (_TextureExists(ref Texture))
|
||||
{
|
||||
if (_UsePBO)
|
||||
{
|
||||
@@ -869,7 +964,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
GL.UnmapBuffer(BufferTarget.PixelUnpackBuffer);
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)Texture.width, (int)Texture.height,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
|
||||
|
||||
@@ -884,7 +979,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
}
|
||||
}
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)Texture.width, (int)Texture.height,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, Data);
|
||||
@@ -908,7 +1003,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
public bool UpdateTexture(ref STexture Texture, ref byte[] Data)
|
||||
{
|
||||
if (_TextureExists(Texture))
|
||||
if (_TextureExists(ref Texture))
|
||||
{
|
||||
if (_UsePBO)
|
||||
{
|
||||
@@ -921,7 +1016,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
GL.UnmapBuffer(BufferTarget.PixelUnpackBuffer);
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)Texture.width, (int)Texture.height,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
|
||||
|
||||
@@ -937,7 +1032,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
}
|
||||
}
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, (int)Texture.width, (int)Texture.height,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, Data);
|
||||
@@ -958,34 +1053,34 @@ namespace Vocaluxe.Lib.Draw
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endregion updating
|
||||
|
||||
public void RemoveTexture(ref STexture Texture)
|
||||
{
|
||||
if ((Texture.index > 0) && (_Textures.Count > 0))
|
||||
{
|
||||
for (int i = 0; i < _Textures.Count; i++)
|
||||
{
|
||||
if (_Textures[i].index == Texture.index)
|
||||
{
|
||||
GL.DeleteTexture(Texture.index);
|
||||
if (Texture.PBO > 0)
|
||||
GL.DeleteBuffers(1, ref Texture.PBO);
|
||||
_Textures.RemoveAt(i);
|
||||
Texture.index = -1;
|
||||
break;
|
||||
}
|
||||
lock (MutexTexture)
|
||||
{
|
||||
_IDs.Enqueue(Texture.index);
|
||||
GL.DeleteTexture(Texture.ID);
|
||||
if (Texture.PBO > 0)
|
||||
GL.DeleteBuffers(1, ref Texture.PBO);
|
||||
_Textures.Remove(Texture.index);
|
||||
Texture.index = -1;
|
||||
Texture.ID = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool _TextureExists(STexture Texture)
|
||||
private bool _TextureExists(ref STexture Texture)
|
||||
{
|
||||
if ((Texture.index > 0) && (_Textures.Count > 0))
|
||||
lock (MutexTexture)
|
||||
{
|
||||
for (int i = 0; i < _Textures.Count; i++)
|
||||
if(_Textures.ContainsKey((Texture.index)))
|
||||
{
|
||||
if (_Textures[i].index == Texture.index)
|
||||
if(_Textures[Texture.index].ID > 0)
|
||||
{
|
||||
Texture = _Textures[Texture.index];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -993,6 +1088,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
return false;
|
||||
}
|
||||
|
||||
#region drawing
|
||||
public void DrawTexture(STexture Texture)
|
||||
{
|
||||
DrawTexture(Texture, Texture.rect, Texture.color);
|
||||
@@ -1029,10 +1125,10 @@ namespace Vocaluxe.Lib.Draw
|
||||
if (bounds.Y > rect.Y + rect.H || bounds.Y + bounds.H < rect.Y)
|
||||
return;
|
||||
|
||||
if (_TextureExists(Texture))
|
||||
if (_TextureExists(ref Texture))
|
||||
{
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
float x1 = (bounds.X - rect.X) / rect.W * Texture.width_ratio;
|
||||
float x2 = (bounds.X + bounds.W - rect.X) / rect.W * Texture.width_ratio;
|
||||
float y1 = (bounds.Y - rect.Y) / rect.H * Texture.height_ratio;
|
||||
@@ -1073,21 +1169,21 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
GL.MatrixMode(MatrixMode.Texture);
|
||||
GL.PushMatrix();
|
||||
|
||||
|
||||
if (rect.Rotation != 0f)
|
||||
{
|
||||
GL.Translate(0.5f, 0.5f, 0);
|
||||
GL.Rotate(-rect.Rotation, 0f, 0f, 1f);
|
||||
GL.Translate(-0.5f, -0.5f, 0);
|
||||
GL.Translate(-0.5f, -0.5f, 0);
|
||||
}
|
||||
|
||||
|
||||
if (!mirrored)
|
||||
{
|
||||
GL.Begin(BeginMode.Quads);
|
||||
|
||||
GL.TexCoord2(x1, y1);
|
||||
GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset);
|
||||
|
||||
|
||||
GL.TexCoord2(x1, y2);
|
||||
GL.Vertex3(rx1, ry2, rect.Z + CGraphics.ZOffset);
|
||||
|
||||
@@ -1119,7 +1215,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
}
|
||||
|
||||
GL.PopMatrix();
|
||||
|
||||
|
||||
GL.Disable(EnableCap.Blend);
|
||||
GL.BindTexture(TextureTarget.Texture2D, 0);
|
||||
}
|
||||
@@ -1127,14 +1223,14 @@ namespace Vocaluxe.Lib.Draw
|
||||
|
||||
public void DrawTexture(STexture Texture, SRectF rect, SColorF color, float begin, float end)
|
||||
{
|
||||
if (_TextureExists(Texture))
|
||||
if (_TextureExists(ref Texture))
|
||||
{
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
GL.Enable(EnableCap.Blend);
|
||||
GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha);
|
||||
|
||||
|
||||
|
||||
GL.Begin(BeginMode.Quads);
|
||||
|
||||
GL.TexCoord2(0f + begin * Texture.width_ratio, 0f);
|
||||
@@ -1150,7 +1246,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
GL.Vertex3(rect.X + end * rect.W, rect.Y, rect.Z + CGraphics.ZOffset);
|
||||
|
||||
GL.End();
|
||||
|
||||
|
||||
|
||||
GL.Disable(EnableCap.Blend);
|
||||
GL.BindTexture(TextureTarget.Texture2D, 0);
|
||||
@@ -1171,9 +1267,9 @@ namespace Vocaluxe.Lib.Draw
|
||||
if (height > bounds.H)
|
||||
height = bounds.H;
|
||||
|
||||
if (_TextureExists(Texture))
|
||||
if (_TextureExists(ref Texture))
|
||||
{
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.index);
|
||||
GL.BindTexture(TextureTarget.Texture2D, Texture.ID);
|
||||
|
||||
float x1 = (bounds.X - rect.X) / rect.W * Texture.width_ratio;
|
||||
float x2 = (bounds.X + bounds.W - rect.X) / rect.W * Texture.width_ratio;
|
||||
@@ -1211,7 +1307,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
ry2 = bounds.Y + bounds.H + space + height;
|
||||
|
||||
GL.Enable(EnableCap.Blend);
|
||||
|
||||
|
||||
GL.MatrixMode(MatrixMode.Texture);
|
||||
GL.PushMatrix();
|
||||
|
||||
@@ -1222,7 +1318,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
GL.Translate(-0.5f, -0.5f, 0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
GL.Begin(BeginMode.Quads);
|
||||
|
||||
GL.Color4(color.R, color.G, color.B, color.A * CGraphics.GlobalAlpha);
|
||||
@@ -1242,7 +1338,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
GL.Vertex3(rx1, ry1, rect.Z + CGraphics.ZOffset);
|
||||
|
||||
GL.End();
|
||||
|
||||
|
||||
|
||||
GL.PopMatrix();
|
||||
|
||||
@@ -1250,11 +1346,85 @@ namespace Vocaluxe.Lib.Draw
|
||||
GL.BindTexture(TextureTarget.Texture2D, 0);
|
||||
}
|
||||
}
|
||||
#endregion drawing
|
||||
|
||||
public int TextureCount()
|
||||
{
|
||||
return _Textures.Count;
|
||||
}
|
||||
|
||||
private void CheckQueque()
|
||||
{
|
||||
lock (MutexTexture)
|
||||
{
|
||||
if (_Queque.Count == 0)
|
||||
return;
|
||||
|
||||
STextureQueque q = _Queque[0];
|
||||
STexture texture = new STexture(-1);
|
||||
if (_Textures.ContainsKey(q.ID))
|
||||
{
|
||||
texture = _Textures[q.ID];
|
||||
}
|
||||
|
||||
if (texture.index < 1)
|
||||
return;
|
||||
|
||||
if (_UsePBO)
|
||||
{
|
||||
try
|
||||
{
|
||||
GL.GenBuffers(1, out texture.PBO);
|
||||
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO);
|
||||
GL.BufferData(BufferTarget.PixelUnpackBuffer, (IntPtr)q.data.Length, IntPtr.Zero, BufferUsageHint.StreamDraw);
|
||||
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
//throw;
|
||||
_UsePBO = false;
|
||||
}
|
||||
}
|
||||
|
||||
int id = GL.GenTexture();
|
||||
GL.BindTexture(TextureTarget.Texture2D, id);
|
||||
texture.ID = id;
|
||||
|
||||
texture.width = q.width;
|
||||
texture.height = q.height;
|
||||
texture.w2 = (float)MathHelper.NextPowerOfTwo(texture.width);
|
||||
texture.h2 = (float)MathHelper.NextPowerOfTwo(texture.height);
|
||||
|
||||
texture.width_ratio = texture.width / texture.w2;
|
||||
texture.height_ratio = texture.height / texture.h2;
|
||||
|
||||
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, (int)texture.w2, (int)texture.h2, 0,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
|
||||
|
||||
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, q.width, q.height,
|
||||
OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, q.data);
|
||||
|
||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureParameterName.ClampToEdge);
|
||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureParameterName.ClampToEdge);
|
||||
|
||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
|
||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
|
||||
|
||||
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.LinearMipmapLinear);
|
||||
GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D);
|
||||
|
||||
GL.BindTexture(TextureTarget.Texture2D, 0);
|
||||
|
||||
// Add to Texture List
|
||||
texture.color = new SColorF(1f, 1f, 1f, 1f);
|
||||
texture.rect = new SRectF(0f, 0f, texture.width, texture.height, 0f);
|
||||
texture.TexturePath = String.Empty;
|
||||
|
||||
_Textures[texture.index] = texture;
|
||||
q.data = null;
|
||||
_Queque.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
#endregion Textures
|
||||
|
||||
#endregion implementation
|
||||
|
||||
@@ -67,6 +67,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
public int index;
|
||||
public int PBO;
|
||||
public int ID;
|
||||
|
||||
public string TexturePath;
|
||||
|
||||
@@ -85,10 +86,11 @@ namespace Vocaluxe.Lib.Draw
|
||||
{
|
||||
index = Index;
|
||||
PBO = 0;
|
||||
ID = -1;
|
||||
TexturePath = String.Empty;
|
||||
|
||||
width = 0f;
|
||||
height = 0f;
|
||||
width = 1f;
|
||||
height = 1f;
|
||||
rect = new SRectF(0f, 0f, 1f, 1f, 0f);
|
||||
|
||||
w2 = 2f;
|
||||
@@ -136,6 +138,7 @@ namespace Vocaluxe.Lib.Draw
|
||||
STexture AddTexture(Bitmap Bitmap);
|
||||
STexture AddTexture(int W, int H, IntPtr Data);
|
||||
STexture AddTexture(int W, int H, ref byte[] Data);
|
||||
STexture QuequeTexture(int W, int H, ref byte[] Data);
|
||||
bool UpdateTexture(ref STexture Texture, ref byte[] Data);
|
||||
bool UpdateTexture(ref STexture Texture, IntPtr Data);
|
||||
|
||||
|
||||
+54
-36
@@ -43,9 +43,7 @@ namespace Vocaluxe.Lib.Song
|
||||
if (Index >= _Lines.Count)
|
||||
return false;
|
||||
|
||||
CLines lines = new CLines();
|
||||
lines = Lines;
|
||||
_Lines[Index] = lines;
|
||||
_Lines[Index] = Lines;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -245,6 +243,8 @@ namespace Vocaluxe.Lib.Song
|
||||
private int _EndBeat;
|
||||
private bool _PerfectLine; // for drawing perfect line effect
|
||||
|
||||
private int _MinBeat = int.MaxValue;
|
||||
private int _MaxBeat = int.MinValue;
|
||||
private List<CNote> _Notes;
|
||||
|
||||
#region Constructors
|
||||
@@ -263,14 +263,7 @@ namespace Vocaluxe.Lib.Song
|
||||
get { return _StartBeat; }
|
||||
set
|
||||
{
|
||||
int min = int.MaxValue;
|
||||
foreach (CNote note in _Notes)
|
||||
{
|
||||
if (note.StartBeat < min)
|
||||
min = note.StartBeat;
|
||||
}
|
||||
|
||||
if (value <= min)
|
||||
if (value <= _MinBeat)
|
||||
_StartBeat = value;
|
||||
}
|
||||
}
|
||||
@@ -280,14 +273,7 @@ namespace Vocaluxe.Lib.Song
|
||||
get { return _EndBeat; }
|
||||
set
|
||||
{
|
||||
int max = int.MinValue;
|
||||
foreach (CNote note in _Notes)
|
||||
{
|
||||
if (note.EndBeat > max)
|
||||
max = note.EndBeat;
|
||||
}
|
||||
|
||||
if (value >= max)
|
||||
if (value >= _MaxBeat)
|
||||
_EndBeat = value;
|
||||
}
|
||||
}
|
||||
@@ -302,13 +288,7 @@ namespace Vocaluxe.Lib.Song
|
||||
{
|
||||
get
|
||||
{
|
||||
int Result = int.MaxValue;
|
||||
foreach (CNote note in _Notes)
|
||||
{
|
||||
if (note.StartBeat < Result)
|
||||
Result = note.StartBeat;
|
||||
}
|
||||
return Result;
|
||||
return _MinBeat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -316,13 +296,7 @@ namespace Vocaluxe.Lib.Song
|
||||
{
|
||||
get
|
||||
{
|
||||
int Result = int.MinValue;
|
||||
foreach (CNote note in _Notes)
|
||||
{
|
||||
if (note.EndBeat > Result)
|
||||
Result = note.EndBeat;
|
||||
}
|
||||
return Result;
|
||||
return _MaxBeat;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -429,6 +403,7 @@ namespace Vocaluxe.Lib.Song
|
||||
public void AddNote(CNote Note)
|
||||
{
|
||||
_Notes.Add(Note);
|
||||
updateMinMaxBeat(Note);
|
||||
}
|
||||
|
||||
public bool InsertNote(CNote Note, int Index)
|
||||
@@ -436,6 +411,7 @@ namespace Vocaluxe.Lib.Song
|
||||
if (_Notes.Count >= Index)
|
||||
{
|
||||
_Notes.Insert(Index, Note);
|
||||
updateMinMaxBeat(Note);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -446,6 +422,7 @@ namespace Vocaluxe.Lib.Song
|
||||
if (_Notes.Count > Index)
|
||||
{
|
||||
_Notes.RemoveAt(Index);
|
||||
updateMinMaxBeat();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -457,6 +434,7 @@ namespace Vocaluxe.Lib.Song
|
||||
{
|
||||
_Notes.RemoveAt(Index);
|
||||
_Notes.Insert(Index, Note);
|
||||
updateMinMaxBeat();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -467,6 +445,7 @@ namespace Vocaluxe.Lib.Song
|
||||
if (_Notes.Count > 0)
|
||||
{
|
||||
_Notes[_Notes.Count - 1].Duration++;
|
||||
updateMinMaxBeat();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -474,6 +453,31 @@ namespace Vocaluxe.Lib.Song
|
||||
public void DeleteAllNotes()
|
||||
{
|
||||
_Notes.Clear();
|
||||
_MinBeat = int.MaxValue;
|
||||
_MaxBeat = int.MinValue;
|
||||
}
|
||||
|
||||
private void updateMinMaxBeat(CNote Note)
|
||||
{
|
||||
if (Note.StartBeat < _MinBeat)
|
||||
{
|
||||
_MinBeat = Note.StartBeat;
|
||||
}
|
||||
|
||||
if (Note.EndBeat > _MaxBeat)
|
||||
{
|
||||
_MaxBeat = Note.EndBeat;
|
||||
}
|
||||
}
|
||||
|
||||
private void updateMinMaxBeat()
|
||||
{
|
||||
_MinBeat = int.MaxValue;
|
||||
_MaxBeat = int.MinValue;
|
||||
foreach (CNote note in _Notes)
|
||||
{
|
||||
updateMinMaxBeat(note);
|
||||
}
|
||||
}
|
||||
#endregion Methods
|
||||
}
|
||||
@@ -543,9 +547,16 @@ namespace Vocaluxe.Lib.Song
|
||||
|
||||
#region Methods
|
||||
public void AddLine(CLine Line)
|
||||
{
|
||||
AddLine(Line, true);
|
||||
}
|
||||
public void AddLine(CLine Line, bool updateTimings)
|
||||
{
|
||||
_Lines.Add(Line);
|
||||
UpdateTimings();
|
||||
if (updateTimings)
|
||||
{
|
||||
UpdateTimings();
|
||||
}
|
||||
}
|
||||
|
||||
public bool InsertLine(CLine Line, int Index)
|
||||
@@ -575,16 +586,23 @@ namespace Vocaluxe.Lib.Song
|
||||
_Lines.Clear();
|
||||
}
|
||||
|
||||
public bool AddNote(CNote Note, int LineIndex)
|
||||
public bool AddNote(CNote Note, int LineIndex, bool updateTimings)
|
||||
{
|
||||
if (_Lines.Count > LineIndex)
|
||||
{
|
||||
_Lines[LineIndex].AddNote(Note);
|
||||
UpdateTimings();
|
||||
if (updateTimings)
|
||||
{
|
||||
UpdateTimings();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
public bool AddNote(CNote Note, int LineIndex)
|
||||
{
|
||||
return AddNote(Note, LineIndex, true);
|
||||
}
|
||||
|
||||
public bool InsertNote(CNote Note, int LineIndex, int NoteIndex)
|
||||
{
|
||||
|
||||
@@ -25,6 +25,7 @@ namespace Vocaluxe.Lib.Song
|
||||
class CSong
|
||||
{
|
||||
private bool _CoverLoaded = false;
|
||||
private bool _NotesLoaded = false;
|
||||
private STexture _CoverTextureSmall = new STexture(-1);
|
||||
private STexture _CoverTextureBig = new STexture(-1);
|
||||
|
||||
@@ -54,7 +55,9 @@ namespace Vocaluxe.Lib.Song
|
||||
{
|
||||
if (!_CoverLoaded)
|
||||
{
|
||||
this.ReadNotes();
|
||||
if (!_NotesLoaded)
|
||||
this.ReadNotes();
|
||||
|
||||
if (this.CoverFileName != String.Empty)
|
||||
{
|
||||
if (!CDataBase.GetCover(Path.Combine(this.Folder, this.CoverFileName), ref _CoverTextureSmall, CConfig.CoverSize))
|
||||
@@ -237,6 +240,11 @@ namespace Vocaluxe.Lib.Song
|
||||
this.MP3FileName = Value;
|
||||
HeaderFlags |= EHeaderFlags.MP3;
|
||||
}
|
||||
else
|
||||
{
|
||||
CLog.LogError("Can't find audio file: " + Path.Combine(this.Folder, Value));
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case "BPM":
|
||||
if (CHelper.TryParse(Value, out this.BPM))
|
||||
@@ -283,6 +291,9 @@ namespace Vocaluxe.Lib.Song
|
||||
case "VIDEO":
|
||||
if (File.Exists(Path.Combine(this.Folder, Value)))
|
||||
this.VideoFileName = Value;
|
||||
else
|
||||
CLog.LogError("Can't find video file: " + Path.Combine(this.Folder, Value));
|
||||
|
||||
break;
|
||||
case "VIDEOGAP":
|
||||
CHelper.TryParse(Value, out this.VideoGap);
|
||||
@@ -452,12 +463,17 @@ namespace Vocaluxe.Lib.Song
|
||||
TempC = (char)c;
|
||||
} while ((TempC.CompareTo('E') != 0) && !sr.EndOfStream && (c == 19 || c == 16 || c == 13));
|
||||
}
|
||||
foreach(CLines lines in this.Notes.Lines)
|
||||
{
|
||||
lines.UpdateTimings();
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
CLog.LogError("Error loading song. Line No.: " + FileLineNo.ToString() + ". An unhandled exception occured (" + e.Message + "): " + FilePath);
|
||||
return false;
|
||||
}
|
||||
_NotesLoaded = true;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -470,11 +486,11 @@ namespace Vocaluxe.Lib.Song
|
||||
{
|
||||
CLine line = new CLine();
|
||||
line.AddNote(note);
|
||||
lines.AddLine(line);
|
||||
lines.AddLine(line, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
lines.AddNote(note, lines.LineCount - 1);
|
||||
lines.AddNote(note, lines.LineCount - 1, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,454 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using Un4seen.Bass;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
|
||||
namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
class CBassPlay: IPlayback
|
||||
{
|
||||
private bool _Initialized = false;
|
||||
private List<AudioStreams> _Streams;
|
||||
private SYNCPROC _SyncSlideAndStop;
|
||||
private Object MutexAudioStreams = new Object();
|
||||
|
||||
|
||||
public CBassPlay()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public bool Init()
|
||||
{
|
||||
if (_Initialized)
|
||||
return true;
|
||||
|
||||
#region Registration
|
||||
string EMail = String.Empty;
|
||||
string Code = String.Empty;
|
||||
|
||||
ReadRegistrationFile(Path.Combine(Environment.CurrentDirectory, CSettings.sBassRegistration), ref EMail, ref Code);
|
||||
|
||||
if (EMail == String.Empty || Code == String.Empty)
|
||||
WriteRegistrationFile(Path.Combine(Environment.CurrentDirectory, CSettings.sBassRegistration), "your mail adress", "your registration code");
|
||||
else
|
||||
BassNet.Registration(EMail, Code);
|
||||
#endregion Registration
|
||||
|
||||
bool ok = false;
|
||||
try
|
||||
{
|
||||
ok = Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_DEFAULT, IntPtr.Zero);
|
||||
_Streams = new List<AudioStreams>();
|
||||
_SyncSlideAndStop = new SYNCPROC(EndSync);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
ok = false;
|
||||
|
||||
}
|
||||
|
||||
_Initialized = ok;
|
||||
return ok;
|
||||
}
|
||||
|
||||
public void CloseAll()
|
||||
{
|
||||
while (_Streams.Count > 0)
|
||||
{
|
||||
Close(_Streams[_Streams.Count - 1].handle);
|
||||
}
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
_Streams.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGlobalVolume(float Volume)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
Bass.BASS_SetVolume(Volume / 100f);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetStreamCount()
|
||||
{
|
||||
if (!_Initialized)
|
||||
return 0;
|
||||
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
return _Streams.Count;
|
||||
}
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
}
|
||||
|
||||
#region Stream Handling
|
||||
public int Load(string Media)
|
||||
{
|
||||
return Load(Media, false);
|
||||
}
|
||||
|
||||
public int Load(string Media, bool Prescan)
|
||||
{
|
||||
if (!_Initialized)
|
||||
return 0;
|
||||
|
||||
BASSFlag flags = BASSFlag.BASS_DEFAULT;
|
||||
if (Prescan)
|
||||
flags = BASSFlag.BASS_STREAM_PRESCAN;
|
||||
|
||||
AudioStreams stream = new AudioStreams(0);
|
||||
stream.handle = Bass.BASS_StreamCreateFile(Media, 0L, 0L, flags);
|
||||
|
||||
if (stream.handle != 0)
|
||||
{
|
||||
stream.file = Media;
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
_Streams.Add(stream);
|
||||
}
|
||||
|
||||
return stream.handle;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void Close(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_StreamFree(Stream);
|
||||
_Streams.RemoveAt(GetStreamIndex(Stream));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Play(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Play(Stream, false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Play(int Stream, bool Loop)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
if (Loop)
|
||||
Bass.BASS_ChannelFlags(Stream, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP);
|
||||
|
||||
Bass.BASS_ChannelPlay(Stream, false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Pause(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelPause(Stream);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelStop(Stream);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Fade(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelSlideAttribute(Stream, BASSAttribute.BASS_ATTRIB_VOL, TargetVolume/100f, (int)Math.Round(Seconds*1000f));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndStop(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelSlideAttribute(Stream, BASSAttribute.BASS_ATTRIB_VOL, TargetVolume / 100f, (int)Math.Round(Seconds * 1000f));
|
||||
Bass.BASS_ChannelSetSync(Stream, BASSSync.BASS_SYNC_SLIDE, 0L, _SyncSlideAndStop, IntPtr.Zero);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void SetStreamVolume(int Stream, float Volume)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelSetAttribute(Stream, BASSAttribute.BASS_ATTRIB_VOL, Volume / 100f);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public float GetLength(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
long len = Bass.BASS_ChannelGetLength(Stream);
|
||||
return (float)Bass.BASS_ChannelBytes2Seconds(Stream, len);
|
||||
}
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public float GetPosition(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
long pos = Bass.BASS_ChannelGetPosition(Stream);
|
||||
return (float)Bass.BASS_ChannelBytes2Seconds(Stream, pos);
|
||||
}
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public bool IsPlaying(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_PLAYING);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsPaused(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_PAUSED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsFinished(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_STOPPED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SetPosition(int Stream, float Position)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Bass.BASS_ChannelSetPosition(Stream, Position);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endregion Stream Handling
|
||||
|
||||
private bool AlreadyAdded(int Stream)
|
||||
{
|
||||
foreach (AudioStreams st in _Streams)
|
||||
{
|
||||
if (st.handle == Stream)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int GetStreamIndex(int Stream)
|
||||
{
|
||||
for (int i = 0; i < _Streams.Count; i++)
|
||||
{
|
||||
if (_Streams[i].handle == Stream)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private void EndSync(int handle, int Stream, int data, IntPtr user)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Close(Stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadRegistrationFile(string FileName, ref string Email, ref string Code)
|
||||
{
|
||||
#region Inits
|
||||
bool loaded = false;
|
||||
XPathDocument xPathDoc = null;
|
||||
XPathNavigator navigator = null;
|
||||
|
||||
try
|
||||
{
|
||||
xPathDoc = new XPathDocument(FileName);
|
||||
navigator = xPathDoc.CreateNavigator();
|
||||
loaded = true;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
loaded = false;
|
||||
if (navigator != null)
|
||||
navigator = null;
|
||||
|
||||
if (xPathDoc != null)
|
||||
xPathDoc = null;
|
||||
}
|
||||
#endregion Inits
|
||||
|
||||
if (loaded)
|
||||
{
|
||||
CHelper.GetValueFromXML("//root/Registration/EMail", navigator, ref Email, String.Empty);
|
||||
CHelper.GetValueFromXML("//root/Registration/Code", navigator, ref Code, String.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private void WriteRegistrationFile(string FileName, string Email, string Code)
|
||||
{
|
||||
XmlWriterSettings _settings = new XmlWriterSettings();
|
||||
_settings.Indent = true;
|
||||
_settings.Encoding = Encoding.UTF8;
|
||||
_settings.ConformanceLevel = ConformanceLevel.Document;
|
||||
|
||||
XmlWriter writer;
|
||||
|
||||
try
|
||||
{
|
||||
writer = XmlWriter.Create(FileName, _settings);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
writer.WriteStartDocument();
|
||||
writer.WriteStartElement("root");
|
||||
|
||||
writer.WriteStartElement("Registration");
|
||||
writer.WriteComment("Register your BASS.NET version and suppress the freeware splash screen (http://bass.radio42.com/bass_register.html)");
|
||||
|
||||
writer.WriteElementString("EMail", Email);
|
||||
writer.WriteElementString("Code", Code);
|
||||
|
||||
writer.WriteEndElement();
|
||||
|
||||
// End of File
|
||||
writer.WriteEndElement(); //end of root
|
||||
writer.WriteEndDocument();
|
||||
|
||||
writer.Flush();
|
||||
writer.Close();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,220 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Text;
|
||||
|
||||
using Un4seen.Bass;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
|
||||
namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
class CBassRecord: IRecord
|
||||
{
|
||||
private List<SRecordDevice> _Devices = null;
|
||||
private SRecordDevice[] _DeviceConfig;
|
||||
|
||||
private RECORDPROC _myRecProc;
|
||||
private int[] _recHandle;
|
||||
|
||||
private CBuffer[] _Buffer;
|
||||
|
||||
|
||||
public CBassRecord()
|
||||
{
|
||||
Init();
|
||||
_Buffer = new CBuffer[CSettings.MaxNumPlayer];
|
||||
for (int i = 0; i < _Buffer.Length; i++)
|
||||
{
|
||||
_Buffer[i] = new CBuffer();
|
||||
}
|
||||
|
||||
_recHandle = new int[_Devices.Count];
|
||||
_myRecProc = new RECORDPROC(MyRecording);
|
||||
|
||||
_DeviceConfig = _Devices.ToArray();
|
||||
}
|
||||
|
||||
public bool Init()
|
||||
{
|
||||
_Devices = new List<SRecordDevice>();
|
||||
|
||||
try
|
||||
{
|
||||
BASS_DEVICEINFO info = new BASS_DEVICEINFO();
|
||||
for (int n = 0; Bass.BASS_RecordGetDeviceInfo(n, info); n++)
|
||||
{
|
||||
if (info.IsEnabled)
|
||||
{
|
||||
SRecordDevice dev = new SRecordDevice();
|
||||
|
||||
dev.ID = n;
|
||||
dev.Name = info.name;
|
||||
dev.Driver = info.driver;
|
||||
dev.Inputs = new List<SInput>();
|
||||
|
||||
if (Bass.BASS_RecordInit(n))
|
||||
{
|
||||
string name = String.Empty;
|
||||
for (int j = 0; ((name = Bass.BASS_RecordGetInputName(j)) != null); j++)
|
||||
{
|
||||
SInput inp = new SInput();
|
||||
inp.Name = name;
|
||||
|
||||
inp.Channels = 2; //TODO: how to retrieve the amount of channels?
|
||||
|
||||
dev.Inputs.Add(inp);
|
||||
}
|
||||
|
||||
_Devices.Add(dev);
|
||||
Bass.BASS_RecordFree();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
|
||||
//throw;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool Start(SRecordDevice[] DeviceConfig)
|
||||
{
|
||||
for (int i = 0; i < _Buffer.Length; i++)
|
||||
{
|
||||
_Buffer[i].Reset();
|
||||
}
|
||||
|
||||
for (int i = 0; i < _recHandle.Length; i++)
|
||||
{
|
||||
_recHandle[i] = -1;
|
||||
}
|
||||
|
||||
_DeviceConfig = DeviceConfig;
|
||||
bool[] active = new bool[DeviceConfig.Length];
|
||||
for (int dev = 0; dev < DeviceConfig.Length; dev++)
|
||||
{
|
||||
active[dev] = false;
|
||||
for (int inp = 0; inp < DeviceConfig[dev].Inputs.Count; inp++)
|
||||
{
|
||||
if (DeviceConfig[dev].Inputs[inp].PlayerChannel1 > 0 ||
|
||||
DeviceConfig[dev].Inputs[inp].PlayerChannel2 > 0)
|
||||
active[dev] = true;
|
||||
}
|
||||
}
|
||||
|
||||
bool result = true;
|
||||
for (int i = 0; i < _recHandle.Length; i++)
|
||||
{
|
||||
if (active[i])
|
||||
{
|
||||
if (Bass.BASS_RecordInit(i))
|
||||
{
|
||||
_recHandle[i] = Bass.BASS_RecordStart(44100, 2, BASSFlag.BASS_RECORD_PAUSE, 20, _myRecProc, IntPtr.Zero);
|
||||
|
||||
// start recording
|
||||
result |= Bass.BASS_ChannelPlay(_recHandle[i], false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public bool Stop()
|
||||
{
|
||||
for (int i = 0; i < _recHandle.Length; i++)
|
||||
{
|
||||
Bass.BASS_ChannelStop(_recHandle[i]);
|
||||
}
|
||||
Bass.BASS_RecordFree();
|
||||
|
||||
//System.IO.File.Delete("test0.raw");
|
||||
//System.IO.File.Delete("test1.raw");
|
||||
//System.IO.File.WriteAllBytes("test0.raw", _Buffer[0].Buffer);
|
||||
//System.IO.File.WriteAllBytes("test1.raw", _Buffer[1].Buffer);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void CloseAll()
|
||||
{
|
||||
Stop();
|
||||
}
|
||||
|
||||
public void AnalyzeBuffer(int Player)
|
||||
{
|
||||
_Buffer[Player].AnalyzeBuffer();
|
||||
}
|
||||
|
||||
public int GetToneAbs(int Player)
|
||||
{
|
||||
return _Buffer[Player].ToneAbs;
|
||||
}
|
||||
|
||||
public int GetTone(int Player)
|
||||
{
|
||||
return _Buffer[Player].Tone;
|
||||
}
|
||||
|
||||
public void SetTone(int Player, int Tone)
|
||||
{
|
||||
_Buffer[Player].Tone = Tone;
|
||||
}
|
||||
|
||||
public float GetMaxVolume(int Player)
|
||||
{
|
||||
return _Buffer[Player].MaxVolume;
|
||||
}
|
||||
|
||||
public bool ToneValid(int Player)
|
||||
{
|
||||
return _Buffer[Player].ToneValid;
|
||||
}
|
||||
|
||||
public SRecordDevice[] RecordDevices()
|
||||
{
|
||||
return _Devices.ToArray();
|
||||
}
|
||||
|
||||
|
||||
private bool MyRecording(int handle, IntPtr buffer, int length, IntPtr user)
|
||||
{
|
||||
bool cont = true;
|
||||
if (length > 0 && buffer != IntPtr.Zero)
|
||||
{
|
||||
byte[] _recbuffer = new byte[length];
|
||||
byte[] _leftBuffer = new byte[length / 2];
|
||||
byte[] _rightBuffer = new byte[length / 2];
|
||||
|
||||
// copy from managed to unmanaged memory
|
||||
Marshal.Copy(buffer, _recbuffer, 0, length);
|
||||
|
||||
// copy into left/right Buffer
|
||||
for (int i = 0; i < length / 2; i++)
|
||||
{
|
||||
_leftBuffer[i] = _recbuffer[i * 2 - (i % 2)];
|
||||
_rightBuffer[i] = _recbuffer[i * 2 - (i % 2) + 2];
|
||||
}
|
||||
|
||||
for (int i = 0; i < _recHandle.Length; i++)
|
||||
{
|
||||
if (_recHandle[i] == handle)
|
||||
{
|
||||
if (_DeviceConfig[i].Inputs[0].PlayerChannel1 > 0)
|
||||
_Buffer[_DeviceConfig[i].Inputs[0].PlayerChannel1 - 1].ProcessNewBuffer(_leftBuffer);
|
||||
|
||||
if (_DeviceConfig[i].Inputs[0].PlayerChannel2 > 0)
|
||||
_Buffer[_DeviceConfig[i].Inputs[0].PlayerChannel2 - 1].ProcessNewBuffer(_rightBuffer);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return cont;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,710 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.Windows.Forms;
|
||||
using System.Xml;
|
||||
using System.Xml.XPath;
|
||||
|
||||
using NAudio;
|
||||
using NAudio.Wave;
|
||||
using NAudio.CoreAudioApi;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
|
||||
namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
class NAudioStream
|
||||
{
|
||||
const float DELAY = 0.15f;
|
||||
|
||||
private string _FileName;
|
||||
|
||||
private IWavePlayer _waveOutDevice;
|
||||
private WaveStream _mainOutputStream;
|
||||
private WaveChannel32 _volumeStream;
|
||||
|
||||
private bool _loaded;
|
||||
private float _Volume = 1f;
|
||||
private float _Position = 0f;
|
||||
|
||||
private Stopwatch _Timer;
|
||||
private float _CurrentTime = 0f;
|
||||
|
||||
private Stopwatch _fadeTimer;
|
||||
|
||||
private float _fadeTime;
|
||||
private float _targetVolume;
|
||||
private float _startVolume;
|
||||
private bool _closeStreamAfterFade = false;
|
||||
private bool _fading = false;
|
||||
|
||||
public int Handle;
|
||||
|
||||
public NAudioStream(string FileName)
|
||||
{
|
||||
_loaded = false;
|
||||
_FileName = FileName;
|
||||
Handle = 0;
|
||||
_Timer = new Stopwatch();
|
||||
_fadeTimer = new Stopwatch();
|
||||
|
||||
try
|
||||
{
|
||||
_waveOutDevice = new WaveOut();
|
||||
_mainOutputStream = CreateInputStream(FileName);
|
||||
_waveOutDevice.Init(_mainOutputStream);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
_loaded = false;
|
||||
}
|
||||
_loaded = true;
|
||||
}
|
||||
|
||||
public void Play()
|
||||
{
|
||||
if (_loaded)
|
||||
{
|
||||
if (IsPaused())
|
||||
{
|
||||
_waveOutDevice.Play();
|
||||
_Timer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
_waveOutDevice.Play();
|
||||
Position = _Position;
|
||||
Volume = _Volume;
|
||||
_CurrentTime = Position;
|
||||
_Timer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
if (_loaded)
|
||||
{
|
||||
_waveOutDevice.Stop();
|
||||
_Timer.Stop();
|
||||
_Timer.Reset();
|
||||
_Position = 0f;
|
||||
_CurrentTime = _Position;
|
||||
}
|
||||
}
|
||||
|
||||
public void Pause()
|
||||
{
|
||||
if (_loaded)
|
||||
{
|
||||
_waveOutDevice.Pause();
|
||||
_Timer.Stop();
|
||||
}
|
||||
}
|
||||
|
||||
public void Close()
|
||||
{
|
||||
CloseWaveOut();
|
||||
_Timer.Stop();
|
||||
}
|
||||
|
||||
public float Length
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_loaded)
|
||||
{
|
||||
TimeSpan tt = _volumeStream.TotalTime;
|
||||
return (float)tt.TotalSeconds;
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
}
|
||||
|
||||
public float Position
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_loaded && _volumeStream != null)
|
||||
{
|
||||
TimeSpan tt = _volumeStream.CurrentTime;
|
||||
float time = (float)tt.TotalSeconds;
|
||||
if (time != _CurrentTime)
|
||||
{
|
||||
_CurrentTime = time;
|
||||
_Timer.Stop();
|
||||
_Timer.Reset();
|
||||
_Timer.Start();
|
||||
}
|
||||
else
|
||||
{
|
||||
time = _CurrentTime + _Timer.ElapsedMilliseconds / 1000f;
|
||||
}
|
||||
|
||||
//Console.WriteLine(time.ToString("#0.000"));
|
||||
return time - DELAY;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (_loaded && _volumeStream != null)
|
||||
{
|
||||
float pos = value;
|
||||
if (pos > Length)
|
||||
pos = Length;
|
||||
|
||||
if (pos < 0L)
|
||||
pos = 0L;
|
||||
|
||||
int skip = (int)(pos - _CurrentTime);
|
||||
|
||||
_volumeStream.Skip(skip);
|
||||
_CurrentTime += skip;
|
||||
}
|
||||
_Position = value;
|
||||
}
|
||||
}
|
||||
|
||||
public float Volume
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_loaded && _volumeStream != null)
|
||||
{
|
||||
return _volumeStream.Volume;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
set
|
||||
{
|
||||
if (_loaded && _volumeStream != null)
|
||||
{
|
||||
float volume = value;
|
||||
if (volume > 1f)
|
||||
volume = 1f;
|
||||
|
||||
if (volume < 0f)
|
||||
volume = 0f;
|
||||
|
||||
_volumeStream.Volume = volume;
|
||||
}
|
||||
_Volume = value;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsPlaying()
|
||||
{
|
||||
if (_loaded && _waveOutDevice != null)
|
||||
return _waveOutDevice.PlaybackState == PlaybackState.Playing;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsPaused()
|
||||
{
|
||||
if (_loaded && _waveOutDevice != null)
|
||||
return _waveOutDevice.PlaybackState == PlaybackState.Paused;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsFinished()
|
||||
{
|
||||
if (_loaded && _waveOutDevice != null)
|
||||
return _waveOutDevice.PlaybackState == PlaybackState.Stopped;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool Update()
|
||||
{
|
||||
if (_fading)
|
||||
{
|
||||
if ((float)_fadeTimer.ElapsedMilliseconds / 1000f < _fadeTime)
|
||||
Volume = _startVolume + (_targetVolume - _startVolume) * ((_fadeTimer.ElapsedMilliseconds / 1000f) / _fadeTime);
|
||||
else
|
||||
{
|
||||
Volume = _targetVolume;
|
||||
_fadeTimer.Stop();
|
||||
_fading = false;
|
||||
|
||||
if (_closeStreamAfterFade)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void Fade(float TargetVolume, float FadeTime)
|
||||
{
|
||||
if (!_loaded || _volumeStream == null)
|
||||
return;
|
||||
|
||||
_fading = true;
|
||||
_fadeTimer.Stop();
|
||||
_fadeTimer.Reset();
|
||||
_startVolume = Volume;
|
||||
_targetVolume = TargetVolume / 100f;
|
||||
_fadeTime = FadeTime;
|
||||
_fadeTimer.Start();
|
||||
}
|
||||
|
||||
public void FadeAndStop(float TargetVolume, float FadeTime)
|
||||
{
|
||||
if (!_loaded || _volumeStream == null)
|
||||
return;
|
||||
|
||||
_closeStreamAfterFade = true;
|
||||
Fade(TargetVolume, FadeTime);
|
||||
}
|
||||
|
||||
private WaveStream CreateInputStream(string fileName)
|
||||
{
|
||||
WaveChannel32 inputStream;
|
||||
if (fileName.EndsWith(".mp3"))
|
||||
{
|
||||
WaveStream mp3Reader = new Mp3FileReader(fileName);
|
||||
inputStream = new WaveChannel32(mp3Reader);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new InvalidOperationException("Unsupported extension");
|
||||
}
|
||||
_volumeStream = inputStream;
|
||||
return _volumeStream;
|
||||
}
|
||||
|
||||
private void CloseWaveOut()
|
||||
{
|
||||
if (_waveOutDevice != null)
|
||||
{
|
||||
_waveOutDevice.Stop();
|
||||
}
|
||||
if (_mainOutputStream != null)
|
||||
{
|
||||
// this one really closes the file and ACM conversion
|
||||
_volumeStream.Close();
|
||||
_volumeStream = null;
|
||||
// this one does the metering stream
|
||||
_mainOutputStream.Close();
|
||||
_mainOutputStream = null;
|
||||
}
|
||||
if (_waveOutDevice != null)
|
||||
{
|
||||
_waveOutDevice.Dispose();
|
||||
_waveOutDevice = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
class CNAudioPlay : IPlayback
|
||||
{
|
||||
private bool _Initialized = false;
|
||||
private int _HandleCounter = 0;
|
||||
private List<NAudioStream> _Streams;
|
||||
|
||||
private Object MutexAudioStreams = new Object();
|
||||
|
||||
public CNAudioPlay()
|
||||
{
|
||||
Init();
|
||||
}
|
||||
|
||||
public bool Init()
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
foreach (NAudioStream stream in _Streams)
|
||||
{
|
||||
stream.Close();
|
||||
}
|
||||
_Streams.Clear();
|
||||
_Initialized = false;
|
||||
}
|
||||
else
|
||||
_Streams = new List<NAudioStream>();
|
||||
|
||||
_Initialized = true;
|
||||
return _Initialized;
|
||||
}
|
||||
|
||||
public void CloseAll()
|
||||
{
|
||||
while (_Streams.Count > 0)
|
||||
{
|
||||
Close(_Streams[_Streams.Count - 1].Handle);
|
||||
}
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
_Streams.Clear();
|
||||
}
|
||||
}
|
||||
|
||||
public void SetGlobalVolume(float Volume)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
//Bass.BASS_SetVolume(Volume / 100f);
|
||||
}
|
||||
}
|
||||
|
||||
public int GetStreamCount()
|
||||
{
|
||||
if (!_Initialized)
|
||||
return 0;
|
||||
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
return _Streams.Count;
|
||||
}
|
||||
}
|
||||
|
||||
public void Update()
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
List<int> StreamsToClose = new List<int>();
|
||||
|
||||
for (int i = 0; i < _Streams.Count; i++)
|
||||
{
|
||||
if (!_Streams[i].Update())
|
||||
StreamsToClose.Add(_Streams[i].Handle);
|
||||
}
|
||||
|
||||
foreach (int stream in StreamsToClose)
|
||||
{
|
||||
Close(stream);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#region Stream Handling
|
||||
public int Load(string Media)
|
||||
{
|
||||
return Load(Media, false);
|
||||
}
|
||||
|
||||
public int Load(string Media, bool Prescan)
|
||||
{
|
||||
if (!_Initialized)
|
||||
return 0;
|
||||
|
||||
//BASSFlag flags = BASSFlag.BASS_DEFAULT;
|
||||
//if (Prescan)
|
||||
// flags = BASSFlag.BASS_STREAM_PRESCAN;
|
||||
|
||||
NAudioStream stream = new NAudioStream(Media);
|
||||
stream.Handle = ++_HandleCounter;
|
||||
//stream.handle = Bass.BASS_StreamCreateFile(Media, 0L, 0L, flags);
|
||||
|
||||
if (stream.Handle != 0)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
_Streams.Add(stream);
|
||||
}
|
||||
|
||||
return stream.Handle;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void Close(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Close();
|
||||
//Bass.BASS_StreamFree(Stream);
|
||||
_Streams.RemoveAt(index);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Play(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Play(Stream, false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Play(int Stream, bool Loop)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Play();
|
||||
//if (Loop)
|
||||
//Bass.BASS_ChannelFlags(Stream, BASSFlag.BASS_SAMPLE_LOOP, BASSFlag.BASS_SAMPLE_LOOP);
|
||||
|
||||
//Bass.BASS_ChannelPlay(Stream, false);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Pause(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Pause();
|
||||
//Bass.BASS_ChannelPause(Stream);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Stop();
|
||||
//Bass.BASS_ChannelStop(Stream);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void Fade(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Fade(TargetVolume, Seconds);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndStop(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
//Stop(Stream);
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].FadeAndStop(TargetVolume, Seconds);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void SetStreamVolume(int Stream, float Volume)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Volume = Volume / 100f;
|
||||
//Bass.BASS_ChannelSetAttribute(Stream, BASSAttribute.BASS_ATTRIB_VOL, Volume / 100f);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public float GetLength(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
return _Streams[index].Length;
|
||||
//long len = Bass.BASS_ChannelGetLength(Stream);
|
||||
//return (float)Bass.BASS_ChannelBytes2Seconds(Stream, len);
|
||||
}
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public float GetPosition(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
return _Streams[index].Position;
|
||||
//long pos = Bass.BASS_ChannelGetPosition(Stream);
|
||||
//return (float)Bass.BASS_ChannelBytes2Seconds(Stream, pos);
|
||||
}
|
||||
}
|
||||
|
||||
return 0f;
|
||||
}
|
||||
return 0f;
|
||||
}
|
||||
|
||||
public bool IsPlaying(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
return _Streams[index].IsPlaying();
|
||||
//return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_PLAYING);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsPaused(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
return _Streams[index].IsPaused();
|
||||
//return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_PAUSED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public bool IsFinished(int Stream)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
return _Streams[index].IsFinished();
|
||||
//return (Bass.BASS_ChannelIsActive(Stream) == BASSActive.BASS_ACTIVE_STOPPED);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void SetPosition(int Stream, float Position)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexAudioStreams)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
int index = GetStreamIndex(Stream);
|
||||
_Streams[index].Position = Position;
|
||||
//Bass.BASS_ChannelSetPosition(Stream, Position);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
#endregion Stream Handling
|
||||
|
||||
|
||||
private bool AlreadyAdded(int Stream)
|
||||
{
|
||||
foreach (NAudioStream st in _Streams)
|
||||
{
|
||||
if (st.Handle == Stream)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private int GetStreamIndex(int Stream)
|
||||
{
|
||||
for (int i = 0; i < _Streams.Count; i++)
|
||||
{
|
||||
if (_Streams[i].Handle == Stream)
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
private void EndSync(int handle, int Stream, int data, IntPtr user)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
Close(Stream);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -146,6 +146,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
_Decoder[GetStreamIndex(Stream)].Loop = Loop;
|
||||
_Decoder[GetStreamIndex(Stream)].Play();
|
||||
}
|
||||
}
|
||||
@@ -188,6 +189,21 @@ namespace Vocaluxe.Lib.Sound
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndPause(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexDecoder)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
_Decoder[GetStreamIndex(Stream)].FadeAndPause(TargetVolume, Seconds);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndStop(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
@@ -390,6 +406,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
private float _targetVolume = 1f;
|
||||
private float _startVolume = 1f;
|
||||
private bool _closeStreamAfterFade = false;
|
||||
private bool _pauseStreamAfterFade = false;
|
||||
private bool _fading = false;
|
||||
|
||||
|
||||
@@ -528,6 +545,12 @@ namespace Vocaluxe.Lib.Sound
|
||||
_fadeTimer.Start();
|
||||
}
|
||||
|
||||
public void FadeAndPause(float TargetVolume, float FadeTime)
|
||||
{
|
||||
_pauseStreamAfterFade = true;
|
||||
Fade(TargetVolume, FadeTime);
|
||||
}
|
||||
|
||||
public void FadeAndStop(float TargetVolume, float FadeTime, CLOSEPROC close_proc, int StreamID)
|
||||
{
|
||||
_Closeproc = close_proc;
|
||||
@@ -539,12 +562,14 @@ namespace Vocaluxe.Lib.Sound
|
||||
public void Play()
|
||||
{
|
||||
Paused = false;
|
||||
_pauseStreamAfterFade = false;
|
||||
AL.SourcePlay(_source);
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
AL.SourceStop(_source);
|
||||
Skip(0f);
|
||||
}
|
||||
|
||||
public bool Loop
|
||||
@@ -756,6 +781,9 @@ namespace Vocaluxe.Lib.Sound
|
||||
|
||||
if (_closeStreamAfterFade)
|
||||
_terminated = true;
|
||||
|
||||
if (_pauseStreamAfterFade)
|
||||
Paused = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,6 +130,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
_Decoder[GetStreamIndex(Stream)].Loop = Loop;
|
||||
_Decoder[GetStreamIndex(Stream)].Play();
|
||||
}
|
||||
}
|
||||
@@ -172,6 +173,21 @@ namespace Vocaluxe.Lib.Sound
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndPause(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
{
|
||||
lock (MutexDecoder)
|
||||
{
|
||||
if (AlreadyAdded(Stream))
|
||||
{
|
||||
_Decoder[GetStreamIndex(Stream)].FadeAndPause(TargetVolume, Seconds);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void FadeAndStop(int Stream, float TargetVolume, float Seconds)
|
||||
{
|
||||
if (_Initialized)
|
||||
@@ -366,6 +382,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
private float _targetVolume = 1f;
|
||||
private float _startVolume = 1f;
|
||||
private bool _closeStreamAfterFade = false;
|
||||
private bool _pauseStreamAfterFade = false;
|
||||
private bool _fading = false;
|
||||
|
||||
|
||||
@@ -507,6 +524,13 @@ namespace Vocaluxe.Lib.Sound
|
||||
_fadeTimer.Start();
|
||||
}
|
||||
|
||||
public void FadeAndPause(float TargetVolume, float FadeTime)
|
||||
{
|
||||
_pauseStreamAfterFade = true;
|
||||
|
||||
Fade(TargetVolume, FadeTime);
|
||||
}
|
||||
|
||||
public void FadeAndStop(float TargetVolume, float FadeTime, CLOSEPROC close_proc, int StreamID)
|
||||
{
|
||||
_Closeproc = close_proc;
|
||||
@@ -519,12 +543,14 @@ namespace Vocaluxe.Lib.Sound
|
||||
public void Play()
|
||||
{
|
||||
Paused = false;
|
||||
_pauseStreamAfterFade = false;
|
||||
errorCheck("StartStream", PortAudio.Pa_StartStream(_Ptr));
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
errorCheck("StartStream", PortAudio.Pa_StopStream(_Ptr));
|
||||
Skip(0f);
|
||||
}
|
||||
|
||||
public bool Loop
|
||||
@@ -594,7 +620,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
IntPtr.Zero,
|
||||
ref outputParams,
|
||||
format.SamplesPerSecond,
|
||||
0,//CConfig.PortAudioBufferSize,
|
||||
(uint)CConfig.AudioBufferSize,
|
||||
PortAudio.PaStreamFlags.paNoFlag,
|
||||
_paStreamCallback,
|
||||
data));
|
||||
@@ -651,6 +677,21 @@ namespace Vocaluxe.Lib.Sound
|
||||
{
|
||||
if (EventDecode.WaitOne(10))
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
if (_SetSkip)
|
||||
{
|
||||
_skip = true;
|
||||
EventDecode.Set();
|
||||
_waiting = true;
|
||||
}
|
||||
|
||||
_SetSkip = false;
|
||||
|
||||
_Start = _SetStart;
|
||||
_Loop = _SetLoop;
|
||||
}
|
||||
|
||||
if (_skip)
|
||||
{
|
||||
DoSkip();
|
||||
@@ -663,25 +704,6 @@ namespace Vocaluxe.Lib.Sound
|
||||
Update();
|
||||
}
|
||||
}
|
||||
|
||||
if (!_terminated)
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
if (_SetSkip)
|
||||
{
|
||||
_skip = true;
|
||||
EventDecode.Set();
|
||||
_waiting = true;
|
||||
}
|
||||
|
||||
_SetSkip = false;
|
||||
|
||||
_Start = _SetStart;
|
||||
_Loop = _SetLoop;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DoFree();
|
||||
@@ -818,7 +840,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
else
|
||||
_waiting = true;
|
||||
|
||||
float latency = buf.Length / _BytesPerSecond;
|
||||
float latency = buf.Length / _BytesPerSecond + CConfig.AudioLatency/1000f;
|
||||
float time = _TimeCode - _data.BytesNotRead / _BytesPerSecond - latency;
|
||||
|
||||
_CurrentTime = _SyncTimer.Update(time);
|
||||
@@ -830,7 +852,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine(e.ToString());
|
||||
CLog.LogError("Error PortAudio.StreamCallback: " + e.Message);
|
||||
}
|
||||
|
||||
return PortAudio.PaStreamCallbackResult.paContinue;
|
||||
@@ -889,6 +911,9 @@ namespace Vocaluxe.Lib.Sound
|
||||
|
||||
if (_closeStreamAfterFade)
|
||||
_terminated = true;
|
||||
|
||||
if (_pauseStreamAfterFade)
|
||||
Paused = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -84,10 +84,10 @@ namespace Vocaluxe.Lib.Sound
|
||||
|
||||
_DeviceConfig = _Devices.ToArray();
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
_initialized = false;
|
||||
CLog.LogError("Error initializing PortAudio");
|
||||
CLog.LogError("Error initializing PortAudio: " + e.Message);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
@@ -245,6 +245,9 @@ namespace Vocaluxe.Lib.Sound
|
||||
if (!_initialized)
|
||||
return null;
|
||||
|
||||
if (_Devices.Count == 0)
|
||||
return null;
|
||||
|
||||
return _Devices.ToArray();
|
||||
}
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ namespace Vocaluxe.Lib.Sound
|
||||
void Pause(int Stream);
|
||||
void Stop(int Stream);
|
||||
void Fade(int Stream, float TargetVolume, float Seconds);
|
||||
void FadeAndPause(int Stream, float TargetVolume, float Seconds);
|
||||
void FadeAndStop(int Stream, float TargetVolume, float Seconds);
|
||||
void SetStreamVolume(int Stream, float Volume);
|
||||
|
||||
|
||||
@@ -22,6 +22,9 @@
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
|
||||
namespace PortAudioSharp {
|
||||
|
||||
@@ -274,11 +277,18 @@ namespace PortAudioSharp {
|
||||
#endregion
|
||||
|
||||
#region **** PORTAUDIO FUNCTIONS ****
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
#if ARCH_X86
|
||||
private const string PaDll = "x86\\PortAudio.dll";
|
||||
#endif
|
||||
|
||||
#if ARCH_X64
|
||||
private const string PaDll = "x64\\PortAudio.dll";
|
||||
#endif
|
||||
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetVersion();
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetVersionText")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetVersionText")]
|
||||
private static extern IntPtr IntPtr_Pa_GetVersionText();
|
||||
|
||||
public static string Pa_GetVersionText() {
|
||||
@@ -286,7 +296,7 @@ namespace PortAudioSharp {
|
||||
return Marshal.PtrToStringAnsi(strptr);
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetErrorText")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetErrorText")]
|
||||
public static extern IntPtr IntPtr_Pa_GetErrorText(PaError errorCode);
|
||||
|
||||
public static string Pa_GetErrorText(PaError errorCode) {
|
||||
@@ -294,19 +304,19 @@ namespace PortAudioSharp {
|
||||
return Marshal.PtrToStringAnsi(strptr);
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_Initialize();
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_Terminate();
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetHostApiCount();
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetDefaultHostApi();
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetHostApiInfo")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetHostApiInfo")]
|
||||
public static extern IntPtr IntPtr_Pa_GetHostApiInfo(int hostApi);
|
||||
|
||||
public static PaHostApiInfo Pa_GetHostApiInfo(int hostApi) {
|
||||
@@ -314,13 +324,13 @@ namespace PortAudioSharp {
|
||||
return (PaHostApiInfo) Marshal.PtrToStructure(structptr, typeof(PaHostApiInfo));
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_HostApiTypeIdToHostApiIndex(PaHostApiTypeId type);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_HostApiDeviceIndexToDeviceIndex(int hostApi, int hostApiDeviceIndex);
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetLastHostErrorInfo")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetLastHostErrorInfo")]
|
||||
public static extern IntPtr IntPtr_Pa_GetLastHostErrorInfo();
|
||||
|
||||
public static PaHostErrorInfo Pa_GetLastHostErrorInfo() {
|
||||
@@ -328,16 +338,16 @@ namespace PortAudioSharp {
|
||||
return (PaHostErrorInfo) Marshal.PtrToStructure(structptr, typeof(PaHostErrorInfo));
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetDeviceCount();
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetDefaultInputDevice();
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetDefaultOutputDevice();
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetDeviceInfo")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetDeviceInfo")]
|
||||
public static extern IntPtr IntPtr_Pa_GetDeviceInfo(int device);
|
||||
|
||||
public static PaDeviceInfo Pa_GetDeviceInfo(int device) {
|
||||
@@ -345,13 +355,13 @@ namespace PortAudioSharp {
|
||||
return (PaDeviceInfo) Marshal.PtrToStructure(structptr, typeof(PaDeviceInfo));
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_IsFormatSupported(
|
||||
ref PaStreamParameters inputParameters,
|
||||
ref PaStreamParameters outputParameters,
|
||||
double sampleRate);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_OpenStream(
|
||||
out IntPtr stream,
|
||||
ref PaStreamParameters inputParameters,
|
||||
@@ -362,7 +372,7 @@ namespace PortAudioSharp {
|
||||
PaStreamCallbackDelegate streamCallback,
|
||||
IntPtr userData);
|
||||
|
||||
[DllImport("PortAudio.dll")]
|
||||
[DllImport(PaDll)]
|
||||
public static extern PaError Pa_OpenStream(
|
||||
out IntPtr stream,
|
||||
ref PaStreamParameters inputParameters,
|
||||
@@ -373,7 +383,7 @@ namespace PortAudioSharp {
|
||||
PaStreamCallbackDelegate streamCallback,
|
||||
IntPtr userData);
|
||||
|
||||
[DllImport("PortAudio.dll")]
|
||||
[DllImport(PaDll)]
|
||||
public static extern PaError Pa_OpenStream(
|
||||
out IntPtr stream,
|
||||
IntPtr inputParameters,
|
||||
@@ -384,7 +394,7 @@ namespace PortAudioSharp {
|
||||
PaStreamCallbackDelegate streamCallback,
|
||||
IntPtr userData);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_OpenDefaultStream(
|
||||
out IntPtr stream,
|
||||
int numInputChannels,
|
||||
@@ -395,30 +405,30 @@ namespace PortAudioSharp {
|
||||
PaStreamCallbackDelegate streamCallback,
|
||||
IntPtr userData);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_CloseStream(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_SetStreamFinishedCallback(
|
||||
ref IntPtr stream,
|
||||
[MarshalAs(UnmanagedType.FunctionPtr)]PaStreamFinishedCallbackDelegate streamFinishedCallback);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_StartStream(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_StopStream(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_AbortStream(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_IsStreamStopped(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_IsStreamActive(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll",EntryPoint="Pa_GetStreamInfo")]
|
||||
[DllImport (PaDll,EntryPoint="Pa_GetStreamInfo")]
|
||||
public static extern IntPtr IntPtr_Pa_GetStreamInfo(IntPtr stream);
|
||||
|
||||
public static PaStreamInfo Pa_GetStreamInfo(IntPtr stream) {
|
||||
@@ -426,106 +436,106 @@ namespace PortAudioSharp {
|
||||
return (PaStreamInfo) Marshal.PtrToStructure(structptr,typeof(PaStreamInfo));
|
||||
}
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern double Pa_GetStreamTime(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern double Pa_GetStreamCpuLoad(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]float[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]byte[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]sbyte[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]ushort[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]short[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]uint[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_ReadStream(
|
||||
IntPtr stream,
|
||||
[Out]int[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]float[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]byte[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]sbyte[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]ushort[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]short[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]uint[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_WriteStream(
|
||||
IntPtr stream,
|
||||
[In]int[] buffer,
|
||||
uint frames);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetStreamReadAvailable(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern int Pa_GetStreamWriteAvailable(IntPtr stream);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern PaError Pa_GetSampleSize(PaSampleFormat format);
|
||||
|
||||
[DllImport ("PortAudio.dll")]
|
||||
[DllImport (PaDll)]
|
||||
public static extern void Pa_Sleep(int msec);
|
||||
|
||||
#endregion
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
|
||||
using Vocaluxe.Base;
|
||||
|
||||
namespace Vocaluxe.Lib.Video.Acinerella
|
||||
{
|
||||
@@ -38,22 +41,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public struct TAc_file_info
|
||||
{
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
|
||||
public string title;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
|
||||
public string author;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
|
||||
public string copyright;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
|
||||
public string comment;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 512)]
|
||||
public string album;
|
||||
public Int32 year;
|
||||
public Int32 track;
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
|
||||
public string genre;
|
||||
public Int64 duration;
|
||||
public Int32 bitrate;
|
||||
}
|
||||
|
||||
// TAc_instance represents an Acinerella instance. Each instance can open and
|
||||
@@ -170,7 +158,14 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
|
||||
public static class CAcinerella
|
||||
{
|
||||
private const string AcDll = "acinerella.dll";
|
||||
#if ARCH_X86
|
||||
private const string AcDll = "x86\\acinerella.dll";
|
||||
#endif
|
||||
|
||||
#if ARCH_X64
|
||||
private const string AcDll = "x64\\acinerella.dll";
|
||||
#endif
|
||||
|
||||
private static Object _lock = new Object();
|
||||
|
||||
// Defines the type of an Acinerella media stream. Currently only video and
|
||||
@@ -180,7 +175,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// Initializes an Acinerella instance.
|
||||
//function ac_init(): PAc_instance; cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_init", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern IntPtr _ac_init();
|
||||
private static extern IntPtr _ac_init();
|
||||
|
||||
public static IntPtr ac_init()
|
||||
{
|
||||
@@ -193,7 +188,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// Frees an Acinerella instance.
|
||||
//procedure ac_free(inst: PAc_instance); cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_free", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern void _ac_free(IntPtr PAc_instance);
|
||||
private static extern void _ac_free(IntPtr PAc_instance);
|
||||
|
||||
public static void ac_free(IntPtr PAc_instance)
|
||||
{
|
||||
@@ -221,7 +216,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
proberesult: PAc_proberesult): integer; cdecl; external ac_dll;
|
||||
*/
|
||||
[DllImport(AcDll, EntryPoint = "ac_open", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_open(
|
||||
private static extern Int32 _ac_open(
|
||||
IntPtr PAc_instance,
|
||||
IntPtr sender,
|
||||
TAc_openclose_callback open_proc,
|
||||
@@ -250,7 +245,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// Closes an opened media file.
|
||||
//procedure ac_close(inst: PAc_instance);cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_close", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern void _ac_close(IntPtr PAc_instance);
|
||||
private static extern void _ac_close(IntPtr PAc_instance);
|
||||
|
||||
public static void ac_close(IntPtr PAc_instance)
|
||||
{
|
||||
@@ -264,7 +259,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
//procedure ac_get_stream_info(
|
||||
//inst: PAc_instance; nb: integer; pinfo: PAc_stream_info); cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_get_stream_info", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern void _ac_get_stream_info(
|
||||
private static extern void _ac_get_stream_info(
|
||||
IntPtr PAc_instance,
|
||||
Int32 nb,
|
||||
out TAc_stream_info Info
|
||||
@@ -300,7 +295,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// could be found.
|
||||
//function ac_create_decoder(pacInstance: PAc_instance; nb: integer): PAc_decoder; cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_create_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern IntPtr _ac_create_decoder(IntPtr PAc_instance, Int32 nb);
|
||||
private static extern IntPtr _ac_create_decoder(IntPtr PAc_instance, Int32 nb);
|
||||
|
||||
public static IntPtr ac_create_decoder(IntPtr PAc_instance, Int32 nb)
|
||||
{
|
||||
@@ -313,7 +308,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// Frees an created decoder.
|
||||
//procedure ac_free_decoder(pDecoder: PAc_decoder); cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_free_decoder", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern void _ac_free_decoder(IntPtr PAc_decoder);
|
||||
private static extern void _ac_free_decoder(IntPtr PAc_decoder);
|
||||
|
||||
public static void ac_free_decoder(IntPtr PAc_decoder)
|
||||
{
|
||||
@@ -327,7 +322,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// "buffer" property of the decoder.
|
||||
//function ac_decode_package(pPackage: PAc_package; pDecoder: PAc_decoder): integer; cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_decode_package", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_decode_package(IntPtr PAc_package, IntPtr PAc_decoder);
|
||||
private static extern Int32 _ac_decode_package(IntPtr PAc_package, IntPtr PAc_decoder);
|
||||
|
||||
public static Int32 ac_decode_package(IntPtr PAc_package, IntPtr PAc_decoder)
|
||||
{
|
||||
@@ -338,7 +333,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
}
|
||||
|
||||
[DllImport(AcDll, EntryPoint = "ac_get_audio_frame", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_get_audio_frame(IntPtr PAcInstance, IntPtr PAc_decoder);
|
||||
private static extern Int32 _ac_get_audio_frame(IntPtr PAcInstance, IntPtr PAc_decoder);
|
||||
|
||||
public static Int32 ac_get_audio_frame(IntPtr PAcInstance, IntPtr PAc_decoder)
|
||||
{
|
||||
@@ -349,7 +344,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
}
|
||||
|
||||
[DllImport(AcDll, EntryPoint = "ac_get_frame", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_get_frame(IntPtr PAcInstance, IntPtr PAc_decoder);
|
||||
private static extern Int32 _ac_get_frame(IntPtr PAcInstance, IntPtr PAc_decoder);
|
||||
|
||||
|
||||
public static Int32 ac_get_frame(IntPtr PAcInstance, IntPtr PAc_decoder)
|
||||
@@ -360,7 +355,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
}
|
||||
}
|
||||
[DllImport(AcDll, EntryPoint = "ac_skip_frames", ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_skip_frames(IntPtr PAcInstance, IntPtr PAc_decoder, Int32 num);
|
||||
private static extern Int32 _ac_skip_frames(IntPtr PAcInstance, IntPtr PAc_decoder, Int32 num);
|
||||
|
||||
public static Int32 ac_skip_frames(IntPtr PAcInstance, IntPtr PAc_decoder, Int32 num)
|
||||
{
|
||||
@@ -376,7 +371,7 @@ namespace Vocaluxe.Lib.Video.Acinerella
|
||||
// The target_pos paremeter is in milliseconds. Returns 1 if the functions succeded.}
|
||||
//function ac_seek(pDecoder: PAc_decoder; dir: integer; target_pos: int64): integer; cdecl; external ac_dll;
|
||||
[DllImport(AcDll, EntryPoint = "ac_seek", ExactSpelling = false, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto)]
|
||||
public static extern Int32 _ac_seek(IntPtr PAc_decoder, Int32 dir, Int64 target_pos);
|
||||
private static extern Int32 _ac_seek(IntPtr PAc_decoder, Int32 dir, Int64 target_pos);
|
||||
|
||||
public static Int32 ac_seek(IntPtr PAc_decoder, Int32 dir, Int64 target_pos)
|
||||
{
|
||||
|
||||
@@ -105,16 +105,7 @@ typedef ac_package_data* lp_ac_package_data;
|
||||
|
||||
void init_info(lp_ac_file_info info)
|
||||
{
|
||||
info->title[0] = 0;
|
||||
info->author[0] = 0;
|
||||
info->copyright[0] = 0;
|
||||
info->comment[0] = 0;
|
||||
info->album[0] = 0;
|
||||
info->year = -1;
|
||||
info->track = -1;
|
||||
info->genre[0] = 0;
|
||||
info->duration = -1;
|
||||
info->bitrate = -1;
|
||||
}
|
||||
|
||||
int av_initialized = 0;
|
||||
@@ -361,20 +352,7 @@ int CALL_CONVT ac_open(
|
||||
|
||||
//Retrieve stream information
|
||||
AVFormatContext *ctx = ((lp_ac_data)pacInstance)->pFormatCtx;
|
||||
if(avformat_find_stream_info(ctx, NULL) >= 0) {
|
||||
/*
|
||||
strcpy(pacInstance->info.title, ctx->title);
|
||||
strcpy(pacInstance->info.author, ctx->author);
|
||||
strcpy(pacInstance->info.copyright, ctx->copyright);
|
||||
strcpy(pacInstance->info.comment, ctx->comment);
|
||||
strcpy(pacInstance->info.album, ctx->album);
|
||||
strcpy(pacInstance->info.genre, ctx->genre);
|
||||
|
||||
pacInstance->info.year = ctx->year;
|
||||
pacInstance->info.track = ctx->track;
|
||||
pacInstance->info.bitrate = ctx->bit_rate;
|
||||
*/
|
||||
|
||||
if(avformat_find_stream_info(ctx, NULL) >= 0) {
|
||||
pacInstance->info.duration = ctx->duration * 1000 / AV_TIME_BASE;
|
||||
} else {
|
||||
return -1;
|
||||
@@ -658,16 +636,17 @@ double ac_sync_video(lp_ac_package pPackage, lp_ac_decoder pDec, AVFrame *src_fr
|
||||
}
|
||||
|
||||
int ac_decode_video_package(lp_ac_package pPackage, lp_ac_video_decoder pDecoder, lp_ac_decoder pDec) {
|
||||
int finished;
|
||||
double pts;
|
||||
if (((lp_ac_package_data)pPackage)->ffpackage.size <= 0)
|
||||
return 0;
|
||||
|
||||
int finished = 0;
|
||||
double pts = 0;
|
||||
|
||||
avcodec_decode_video2(
|
||||
pDecoder->pCodecCtx, pDecoder->pFrame, &finished,
|
||||
&(((lp_ac_package_data)pPackage)->ffpackage));
|
||||
|
||||
&(((lp_ac_package_data)pPackage)->ffpackage));
|
||||
|
||||
if (finished) {
|
||||
pts=0;
|
||||
|
||||
if(((lp_ac_package_data)pPackage)->ffpackage.dts == AV_NOPTS_VALUE &&
|
||||
*(uint64_t*)pDecoder->pFrame->opaque != AV_NOPTS_VALUE ){
|
||||
pts = *(uint64_t*)pDecoder->pFrame->opaque;
|
||||
|
||||
@@ -68,21 +68,8 @@ typedef enum _ac_output_format ac_output_format;
|
||||
/*Contains information about the whole file/stream that has been opened. Default values are ""
|
||||
for strings and -1 for integer values.*/
|
||||
struct _ac_file_info {
|
||||
/*Information about the file*/
|
||||
char title[512];
|
||||
char author[512];
|
||||
char copyright[512];
|
||||
char comment[512];
|
||||
char album[512];
|
||||
int year;
|
||||
int track;
|
||||
char genre[32];
|
||||
|
||||
/*Length of the file*/
|
||||
int64_t duration;
|
||||
|
||||
/*Bitrate*/
|
||||
int bitrate;
|
||||
};
|
||||
|
||||
typedef struct _ac_file_info ac_file_info;
|
||||
|
||||
@@ -214,36 +214,38 @@ namespace Vocaluxe.Lib.Video
|
||||
|
||||
class Decoder
|
||||
{
|
||||
private IntPtr _instance = IntPtr.Zero;
|
||||
private IntPtr _videodecoder = IntPtr.Zero;
|
||||
private IntPtr _package = IntPtr.Zero;
|
||||
private Stopwatch _Timer = new Stopwatch();
|
||||
private CLOSEPROC _Closeproc;
|
||||
private int _StreamID;
|
||||
private string _FileName;
|
||||
private IntPtr _instance = IntPtr.Zero; // acinerella instance
|
||||
private IntPtr _videodecoder = IntPtr.Zero; // acinerella video decoder instance
|
||||
|
||||
private Stopwatch _LoopTimer = new Stopwatch();
|
||||
private CLOSEPROC _Closeproc; // delegate for stream closing
|
||||
private int _StreamID; // stream ID for stream closing
|
||||
private string _FileName; // current video file name
|
||||
|
||||
private FileStream _fs;
|
||||
private TAc_read_callback _rc;
|
||||
private TAc_seek_callback _sc;
|
||||
private FileStream _fs; // video file stream
|
||||
private TAc_read_callback _rc; // read callback for acinerella
|
||||
private TAc_seek_callback _sc; // seek callback for acinerella
|
||||
|
||||
private bool _FileOpened = false;
|
||||
|
||||
private float _VideoTimeBase = 0f;
|
||||
private float _VideoTime = 0f;
|
||||
private float _ActualVideoTime = 0f;
|
||||
private bool _waiting = false;
|
||||
private bool _skip = false;
|
||||
private float _VideoTimeBase = 0f; // frame time
|
||||
private float _VideoDecoderTime = 0f; // time of last decoded frame
|
||||
private float _CurrentVideoTime = 0f; // current video position
|
||||
private bool _BufferFull = false; // buffer is full, waiting for free frame slot
|
||||
|
||||
private bool _skip = false; // do skip
|
||||
private float _Time = 0f;
|
||||
private float _Gap = 0f;
|
||||
private float _Start = 0f;
|
||||
private bool _Loop = false;
|
||||
private float _Duration = 0f;
|
||||
private float _VideoSkipTime = 0f;
|
||||
private float _NegativeSkipTime = 0f;
|
||||
private float _SkipTime = 0f;
|
||||
private float _VideoSkipTime = 0f; // = VideoGap
|
||||
private float _SkipTime = 0f; // = Start + VideoGap
|
||||
|
||||
private bool _Paused = false;
|
||||
private bool _NoMoreFrames = false;
|
||||
private bool _Finished = false;
|
||||
private bool _BeforeLoop = false;
|
||||
|
||||
|
||||
private int _Width = 0;
|
||||
@@ -259,7 +261,6 @@ namespace Vocaluxe.Lib.Video
|
||||
AutoResetEvent EventDecode = new AutoResetEvent(false);
|
||||
SFrameBuffer[] _FrameBuffer = new SFrameBuffer[5];
|
||||
Object MutexFramebuffer = new Object();
|
||||
Object MutexFrame = new Object();
|
||||
Object MutexSyncSignals = new Object();
|
||||
|
||||
public Decoder()
|
||||
@@ -292,15 +293,16 @@ namespace Vocaluxe.Lib.Video
|
||||
get { return _Paused; }
|
||||
set
|
||||
{
|
||||
_Paused = value;
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_Paused = value;
|
||||
if (_Paused)
|
||||
_Timer.Stop();
|
||||
{
|
||||
_LoopTimer.Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
_Timer.Start();
|
||||
EventDecode.Set();
|
||||
_LoopTimer.Start();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -314,7 +316,10 @@ namespace Vocaluxe.Lib.Video
|
||||
|
||||
public bool Finished
|
||||
{
|
||||
get { return _Finished; }
|
||||
get
|
||||
{
|
||||
return _Finished;
|
||||
}
|
||||
}
|
||||
|
||||
public bool Open(string FileName)
|
||||
@@ -326,7 +331,7 @@ namespace Vocaluxe.Lib.Video
|
||||
return false;
|
||||
|
||||
_FileName = FileName;
|
||||
_thread.Priority = ThreadPriority.Highest;
|
||||
_thread.Priority = ThreadPriority.Normal;
|
||||
_thread.Name = Path.GetFileName(FileName);
|
||||
_thread.Start();
|
||||
return true;
|
||||
@@ -344,12 +349,12 @@ namespace Vocaluxe.Lib.Video
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_SetTime += _Timer.ElapsedMilliseconds / 1000f;
|
||||
_SetTime += _LoopTimer.ElapsedMilliseconds / 1000f;
|
||||
VideoTime = _SetTime;
|
||||
|
||||
_Timer.Stop();
|
||||
_Timer.Reset();
|
||||
_Timer.Start();
|
||||
_LoopTimer.Stop();
|
||||
_LoopTimer.Reset();
|
||||
_LoopTimer.Start();
|
||||
}
|
||||
|
||||
|
||||
@@ -358,12 +363,12 @@ namespace Vocaluxe.Lib.Video
|
||||
return true;
|
||||
}
|
||||
|
||||
if (_Time - _SetTime >= 0 || _SetTime > Time)
|
||||
if (_SetTime != Time)
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_SetTime = Time;
|
||||
VideoTime = _VideoTime;
|
||||
VideoTime = _CurrentVideoTime;
|
||||
}
|
||||
UploadNewFrame(ref frame);
|
||||
EventDecode.Set();
|
||||
@@ -389,41 +394,41 @@ namespace Vocaluxe.Lib.Video
|
||||
|
||||
#region Threading
|
||||
private void DoSkip()
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_VideoSkipTime = _Gap;
|
||||
_NegativeSkipTime = _Start + _Gap;
|
||||
_SkipTime = _Start + _Gap;
|
||||
}
|
||||
|
||||
{
|
||||
_VideoSkipTime = _Gap;
|
||||
_SkipTime = _Start + _Gap;
|
||||
_BeforeLoop = false;
|
||||
|
||||
if (_SkipTime > 0)
|
||||
{
|
||||
_VideoTime = _SkipTime;
|
||||
_VideoDecoderTime = _SkipTime;
|
||||
try
|
||||
{
|
||||
CAcinerella.ac_seek(_videodecoder, -1, (Int64)(_SkipTime * 1000f));
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
;
|
||||
CLog.LogError("Error seeking video file \"" + _FileName + "\": " + e.Message);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_VideoTime = 0f;
|
||||
_VideoDecoderTime = 0f;
|
||||
try
|
||||
{
|
||||
CAcinerella.ac_seek(_videodecoder, -1, (Int64)0);
|
||||
}
|
||||
catch (Exception)
|
||||
catch (Exception e)
|
||||
{
|
||||
;
|
||||
CLog.LogError("Error seeking video file \"" + _FileName + "\": " + e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
_ActualVideoTime = _VideoTime;
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_CurrentVideoTime = _VideoDecoderTime;
|
||||
}
|
||||
|
||||
lock (MutexFramebuffer)
|
||||
{
|
||||
@@ -434,46 +439,41 @@ namespace Vocaluxe.Lib.Video
|
||||
}
|
||||
}
|
||||
|
||||
_waiting = false;
|
||||
_BufferFull = false;
|
||||
_skip = false;
|
||||
EventDecode.Set();
|
||||
}
|
||||
|
||||
private void Execute()
|
||||
{
|
||||
DoOpen();
|
||||
|
||||
EventDecode.Set();
|
||||
|
||||
while (!_terminated)
|
||||
{
|
||||
if (EventDecode.WaitOne(1) || !_waiting)
|
||||
{
|
||||
if (_skip)
|
||||
{
|
||||
DoSkip();
|
||||
_skip = false;
|
||||
}
|
||||
|
||||
if (!_waiting)
|
||||
{
|
||||
DoDecode();
|
||||
}
|
||||
|
||||
if (_waiting)
|
||||
Copy();
|
||||
}
|
||||
if (!_terminated)
|
||||
if (EventDecode.WaitOne(10))
|
||||
{
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_Time = _SetTime;
|
||||
if (_SetSkip)
|
||||
_skip = true;
|
||||
|
||||
|
||||
_SetSkip = false;
|
||||
_Gap = _SetGap;
|
||||
_Start = _SetStart;
|
||||
_Loop = _SetLoop;
|
||||
}
|
||||
|
||||
if (_skip)
|
||||
DoSkip();
|
||||
|
||||
if (!_BufferFull)
|
||||
DoDecode();
|
||||
|
||||
if (_BufferFull)
|
||||
Copy();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
DoFree();
|
||||
@@ -539,7 +539,7 @@ namespace Vocaluxe.Lib.Video
|
||||
if (Videodecoder.stream_info.video_info.frames_per_second > 0)
|
||||
_VideoTimeBase = 1f / (float)Videodecoder.stream_info.video_info.frames_per_second;
|
||||
|
||||
_VideoTime = 0f;
|
||||
_VideoDecoderTime = 0f;
|
||||
_Time = 0f;
|
||||
|
||||
for (int i = 0; i < _FrameBuffer.Length; i++)
|
||||
@@ -558,14 +558,14 @@ namespace Vocaluxe.Lib.Video
|
||||
if (!_FileOpened)
|
||||
return;
|
||||
|
||||
if (_Paused || _NoMoreFrames)
|
||||
if (_Paused || _NoMoreFrames || _BufferFull)
|
||||
return;
|
||||
|
||||
if ((_NegativeSkipTime < 0f) && (_Time + _NegativeSkipTime >= 0f))
|
||||
_NegativeSkipTime = 0f;
|
||||
if ((_SkipTime < 0f) && (_Time + _SkipTime >= 0f))
|
||||
_SkipTime = 0f;
|
||||
|
||||
float myTime = _Time + _VideoSkipTime;
|
||||
float TimeDifference = myTime - _VideoTime;
|
||||
float TimeDifference = myTime - _VideoDecoderTime;
|
||||
|
||||
bool DropFrame = false;
|
||||
if (TimeDifference >= (FRAMEDROPCOUNT - 1) * _VideoTimeBase)
|
||||
@@ -575,7 +575,7 @@ namespace Vocaluxe.Lib.Video
|
||||
return;
|
||||
|
||||
int FrameFinished = 0;
|
||||
if (DropFrame)
|
||||
if (DropFrame && !_BeforeLoop)
|
||||
{
|
||||
try
|
||||
{
|
||||
@@ -588,19 +588,15 @@ namespace Vocaluxe.Lib.Video
|
||||
|
||||
}
|
||||
|
||||
if (!DropFrame || FrameFinished != 0)
|
||||
if (!_BeforeLoop && (!DropFrame || FrameFinished != 0))
|
||||
{
|
||||
lock (MutexFrame)
|
||||
try
|
||||
{
|
||||
try
|
||||
{
|
||||
FrameFinished = CAcinerella.ac_get_frame(_instance, _videodecoder);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
CLog.LogError("Error AcGetFrame " + _FileName);
|
||||
}
|
||||
|
||||
FrameFinished = CAcinerella.ac_get_frame(_instance, _videodecoder);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
CLog.LogError("Error AcGetFrame " + _FileName);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -608,14 +604,15 @@ namespace Vocaluxe.Lib.Video
|
||||
{
|
||||
if (_Loop)
|
||||
{
|
||||
bool doskip = false;
|
||||
_BeforeLoop = true;
|
||||
bool doskip = true;
|
||||
float tm = 0f;
|
||||
int num = -1;
|
||||
lock (MutexFramebuffer)
|
||||
{
|
||||
for (int i = 0; i < _FrameBuffer.Length; i++)
|
||||
{
|
||||
if (_FrameBuffer[i].time > tm)
|
||||
if (_FrameBuffer[i].time > tm && !_FrameBuffer[i].displayed)
|
||||
{
|
||||
tm = _FrameBuffer[i].time;
|
||||
num = i;
|
||||
@@ -631,7 +628,6 @@ namespace Vocaluxe.Lib.Video
|
||||
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_ActualVideoTime = 0f;
|
||||
_Start = 0f;
|
||||
_Gap = 0f;
|
||||
_SetTime = 0f;
|
||||
@@ -652,6 +648,7 @@ namespace Vocaluxe.Lib.Video
|
||||
private void Copy()
|
||||
{
|
||||
int num = -1;
|
||||
|
||||
lock (MutexFramebuffer)
|
||||
{
|
||||
for (int i = 0; i < _FrameBuffer.Length; i++)
|
||||
@@ -664,29 +661,37 @@ namespace Vocaluxe.Lib.Video
|
||||
}
|
||||
|
||||
if (num == -1)
|
||||
_waiting = true;
|
||||
{
|
||||
_BufferFull = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
TAc_decoder Videodecoder = (TAc_decoder)Marshal.PtrToStructure(_videodecoder, typeof(TAc_decoder));
|
||||
|
||||
lock (MutexFrame)
|
||||
_VideoDecoderTime = (float)Videodecoder.timecode;
|
||||
_FrameBuffer[num].time = _VideoDecoderTime;
|
||||
|
||||
if (Videodecoder.buffer != IntPtr.Zero)
|
||||
{
|
||||
TAc_decoder Videodecoder = (TAc_decoder)Marshal.PtrToStructure(_videodecoder, typeof(TAc_decoder));
|
||||
Marshal.Copy(Videodecoder.buffer, _FrameBuffer[num].data, 0, _Width * _Height * 4);
|
||||
|
||||
_FrameBuffer[num].time = _VideoTime;
|
||||
_VideoTime = (float)Videodecoder.timecode;
|
||||
|
||||
if (Videodecoder.buffer != IntPtr.Zero)
|
||||
{
|
||||
Marshal.Copy(Videodecoder.buffer, _FrameBuffer[num].data, 0, _Width * _Height * 4);
|
||||
|
||||
_FrameBuffer[num].displayed = false;
|
||||
}
|
||||
_FrameBuffer[num].displayed = false;
|
||||
}
|
||||
|
||||
|
||||
_waiting = false;
|
||||
int numfull = 0;
|
||||
for (int i = 0; i < _FrameBuffer.Length; i++)
|
||||
{
|
||||
if (!_FrameBuffer[i].displayed)
|
||||
numfull++;
|
||||
}
|
||||
|
||||
if (numfull < _FrameBuffer.Length)
|
||||
_BufferFull = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (!_BufferFull)
|
||||
EventDecode.Set();
|
||||
}
|
||||
|
||||
private void UploadNewFrame(ref STexture frame)
|
||||
@@ -709,8 +714,13 @@ namespace Vocaluxe.Lib.Video
|
||||
{
|
||||
CDraw.UpdateTexture(ref frame, ref _FrameBuffer[num].data);
|
||||
}
|
||||
_ActualVideoTime = _FrameBuffer[num].time;
|
||||
|
||||
lock (MutexSyncSignals)
|
||||
{
|
||||
_CurrentVideoTime = _FrameBuffer[num].time;
|
||||
}
|
||||
_Finished = false;
|
||||
EventDecode.Set();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -718,7 +728,6 @@ namespace Vocaluxe.Lib.Video
|
||||
_Finished = true;
|
||||
}
|
||||
}
|
||||
EventDecode.Set();
|
||||
}
|
||||
|
||||
private int FindFrame()
|
||||
@@ -730,27 +739,28 @@ namespace Vocaluxe.Lib.Video
|
||||
{
|
||||
float td = _SetTime + _VideoSkipTime - _FrameBuffer[i].time;
|
||||
|
||||
if (td > _VideoTimeBase * 2)
|
||||
{
|
||||
_FrameBuffer[i].displayed = true;
|
||||
}
|
||||
|
||||
if (!_FrameBuffer[i].displayed && (td < diff) && (td > _VideoTimeBase))
|
||||
{
|
||||
diff = Math.Abs(_FrameBuffer[i].time - _SetTime - _VideoSkipTime);
|
||||
Result = i;
|
||||
}
|
||||
|
||||
if (td > _VideoTimeBase * 2)
|
||||
_FrameBuffer[i].displayed = true;
|
||||
}
|
||||
|
||||
if (Result != -1)
|
||||
{
|
||||
_FrameBuffer[Result].displayed = true;
|
||||
}
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
private void DoFree()
|
||||
{
|
||||
if (_package != IntPtr.Zero)
|
||||
CAcinerella.ac_free_package(_package);
|
||||
|
||||
if (_videodecoder != IntPtr.Zero)
|
||||
CAcinerella.ac_free_decoder(_videodecoder);
|
||||
|
||||
|
||||
@@ -31,6 +31,8 @@ namespace Vocaluxe.Menu
|
||||
|
||||
ScreenNames = 14,
|
||||
|
||||
ScreenCredits = 15,
|
||||
|
||||
ScreenNull = -1
|
||||
}
|
||||
|
||||
@@ -100,7 +102,7 @@ namespace Vocaluxe.Menu
|
||||
if (t < _CursorFadingTime)
|
||||
{
|
||||
if (_CursorTargetAlpha >= _CursorStartAlpha)
|
||||
_Cursor.color.A = (_CursorTargetAlpha - _CursorStartAlpha) * t / _CursorFadingTime;
|
||||
_Cursor.color.A = _CursorStartAlpha + (_CursorTargetAlpha - _CursorStartAlpha) * t / _CursorFadingTime;
|
||||
else
|
||||
_Cursor.color.A = (_CursorStartAlpha - _CursorTargetAlpha) * (1f - t / _CursorFadingTime);
|
||||
}
|
||||
@@ -150,6 +152,13 @@ namespace Vocaluxe.Menu
|
||||
Fade(0f, 0.5f);
|
||||
}
|
||||
|
||||
public void FadeIn()
|
||||
{
|
||||
_Movetimer.Reset();
|
||||
_Movetimer.Start();
|
||||
Fade(1f, 0.2f);
|
||||
}
|
||||
|
||||
private void Fade(float targetAlpha, float time)
|
||||
{
|
||||
_CursorFadingTimer.Stop();
|
||||
@@ -212,6 +221,7 @@ namespace Vocaluxe.Menu
|
||||
ScreenList.Add(new CScreenOptionsVideo());
|
||||
ScreenList.Add(new CScreenOptionsTheme());
|
||||
ScreenList.Add(new CScreenNames());
|
||||
ScreenList.Add(new CScreenCredits());
|
||||
CLog.StopBenchmark(1, "Build Screen List");
|
||||
|
||||
Screens = ScreenList.ToArray();
|
||||
@@ -292,9 +302,10 @@ namespace Vocaluxe.Menu
|
||||
Keys.CopyEvents();
|
||||
|
||||
CSound.Update();
|
||||
CBackgroundMusic.Update();
|
||||
|
||||
if (CConfig.CoverLoading == ECoverLoading.TR_CONFIG_COVERLOADING_DYNAMIC && ActualScreen != EScreens.ScreenSing)
|
||||
CSongs.LoadCover(30L);
|
||||
CSongs.LoadCover(30L, 1);
|
||||
|
||||
if (CSettings.GameState != EGameState.EditTheme)
|
||||
{
|
||||
@@ -348,6 +359,7 @@ namespace Vocaluxe.Menu
|
||||
ActualScreen = NextScreen;
|
||||
NextScreen = EScreens.ScreenNull;
|
||||
Screens[(int)ActualScreen].OnShowFinish();
|
||||
Screens[(int)ActualScreen].ProcessMouseMove(_Cursor.X, _Cursor.Y);
|
||||
Screens[(int)ActualScreen].Draw();
|
||||
_Fading = false;
|
||||
_FadingTimer.Stop();
|
||||
@@ -416,6 +428,12 @@ namespace Vocaluxe.Menu
|
||||
|
||||
while (Mouse.PollEvent(ref MouseEvent))
|
||||
{
|
||||
if (MouseEvent.Wheel != 0)
|
||||
{
|
||||
CSettings.MouseActive();
|
||||
_Cursor.FadeIn();
|
||||
}
|
||||
|
||||
UpdateMousePosition(MouseEvent.X, MouseEvent.Y);
|
||||
|
||||
if (!_Fading && (_Cursor.IsActive || MouseEvent.LB || MouseEvent.RB))
|
||||
|
||||
+212
-8
@@ -15,7 +15,8 @@ namespace Vocaluxe.Menu
|
||||
{
|
||||
Fill,
|
||||
Jump,
|
||||
Slide
|
||||
Slide,
|
||||
Zoom
|
||||
}
|
||||
|
||||
struct SNote
|
||||
@@ -23,6 +24,7 @@ namespace Vocaluxe.Menu
|
||||
public string Text;
|
||||
public int StartBeat;
|
||||
public int EndBeat;
|
||||
public int Duration;
|
||||
public ENoteType Type;
|
||||
}
|
||||
|
||||
@@ -205,6 +207,7 @@ namespace Vocaluxe.Menu
|
||||
n.Text = note.Text;
|
||||
n.StartBeat = note.StartBeat;
|
||||
n.EndBeat = note.EndBeat;
|
||||
n.Duration = note.Duration;
|
||||
n.Type = note.NoteType;
|
||||
|
||||
_Text.Text = note.Text;
|
||||
@@ -229,10 +232,30 @@ namespace Vocaluxe.Menu
|
||||
return _X - _width / 2;
|
||||
}
|
||||
|
||||
#region draw
|
||||
public void Draw(float ActualBeat)
|
||||
{
|
||||
if (Visible || CSettings.GameState == EGameState.EditTheme)
|
||||
DrawSlide(ActualBeat);
|
||||
{
|
||||
switch (_Style)
|
||||
{
|
||||
case ELyricStyle.Fill:
|
||||
DrawFill(ActualBeat);
|
||||
break;
|
||||
case ELyricStyle.Jump:
|
||||
DrawJump(ActualBeat);
|
||||
break;
|
||||
case ELyricStyle.Slide:
|
||||
DrawSlide(ActualBeat);
|
||||
break;
|
||||
case ELyricStyle.Zoom:
|
||||
DrawZoom(ActualBeat);
|
||||
break;
|
||||
default:
|
||||
DrawSlide(ActualBeat);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawSlide(float CurrentBeat)
|
||||
@@ -243,6 +266,8 @@ namespace Vocaluxe.Menu
|
||||
{
|
||||
_Text.X = x;
|
||||
_Text.Style = EStyle.Bold;
|
||||
_Text.Text = note.Text;
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
if (note.Type == ENoteType.Freestyle)
|
||||
_Text.Style = EStyle.BoldItalic;
|
||||
@@ -252,7 +277,7 @@ namespace Vocaluxe.Menu
|
||||
if (CurrentBeat <= note.EndBeat)
|
||||
{
|
||||
_Text.Color = ColorProcessed;
|
||||
_Text.Text = note.Text;
|
||||
|
||||
|
||||
float diff = note.EndBeat - note.StartBeat;
|
||||
if (diff == 0)
|
||||
@@ -266,23 +291,202 @@ namespace Vocaluxe.Menu
|
||||
}
|
||||
else
|
||||
{
|
||||
_Text.Color = ColorProcessed;
|
||||
_Text.Text = note.Text;
|
||||
_Text.Color = ColorProcessed;
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
_Text.Color = Color;
|
||||
_Text.Text = note.Text;
|
||||
_Text.Color = Color;
|
||||
_Text.Draw();
|
||||
}
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
x += rect.Width;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawZoom(float CurrentBeat)
|
||||
{
|
||||
float x = _X - _width / 2; // most left position
|
||||
|
||||
//find last active note
|
||||
int last_note = -1;
|
||||
for (int i = 0; i < _Notes.Count; i++)
|
||||
{
|
||||
if (CurrentBeat >= _Notes[i].StartBeat)
|
||||
last_note = i;
|
||||
}
|
||||
|
||||
int zoom_note = -1;
|
||||
float zoomx = 0f;
|
||||
|
||||
int current_note = -1;
|
||||
foreach (SNote note in _Notes)
|
||||
{
|
||||
current_note++;
|
||||
|
||||
_Text.X = x;
|
||||
_Text.Style = EStyle.Bold;
|
||||
_Text.Text = note.Text;
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
if (note.Type == ENoteType.Freestyle)
|
||||
_Text.Style = EStyle.BoldItalic;
|
||||
|
||||
if (CurrentBeat >= note.StartBeat)
|
||||
{
|
||||
if (CurrentBeat <= note.EndBeat)
|
||||
{
|
||||
zoom_note = current_note;
|
||||
zoomx = _Text.X;
|
||||
}
|
||||
else
|
||||
{
|
||||
// already passed
|
||||
if (current_note == last_note)
|
||||
_Text.Color = ColorProcessed;
|
||||
else
|
||||
_Text.Color = Color;
|
||||
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// not passed
|
||||
_Text.Color = Color;
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
x += rect.Width;
|
||||
}
|
||||
|
||||
if (zoom_note > -1)
|
||||
{
|
||||
if (_Notes[zoom_note].Duration == 0)
|
||||
return;
|
||||
|
||||
_Text.X = zoomx;
|
||||
_Text.Text = _Notes[zoom_note].Text;
|
||||
_Text.Color = ColorProcessed;
|
||||
_Text.Style = EStyle.Bold;
|
||||
|
||||
if (_Notes[zoom_note].Type == ENoteType.Freestyle)
|
||||
_Text.Style = EStyle.BoldItalic;
|
||||
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
float diff = _Notes[zoom_note].EndBeat - _Notes[zoom_note].StartBeat;
|
||||
|
||||
float p = (CurrentBeat - _Notes[zoom_note].StartBeat) / _Notes[zoom_note].Duration;
|
||||
if (p > 1f)
|
||||
p = 1f;
|
||||
|
||||
p = 1f - p;
|
||||
|
||||
float ty = _Text.Y;
|
||||
float tx = _Text.X;
|
||||
float th = _Text.Height;
|
||||
float tz = _Text.Z;
|
||||
|
||||
_Text.Height += _Text.Height * p * 0.4f;
|
||||
RectangleF rectz = CDraw.GetTextBounds(_Text);
|
||||
_Text.X -= (rectz.Width - rect.Width) / 2f;
|
||||
_Text.Y -= (rectz.Height - rect.Height) / 2f;
|
||||
_Text.Z -= 0.1f;
|
||||
|
||||
_Text.Draw();
|
||||
|
||||
_Text.Y = ty;
|
||||
_Text.X = tx;
|
||||
_Text.Height = th;
|
||||
_Text.Z = tz;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawFill(float CurrentBeat)
|
||||
{
|
||||
float x = _X - _width / 2; // most left position
|
||||
|
||||
foreach (SNote note in _Notes)
|
||||
{
|
||||
_Text.X = x;
|
||||
_Text.Style = EStyle.Bold;
|
||||
_Text.Text = note.Text;
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
if (note.Type == ENoteType.Freestyle)
|
||||
_Text.Style = EStyle.BoldItalic;
|
||||
|
||||
if (CurrentBeat >= note.StartBeat)
|
||||
{
|
||||
_Text.Color = ColorProcessed;
|
||||
_Text.Draw();
|
||||
}
|
||||
else
|
||||
{
|
||||
// not passed
|
||||
_Text.Color = Color;
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
x += rect.Width;
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawJump(float CurrentBeat)
|
||||
{
|
||||
float x = _X - _width / 2; // most left position
|
||||
|
||||
foreach (SNote note in _Notes)
|
||||
{
|
||||
_Text.X = x;
|
||||
_Text.Style = EStyle.Bold;
|
||||
_Text.Text = note.Text;
|
||||
RectangleF rect = CDraw.GetTextBounds(_Text);
|
||||
|
||||
if (note.Type == ENoteType.Freestyle)
|
||||
_Text.Style = EStyle.BoldItalic;
|
||||
|
||||
if (CurrentBeat >= note.StartBeat)
|
||||
{
|
||||
if (CurrentBeat <= note.EndBeat)
|
||||
{
|
||||
_Text.Color = ColorProcessed;
|
||||
|
||||
float diff = note.EndBeat - note.StartBeat;
|
||||
if (diff == 0)
|
||||
_Text.Draw();
|
||||
else
|
||||
{
|
||||
float y = _Text.Y;
|
||||
_Text.Y -= _Text.Height * 0.1f;
|
||||
_Text.Draw();
|
||||
_Text.Y = y;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// already passed
|
||||
_Text.Color = Color;
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// not passed
|
||||
_Text.Color = Color;
|
||||
_Text.Draw();
|
||||
}
|
||||
|
||||
x += rect.Width;
|
||||
}
|
||||
}
|
||||
#endregion draw
|
||||
|
||||
public void UnloadTextures()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -109,6 +109,7 @@ namespace Vocaluxe.Menu
|
||||
_ThemeLyrics = null;
|
||||
_ThemeSelectSlides = null;
|
||||
_ThemeSingNotes = null;
|
||||
|
||||
}
|
||||
#region ThemeHandler
|
||||
public virtual void LoadTheme()
|
||||
@@ -861,11 +862,13 @@ namespace Vocaluxe.Menu
|
||||
{
|
||||
ResumeBG();
|
||||
_Active = true;
|
||||
CBackgroundMusic.Play();
|
||||
}
|
||||
|
||||
public virtual void OnClose()
|
||||
{
|
||||
PauseBG();
|
||||
CBackgroundMusic.Pause();
|
||||
}
|
||||
#endregion MenuHandler
|
||||
|
||||
|
||||
Loaded 100 of 116 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user