Merge branch 'release-0.1'

This commit is contained in:
Alexander Eckart committed 2012-04-08 19:32:48 +02:00
commit 9d72369a92
116 files changed
+64243 -2986

No files matched your search

+674
View File
@@ -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.
+18
View File
@@ -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

+7
View File
@@ -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>
+7
View File
@@ -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>
+7
View File
@@ -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>
+184
View File
@@ -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>
-31
View File
@@ -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.
BIN
View File
Binary file not shown.
Binary file not shown.
-3
View File
@@ -1,3 +0,0 @@
<configuration>
<dllmap os="linux" dll="PortAudio.dll" target="libportaudio.so"/>
</configuration>
+127
View File
@@ -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/
+2 -2
View File
@@ -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 -4
View File
@@ -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:-->
+4 -31
View File
@@ -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>
+22 -22
View File
@@ -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-->
+26 -26
View File
@@ -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
View File
@@ -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>
+7 -35
View File
@@ -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:-->
+52 -4
View File
@@ -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>
+52 -4
View File
@@ -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>
+52 -4
View File
@@ -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>
+52 -4
View File
@@ -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.
-3
View File
@@ -1,3 +0,0 @@
<configuration>
<dllmap os="linux" dll="acinerella.dll" target="libacinerella.so"/>
</configuration>
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+57639
View File
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.
+48
View File
@@ -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/
+6
View File
@@ -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
+225
View File
@@ -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
View File
@@ -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
+3 -3
View File
@@ -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))))
File diff suppressed because it is too large. Load diff
+151 -146
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+3
View File
@@ -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
View File
@@ -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;
+2 -2
View File
@@ -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)
+50 -5
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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)
File diff suppressed because it is too large. Load diff
+28 -2
View File
@@ -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
View File
@@ -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
+5 -2
View File
@@ -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
View File
@@ -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)
{
+19 -3
View File
@@ -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);
}
}
-454
View File
@@ -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();
}
}
}
-220
View File
@@ -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;
}
}
}
-710
View File
@@ -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);
}
}
}
}
}
+28
View File
@@ -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;
}
}
}
+47 -22
View File
@@ -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;
}
}
}
+5 -2
View File
@@ -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();
}
+1
View File
@@ -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);
+59 -49
View File
@@ -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
+23 -28
View File
@@ -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)
{
+8 -29
View File
@@ -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;
+119 -109
View File
@@ -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);
+20 -2
View File
@@ -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
View File
@@ -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()
{
}
+3
View File
@@ -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