├── Bass.dll
├── BassTags.dll
├── DSEngine_x64.dll
├── DSEngine_x86.dll
├── LICENSE
├── README.md
├── assets
├── libs
│ ├── BASS.au3
│ │ ├── BASS
│ │ │ ├── Bass.au3
│ │ │ ├── BassConstants.au3
│ │ │ ├── Function.txt
│ │ │ └── bass.dll
│ │ ├── BASS_TAGS
│ │ │ ├── BassTags.au3
│ │ │ ├── BassTags.dll
│ │ │ └── Function.txt
│ │ ├── Changelog.txt
│ │ └── License.txt
│ ├── BorderLessWinUDF.au3
│ ├── DSEngine
│ │ ├── DSEngine.au3
│ │ ├── DSEngineConstants.au3
│ │ ├── DSEngine_x64.dll
│ │ └── DSEngine_x86.dll
│ ├── Google API
│ │ ├── BinaryCall.au3
│ │ ├── Google API.au3
│ │ └── JSON.au3
│ ├── ID3_Example_GUI_v3.4.au3
│ ├── ID3_v3.4.au3
│ └── Snippets.au3
└── themes
│ ├── dark
│ ├── Add CD.ico
│ ├── Add File.ico
│ ├── Add Link.ico
│ ├── Broken Link.ico
│ ├── Delete File.ico
│ ├── Delete Link.ico
│ ├── Delete.ico
│ ├── Export Playlist.ico
│ ├── Fast Forward.ico
│ ├── File.ico
│ ├── Hibernate.ico
│ ├── Import Playlist.ico
│ ├── Maximize Window.ico
│ ├── Minimize Window.ico
│ ├── Next.ico
│ ├── Notifications.ico
│ ├── Pause.ico
│ ├── Play.ico
│ ├── Playlist.ico
│ ├── Previous.ico
│ ├── Random.ico
│ ├── Repeat.ico
│ ├── Restart.ico
│ ├── Restore Window.ico
│ ├── Resume.ico
│ ├── Rewind.ico
│ ├── Save File.ico
│ ├── Settings.ico
│ ├── Shutdown.ico
│ ├── Stop.ico
│ ├── Theme.ico
│ ├── View.ico
│ ├── YouTube.ico
│ ├── theme.properties
│ └── zPlayer.ico
│ ├── icons8-High Volume Filled-64.png
│ ├── icons8-Medium Volume Filled-64.png
│ ├── icons8-Mute Filled-64.png
│ ├── icons8-Notification Filled-64.png
│ ├── icons8-Vertical Settings Mixer Filled-64.png
│ ├── icons8-View Filled-64.png
│ ├── light
│ ├── Add CD.ico
│ ├── Add File.ico
│ ├── Add Link.ico
│ ├── Delete.ico
│ ├── Export Playlist.ico
│ ├── Fast Forward.ico
│ ├── File.ico
│ ├── Hibernate.ico
│ ├── Import Playlist.ico
│ ├── Maximize Window.ico
│ ├── Minimize Window.ico
│ ├── Next.ico
│ ├── Notifications.ico
│ ├── Pause.ico
│ ├── Play.ico
│ ├── Playlist.ico
│ ├── Previous.ico
│ ├── Random.ico
│ ├── Repeat.ico
│ ├── Restore Window.ico
│ ├── Resume.ico
│ ├── Rewind.ico
│ ├── Save File.ico
│ ├── Settings.ico
│ ├── Shutdown.ico
│ ├── Stop.ico
│ ├── Theme.ico
│ ├── View.ico
│ ├── YouTube.ico
│ ├── theme.properties
│ └── zPlayer.ico
│ └── nolan
│ ├── Add CD.ico
│ ├── Add File.ico
│ ├── Add Link.ico
│ ├── Delete.ico
│ ├── Equalizer.ico
│ ├── Export Playlist.ico
│ ├── Fast Forward.ico
│ ├── File.ico
│ ├── Hibernate.ico
│ ├── Import Playlist.ico
│ ├── Maximize Window.ico
│ ├── Minimize Window.ico
│ ├── Next.ico
│ ├── Notifications.ico
│ ├── Pause.ico
│ ├── Play.ico
│ ├── Playlist.ico
│ ├── Previous.ico
│ ├── Random.ico
│ ├── Repeat.ico
│ ├── Restore Window.ico
│ ├── Resume.ico
│ ├── Rewind.ico
│ ├── Save File.ico
│ ├── Settings.ico
│ ├── Shutdown.ico
│ ├── Stop.ico
│ ├── Theme.ico
│ ├── View.ico
│ ├── Volume High.ico
│ ├── Volume Medium.ico
│ ├── Volume Mute.ico
│ ├── YouTube.ico
│ ├── theme.properties
│ └── zPlayer.ico
├── changelog.txt
└── zPlayer Preview.au3
/Bass.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/Bass.dll
--------------------------------------------------------------------------------
/BassTags.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/BassTags.dll
--------------------------------------------------------------------------------
/DSEngine_x64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/DSEngine_x64.dll
--------------------------------------------------------------------------------
/DSEngine_x86.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/DSEngine_x86.dll
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | GNU GENERAL PUBLIC LICENSE
2 | Version 3, 29 June 2007
3 |
4 | Copyright (C) 2007 Free Software Foundation, Inc.
5 | Everyone is permitted to copy and distribute verbatim copies
6 | of this license document, but changing it is not allowed.
7 |
8 | Preamble
9 |
10 | The GNU General Public License is a free, copyleft license for
11 | software and other kinds of works.
12 |
13 | The licenses for most software and other practical works are designed
14 | to take away your freedom to share and change the works. By contrast,
15 | the GNU General Public License is intended to guarantee your freedom to
16 | share and change all versions of a program--to make sure it remains free
17 | software for all its users. We, the Free Software Foundation, use the
18 | GNU General Public License for most of our software; it applies also to
19 | any other work released this way by its authors. You can apply it to
20 | your programs, too.
21 |
22 | When we speak of free software, we are referring to freedom, not
23 | price. Our General Public Licenses are designed to make sure that you
24 | have the freedom to distribute copies of free software (and charge for
25 | them if you wish), that you receive source code or can get it if you
26 | want it, that you can change the software or use pieces of it in new
27 | free programs, and that you know you can do these things.
28 |
29 | To protect your rights, we need to prevent others from denying you
30 | these rights or asking you to surrender the rights. Therefore, you have
31 | certain responsibilities if you distribute copies of the software, or if
32 | you modify it: responsibilities to respect the freedom of others.
33 |
34 | For example, if you distribute copies of such a program, whether
35 | gratis or for a fee, you must pass on to the recipients the same
36 | freedoms that you received. You must make sure that they, too, receive
37 | or can get the source code. And you must show them these terms so they
38 | know their rights.
39 |
40 | Developers that use the GNU GPL protect your rights with two steps:
41 | (1) assert copyright on the software, and (2) offer you this License
42 | giving you legal permission to copy, distribute and/or modify it.
43 |
44 | For the developers' and authors' protection, the GPL clearly explains
45 | that there is no warranty for this free software. For both users' and
46 | authors' sake, the GPL requires that modified versions be marked as
47 | changed, so that their problems will not be attributed erroneously to
48 | authors of previous versions.
49 |
50 | Some devices are designed to deny users access to install or run
51 | modified versions of the software inside them, although the manufacturer
52 | can do so. This is fundamentally incompatible with the aim of
53 | protecting users' freedom to change the software. The systematic
54 | pattern of such abuse occurs in the area of products for individuals to
55 | use, which is precisely where it is most unacceptable. Therefore, we
56 | have designed this version of the GPL to prohibit the practice for those
57 | products. If such problems arise substantially in other domains, we
58 | stand ready to extend this provision to those domains in future versions
59 | of the GPL, as needed to protect the freedom of users.
60 |
61 | Finally, every program is threatened constantly by software patents.
62 | States should not allow patents to restrict development and use of
63 | software on general-purpose computers, but in those that do, we wish to
64 | avoid the special danger that patents applied to a free program could
65 | make it effectively proprietary. To prevent this, the GPL assures that
66 | patents cannot be used to render the program non-free.
67 |
68 | The precise terms and conditions for copying, distribution and
69 | modification follow.
70 |
71 | TERMS AND CONDITIONS
72 |
73 | 0. Definitions.
74 |
75 | "This License" refers to version 3 of the GNU General Public License.
76 |
77 | "Copyright" also means copyright-like laws that apply to other kinds of
78 | works, such as semiconductor masks.
79 |
80 | "The Program" refers to any copyrightable work licensed under this
81 | License. Each licensee is addressed as "you". "Licensees" and
82 | "recipients" may be individuals or organizations.
83 |
84 | To "modify" a work means to copy from or adapt all or part of the work
85 | in a fashion requiring copyright permission, other than the making of an
86 | exact copy. The resulting work is called a "modified version" of the
87 | earlier work or a work "based on" the earlier work.
88 |
89 | A "covered work" means either the unmodified Program or a work based
90 | on the Program.
91 |
92 | To "propagate" a work means to do anything with it that, without
93 | permission, would make you directly or secondarily liable for
94 | infringement under applicable copyright law, except executing it on a
95 | computer or modifying a private copy. Propagation includes copying,
96 | distribution (with or without modification), making available to the
97 | public, and in some countries other activities as well.
98 |
99 | To "convey" a work means any kind of propagation that enables other
100 | parties to make or receive copies. Mere interaction with a user through
101 | a computer network, with no transfer of a copy, is not conveying.
102 |
103 | An interactive user interface displays "Appropriate Legal Notices"
104 | to the extent that it includes a convenient and prominently visible
105 | feature that (1) displays an appropriate copyright notice, and (2)
106 | tells the user that there is no warranty for the work (except to the
107 | extent that warranties are provided), that licensees may convey the
108 | work under this License, and how to view a copy of this License. If
109 | the interface presents a list of user commands or options, such as a
110 | menu, a prominent item in the list meets this criterion.
111 |
112 | 1. Source Code.
113 |
114 | The "source code" for a work means the preferred form of the work
115 | for making modifications to it. "Object code" means any non-source
116 | form of a work.
117 |
118 | A "Standard Interface" means an interface that either is an official
119 | standard defined by a recognized standards body, or, in the case of
120 | interfaces specified for a particular programming language, one that
121 | is widely used among developers working in that language.
122 |
123 | The "System Libraries" of an executable work include anything, other
124 | than the work as a whole, that (a) is included in the normal form of
125 | packaging a Major Component, but which is not part of that Major
126 | Component, and (b) serves only to enable use of the work with that
127 | Major Component, or to implement a Standard Interface for which an
128 | implementation is available to the public in source code form. A
129 | "Major Component", in this context, means a major essential component
130 | (kernel, window system, and so on) of the specific operating system
131 | (if any) on which the executable work runs, or a compiler used to
132 | produce the work, or an object code interpreter used to run it.
133 |
134 | The "Corresponding Source" for a work in object code form means all
135 | the source code needed to generate, install, and (for an executable
136 | work) run the object code and to modify the work, including scripts to
137 | control those activities. However, it does not include the work's
138 | System Libraries, or general-purpose tools or generally available free
139 | programs which are used unmodified in performing those activities but
140 | which are not part of the work. For example, Corresponding Source
141 | includes interface definition files associated with source files for
142 | the work, and the source code for shared libraries and dynamically
143 | linked subprograms that the work is specifically designed to require,
144 | such as by intimate data communication or control flow between those
145 | subprograms and other parts of the work.
146 |
147 | The Corresponding Source need not include anything that users
148 | can regenerate automatically from other parts of the Corresponding
149 | Source.
150 |
151 | The Corresponding Source for a work in source code form is that
152 | same work.
153 |
154 | 2. Basic Permissions.
155 |
156 | All rights granted under this License are granted for the term of
157 | copyright on the Program, and are irrevocable provided the stated
158 | conditions are met. This License explicitly affirms your unlimited
159 | permission to run the unmodified Program. The output from running a
160 | covered work is covered by this License only if the output, given its
161 | content, constitutes a covered work. This License acknowledges your
162 | rights of fair use or other equivalent, as provided by copyright law.
163 |
164 | You may make, run and propagate covered works that you do not
165 | convey, without conditions so long as your license otherwise remains
166 | in force. You may convey covered works to others for the sole purpose
167 | of having them make modifications exclusively for you, or provide you
168 | with facilities for running those works, provided that you comply with
169 | the terms of this License in conveying all material for which you do
170 | not control copyright. Those thus making or running the covered works
171 | for you must do so exclusively on your behalf, under your direction
172 | and control, on terms that prohibit them from making any copies of
173 | your copyrighted material outside their relationship with you.
174 |
175 | Conveying under any other circumstances is permitted solely under
176 | the conditions stated below. Sublicensing is not allowed; section 10
177 | makes it unnecessary.
178 |
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
180 |
181 | No covered work shall be deemed part of an effective technological
182 | measure under any applicable law fulfilling obligations under article
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or
184 | similar laws prohibiting or restricting circumvention of such
185 | measures.
186 |
187 | When you convey a covered work, you waive any legal power to forbid
188 | circumvention of technological measures to the extent such circumvention
189 | is effected by exercising rights under this License with respect to
190 | the covered work, and you disclaim any intention to limit operation or
191 | modification of the work as a means of enforcing, against the work's
192 | users, your or third parties' legal rights to forbid circumvention of
193 | technological measures.
194 |
195 | 4. Conveying Verbatim Copies.
196 |
197 | You may convey verbatim copies of the Program's source code as you
198 | receive it, in any medium, provided that you conspicuously and
199 | appropriately publish on each copy an appropriate copyright notice;
200 | keep intact all notices stating that this License and any
201 | non-permissive terms added in accord with section 7 apply to the code;
202 | keep intact all notices of the absence of any warranty; and give all
203 | recipients a copy of this License along with the Program.
204 |
205 | You may charge any price or no price for each copy that you convey,
206 | and you may offer support or warranty protection for a fee.
207 |
208 | 5. Conveying Modified Source Versions.
209 |
210 | You may convey a work based on the Program, or the modifications to
211 | produce it from the Program, in the form of source code under the
212 | terms of section 4, provided that you also meet all of these conditions:
213 |
214 | a) The work must carry prominent notices stating that you modified
215 | it, and giving a relevant date.
216 |
217 | b) The work must carry prominent notices stating that it is
218 | released under this License and any conditions added under section
219 | 7. This requirement modifies the requirement in section 4 to
220 | "keep intact all notices".
221 |
222 | c) You must license the entire work, as a whole, under this
223 | License to anyone who comes into possession of a copy. This
224 | License will therefore apply, along with any applicable section 7
225 | additional terms, to the whole of the work, and all its parts,
226 | regardless of how they are packaged. This License gives no
227 | permission to license the work in any other way, but it does not
228 | invalidate such permission if you have separately received it.
229 |
230 | d) If the work has interactive user interfaces, each must display
231 | Appropriate Legal Notices; however, if the Program has interactive
232 | interfaces that do not display Appropriate Legal Notices, your
233 | work need not make them do so.
234 |
235 | A compilation of a covered work with other separate and independent
236 | works, which are not by their nature extensions of the covered work,
237 | and which are not combined with it such as to form a larger program,
238 | in or on a volume of a storage or distribution medium, is called an
239 | "aggregate" if the compilation and its resulting copyright are not
240 | used to limit the access or legal rights of the compilation's users
241 | beyond what the individual works permit. Inclusion of a covered work
242 | in an aggregate does not cause this License to apply to the other
243 | parts of the aggregate.
244 |
245 | 6. Conveying Non-Source Forms.
246 |
247 | You may convey a covered work in object code form under the terms
248 | of sections 4 and 5, provided that you also convey the
249 | machine-readable Corresponding Source under the terms of this License,
250 | in one of these ways:
251 |
252 | a) Convey the object code in, or embodied in, a physical product
253 | (including a physical distribution medium), accompanied by the
254 | Corresponding Source fixed on a durable physical medium
255 | customarily used for software interchange.
256 |
257 | b) Convey the object code in, or embodied in, a physical product
258 | (including a physical distribution medium), accompanied by a
259 | written offer, valid for at least three years and valid for as
260 | long as you offer spare parts or customer support for that product
261 | model, to give anyone who possesses the object code either (1) a
262 | copy of the Corresponding Source for all the software in the
263 | product that is covered by this License, on a durable physical
264 | medium customarily used for software interchange, for a price no
265 | more than your reasonable cost of physically performing this
266 | conveying of source, or (2) access to copy the
267 | Corresponding Source from a network server at no charge.
268 |
269 | c) Convey individual copies of the object code with a copy of the
270 | written offer to provide the Corresponding Source. This
271 | alternative is allowed only occasionally and noncommercially, and
272 | only if you received the object code with such an offer, in accord
273 | with subsection 6b.
274 |
275 | d) Convey the object code by offering access from a designated
276 | place (gratis or for a charge), and offer equivalent access to the
277 | Corresponding Source in the same way through the same place at no
278 | further charge. You need not require recipients to copy the
279 | Corresponding Source along with the object code. If the place to
280 | copy the object code is a network server, the Corresponding Source
281 | may be on a different server (operated by you or a third party)
282 | that supports equivalent copying facilities, provided you maintain
283 | clear directions next to the object code saying where to find the
284 | Corresponding Source. Regardless of what server hosts the
285 | Corresponding Source, you remain obligated to ensure that it is
286 | available for as long as needed to satisfy these requirements.
287 |
288 | e) Convey the object code using peer-to-peer transmission, provided
289 | you inform other peers where the object code and Corresponding
290 | Source of the work are being offered to the general public at no
291 | charge under subsection 6d.
292 |
293 | A separable portion of the object code, whose source code is excluded
294 | from the Corresponding Source as a System Library, need not be
295 | included in conveying the object code work.
296 |
297 | A "User Product" is either (1) a "consumer product", which means any
298 | tangible personal property which is normally used for personal, family,
299 | or household purposes, or (2) anything designed or sold for incorporation
300 | into a dwelling. In determining whether a product is a consumer product,
301 | doubtful cases shall be resolved in favor of coverage. For a particular
302 | product received by a particular user, "normally used" refers to a
303 | typical or common use of that class of product, regardless of the status
304 | of the particular user or of the way in which the particular user
305 | actually uses, or expects or is expected to use, the product. A product
306 | is a consumer product regardless of whether the product has substantial
307 | commercial, industrial or non-consumer uses, unless such uses represent
308 | the only significant mode of use of the product.
309 |
310 | "Installation Information" for a User Product means any methods,
311 | procedures, authorization keys, or other information required to install
312 | and execute modified versions of a covered work in that User Product from
313 | a modified version of its Corresponding Source. The information must
314 | suffice to ensure that the continued functioning of the modified object
315 | code is in no case prevented or interfered with solely because
316 | modification has been made.
317 |
318 | If you convey an object code work under this section in, or with, or
319 | specifically for use in, a User Product, and the conveying occurs as
320 | part of a transaction in which the right of possession and use of the
321 | User Product is transferred to the recipient in perpetuity or for a
322 | fixed term (regardless of how the transaction is characterized), the
323 | Corresponding Source conveyed under this section must be accompanied
324 | by the Installation Information. But this requirement does not apply
325 | if neither you nor any third party retains the ability to install
326 | modified object code on the User Product (for example, the work has
327 | been installed in ROM).
328 |
329 | The requirement to provide Installation Information does not include a
330 | requirement to continue to provide support service, warranty, or updates
331 | for a work that has been modified or installed by the recipient, or for
332 | the User Product in which it has been modified or installed. Access to a
333 | network may be denied when the modification itself materially and
334 | adversely affects the operation of the network or violates the rules and
335 | protocols for communication across the network.
336 |
337 | Corresponding Source conveyed, and Installation Information provided,
338 | in accord with this section must be in a format that is publicly
339 | documented (and with an implementation available to the public in
340 | source code form), and must require no special password or key for
341 | unpacking, reading or copying.
342 |
343 | 7. Additional Terms.
344 |
345 | "Additional permissions" are terms that supplement the terms of this
346 | License by making exceptions from one or more of its conditions.
347 | Additional permissions that are applicable to the entire Program shall
348 | be treated as though they were included in this License, to the extent
349 | that they are valid under applicable law. If additional permissions
350 | apply only to part of the Program, that part may be used separately
351 | under those permissions, but the entire Program remains governed by
352 | this License without regard to the additional permissions.
353 |
354 | When you convey a copy of a covered work, you may at your option
355 | remove any additional permissions from that copy, or from any part of
356 | it. (Additional permissions may be written to require their own
357 | removal in certain cases when you modify the work.) You may place
358 | additional permissions on material, added by you to a covered work,
359 | for which you have or can give appropriate copyright permission.
360 |
361 | Notwithstanding any other provision of this License, for material you
362 | add to a covered work, you may (if authorized by the copyright holders of
363 | that material) supplement the terms of this License with terms:
364 |
365 | a) Disclaiming warranty or limiting liability differently from the
366 | terms of sections 15 and 16 of this License; or
367 |
368 | b) Requiring preservation of specified reasonable legal notices or
369 | author attributions in that material or in the Appropriate Legal
370 | Notices displayed by works containing it; or
371 |
372 | c) Prohibiting misrepresentation of the origin of that material, or
373 | requiring that modified versions of such material be marked in
374 | reasonable ways as different from the original version; or
375 |
376 | d) Limiting the use for publicity purposes of names of licensors or
377 | authors of the material; or
378 |
379 | e) Declining to grant rights under trademark law for use of some
380 | trade names, trademarks, or service marks; or
381 |
382 | f) Requiring indemnification of licensors and authors of that
383 | material by anyone who conveys the material (or modified versions of
384 | it) with contractual assumptions of liability to the recipient, for
385 | any liability that these contractual assumptions directly impose on
386 | those licensors and authors.
387 |
388 | All other non-permissive additional terms are considered "further
389 | restrictions" within the meaning of section 10. If the Program as you
390 | received it, or any part of it, contains a notice stating that it is
391 | governed by this License along with a term that is a further
392 | restriction, you may remove that term. If a license document contains
393 | a further restriction but permits relicensing or conveying under this
394 | License, you may add to a covered work material governed by the terms
395 | of that license document, provided that the further restriction does
396 | not survive such relicensing or conveying.
397 |
398 | If you add terms to a covered work in accord with this section, you
399 | must place, in the relevant source files, a statement of the
400 | additional terms that apply to those files, or a notice indicating
401 | where to find the applicable terms.
402 |
403 | Additional terms, permissive or non-permissive, may be stated in the
404 | form of a separately written license, or stated as exceptions;
405 | the above requirements apply either way.
406 |
407 | 8. Termination.
408 |
409 | You may not propagate or modify a covered work except as expressly
410 | provided under this License. Any attempt otherwise to propagate or
411 | modify it is void, and will automatically terminate your rights under
412 | this License (including any patent licenses granted under the third
413 | paragraph of section 11).
414 |
415 | However, if you cease all violation of this License, then your
416 | license from a particular copyright holder is reinstated (a)
417 | provisionally, unless and until the copyright holder explicitly and
418 | finally terminates your license, and (b) permanently, if the copyright
419 | holder fails to notify you of the violation by some reasonable means
420 | prior to 60 days after the cessation.
421 |
422 | Moreover, your license from a particular copyright holder is
423 | reinstated permanently if the copyright holder notifies you of the
424 | violation by some reasonable means, this is the first time you have
425 | received notice of violation of this License (for any work) from that
426 | copyright holder, and you cure the violation prior to 30 days after
427 | your receipt of the notice.
428 |
429 | Termination of your rights under this section does not terminate the
430 | licenses of parties who have received copies or rights from you under
431 | this License. If your rights have been terminated and not permanently
432 | reinstated, you do not qualify to receive new licenses for the same
433 | material under section 10.
434 |
435 | 9. Acceptance Not Required for Having Copies.
436 |
437 | You are not required to accept this License in order to receive or
438 | run a copy of the Program. Ancillary propagation of a covered work
439 | occurring solely as a consequence of using peer-to-peer transmission
440 | to receive a copy likewise does not require acceptance. However,
441 | nothing other than this License grants you permission to propagate or
442 | modify any covered work. These actions infringe copyright if you do
443 | not accept this License. Therefore, by modifying or propagating a
444 | covered work, you indicate your acceptance of this License to do so.
445 |
446 | 10. Automatic Licensing of Downstream Recipients.
447 |
448 | Each time you convey a covered work, the recipient automatically
449 | receives a license from the original licensors, to run, modify and
450 | propagate that work, subject to this License. You are not responsible
451 | for enforcing compliance by third parties with this License.
452 |
453 | An "entity transaction" is a transaction transferring control of an
454 | organization, or substantially all assets of one, or subdividing an
455 | organization, or merging organizations. If propagation of a covered
456 | work results from an entity transaction, each party to that
457 | transaction who receives a copy of the work also receives whatever
458 | licenses to the work the party's predecessor in interest had or could
459 | give under the previous paragraph, plus a right to possession of the
460 | Corresponding Source of the work from the predecessor in interest, if
461 | the predecessor has it or can get it with reasonable efforts.
462 |
463 | You may not impose any further restrictions on the exercise of the
464 | rights granted or affirmed under this License. For example, you may
465 | not impose a license fee, royalty, or other charge for exercise of
466 | rights granted under this License, and you may not initiate litigation
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that
468 | any patent claim is infringed by making, using, selling, offering for
469 | sale, or importing the Program or any portion of it.
470 |
471 | 11. Patents.
472 |
473 | A "contributor" is a copyright holder who authorizes use under this
474 | License of the Program or a work on which the Program is based. The
475 | work thus licensed is called the contributor's "contributor version".
476 |
477 | A contributor's "essential patent claims" are all patent claims
478 | owned or controlled by the contributor, whether already acquired or
479 | hereafter acquired, that would be infringed by some manner, permitted
480 | by this License, of making, using, or selling its contributor version,
481 | but do not include claims that would be infringed only as a
482 | consequence of further modification of the contributor version. For
483 | purposes of this definition, "control" includes the right to grant
484 | patent sublicenses in a manner consistent with the requirements of
485 | this License.
486 |
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free
488 | patent license under the contributor's essential patent claims, to
489 | make, use, sell, offer for sale, import and otherwise run, modify and
490 | propagate the contents of its contributor version.
491 |
492 | In the following three paragraphs, a "patent license" is any express
493 | agreement or commitment, however denominated, not to enforce a patent
494 | (such as an express permission to practice a patent or covenant not to
495 | sue for patent infringement). To "grant" such a patent license to a
496 | party means to make such an agreement or commitment not to enforce a
497 | patent against the party.
498 |
499 | If you convey a covered work, knowingly relying on a patent license,
500 | and the Corresponding Source of the work is not available for anyone
501 | to copy, free of charge and under the terms of this License, through a
502 | publicly available network server or other readily accessible means,
503 | then you must either (1) cause the Corresponding Source to be so
504 | available, or (2) arrange to deprive yourself of the benefit of the
505 | patent license for this particular work, or (3) arrange, in a manner
506 | consistent with the requirements of this License, to extend the patent
507 | license to downstream recipients. "Knowingly relying" means you have
508 | actual knowledge that, but for the patent license, your conveying the
509 | covered work in a country, or your recipient's use of the covered work
510 | in a country, would infringe one or more identifiable patents in that
511 | country that you have reason to believe are valid.
512 |
513 | If, pursuant to or in connection with a single transaction or
514 | arrangement, you convey, or propagate by procuring conveyance of, a
515 | covered work, and grant a patent license to some of the parties
516 | receiving the covered work authorizing them to use, propagate, modify
517 | or convey a specific copy of the covered work, then the patent license
518 | you grant is automatically extended to all recipients of the covered
519 | work and works based on it.
520 |
521 | A patent license is "discriminatory" if it does not include within
522 | the scope of its coverage, prohibits the exercise of, or is
523 | conditioned on the non-exercise of one or more of the rights that are
524 | specifically granted under this License. You may not convey a covered
525 | work if you are a party to an arrangement with a third party that is
526 | in the business of distributing software, under which you make payment
527 | to the third party based on the extent of your activity of conveying
528 | the work, and under which the third party grants, to any of the
529 | parties who would receive the covered work from you, a discriminatory
530 | patent license (a) in connection with copies of the covered work
531 | conveyed by you (or copies made from those copies), or (b) primarily
532 | for and in connection with specific products or compilations that
533 | contain the covered work, unless you entered into that arrangement,
534 | or that patent license was granted, prior to 28 March 2007.
535 |
536 | Nothing in this License shall be construed as excluding or limiting
537 | any implied license or other defenses to infringement that may
538 | otherwise be available to you under applicable patent law.
539 |
540 | 12. No Surrender of Others' Freedom.
541 |
542 | If conditions are imposed on you (whether by court order, agreement or
543 | otherwise) that contradict the conditions of this License, they do not
544 | excuse you from the conditions of this License. If you cannot convey a
545 | covered work so as to satisfy simultaneously your obligations under this
546 | License and any other pertinent obligations, then as a consequence you may
547 | not convey it at all. For example, if you agree to terms that obligate you
548 | to collect a royalty for further conveying from those to whom you convey
549 | the Program, the only way you could satisfy both those terms and this
550 | License would be to refrain entirely from conveying the Program.
551 |
552 | 13. Use with the GNU Affero General Public License.
553 |
554 | Notwithstanding any other provision of this License, you have
555 | permission to link or combine any covered work with a work licensed
556 | under version 3 of the GNU Affero General Public License into a single
557 | combined work, and to convey the resulting work. The terms of this
558 | License will continue to apply to the part which is the covered work,
559 | but the special requirements of the GNU Affero General Public License,
560 | section 13, concerning interaction through a network will apply to the
561 | combination as such.
562 |
563 | 14. Revised Versions of this License.
564 |
565 | The Free Software Foundation may publish revised and/or new versions of
566 | the GNU General Public License from time to time. Such new versions will
567 | be similar in spirit to the present version, but may differ in detail to
568 | address new problems or concerns.
569 |
570 | Each version is given a distinguishing version number. If the
571 | Program specifies that a certain numbered version of the GNU General
572 | Public License "or any later version" applies to it, you have the
573 | option of following the terms and conditions either of that numbered
574 | version or of any later version published by the Free Software
575 | Foundation. If the Program does not specify a version number of the
576 | GNU General Public License, you may choose any version ever published
577 | by the Free Software Foundation.
578 |
579 | If the Program specifies that a proxy can decide which future
580 | versions of the GNU General Public License can be used, that proxy's
581 | public statement of acceptance of a version permanently authorizes you
582 | to choose that version for the Program.
583 |
584 | Later license versions may give you additional or different
585 | permissions. However, no additional obligations are imposed on any
586 | author or copyright holder as a result of your choosing to follow a
587 | later version.
588 |
589 | 15. Disclaimer of Warranty.
590 |
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
599 |
600 | 16. Limitation of Liability.
601 |
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
610 | SUCH DAMAGES.
611 |
612 | 17. Interpretation of Sections 15 and 16.
613 |
614 | If the disclaimer of warranty and limitation of liability provided
615 | above cannot be given local legal effect according to their terms,
616 | reviewing courts shall apply local law that most closely approximates
617 | an absolute waiver of all civil liability in connection with the
618 | Program, unless a warranty or assumption of liability accompanies a
619 | copy of the Program in return for a fee.
620 |
621 | END OF TERMS AND CONDITIONS
622 |
623 | How to Apply These Terms to Your New Programs
624 |
625 | If you develop a new program, and you want it to be of the greatest
626 | possible use to the public, the best way to achieve this is to make it
627 | free software which everyone can redistribute and change under these terms.
628 |
629 | To do so, attach the following notices to the program. It is safest
630 | to attach them to the start of each source file to most effectively
631 | state the exclusion of warranty; and each file should have at least
632 | the "copyright" line and a pointer to where the full notice is found.
633 |
634 | {one line to give the program's name and a brief idea of what it does.}
635 | Copyright (C) {year} {name of author}
636 |
637 | This program is free software: you can redistribute it and/or modify
638 | it under the terms of the GNU General Public License as published by
639 | the Free Software Foundation, either version 3 of the License, or
640 | (at your option) any later version.
641 |
642 | This program is distributed in the hope that it will be useful,
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
645 | GNU General Public License for more details.
646 |
647 | You should have received a copy of the GNU General Public License
648 | along with this program. If not, see .
649 |
650 | Also add information on how to contact you by electronic and paper mail.
651 |
652 | If the program does terminal interaction, make it output a short
653 | notice like this when it starts in an interactive mode:
654 |
655 | {project} Copyright (C) {year} {fullname}
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
657 | This is free software, and you are welcome to redistribute it
658 | under certain conditions; type `show c' for details.
659 |
660 | The hypothetical commands `show w' and `show c' should show the appropriate
661 | parts of the General Public License. Of course, your program's commands
662 | might be different; for a GUI interface, you would use an "about box".
663 |
664 | You should also get your employer (if you work as a programmer) or school,
665 | if any, to sign a "copyright disclaimer" for the program, if necessary.
666 | For more information on this, and how to apply and follow the GNU GPL, see
667 | .
668 |
669 | The GNU General Public License does not permit incorporating your program
670 | into proprietary programs. If your program is a subroutine library, you
671 | may consider it more useful to permit linking proprietary applications with
672 | the library. If this is what you want to do, use the GNU Lesser General
673 | Public License instead of this License. But first, please read
674 | .
675 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # zPlayer
2 | The official repository for zPlayer, a Windows-only media player written in AutoIt aiming to provide a graphically clean and simple easy-to-use interface that users have come to expect from their favorite media players
3 |
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS/BassConstants.au3:
--------------------------------------------------------------------------------
1 | #include-once
2 | ; ===============================================================================================================================
3 | ; Error codes returned by $BASS_ErrorGetCode
4 | ; ===============================================================================================================================
5 | Global Const $BASS_OK = 0 ;all is OK
6 | Global Const $BASS_ERROR_MEM = 1 ;memory error
7 | Global Const $BASS_ERROR_FILEOPEN = 2 ;can;t open the file
8 | Global Const $BASS_ERROR_DRIVER = 3 ;can;t find a free sound driver
9 | Global Const $BASS_ERROR_BUFLOST = 4 ;the sample buffer was lost
10 | Global Const $BASS_ERROR_HANDLE = 5 ;invalid handle
11 | Global Const $BASS_ERROR_FORMAT = 6 ;unsupported sample format
12 | Global Const $BASS_ERROR_POSITION = 7 ;invalid position
13 | Global Const $BASS_ERROR_INIT = 8 ;$BASS_Init has not been successfully called
14 | Global Const $BASS_ERROR_START = 9 ;$BASS_Start has not been successfully called
15 | Global Const $BASS_ERROR_ALREADY = 14 ;already initialized/paused/whatever
16 | Global Const $BASS_ERROR_NOCHAN = 18 ;can;t get a free channel
17 | Global Const $BASS_ERROR_ILLTYPE = 19 ;an illegal type was specified
18 | Global Const $BASS_ERROR_ILLPARAM = 20 ;an illegal parameter was specified
19 | Global Const $BASS_ERROR_NO3D = 21 ;no 3D support
20 | Global Const $BASS_ERROR_NOEAX = 22 ;no EAX support
21 | Global Const $BASS_ERROR_DEVICE = 23 ;illegal device number
22 | Global Const $BASS_ERROR_NOPLAY = 24 ;not playing
23 | Global Const $BASS_ERROR_FREQ = 25 ;illegal sample rate
24 | Global Const $BASS_ERROR_NOTFILE = 27 ;the stream is not a file stream
25 | Global Const $BASS_ERROR_NOHW = 29 ;no hardware voices available
26 | Global Const $BASS_ERROR_EMPTY = 31 ;the MOD music has no sequence data
27 | Global Const $BASS_ERROR_NONET = 32 ;no internet connection could be opened
28 | Global Const $BASS_ERROR_CREATE = 33 ;couldn;t create the file
29 | Global Const $BASS_ERROR_NOFX = 34 ;effects are not available
30 | Global Const $BASS_ERROR_NOTAVAIL = 37 ;requested data is not available
31 | Global Const $BASS_ERROR_DECODE = 38 ;the channel is a "decoding channel"
32 | Global Const $BASS_ERROR_DX = 39 ;a sufficient DirectX version is not installed
33 | Global Const $BASS_ERROR_TIMEOUT = 40 ;connection timedout
34 | Global Const $BASS_ERROR_FILEFORM = 41 ;unsupported file format
35 | Global Const $BASS_ERROR_SPEAKER = 42 ;unavailable speaker
36 | Global Const $BASS_ERROR_VERSION = 43 ;invalid BASS version (used by add-ons)
37 | Global Const $BASS_ERROR_CODEC = 44 ;codec is not available/supported
38 | Global Const $BASS_ERROR_ENDED = 45 ;the channel/file has ended
39 | Global Const $BASS_ERROR_UNKNOWN = -1 ;some other mystery problem
40 |
41 | ; ===============================================================================================================================
42 | ; $BASS_SetConfig options
43 | ; ===============================================================================================================================
44 | Global Const $BASS_CONFIG_BUFFER = 0
45 | Global Const $BASS_CONFIG_UPDATEPERIOD = 1
46 | Global Const $BASS_CONFIG_GVOL_SAMPLE = 4
47 | Global Const $BASS_CONFIG_GVOL_STREAM = 5
48 | Global Const $BASS_CONFIG_GVOL_MUSIC = 6
49 | Global Const $BASS_CONFIG_CURVE_VOL = 7
50 | Global Const $BASS_CONFIG_CURVE_PAN = 8
51 | Global Const $BASS_CONFIG_FLOATDSP = 9
52 | Global Const $BASS_CONFIG_3DALGORITHM = 10
53 | Global Const $BASS_CONFIG_NET_TIMEOUT = 11
54 | Global Const $BASS_CONFIG_NET_BUFFER = 12
55 | Global Const $BASS_CONFIG_PAUSE_NOPLAY = 13
56 | Global Const $BASS_CONFIG_NET_PREBUF = 15
57 | Global Const $BASS_CONFIG_NET_PASSIVE = 18
58 | Global Const $BASS_CONFIG_REC_BUFFER = 19
59 | Global Const $BASS_CONFIG_NET_PLAYLIST = 21
60 | Global Const $BASS_CONFIG_MUSIC_VIRTUAL = 22
61 | Global Const $BASS_CONFIG_VERIFY = 23
62 | Global Const $BASS_CONFIG_UPDATETHREADS = 24
63 |
64 | ; ===============================================================================================================================
65 | ; $BASS_SetConfigPtr options
66 | ; ===============================================================================================================================
67 | Global Const $BASS_CONFIG_NET_AGENT = 16
68 | Global Const $BASS_CONFIG_NET_PROXY = 17
69 |
70 | ; ===============================================================================================================================
71 | ; Initialization flags
72 | ; ===============================================================================================================================
73 | Global Const $BASS_DEVICE_8BITS = 1 ;use 8 bit resolution, else 16 bit
74 | Global Const $BASS_DEVICE_MONO = 2 ;use mono, else stereo
75 | Global Const $BASS_DEVICE_3D = 4 ;enable 3D functionality
76 | Global Const $BASS_DEVICE_LATENCY = 256 ;calculate device latency ($BASS_INFO struct)
77 | Global Const $BASS_DEVICE_CPSPEAKERS = 1024 ;detect speakers via Windows control panel
78 | Global Const $BASS_DEVICE_SPEAKERS = 2048 ;force enabling of speaker assignment
79 | Global Const $BASS_DEVICE_NOSPEAKER = 4096 ;ignore speaker arrangement
80 |
81 | ; ===============================================================================================================================
82 | ; DirectSound interfaces (for use with $BASS_GetDSoundObject)
83 | ; ===============================================================================================================================
84 | Global Const $BASS_OBJECT_DS = 1 ; DirectSound
85 | Global Const $BASS_OBJECT_DS3DL = 2 ;IDirectSound3DListener
86 |
87 | Global Const $BASS_DEVICEINFO = "ptr name;" & _ ;name Description of the device.
88 | "ptr driver;" & _ ;driver The filename of the driver... NULL = no driver ("no sound" device)
89 | "dword flags;" ;flags The device's current status...
90 |
91 | ; ===============================================================================================================================
92 | ; $BASS_DEVICEINFO flags
93 | ; ===============================================================================================================================
94 | Global Const $BASS_DEVICE_ENABLED = 1
95 | Global Const $BASS_DEVICE_DEFAULT = 2
96 | Global Const $BASS_DEVICE_INIT = 4
97 |
98 | $BASS_INFO = 'dword flags;' & _ ; device capabilities (DSCAPS_xxx flags)
99 | 'dword hwsize;' & _ ; size of total device hardware memory
100 | 'dword hwfree;' & _ ; size of free device hardware memory
101 | 'dword freesam;' & _ ; number of free sample slots in the hardware
102 | 'dword free3d;' & _ ; number of free 3D sample slots in the hardware
103 | 'dword minrate;' & _ ; min sample rate supported by the hardware
104 | 'dword maxrate;' & _ ; max sample rate supported by the hardware
105 | 'int eax;' & _ ; device supports EAX? (always BASSFALSE if $BASS_DEVICE_3D was not used)
106 | 'dword minbuf;' & _ ; recommended minimum buffer length in ms (requires $BASS_DEVICE_LATENCY)
107 | 'dword dsver;' & _ ; DirectSound version
108 | 'dword latency;' & _ ; delay (in ms) before start of playback (requires $BASS_DEVICE_LATENCY)
109 | 'dword initflags;' & _ ; $BASS_Init "flags" parameter
110 | 'dword speakers;' & _ ; number of speakers available
111 | 'dword freq' ; current output rate (OSX only)
112 |
113 | ; ===============================================================================================================================
114 | ; $BASS_INFO flags
115 | ; ===============================================================================================================================
116 | Global Const $DSCAPS_CONTINUOUSRATE = 16 ; supports all sample rates between min/maxrate
117 | Global Const $DSCAPS_EMULDRIVER = 32 ; device does NOT have hardware DirectSound support
118 | Global Const $DSCAPS_CERTIFIED = 64 ; device driver has been certified by Microsoft
119 | Global Const $DSCAPS_SECONDARYMONO = 256 ; mono
120 | Global Const $DSCAPS_SECONDARYSTEREO = 512 ; stereo
121 | Global Const $DSCAPS_SECONDARY8BIT = 1024 ; 8 bit
122 | Global Const $DSCAPS_SECONDARY16BIT = 2048 ; 16 bit
123 |
124 | ; ===============================================================================================================================
125 | ; Recording device info structure
126 | ; ===============================================================================================================================
127 | $BASS_RECORDINFO = "dword flags;" & _ ; device capabilities (DSCCAPS_xxx flags)
128 | 'dword formats;' & _ ; supported standard formats (WAVE_FORMAT_xxx flags)
129 | 'dword inputs;' & _ ; number of inputs
130 | 'int singlein;' & _ ; BASSTRUE = only 1 input can be set at a time
131 | 'dword freq' ; current input rate (Vista/OSX only)
132 |
133 | ; ===============================================================================================================================
134 | ; $BASS_RECORDINFO flags
135 | ; ===============================================================================================================================
136 | Global Const $DSCCAPS_EMULDRIVER = $DSCAPS_EMULDRIVER ; device does NOT have hardware DirectSound recording support
137 | Global Const $DSCCAPS_CERTIFIED = $DSCAPS_CERTIFIED ; device driver has been certified by Microsoft
138 |
139 | ; ===============================================================================================================================
140 | ; defines for formats field of $BASS_RECORDINFO
141 | ; ===============================================================================================================================
142 | Global Const $WAVE_FORMAT_1M08 = 0x1 ; 11.025 kHz, Mono, 8-bit
143 | Global Const $WAVE_FORMAT_1S08 = 0x2 ; 11.025 kHz, Stereo, 8-bit
144 | Global Const $WAVE_FORMAT_1M16 = 0x4 ; 11.025 kHz, Mono, 16-bit
145 | Global Const $WAVE_FORMAT_1S16 = 0x8 ; 11.025 kHz, Stereo, 16-bit
146 | Global Const $WAVE_FORMAT_2M08 = 0x10 ; 22.05 kHz, Mono, 8-bit
147 | Global Const $WAVE_FORMAT_2S08 = 0x20 ; 22.05 kHz, Stereo, 8-bit
148 | Global Const $WAVE_FORMAT_2M16 = 0x40 ; 22.05 kHz, Mono, 16-bit
149 | Global Const $WAVE_FORMAT_2S16 = 0x80 ; 22.05 kHz, Stereo, 16-bit
150 | Global Const $WAVE_FORMAT_4M08 = 0x100 ; 44.1 kHz, Mono, 8-bit
151 | Global Const $WAVE_FORMAT_4S08 = 0x200 ; 44.1 kHz, Stereo, 8-bit
152 | Global Const $WAVE_FORMAT_4M16 = 0x400 ; 44.1 kHz, Mono, 16-bit
153 | Global Const $WAVE_FORMAT_4S16 = 0x800 ; 44.1 kHz, Stereo, 16-bit
154 |
155 | ; ===============================================================================================================================
156 | ; Sample info structure
157 | ; ===============================================================================================================================
158 | $BASS_SAMPLE = 'dword freq;' & _ ; default playback rate
159 | 'float volume;' & _ ; default volume (0-100)
160 | 'float pan;' & _ ; default pan (-100=left, 0=middle, 100=right)
161 | 'dword flags;' & _ ; $BASS_SAMPLE_xxx flags
162 | 'dword length;' & _ ; length (in samples, not bytes)
163 | 'dword max;' & _ ; maximum simultaneous playbacks
164 | 'dword origres;' & _ ; original resolution
165 | 'dword chans;' & _ ; number of channels
166 | 'dword mingap;' & _ ; minimum gap (ms) between creating channels
167 | 'dword mode3d;' & _ ; $BASS_3DMODE_xxx mode
168 | 'float mindist;' & _ ; minimum distance
169 | 'float MAXDIST;' & _ ; maximum distance
170 | 'dword iangle;' & _ ; angle of inside projection cone
171 | 'dword oangle;' & _ ; angle of outside projection cone
172 | 'float outvol;' & _ ; delta-volume outside the projection cone
173 | 'dword vam;' & _ ; voice allocation/management flags ($BASS_VAM_xxx)
174 | 'dword priority;' ; priority (0=lowest, 0xffffffff=highest)
175 |
176 | Global Const $BASS_SAMPLE_8BITS = 1 ; 8 bit
177 | Global Const $BASS_SAMPLE_FLOAT = 256 ; 32-bit floating-point
178 | Global Const $BASS_SAMPLE_MONO = 2 ; mono
179 | Global Const $BASS_SAMPLE_LOOP = 4 ; looped
180 | Global Const $BASS_SAMPLE_3D = 8 ; 3D functionality
181 | Global Const $BASS_SAMPLE_SOFTWARE = 16 ; not using hardware mixing
182 | Global Const $BASS_SAMPLE_MUTEMAX = 32 ; mute at max distance (3D only)
183 | Global Const $BASS_SAMPLE_VAM = 64 ; DX7 voice allocation & management
184 | Global Const $BASS_SAMPLE_FX = 128 ; old implementation of DX8 effects
185 | Global Const $BASS_SAMPLE_OVER_VOL = 0x10000 ; override lowest volume
186 | Global Const $BASS_SAMPLE_OVER_POS = 0x20000 ; override dwordest playing
187 | Global Const $BASS_SAMPLE_OVER_DIST = 0x30000 ; override furthest from listener (3D only)
188 |
189 | Global Const $BASS_STREAM_PRESCAN = 0x20000 ; enable pin-point seeking/length (MP3/MP2/MP1)
190 | Global Const $BASS_MP3_SETPOS = $BASS_STREAM_PRESCAN
191 | Global Const $BASS_STREAM_AUTOFREE = 0x40000 ; automatically free the stream when it stop/ends
192 | Global Const $BASS_STREAM_RESTRATE = 0x80000 ; restrict the download rate of internet file streams
193 | Global Const $BASS_STREAM_BLOCK = 0x100000 ; download/play internet file stream in small blocks
194 | Global Const $BASS_STREAM_DECODE = 0x200000 ; don;t play the stream, only decode ($BASS_ChannelGetData)
195 | Global Const $BASS_STREAM_STATUS = 0x800000 ; give server status info (HTTP/ICY tags) in DOWNLOADPROC
196 |
197 | Global Const $BASS_MUSIC_FLOAT = $BASS_SAMPLE_FLOAT
198 | Global Const $BASS_MUSIC_MONO = $BASS_SAMPLE_MONO
199 | Global Const $BASS_MUSIC_LOOP = $BASS_SAMPLE_LOOP
200 | Global Const $BASS_MUSIC_3D = $BASS_SAMPLE_3D
201 | Global Const $BASS_MUSIC_FX = $BASS_SAMPLE_FX
202 | Global Const $BASS_MUSIC_AUTOFREE = $BASS_STREAM_AUTOFREE
203 | Global Const $BASS_MUSIC_DECODE = $BASS_STREAM_DECODE
204 | Global Const $BASS_MUSIC_PRESCAN = $BASS_STREAM_PRESCAN ; calculate playback length
205 | Global Const $BASS_MUSIC_CALCLEN = $BASS_MUSIC_PRESCAN
206 | Global Const $BASS_MUSIC_RAMP = 0x200 ; normal ramping
207 | Global Const $BASS_MUSIC_RAMPS = 0x400 ; sensitive ramping
208 | Global Const $BASS_MUSIC_SURROUND = 0x800 ; surround sound
209 | Global Const $BASS_MUSIC_SURROUND2 = 0x1000 ; surround sound (mode 2)
210 | Global Const $BASS_MUSIC_FT2MOD = 0x2000 ; play .MOD as FastTracker 2 does
211 | Global Const $BASS_MUSIC_PT1MOD = 0x4000 ; play .MOD as ProTracker 1 does
212 | Global Const $BASS_MUSIC_NONINTER = 0x10000 ; non-interpolated sample mixing
213 | Global Const $BASS_MUSIC_SINCINTER = 0x800000 ; sinc interpolated sample mixing
214 | Global Const $BASS_MUSIC_POSRESET = 32768 ; stop all notes when moving position
215 | Global Const $BASS_MUSIC_POSRESETEX = 0x400000 ; stop all notes and reset bmp/etc when moving position
216 | Global Const $BASS_MUSIC_STOPBACK = 0x80000 ; stop the music on a backwards jump effect
217 | Global Const $BASS_MUSIC_NOSAMPLE = 0x100000 ; don;t load the samples
218 |
219 | ; ===============================================================================================================================
220 | ; Speaker assignment flags
221 | ; ===============================================================================================================================
222 | Global Const $BASS_SPEAKER_FRONT = 0x1000000 ; front speakers
223 | Global Const $BASS_SPEAKER_REAR = 0x2000000 ; rear/side speakers
224 | Global Const $BASS_SPEAKER_CENLFE = 0x3000000 ; center & LFE speakers (5.1)
225 | Global Const $BASS_SPEAKER_REAR2 = 0x4000000 ; rear center speakers (7.1)
226 | Global Const $BASS_SPEAKER_LEFT = 0x10000000 ; modifier: left
227 | Global Const $BASS_SPEAKER_RIGHT = 0x20000000 ; modifier: right
228 | Global Const $BASS_SPEAKER_FRONTLEFT = $BASS_SPEAKER_FRONT + $BASS_SPEAKER_LEFT
229 | Global Const $BASS_SPEAKER_FRONTRIGHT = $BASS_SPEAKER_FRONT + $BASS_SPEAKER_RIGHT
230 | Global Const $BASS_SPEAKER_REARLEFT = $BASS_SPEAKER_REAR + $BASS_SPEAKER_LEFT
231 | Global Const $BASS_SPEAKER_REARRIGHT = $BASS_SPEAKER_REAR + $BASS_SPEAKER_RIGHT
232 | Global Const $BASS_SPEAKER_CENTER = $BASS_SPEAKER_CENLFE + $BASS_SPEAKER_LEFT
233 | Global Const $BASS_SPEAKER_LFE = $BASS_SPEAKER_CENLFE + $BASS_SPEAKER_RIGHT
234 | Global Const $BASS_SPEAKER_REAR2LEFT = $BASS_SPEAKER_REAR2 + $BASS_SPEAKER_LEFT
235 | Global Const $BASS_SPEAKER_REAR2RIGHT = $BASS_SPEAKER_REAR2 + $BASS_SPEAKER_RIGHT
236 |
237 | Global Const $BASS_UNICODE = 0x80000000
238 |
239 | Global Const $BASS_RECORD_PAUSE = 32768 ; start recording paused
240 |
241 | ; ===============================================================================================================================
242 | ; DX7 voice allocation flags
243 | ; ===============================================================================================================================
244 | Global Const $BASS_VAM_HARDWARE = 1
245 | Global Const $BASS_VAM_SOFTWARE = 2
246 | Global Const $BASS_VAM_TERM_TIME = 4
247 | Global Const $BASS_VAM_TERM_DIST = 8
248 | Global Const $BASS_VAM_TERM_PRIO = 16
249 |
250 | ; ===============================================================================================================================
251 | ; Channel info structure
252 | ; ===============================================================================================================================
253 | $BASS_CHANNELINFO = 'dword freq;' & _ ; default playback rate
254 | 'dword chans;' & _ ; channels
255 | 'dword flags;' & _ ; $BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
256 | 'dword ctype;' & _ ; type of channel
257 | 'dword origres;' & _ ; original resolution
258 | 'dword plugin;' & _ ; plugin
259 | 'dword sample;' & _ ; sample
260 | 'ptr filename;' ;filename
261 |
262 | ; ===============================================================================================================================
263 | ; $BASS_CHANNELINFO types
264 | ; ===============================================================================================================================
265 | Global Const $BASS_CTYPE_SAMPLE = 1
266 | Global Const $BASS_CTYPE_RECORD = 2
267 | Global Const $BASS_CTYPE_STREAM = 0x10000
268 | Global Const $BASS_CTYPE_STREAM_OGG = 0x10002
269 | Global Const $BASS_CTYPE_STREAM_MP1 = 0x10003
270 | Global Const $BASS_CTYPE_STREAM_MP2 = 0x10004
271 | Global Const $BASS_CTYPE_STREAM_MP3 = 0x10005
272 | Global Const $BASS_CTYPE_STREAM_AIFF = 0x10006
273 | Global Const $BASS_CTYPE_STREAM_WAV = 0x40000 ; WAVE flag, LOWORD=codec
274 | Global Const $BASS_CTYPE_STREAM_WAV_PCM = 0x50001
275 | Global Const $BASS_CTYPE_STREAM_WAV_FLOAT = 0x50003
276 | Global Const $BASS_CTYPE_MUSIC_MOD = 0x20000
277 | Global Const $BASS_CTYPE_MUSIC_MTM = 0x20001
278 | Global Const $BASS_CTYPE_MUSIC_S3M = 0x20002
279 | Global Const $BASS_CTYPE_MUSIC_XM = 0x20003
280 | Global Const $BASS_CTYPE_MUSIC_IT = 0x20004
281 | Global Const $BASS_CTYPE_MUSIC_MO3 = 0x100 ; MO3 flag
282 |
283 | $BASS_PLUGINFORM = 'dword;ptr;ptr;'
284 |
285 | $BASS_PLUGININFO = 'dword version;' & _ ; version (same form as $BASS_GetVersion)
286 | 'dword formatc;' & _ ; number of formats
287 | 'ptr formats;' ; the array of formats
288 |
289 | ; ===============================================================================================================================
290 | ; 3D vector (for 3D positions/velocities/orientations)
291 | ; ===============================================================================================================================
292 | $BASS_3DVECTOR = 'float X;' & _ ; + = right, - = left
293 | 'float Y;' & _ ; + = up, - = down
294 | 'float z;' ; + = front, - = behind
295 |
296 | ; ===============================================================================================================================
297 | ; 3D channel modes
298 | ; ===============================================================================================================================
299 | Global Const $BASS_3DMODE_NORMAL = 0 ; normal 3D processing
300 | Global Const $BASS_3DMODE_RELATIVE = 1 ; position is relative to the listener
301 | Global Const $BASS_3DMODE_OFF = 2 ; no 3D processing
302 |
303 | ; ===============================================================================================================================
304 | ; software 3D mixing algorithms (used with $BASS_CONFIG_3DALGORITHM)
305 | ; ===============================================================================================================================
306 | Global Const $BASS_3DALG_DEFAULT = 0
307 | Global Const $BASS_3DALG_OFF = 1
308 | Global Const $BASS_3DALG_FULL = 2
309 | Global Const $BASS_3DALG_LIGHT = 3
310 |
311 | ; ===============================================================================================================================
312 | ; EAX environments, use with $BASS_SetEAXParameters
313 | ; ===============================================================================================================================
314 | Global Const $EAX_ENVIRONMENT_GENERIC = 0
315 | Global Const $EAX_ENVIRONMENT_PADDEDCELL = 1
316 | Global Const $EAX_ENVIRONMENT_ROOM = 2
317 | Global Const $EAX_ENVIRONMENT_BATHROOM = 3
318 | Global Const $EAX_ENVIRONMENT_LIVINGROOM = 4
319 | Global Const $EAX_ENVIRONMENT_STONEROOM = 5
320 | Global Const $EAX_ENVIRONMENT_AUDITORIUM = 6
321 | Global Const $EAX_ENVIRONMENT_CONCERTHALL = 7
322 | Global Const $EAX_ENVIRONMENT_CAVE = 8
323 | Global Const $EAX_ENVIRONMENT_ARENA = 9
324 | Global Const $EAX_ENVIRONMENT_HANGAR = 10
325 | Global Const $EAX_ENVIRONMENT_CARPETEDHALLWAY = 11
326 | Global Const $EAX_ENVIRONMENT_HALLWAY = 12
327 | Global Const $EAX_ENVIRONMENT_STONECORRIDOR = 13
328 | Global Const $EAX_ENVIRONMENT_ALLEY = 14
329 | Global Const $EAX_ENVIRONMENT_FOREST = 15
330 | Global Const $EAX_ENVIRONMENT_CITY = 16
331 | Global Const $EAX_ENVIRONMENT_MOUNTAINS = 17
332 | Global Const $EAX_ENVIRONMENT_QUARRY = 18
333 | Global Const $EAX_ENVIRONMENT_PLAIN = 19
334 | Global Const $EAX_ENVIRONMENT_PARKINGLOT = 20
335 | Global Const $EAX_ENVIRONMENT_SEWERPIPE = 21
336 | Global Const $EAX_ENVIRONMENT_UNDERWATER = 22
337 | Global Const $EAX_ENVIRONMENT_DRUGGED = 23
338 | Global Const $EAX_ENVIRONMENT_DIZZY = 24
339 | Global Const $EAX_ENVIRONMENT_PSYCHOTIC = 25
340 | Global Const $EAX_ENVIRONMENT_COUNT = 26 ; total number of environments
341 |
342 | Global Const $BASS_STREAMPROC_END = 0x80000000 ; end of user stream flag
343 |
344 | ; ===============================================================================================================================
345 | ; special STREAMPROCs
346 | ; ===============================================================================================================================
347 | Global Const $STREAMPROC_DUMMY = 0 ; "dummy" stream
348 | Global Const $STREAMPROC_PUSH = -1 ; push stream
349 |
350 | ; ===============================================================================================================================
351 | ; $BASS_StreamCreateFileUser file systems
352 | ; ===============================================================================================================================
353 | Global Const $STREAMFILE_NOBUFFER = 0
354 | Global Const $STREAMFILE_BUFFER = 1
355 | Global Const $STREAMFILE_BUFFERPUSH = 2
356 |
357 | ; ===============================================================================================================================
358 | ; $BASS_StreamPutFileData options
359 | ; ===============================================================================================================================
360 | Global Const $BASS_FILEDATA_END = 0 ; end & close the file
361 |
362 | ; ===============================================================================================================================
363 | ; $BASS_StreamGetFilePosition modes
364 | ; ===============================================================================================================================
365 | Global Const $BASS_FILEPOS_CURRENT = 0
366 | Global Const $BASS_FILEPOS_DECODE = $BASS_FILEPOS_CURRENT
367 | Global Const $BASS_FILEPOS_DOWNLOAD = 1
368 | Global Const $BASS_FILEPOS_END = 2
369 | Global Const $BASS_FILEPOS_START = 3
370 | Global Const $BASS_FILEPOS_CONNECTED = 4
371 | Global Const $BASS_FILEPOS_BUFFER = 5
372 |
373 | ; ===============================================================================================================================
374 | ; $BASS_ChannelSetSync types
375 | ; ===============================================================================================================================
376 | Global Const $BASS_SYNC_POS = 0
377 | Global Const $BASS_SYNC_END = 2
378 | Global Const $BASS_SYNC_META = 4
379 | Global Const $BASS_SYNC_SLIDE = 5
380 | Global Const $BASS_SYNC_STALL = 6
381 | Global Const $BASS_SYNC_DOWNLOAD = 7
382 | Global Const $BASS_SYNC_FREE = 8
383 | Global Const $BASS_SYNC_SETPOS = 11
384 | Global Const $BASS_SYNC_MUSICPOS = 10
385 | Global Const $BASS_SYNC_MUSICINST = 1
386 | Global Const $BASS_SYNC_MUSICFX = 3
387 | Global Const $BASS_SYNC_OGG_CHANGE = 12
388 | Global Const $BASS_SYNC_MIXTIME = 0x40000000 ; FLAG: sync at mixtime, else at playtime
389 | Global Const $BASS_SYNC_ONETIME = 0x80000000 ; FLAG: sync only once, else continuously
390 |
391 | ; ===============================================================================================================================
392 | ; $BASS_ChannelIsActive return values
393 | ; ===============================================================================================================================
394 | Global Const $BASS_ACTIVE_STOPPED = 0
395 | Global Const $BASS_ACTIVE_PLAYING = 1
396 | Global Const $BASS_ACTIVE_STALLED = 2
397 | Global Const $BASS_ACTIVE_PAUSED = 3
398 |
399 | ; ===============================================================================================================================
400 | ; Channel attributes
401 | ; ===============================================================================================================================
402 | Global Const $BASS_ATTRIB_FREQ = 1
403 | Global Const $BASS_ATTRIB_VOL = 2
404 | Global Const $BASS_ATTRIB_PAN = 3
405 | Global Const $BASS_ATTRIB_EAXMIX = 4
406 | Global Const $BASS_ATTRIB_MUSIC_AMPLIFY = 0x100
407 | Global Const $BASS_ATTRIB_MUSIC_PANSEP = 0x101
408 | Global Const $BASS_ATTRIB_MUSIC_PSCALER = 0x102
409 | Global Const $BASS_ATTRIB_MUSIC_BPM = 0x103
410 | Global Const $BASS_ATTRIB_MUSIC_SPEED = 0x104
411 | Global Const $BASS_ATTRIB_MUSIC_VOL_GLOBAL = 0x105
412 | Global Const $BASS_ATTRIB_MUSIC_VOL_CHAN = 0x200 ; + channel #
413 | Global Const $BASS_ATTRIB_MUSIC_VOL_INST = 0x300 ; + instrument #
414 |
415 | ; ===============================================================================================================================
416 | ; $BASS_ChannelGetData flags
417 | ; ===============================================================================================================================
418 | Global Const $BASS_DATA_AVAILABLE = 0 ; query how much data is buffered
419 | Global Const $BASS_DATA_FLOAT = 0x40000000 ; flag: return floating-point sample data
420 | Global Const $BASS_DATA_FFT256 = 0x80000000 ; 256 sample FFT
421 | Global Const $BASS_DATA_FFT512 = 0x80000001 ; 512 FFT
422 | Global Const $BASS_DATA_FFT1024 = 0x80000002 ; 1024 FFT
423 | Global Const $BASS_DATA_FFT2048 = 0x80000003 ; 2048 FFT
424 | Global Const $BASS_DATA_FFT4096 = 0x80000004 ; 4096 FFT
425 | Global Const $BASS_DATA_FFT8192 = 0x80000005 ; 8192 FFT
426 | Global Const $BASS_DATA_FFT_INDIVIDUAL = 0x10 ; FFT flag: FFT for each channel, else all combined
427 | Global Const $BASS_DATA_FFT_NOWINDOW = 0x20 ; FFT flag: no Hanning window
428 |
429 | ; ===============================================================================================================================
430 | ; $BASS_ChannelGetTags types : what;s returned
431 | ; ===============================================================================================================================
432 | Global Const $BASS_TAG_ID3 = 0 ;ID3v1 tags : 128 byte block
433 | Global Const $BASS_TAG_ID3V2 = 1 ;ID3v2 tags : variable length block
434 | Global Const $BASS_TAG_OGG = 2 ;OGG comments : series of null-terminated UTF-8 strings
435 | Global Const $BASS_TAG_HTTP = 3 ;HTTP headers : series of null-terminated ANSI strings
436 | Global Const $BASS_TAG_ICY = 4 ;ICY headers : series of null-terminated ANSI strings
437 | Global Const $BASS_TAG_META = 5 ;ICY metadata : ANSI string
438 | Global Const $BASS_TAG_VENDOR = 9 ;OGG encoder : UTF-8 string
439 | Global Const $BASS_TAG_LYRICS3 = 10 ;Lyric3v2 tag : ASCII string
440 | Global Const $BASS_TAG_RIFF_INFO = 0x100 ;RIFF/WAVE tags : series of null-terminated ANSI strings
441 | Global Const $BASS_TAG_MUSIC_NAME = 0x10000 ;MOD music name : ANSI string
442 | Global Const $BASS_TAG_MUSIC_MESSAGE = 0x10001 ;MOD message : ANSI string
443 | Global Const $BASS_TAG_MUSIC_INST = 0x10100 ;+ instrument #, MOD instrument name : ANSI string
444 | Global Const $BASS_TAG_MUSIC_SAMPLE = 0x10300 ;+ sample #, MOD sample name : ANSI string
445 |
446 | ; ===============================================================================================================================
447 | ; $BASS_ChannelGetLength/GetPosition/SetPosition modes
448 | ; ===============================================================================================================================
449 | Global Const $BASS_POS_BYTE = 0 ; byte position
450 | Global Const $BASS_POS_MUSIC_ORDER = 1 ; order.row position, MAKEdword(order,row)
451 |
452 | ; ===============================================================================================================================
453 | ; $BASS_RecordSetInput flags
454 | ; ===============================================================================================================================
455 | Global Const $BASS_INPUT_OFF = 0x10000
456 | Global Const $BASS_INPUT_ON = 0x20000
457 |
458 | Global Const $BASS_INPUT_TYPE_MASK = 0xFF000000
459 | Global Const $BASS_INPUT_TYPE_UNDEF = 0x0
460 | Global Const $BASS_INPUT_TYPE_DIGITAL = 0x1000000
461 | Global Const $BASS_INPUT_TYPE_LINE = 0x2000000
462 | Global Const $BASS_INPUT_TYPE_MIC = 0x3000000
463 | Global Const $BASS_INPUT_TYPE_SYNTH = 0x4000000
464 | Global Const $BASS_INPUT_TYPE_CD = 0x5000000
465 | Global Const $BASS_INPUT_TYPE_PHONE = 0x6000000
466 | Global Const $BASS_INPUT_TYPE_SPEAKER = 0x7000000
467 | Global Const $BASS_INPUT_TYPE_WAVE = 0x8000000
468 | Global Const $BASS_INPUT_TYPE_AUX = 0x9000000
469 | Global Const $BASS_INPUT_TYPE_ANALOG = 0xA000000
470 |
471 | ; ===============================================================================================================================
472 | ; DX8 effect types, use with $BASS_ChannelSetFX
473 | ; ===============================================================================================================================
474 | Global Const $BASS_FX_DX8_CHORUS = "BASS_FX_DX8_CHORUS"
475 | Global Const $BASS_FX_DX8_CHORUS_VALUE = 0
476 |
477 | Global Const $BASS_FX_DX8_COMPRESSOR = "BASS_FX_DX8_COMPRESSOR"
478 | Global Const $BASS_FX_DX8_COMPRESSOR_VALUE = 1
479 |
480 | Global Const $BASS_FX_DX8_DISTORTION = "BASS_FX_DX8_DISTORTION"
481 | Global Const $BASS_FX_DX8_DISTORTION_VALUE = 2
482 |
483 | Global Const $BASS_FX_DX8_ECHO = "BASS_FX_DX8_ECHO"
484 | Global Const $BASS_FX_DX8_ECHO_VALUE = 3
485 |
486 | Global Const $BASS_FX_DX8_FLANGER = "BASS_FX_DX8_FLANGER"
487 | Global Const $BASS_FX_DX8_FLANGER_VALUE = 4
488 |
489 | Global Const $BASS_FX_DX8_GARGLE = "BASS_FX_DX8_GARGLE"
490 | Global Const $BASS_FX_DX8_GARGLE_VALUE = 5
491 |
492 | Global Const $BASS_FX_DX8_I3DL2REVERB = "BASS_FX_DX8_I3DL2REVERB"
493 | Global Const $BASS_FX_DX8_I3DL2REVERB_VALUE = 6
494 |
495 | Global Const $BASS_FX_DX8_PARAMEQ = "BASS_FX_DX8_PARAMEQ"
496 | Global Const $BASS_FX_DX8_PARAMEQ_VALUE = 7
497 |
498 | Global Const $BASS_FX_DX8_REVERB = "BASS_FX_DX8_REVERB"
499 | Global Const $BASS_FX_DX8_REVERB_VALUE = 8
500 |
501 | $BASS_DX8_CHORUS = 'float;' & _ ;fWetDryMix
502 | 'float;' & _ ;fDepth
503 | 'float;' & _ ;fFeedback
504 | 'float;' & _ ;fFrequency
505 | 'dword;' & _ ;lWaveform, 0=triangle, 1=sine
506 | 'float;' & _ ;fDelay
507 | 'dword;' ;lPhase
508 |
509 | $BASS_DX8_COMPRESSOR = 'float;' & _ ;fGain
510 | 'float;' & _ ;fAttack
511 | 'float;' & _ ;fRelease
512 | 'float;' & _ ;fThreshold
513 | 'float;' & _ ;fRatio
514 | 'float;' ;fPredelay
515 |
516 | $BASS_DX8_DISTORTION = 'float;' & _ ;fGain
517 | 'float;' & _ ;fEdge
518 | 'float;' & _ ;fPostEQCenterFrequency
519 | 'float;' & _ ;fPostEQBandwidth
520 | 'float;' ;fPreLowpassCutoff
521 |
522 | $BASS_DX8_ECHO = 'float;' & _ ;fWetDryMix
523 | 'float;' & _ ;fFeedback
524 | 'float;' & _ ;fLeftDelay
525 | 'float;' & _ ;fRightDelay
526 | 'int;' ;lPanDelay
527 |
528 | $BASS_DX8_FLANGER = 'float;' & _ ;fWetDryMix
529 | 'float;' & _ ;fDepth
530 | 'float;' & _ ;fFeedback
531 | 'float;' & _ ;fFrequency
532 | 'dword;' & _ ;lWaveform, 0=triangle, 1=sine
533 | 'float;' & _ ;fDelay
534 | 'dword;' ;lPhase
535 |
536 | $BASS_DX8_GARGLE = 'dword;' & _ ;dwRateHz
537 | 'dword;' ;dwWaveShape, 0=triangle, 1=square
538 |
539 | $BASS_DX8_I3DL2REVERB = 'int;' & _ ;lRoom [-10000, 0] default: -1000 mB
540 | 'int;' & _ ;lRoomHF [-10000, 0] default: 0 mB
541 | 'float;' & _ ;flRoomRolloffFactor [0.0, 10.0] default: 0.0
542 | 'float;' & _ ;flDecayTime [0.1, 20.0] default: 1.49s
543 | 'float;' & _ ;flDecayHFRatio [0.1, 2.0] default: 0.83
544 | 'int;' & _ ;lReflections [-10000, 1000] default: -2602 mB
545 | 'float;' & _ ;flReflectionsDelay [0.0, 0.3] default: 0.007 s
546 | 'int;' & _ ;lReverb [-10000, 2000] default: 200 mB
547 | 'float;' & _ ;flReverbDelay [0.0, 0.1] default: 0.011 s
548 | 'float;' & _ ;flDiffusion [0.0, 100.0] default: 100.0 %
549 | 'float;' & _ ;flDensity [0.0, 100.0] default: 100.0 %
550 | 'float;' ;flHFReference [20.0, 20000.0] default: 5000.0 Hz
551 |
552 | $BASS_DX8_PARAMEQ = 'float;' & _ ;fCenter
553 | 'float;' & _ ;fBandwidth
554 | 'float;' ;fGain
555 |
556 | $BASS_DX8_REVERB = 'float;' & _ ;fInGain [-96.0,0.0] default: 0.0 dB
557 | 'float;' & _ ;fReverbMix [-96.0,0.0] default: 0.0 db
558 | 'float;' & _ ;fReverbTime [0.001,3000.0] default: 1000.0 ms
559 | 'float;' ;fHighFreqRTRatio [0.001,0.999] default: 0.001
560 |
561 | Global Const $BASS_DX8_PHASE_NEG_180 = 0
562 | Global Const $BASS_DX8_PHASE_NEG_90 = 1
563 | Global Const $BASS_DX8_PHASE_ZERO = 2
564 | Global Const $BASS_DX8_PHASE_90 = 3
565 | Global Const $BASS_DX8_PHASE_180 = 4
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS/Function.txt:
--------------------------------------------------------------------------------
1 | _BASS_SetConfig
2 | _BASS_GetConfig
3 | _BASS_SetConfigPtr
4 | _BASS_GetConfigPtr
5 | _BASS_GetVersion
6 | _BASS_ErrorGetCode
7 | _BASS_GetDeviceInfo
8 | _BASS_Init
9 | _BASS_SetDevice
10 | _BASS_GetDevice
11 | _BASS_Free
12 | _BASS_GetDSoundObject
13 | _BASS_GetInfo
14 | _BASS_Update
15 | _BASS_GetCPU
16 | _BASS_Start
17 | _BASS_Stop
18 | _BASS_Pause
19 | _BASS_SetVolume
20 | _BASS_GetVolume
21 | _BASS_PluginLoad
22 | _BASS_PluginFree
23 | _Bass_PluginGetInfo_Sample
24 | _BASS_Set3DFactors
25 | _BASS_Get3DFactors
26 | _BASS_Set3DPosition
27 | _BASS_Get3DPosition
28 | _BASS_Apply3D
29 | _BASS_SetEAXParameters
30 | _BASS_GetEAXParameters
31 | _BASS_MusicLoad
32 | _BASS_MusicFree
33 | _BASS_SampleLoad
34 | _BASS_SampleCreate
35 | _BASS_SampleFree
36 | _BASS_SampleSetData
37 | _BASS_SampleGetData
38 | _BASS_SampleGetInfo
39 | _BASS_SampleSetInfo
40 | _BASS_SampleGetChannel
41 | _BASS_SampleStop
42 | _BASS_Startup
43 | _BASS_StreamCreate
44 | _BASS_StreamCreateFile
45 | _BASS_StreamCreateURL
46 | _BASS_StreamFree
47 | _BASS_StreamGetFilePosition
48 | _BASS_StreamPutData
49 | _BASS_StreamPutFileData
50 | _BASS_RecordGetDeviceInfo
51 | _BASS_RecordInit
52 | _BASS_RecordSetDevice
53 | _BASS_RecordGetDevice
54 | _BASS_RecordFree
55 | _BASS_RecordGetInfo
56 | _BASS_RecordGetInputName
57 | _BASS_RecordSetInput
58 | _BASS_RecordGetInput
59 | _BASS_RecordStart
60 | _BASS_ChannelBytes2Seconds
61 | _BASS_ChannelSeconds2Bytes
62 | _BASS_ChannelGetDevice
63 | _BASS_ChannelSetDevice
64 | _BASS_ChannelIsActive
65 | _BASS_ChannelGetInfo
66 | _BASS_ChannelGetTags
67 | _BASS_ChannelFlags
68 | _BASS_ChannelUpdate
69 | _BASS_ChannelLock
70 | _BASS_ChannelPlay
71 | _BASS_ChannelStop
72 | _BASS_ChannelPause
73 | _BASS_ChannelSetAttribute
74 | _BASS_ChannelGetAttribute
75 | _BASS_ChannelSlideAttribute
76 | _BASS_ChannelIsSliding
77 | _BASS_ChannelGet3DAttributes
78 | _BASS_ChannelSet3DAttributes
79 | _BASS_ChannelSet3DPosition
80 | _BASS_ChannelGet3DPosition
81 | _BASS_ChannelGetLength
82 | _BASS_ChannelSetPosition
83 | _BASS_ChannelGetPosition
84 | _BASS_ChannelGetLevel
85 | _BASS_ChannelGetData
86 | _BASS_ChannelSetLink
87 | _BASS_ChannelRemoveLink
88 | _BASS_ChannelSetFX
89 | _BASS_ChannelRemoveFX
90 | _BASS_SetEAXPreset
91 | _BASS_ChannelSetFX
92 | _BASS_ChannelRemoveFX
93 | _BASS_FXGetParameters
94 | _BASS_FXSetParameters
95 | _BASS_ChannelSetVolume
96 | _BASS_ChannelGetVolume
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS/bass.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/libs/BASS.au3/BASS/bass.dll
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS_TAGS/BassTags.au3:
--------------------------------------------------------------------------------
1 | ; #INDEX# =======================================================================================================================
2 | ; Title .........: BassTags.au3
3 | ; Description ...: Allows easy retrieval of tags using the handle of the currently playing stream.
4 | ; Author ........: Brett Francis (BrettF)
5 | ; ===============================================================================================================================
6 |
7 | ; #CURRENT# =====================================================================================================================
8 | ; _Bass_Tags_Startup()
9 | ; _Bass_Tags_Read()
10 | ; _Bass_Tags_GetLastErrorDesc()
11 | ; _Bass_Tags_GetVersion()
12 | ; ===============================================================================================================================
13 |
14 | Global $_ghBassTagsDll = -1
15 | Global $BASS_TAGS_DLL_UDF_VER = "0.0.0.15"
16 | Global $BASS_ERR_DLL_NO_EXIST = -1
17 |
18 | ; #FUNCTION# ====================================================================================================================
19 | ; Name...........: _Bass_Tags_Startup
20 | ; Description ...: Starts up BASS functions.
21 | ; Syntax.........: _Bass_Tags_Startup($sBassTagsDll)
22 | ; Parameters ....: - $sBassTagsDll - The relative path to tags.dll.
23 | ; Return values .: Success - Returns True
24 | ; Failure - Returns False and sets @ERROR
25 | ; @error will be set to-
26 | ; - $BASS_ERR_DLL_NO_EXIST - File could not be found.
27 | ;
28 | ; If the version of this UDF is not compatabile with this version of Bass, then the following
29 | ; error will be displayed to the user. This can be disabled by setting
30 | ; $BASS_STARTUP_BYPASS_VERSIONCHECK = 1
31 | ; This is the error show to the user:
32 | ; This version of BassTags.au3 is not made for tags.dll VX.X.X.X. Please update.
33 | ; Author ........: Prog@ndy
34 | ; Modified.......: Brett Francis (BrettF)
35 | ; Remarks .......:
36 | ; Related .......:
37 | ; Link ..........;
38 | ; Example .......;
39 | ; ===============================================================================================================================
40 | Func _Bass_Tags_Startup($sBassTagsDll="tags.dll")
41 | ;Check if bass has already been started up.
42 | If $_ghBassTagsDll <> -1 Then Return True
43 | ;Check if $sBassTagsDll exists.
44 | If Not FileExists ($sBassTagsDll) Then Return SetError ($BASS_ERR_DLL_NO_EXIST, 0, False)
45 | ;Check to make sure that the version of tags.dll is compatabile with this UDF version. If not we will throw a text error.
46 | ;Then we will exit the program
47 | If $BASS_STARTUP_BYPASS_VERSIONCHECK Then
48 | If _VersionCompare(FileGetVersion ($sBassTagsDll), $BASS_TAGS_DLL_UDF_VER) = -1 Then
49 | MsgBox (0, "ERROR", "This version of BassTags.au3 is made for tags.dll V" & $BASS_TAGS_DLL_UDF_VER & ". Please update")
50 | Exit
51 | EndIf
52 | EndIf
53 | ;Open the DLL
54 | $_ghBassTagsDll = DllOpen($sBassTagsDll)
55 |
56 | ;Check if the DLL was opened correctly.
57 | Return $_ghBassTagsDll <> -1
58 | EndFunc
59 |
60 | ; #FUNCTION# ====================================================================================================================
61 | ; Name...........: _Bass_Tags_
62 | ; Description ...:
63 | ; Syntax.........: _Bass_Tags_
64 | ; Parameters ....: - $ -
65 | ; Return values .: Success - Returns True
66 | ; Failure - Returns False and sets @ERROR as set by _Bass_ErrorGetCode()
67 | ; @error will be set to-
68 | ; - $ -
69 | ; Author ........: Brett Francis (BrettF)
70 | ; Modified.......:
71 | ; Remarks .......:
72 | ; Related .......:
73 | ; Link ..........;
74 | ; Example .......;
75 | ; ===============================================================================================================================
76 | Func _Bass_Tags_Read ($hHandle, $sFMT)
77 | $_bTags_Ret_ = DllCall ($_ghBassTagsDll, "str", "TAGS_Read", "dword", $hHandle, "str", $sFMT)
78 | If @error Then Return SetError (1, @error, 0)
79 | Return $_bTags_Ret_[0]
80 | EndFunc
81 |
82 | ; #FUNCTION# ====================================================================================================================
83 | ; Name...........: _Bass_Tags_
84 | ; Description ...:
85 | ; Syntax.........: _Bass_Tags_
86 | ; Parameters ....: - $ -
87 | ; Return values .: Success - Returns True
88 | ; Failure - Returns False and sets @ERROR as set by _Bass_ErrorGetCode()
89 | ; @error will be set to-
90 | ; - $ -
91 | ; Author ........: Brett Francis (BrettF)
92 | ; Modified.......:
93 | ; Remarks .......:
94 | ; Related .......:
95 | ; Link ..........;
96 | ; Example .......;
97 | ; ===============================================================================================================================
98 | Func _Bass_Tags_GetLastErrorDesc ()
99 | $_bTags_Ret_ = DllCall ($_ghBassTagsDll, "str", "TAGS_GetLastErrorDesc")
100 | If @error Then Return SetError (1, @error, 0)
101 | Return $_bTags_Ret_[0]
102 | EndFunc
103 |
104 | ; #FUNCTION# ====================================================================================================================
105 | ; Name...........: _Bass_Tags_
106 | ; Description ...:
107 | ; Syntax.........: _Bass_Tags_
108 | ; Parameters ....: - $ -
109 | ; Return values .: Success - Returns True
110 | ; Failure - Returns False and sets @ERROR as set by _Bass_ErrorGetCode()
111 | ; @error will be set to-
112 | ; - $ -
113 | ; Author ........: Brett Francis (BrettF)
114 | ; Modified.......:
115 | ; Remarks .......:
116 | ; Related .......:
117 | ; Link ..........;
118 | ; Example .......;
119 | ; ===============================================================================================================================
120 | Func _Bass_Tags_GetVersion ()
121 | $_bTags_Ret_ = DllCall ($_ghBassTagsDll, "dword", "TAGS_GetVersion")
122 | If @error Then Return SetError (1, @error, 0)
123 | Return $_bTags_Ret_[0]
124 | EndFunc
125 |
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS_TAGS/BassTags.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/libs/BASS.au3/BASS_TAGS/BassTags.dll
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/BASS_TAGS/Function.txt:
--------------------------------------------------------------------------------
1 | _Bass_Tags_Startup()
2 | _Bass_Tags_Read ()
3 | _Bass_Tags_GetLastErrorDesc ()
4 | _Bass_Tags_GetVersion ()
5 |
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/Changelog.txt:
--------------------------------------------------------------------------------
1 | Version 9
2 | /> Fixed _BassRecordGetInputName (updated production versions)
3 | +> Added Memory Examples of Bass (Thanks ProgAndy and UEZ)
4 | +> Added BassVST (Not 100% complete)
5 | +> Added BassFX Examples showing use of most functions:
6 | Pitch.au3
7 | Reverse.au3
8 | Tempo.au3
9 | /> Fixed error with calling _BASS_ErrorGetCode in BASSCD.au3
10 | /> Fixed startup functions return the wrong value (Thanks ProgAndy!)
11 | +> Added helper functions _BASS_ChannelSetVolume, _BASS_ChannelGetVolume (Thanks ProgAndy)
12 |
13 | Version 8
14 | /> Fixed BassEnc.au3
15 | /> Fixed _Bass_RecordGetInputName
16 | /> Updated BassEnc Example
17 | /> Updated BassFx.au3
18 | +> Added BassTags
19 |
20 | Version 7
21 | /> Slight Restructure of folders.
22 | /> Updated version of Bass.dll to 2.4.5.
23 | /> Updated version of BassEnc.dll to 2.4.6.
24 | /> Updated version of BassASIO.dll to 1.0.1.
25 | /> Updated version of BassFX.dll to 2.4.4.1.
26 | /> Added modifications of BASS.au3. Thanks ProgAndy for making these modifications.
27 | /> Modified BASS_Startup() to use some addition error checking. Also added UDF function header.
28 | /> Modified BassAsio.au3 to reflect same structure as Bass.au3.
29 | /> Modified BassEnc.au3 to reflect same structure as Bass.au3.
30 | /> Modified BassFx.au3 to reflect same structure as Bass.au3.
31 | +> Added BassCD.au3
32 | +> Added BassVIS.au3
33 | /> Update all examples to reflect changes in UDFs.
34 |
35 | Version 6
36 | /> Fixed Many Bass.au3 Functions
37 | +> Added BASSASIO, BASSENC, BASSFX (Thanks eukalyptus)
38 |
39 | Version 5
40 | /> Fixed _BASS_StreamCreateURL() (Thanks Hofi)
41 |
42 | Version 4
43 | +> Added _BASS_FXSetParameters() (Thanks eukalyptus)
44 | +> Added _BASS_FXGetParameters() (Thanks eukalyptus)
45 |
46 | Version 3
47 | +> Fixed more general errors.
48 | /> Updated all functions relating to song positioning.
49 |
50 | Version 2
51 | /> Fixed General errors (Thanks ProgAndy and Trancexx)
52 | +> Added _BASS_ChannelSeconds2Bytes()
53 |
54 | Version 1
55 | +> Initial version was released.
--------------------------------------------------------------------------------
/assets/libs/BASS.au3/License.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/libs/BASS.au3/License.txt
--------------------------------------------------------------------------------
/assets/libs/BorderLessWinUDF.au3:
--------------------------------------------------------------------------------
1 | #include-once
2 | #include
3 | Global $GLOBAL_MAIN_GUI, $Win_Min_ResizeX = 145, $Win_Min_ResizeY = 45
4 |
5 | ; #FUNCTION# ====================================================================================================================
6 | ; Name ..........: _GUI_EnableDragAndResize
7 | ; Compatibility .: Windows 7 and above. Not tested on XP.
8 | ; Description ...: Removes the Borders of a GUI, allows drag and resize while keeping the AeroSnap features of Windows still working with the GUI
9 | ; Warning .......: Can only be called for one GUI, if you call if for a second GUI, you have to call _GUI_DragAndResizeUpdate($Form1) it for the first GUI after closing the second GUI.
10 | ; Syntax ........: _GUI_EnableDragAndResize($mGUI, $GUI_WIDTH, $GUI_HEIGHT [, $Min_ResizeX = $Win_Min_ResizeX[, $Min_ResizeY = $Win_Min_ResizeY[,
11 | ; $AddShadowEffect = True]]])
12 | ; Parameters ....: $mGUI - Handle to your GUI.
13 | ; $GUI_WIDTH - The width of the GUI. (Required to fix the wrong size after removing borders)
14 | ; $GUI_HEIGHT - The height of the GUI. (Required to fix the wrong size after removing borders)
15 | ; $Min_ResizeX - [optional] Min size of the GUI. Default is 145
16 | ; $Min_ResizeY - [optional] Max size of the GUI. Default is 45
17 | ; $$AddShadowEffect - [optional] Adds shadow effect that looks like a thin border. Works only with Aero-Effects enabled. Default is False
18 | ; Author ........: BB_19
19 | ; Credits .......: https://www.autoitscript.com/wiki/Moving_and_Resizing_PopUp_GUIs
20 | ; Example .......: _GUI_EnableDragAndResize($Form1,300,200)
21 | ; ===============================================================================================================================
22 | Func _GUI_EnableDragAndResize($mGUI, $GUI_WIDTH, $GUI_HEIGHT, $Min_ResizeX = $Win_Min_ResizeX, $Min_ResizeY = $Win_Min_ResizeY, $AddShadowEffect = False)
23 | Global $GLOBAL_MAIN_GUI = $mGUI, $Win_Min_ResizeX = $Min_ResizeX, $Win_Min_ResizeY = $Min_ResizeY
24 | GUIRegisterMsg(0x0024, "INTERNAL_WM_GETMINMAXINFO") ; For GUI size limits
25 | GUIRegisterMsg(0x0084, "INTERNAL_WM_NCHITTEST") ; For resizing and to allow doubleclick to maximize and drag on the upper GUI.
26 | GUIRegisterMsg(0x0083, "INTERNAL_WM_NCCALCSIZE") ; To Prevent window border from drawing
27 | GUIRegisterMsg(0x0201, "INTERNAL_WM_LBUTTONDOWN") ; For drag/GUI moving. Disable this if you want to only a specific the area for dragging.(By using labels with $GUI_WS_EX_PARENTDRAG)
28 | GUIRegisterMsg(0x0005, "INTERNAL_WM_SIZING") ; Fixing the maxmized position (otherwise we have a -7px margin on all sides due to the missing border)
29 | GUIRegisterMsg(0x0086, "INTERNAL_WM_NCACTIVATE") ; Prevent Windowframe
30 | If $AddShadowEffect = True Then
31 | Local $tMargs = DllStructCreate("int cxLeftWidth;int cxRightWidth;int cyTopHeight;int cyBottomHeight")
32 | DllStructSetData($tMargs, 1, 1)
33 | DllStructSetData($tMargs, 2, 1)
34 | DllStructSetData($tMargs, 3, 1)
35 | DllStructSetData($tMargs, 4, 1)
36 | DllCall("dwmapi.dll", "int", "DwmExtendFrameIntoClientArea", "hwnd", $mGUI, "ptr", DllStructGetPtr($tMargs))
37 | EndIf
38 | WinMove($mGUI, "", Default, Default, $GUI_WIDTH, $GUI_HEIGHT);Update Size and
39 | EndFunc ;==>_GUI_EnableDragAndResize
40 |
41 | ;Update drag and resize for your first GUI after using _GUI_EnableDragAndResize on a second GUI.
42 | Func _GUI_DragAndResizeUpdate($mGUI, $Min_ResizeX = $Win_Min_ResizeX, $Min_ResizeY = $Win_Min_ResizeY)
43 | Global $GLOBAL_MAIN_GUI = $mGUI, $Win_Min_ResizeX = $Min_ResizeX, $Win_Min_ResizeY = $Min_ResizeY
44 | GUIRegisterMsg(0x0024, "INTERNAL_WM_GETMINMAXINFO")
45 | GUIRegisterMsg(0x0084, "INTERNAL_WM_NCHITTEST")
46 | GUIRegisterMsg(0x0083, "INTERNAL_WM_NCCALCSIZE")
47 | GUIRegisterMsg(0x0201, "INTERNAL_WM_LBUTTONDOWN")
48 | GUIRegisterMsg(0x0005, "INTERNAL_WM_SIZING")
49 | GUIRegisterMsg(0x0086, "INTERNAL_WM_NCACTIVATE")
50 | EndFunc ;==>_GUI_EnableDragAndResizeUpdate
51 |
52 | ;Prevent Borders from redrawing when window goes inactive
53 | Func INTERNAL_WM_NCACTIVATE($hWnd, $iMsg, $wParam, $lParam)
54 | If ($hWnd = $GLOBAL_MAIN_GUI) Then Return -1
55 | EndFunc ;==>INTERNAL_WM_NCACTIVATE
56 |
57 | ;Fix maximized position
58 | Func INTERNAL_WM_SIZING($hWnd, $iMsg, $wParam, $lParam)
59 | If ($hWnd = $GLOBAL_MAIN_GUI) Then
60 | If (WinGetState($GLOBAL_MAIN_GUI) = 47) Then
61 | Local $WorkingSize = _GetDesktopWorkArea($GLOBAL_MAIN_GUI)
62 | Local $aWinPos = WinGetPos($GLOBAL_MAIN_GUI)
63 | _WinAPI_SetWindowPos($GLOBAL_MAIN_GUI, $HWND_TOP, $aWinPos[0] - 1, $aWinPos[1] - 1, $WorkingSize[2], $WorkingSize[3], $SWP_NOREDRAW)
64 | EndIf
65 | EndIf
66 | EndFunc ;==>INTERNAL_WM_SIZING
67 |
68 | ; Set min and max GUI sizes
69 | Func INTERNAL_WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam)
70 | $tMinMaxInfo = DllStructCreate("int;int;int;int;int;int;int;int;int;dword", $lParam)
71 | Local $WorkingSize = _GetDesktopWorkArea($GLOBAL_MAIN_GUI)
72 | ;Prevent Windows from misplacing the GUI when maximized, due to missing borders.
73 | DllStructSetData($tMinMaxInfo, 3, $WorkingSize[2])
74 | DllStructSetData($tMinMaxInfo, 4, $WorkingSize[3])
75 | DllStructSetData($tMinMaxInfo, 5, $WorkingSize[0] + 1)
76 | DllStructSetData($tMinMaxInfo, 6, $WorkingSize[1] + 1)
77 | ;Min Size limits
78 | DllStructSetData($tMinMaxInfo, 7, $Win_Min_ResizeX)
79 | DllStructSetData($tMinMaxInfo, 8, $Win_Min_ResizeY)
80 | Return 0
81 | EndFunc ;==>INTERNAL_WM_GETMINMAXINFO
82 |
83 | ;Stop drawing GUI Borders
84 | Func INTERNAL_WM_NCCALCSIZE($hWnd, $Msg, $wParam, $lParam)
85 | If $hWnd = $GLOBAL_MAIN_GUI Then
86 | Return 0
87 | EndIf
88 | Return 'GUI_RUNDEFMSG'
89 | EndFunc ;==>INTERNAL_WM_NCCALCSIZE
90 |
91 | ;Set mouse cursor for resizing etc. / Allow the upper GUI (40 pixel from top) to act as a control bar (doubleclick to maximize, move gui around..)
92 | Func INTERNAL_WM_NCHITTEST($hWnd, $uMsg, $wParam, $lParam)
93 | If ($hWnd = $GLOBAL_MAIN_GUI) Then
94 | Local $iSide = 0, $iTopBot = 0, $CurSorInfo
95 |
96 | Local $mPos = MouseGetPos()
97 | Local $aWinPos = WinGetPos($GLOBAL_MAIN_GUI)
98 | Local $aCurInfo = GUIGetCursorInfo($GLOBAL_MAIN_GUI)
99 |
100 | ;Check if Mouse is over Border, Margin = 5
101 | If Not @error Then
102 | If $aCurInfo[0] < 5 Then $iSide = 1
103 | If $aCurInfo[0] > $aWinPos[2] - 5 Then $iSide = 2
104 | If $aCurInfo[1] < 5 Then $iTopBot = 3
105 | If $aCurInfo[1] > $aWinPos[3] - 5 Then $iTopBot = 6
106 | $CurSorInfo = $iSide + $iTopBot
107 | Else
108 | $CurSorInfo = 0
109 | EndIf
110 |
111 | ;Set position for drag and doubleclick to maximize
112 | $xMIN = $aWinPos[0] + 4
113 | $xMAX = $aWinPos[0] + $aWinPos[2] - 4
114 | $yMIN = $aWinPos[1] + 4
115 | $yMAX = $aWinPos[1] + 15
116 |
117 | If ($mPos[0] >= $xMIN) And ($mPos[0] <= $xMAX) And ($mPos[1] >= $yMIN) And ($mPos[1] <= $yMAX) Then
118 | GUISetCursor(2, 1)
119 | Return 2; Return $HTCAPTION if mouse is within the position for drag + doubleclick to maximize
120 | EndIf
121 | If Not (WinGetState($GLOBAL_MAIN_GUI) = 47) Then
122 | ;Set resize cursor and return the correct $HT for gui resizing
123 | If ($aCurInfo[4] = 0) Then
124 | Local $Return_HT = 2, $Set_Cursor = 2
125 | Switch $CurSorInfo
126 | Case 1
127 | $Set_Cursor = 13
128 | $Return_HT = 10
129 | Case 2
130 | $Set_Cursor = 13
131 | $Return_HT = 11
132 | Case 3
133 | $Set_Cursor = 11
134 | $Return_HT = 12
135 | Case 4
136 | $Set_Cursor = 12
137 | $Return_HT = 13
138 | Case 5
139 | $Set_Cursor = 10
140 | $Return_HT = 14
141 | Case 6
142 | $Set_Cursor = 11
143 | $Return_HT = 15
144 | Case 7
145 | $Set_Cursor = 10
146 | $Return_HT = 16
147 | Case 8
148 | $Set_Cursor = 12
149 | $Return_HT = 17
150 | EndSwitch
151 | GUISetCursor($Set_Cursor, 1)
152 | If Not ($Return_HT = 2) Then Return $Return_HT
153 | EndIf
154 | EndIf
155 | EndIf
156 | Return 'GUI_RUNDEFMSG'
157 | EndFunc ;==>INTERNAL_WM_NCHITTEST
158 |
159 | ; Allow drag with mouse left button down
160 | Func INTERNAL_WM_LBUTTONDOWN($hWnd, $iMsg, $wParam, $lParam)
161 | If ($hWnd = $GLOBAL_MAIN_GUI) Then
162 | If Not (WinGetState($GLOBAL_MAIN_GUI) = 47) Then
163 | Local $aCurInfo = GUIGetCursorInfo($GLOBAL_MAIN_GUI)
164 | If ($aCurInfo[4] = 0) Then ; Mouse not over a control
165 | DllCall("user32.dll", "int", "ReleaseCapture")
166 | DllCall("user32.dll", "long", "SendMessage", "hwnd", $GLOBAL_MAIN_GUI, "int", 0x00A1, "int", 2, "int", 0)
167 | EndIf
168 | EndIf
169 | EndIf
170 | EndFunc ;==>INTERNAL_WM_LBUTTONDOWN
171 |
172 |
173 | ; #FUNCTION# ====================================================================================================================
174 | ; Name ..........: _GetDesktopWorkArea
175 | ; Description ...: Calculate the desktop workarea for a specific window to maximize it. Supports multi display and taskbar detection.
176 | ; Syntax ........: _GetDesktopWorkArea($hWnd)
177 | ; Parameters ....: $hWnd - Handle to the window.
178 | ; Return values .: Array in following format:
179 | ; : [0] = X-Pos for maximizing
180 | ; : [1] = Y-Pos for maximizing
181 | ; : [2] = Max. Width
182 | ; : [3] = Max. Height
183 | ; Author ........: BB_19
184 | ; Note ..........: The x/y position is not the real position of the window if you have multi display. It is just for setting the maximize info for WM_GETMINMAXINFO
185 | ; ===============================================================================================================================
186 | Func _GetDesktopWorkArea($hWnd)
187 |
188 | Local $MonitorSizePos[4], $MonitorNumber = 1
189 | $MonitorSizePos[0] = 0
190 | $MonitorSizePos[1] = 0
191 | $MonitorSizePos[2] = @DesktopWidth
192 | $MonitorSizePos[3] = @DesktopHeight
193 |
194 | ;Get Monitors
195 | Local $aPos, $MonitorList = _WinAPI_EnumDisplayMonitors()
196 | If @error Then Return $MonitorSizePos
197 |
198 | If IsArray($MonitorList) Then
199 | ReDim $MonitorList[$MonitorList[0][0] + 1][5]
200 | For $i = 1 To $MonitorList[0][0]
201 | $aPos = _WinAPI_GetPosFromRect($MonitorList[$i][1])
202 | For $j = 0 To 3
203 | $MonitorList[$i][$j + 1] = $aPos[$j]
204 | Next
205 | Next
206 | EndIf
207 |
208 | ;Check on which monitor our window is
209 | Local $GUI_Monitor = _WinAPI_MonitorFromWindow($hWnd)
210 |
211 | ;Check on which monitor the taskbar is
212 | Local $Taskbar_Monitor = _WinAPI_MonitorFromWindow(WinGetHandle("[CLASS:Shell_TrayWnd]"))
213 |
214 | ;Write the width and height info of the correct monitor into an array
215 | For $iM = 1 To $MonitorList[0][0] Step +1
216 | If $MonitorList[$iM][0] = $GUI_Monitor Then
217 | $MonitorSizePos[0] = 0
218 | $MonitorSizePos[1] = 0
219 | $MonitorSizePos[2] = $MonitorList[$iM][3]
220 | $MonitorSizePos[3] = $MonitorList[$iM][4]
221 | $MonitorNumber = $iM
222 | EndIf
223 | Next
224 |
225 | ;Check if Taskbar autohide is enabled, if so then we will remove 1px from the correct side so that the taskbar will reapear when moving mouse to the side
226 | Local $TaskBarAutoHide = DllCall("shell32.dll", "int", "SHAppBarMessage", "int", 0x00000004, "ptr*", 0)
227 | If Not @error Then
228 | $TaskBarAutoHide = $TaskBarAutoHide[0]
229 | Else
230 | $TaskBarAutoHide = 0
231 | EndIf
232 |
233 |
234 | ;Check if Taskbar is on this Monitor, if so, then recalculate the position, max. width and height of the WorkArea
235 | If $Taskbar_Monitor = $GUI_Monitor Then
236 | $TaskBarPos = WinGetPos("[CLASS:Shell_TrayWnd]")
237 | If @error Then Return $MonitorSizePos
238 |
239 | ;Win 7 classic theme compatibility
240 | If ($TaskBarPos[0] = $MonitorList[$MonitorNumber][1] - 2) Or ($TaskBarPos[1] = $MonitorList[$MonitorNumber][2] - 2) Then
241 | $TaskBarPos[0] = $TaskBarPos[0] + 2
242 | $TaskBarPos[1] = $TaskBarPos[1] + 2
243 | $TaskBarPos[2] = $TaskBarPos[2] - 4
244 | $TaskBarPos[3] = $TaskBarPos[3] - 4
245 | EndIf
246 | If ($TaskBarPos[0] = $MonitorList[$MonitorNumber][1] - 2) Or ($TaskBarPos[1] = $MonitorList[$MonitorNumber][2] - 2) Then
247 | $TaskBarPos[0] = $TaskBarPos[0] + 2
248 | $TaskBarPos[1] = $TaskBarPos[1] + 2
249 | $TaskBarPos[2] = $TaskBarPos[2] - 4
250 | $TaskBarPos[3] = $TaskBarPos[3] - 4
251 | EndIf
252 |
253 |
254 | ;Recalc width/height and pos
255 | If $TaskBarPos[2] = $MonitorSizePos[2] Then
256 | If $TaskBarAutoHide = 1 Then
257 | If ($TaskBarPos[1] > 0) Then
258 | $MonitorSizePos[3] -= 1
259 | Else
260 | $MonitorSizePos[1] += 1
261 | $MonitorSizePos[3] -= 1
262 | EndIf
263 | Return $MonitorSizePos
264 | EndIf
265 | $MonitorSizePos[3] = $MonitorSizePos[3] - $TaskBarPos[3]
266 | If ($TaskBarPos[0] = $MonitorList[$MonitorNumber][1]) And ($TaskBarPos[1] = $MonitorList[$MonitorNumber][2]) Then $MonitorSizePos[1] = $TaskBarPos[3]
267 | Else
268 | If $TaskBarAutoHide = 1 Then
269 | If ($TaskBarPos[0] > 0) Then
270 | $MonitorSizePos[2] -= 1
271 | Else
272 | $MonitorSizePos[0] += 1
273 | $MonitorSizePos[2] -= 1
274 | EndIf
275 | Return $MonitorSizePos
276 | EndIf
277 | $MonitorSizePos[2] = $MonitorSizePos[2] - $TaskBarPos[2]
278 | If ($TaskBarPos[0] = $MonitorList[$MonitorNumber][1]) And ($TaskBarPos[1] = $MonitorList[$MonitorNumber][2]) Then $MonitorSizePos[0] = $TaskBarPos[2]
279 | EndIf
280 | EndIf
281 | Return $MonitorSizePos
282 | EndFunc ;==>_GetDesktopWorkArea
283 |
284 |
--------------------------------------------------------------------------------
/assets/libs/DSEngine/DSEngine.au3:
--------------------------------------------------------------------------------
1 | ;;; IMPORTANT!!!!
2 | ;;; All functions that doesn't return specific data has E_FAIL as error return and S_OK as success
3 | ;;; Most functions will fail if no file is playing
4 |
5 | #include
6 | Global $DllEngine
7 | Global $hEngine
8 |
9 | ; Removes the current overlay bmp
10 | Func DSEngine_RemoveOverlay()
11 | DllCall($DllEngine,"int:cdecl","RemoveBitmap","ptr",$hEngine)
12 | EndFunc
13 |
14 | ; Sets a HBITMAP to overlay the current playing video.
15 | ; Remove the overlay with Engine_RemoveOverlay
16 | ; Source rectangle is in pixels while destination rectangle is in relative coords (0.0 is top, 1.0 is bottom etc.)
17 | ; Colorkey is in RRGGBB format (24 bits)
18 | ; Alpha channel is 0.0->1.0
19 |
20 | Func DSEngine_SetOverlay($hbitmap, $sourceLeft, $sourceTop, $sourceRight, $sourceBottom, _
21 | $destinationLeft, $destinationTop, $destinationRight, $destinationBottom, $colorkey, $alpha)
22 |
23 | $sourcerect = DllStructCreate($tagRECT)
24 | DllStructSetData($sourcerect, "left", $sourceLeft)
25 | DllStructSetData($sourcerect, "top", $sourceTop)
26 | DllStructSetData($sourcerect, "right", $sourceright)
27 | DllStructSetData($sourcerect, "bottom", $sourceBottom)
28 |
29 | $destrect = DllStructCreate("float left;float top;float right;float bottom")
30 | DllStructSetData($destrect, "left", $destinationLeft)
31 | DllStructSetData($destrect, "top", $destinationTop)
32 | DllStructSetData($destrect, "right", $destinationRight)
33 | DllStructSetData($destrect, "bottom", $destinationBottom)
34 |
35 | $ret=DllCall($DllEngine, "int:cdecl", "BlendBitmap", "ptr", $hEngine, "ptr", $hbitmap, "ptr", _
36 | DllStructGetPtr($sourcerect), "ptr", DllStructGetPtr($destrect), "dword", $colorkey, "float", $alpha)
37 | Return $ret[0]
38 | EndFunc ;==>Engine_SetOverlay
39 |
40 | ; Force VMR9 to redraw the current frame into the selected window
41 | Func DSEngine_Repaint()
42 | DllCall($DllEngine,"int:cdecl","RepaintFrame","ptr",$hEngine)
43 | EndFunc
44 |
45 | ; Mutes the audio from directshow
46 | Func DSEngine_Mute()
47 | $ret=DllCall($DllEngine,"int:cdecl","Mute","ptr",$hEngine)
48 | EndFunc
49 |
50 |
51 | ; Recieve events from DirectShow, see DSEngineConstants.au3 for values
52 | ; Also has a minor block, think of it as GUIGetMsg()
53 | Func DSEngine_GetEvent()
54 | Local $arr[3]
55 | $ret = DllCall($DllEngine, "int:cdecl", "GetEvent", "ptr", $hEngine, "long*", 0, "long*", 0, "long*", 0)
56 | ;~ IF @error Then MsgBox(0,"",@error)
57 | If Not @error And $ret[0] Then
58 | $arr[0] = $ret[2]
59 | $arr[1] = $ret[3]
60 | $arr[2] = $ret[4]
61 | Return $arr
62 | Else
63 | Return False
64 | EndIf
65 | EndFunc ;==>Engine_GetEvent
66 |
67 | ; Get's the playback state, see DSEngineConstants.au3 for values
68 | Func DSEngine_GetState()
69 | ;~ ConsoleWrite($DllEngine)
70 | $ret = DllCall($DllEngine, "long:cdecl", "GetState", "ptr", $hEngine)
71 | Return $ret[0]
72 | EndFunc ;==>Engine_GetState
73 |
74 | ;; Sets the letterbox border color, default is black
75 | Func DSEngine_SetBorderColor($RGBColor)
76 | $ret = DllCall($DllEngine, "int:cdecl", "SetBorderColor", "ptr", $hEngine, "dword", $RGBColor)
77 | Return $ret[0]
78 | EndFunc ;==>Engine_SetBorderColor
79 |
80 | ; All left=-10000
81 | ; All right=10000
82 | ; Equal balance=0
83 | Func DSEngine_GetAudioBalance()
84 | $ret = DllCall($DllEngine, "long:cdecl", "GetAudioBalance", "ptr", $hEngine)
85 | Return $ret[0]
86 | EndFunc ;==>Engine_GetAudioBalance
87 |
88 | ; All left=-10000
89 | ; All right=10000
90 | ; Equal balance=0
91 | Func DSEngine_SetAudioBalance($iBalance)
92 | $ret = DllCall($DllEngine, "int:cdecl", "SetAudioBalance", "ptr", $hEngine, "long", $iBalance)
93 | Return $ret[0]
94 | EndFunc ;==>Engine_SetAudioBalance
95 |
96 | ; Gets the playback rate as a multiplier (1.0 is normal speed, 0.5 is half, 2.0 is double etc.)
97 | Func DSEngine_GetPlaybackRate()
98 | $ret = DllCall($DllEngine, "double:cdecl", "GetPlaybackRate", "ptr", $hEngine)
99 | Return $ret[0]
100 | EndFunc ;==>Engine_GetPlaybackRate
101 |
102 | ; Sets the playback rate as a multiplier (1.0 is normal speed, 0.5 is half, 2.0 is double etc.)
103 | Func DSEngine_SetPlaybackRate($dRate)
104 | $ret = DllCall($DllEngine, "int:cdecl", "SetPlaybackRate", "ptr", $hEngine, "double", $dRate)
105 | Return $ret[0]
106 | EndFunc ;==>Engine_SetPlaybackRate
107 |
108 | ; Save the current frame as a bmp file
109 | Func DSEngine_SaveScreencap($sFilename)
110 | $ret = DllCall($DllEngine, "int:cdecl", "SaveScreencap", "ptr", $hEngine, "wstr", $sFilename)
111 | Return $ret[0]
112 | EndFunc ;==>Engine_SaveScreencap
113 |
114 | ; Gets the current frame as a hbitmap
115 | Func DSEngine_GetCurrentFrame()
116 | $ret=DllCall($DllEngine,"ptr:cdecl","GetCurrentFrame","ptr",$hEngine)
117 | Return $ret[0]
118 | EndFunc
119 |
120 | ; Gets an array where [0] is width and [1] is height
121 | Func DSEngine_GetVideoSize()
122 | $ret = DllCall($DllEngine, "int:cdecl", "GetVideoDimensions", "ptr", $hEngine, "long*", 0, "long*", 0)
123 | Local $arr[2]
124 | $arr[0] = $ret[2] ; Width
125 | $arr[1] = $ret[3] ; Height
126 | Return $arr
127 | EndFunc ;==>Engine_GetVideoSize
128 |
129 | ; Sets the playback position in seconds (floating point is ok)
130 | Func DSEngine_SetPosition($dTime)
131 | $ret = DllCall($DllEngine, "int:cdecl", "SetStreamPosition", "ptr", $hEngine, "double", $dTime)
132 | Return $ret[0]
133 | EndFunc ;==>Engine_SetPosition
134 |
135 | ; Gets the playback position in seconds (floating point is ok)
136 | Func DSEngine_GetPosition()
137 | $ret = DllCall($DllEngine, "double:cdecl", "GetStreamPosition", "ptr", $hEngine)
138 | Return $ret[0]
139 | EndFunc ;==>Engine_GetPosition
140 |
141 | ; Get the length of the current playing file (in seconds)
142 | Func DSEngine_GetLength()
143 | $ret = DllCall($DllEngine, "double:cdecl", "GetStreamLength", "ptr", $hEngine)
144 | Return $ret[0]
145 | EndFunc ;==>Engine_GetLength
146 |
147 | ; Makes file ready for playback, also specifying which window the payback should start in
148 | Func DSEngine_LoadFile($sFilename, $WinHandle)
149 | $ret = DllCall($DllEngine, "int:cdecl", "LoadFile", "ptr", $hEngine, "wstr", $sFilename, "hwnd", $WinHandle)
150 | ;~ MsgBox(0,"",@error)
151 | Return $ret[0]
152 | EndFunc ;==>Engine_LoadFile
153 |
154 | ; Starts playback
155 | Func DSEngine_StartPlayback()
156 | $ret = DllCall($DllEngine, "int:cdecl", "StartPlayback", "ptr", $hEngine)
157 | Return $ret[0]
158 | EndFunc ;==>Engine_StartPlayback
159 |
160 | ; Pause playback (other function will still work)
161 | Func DSEngine_PausePlayback()
162 | $ret = DllCall($DllEngine, "int:cdecl", "PausePlayback", "ptr", $hEngine)
163 | Return $ret[0]
164 | EndFunc ;==>Engine_PausePlayback
165 |
166 | ; Stop playback (all directshow interfaces is cleared and all functions related to active directshow functions stop working)
167 | Func DSEngine_StopPlayback()
168 | $ret = DllCall($DllEngine, "int:cdecl", "StopPlayback", "ptr", $hEngine)
169 | Return $ret[0]
170 | EndFunc ;==>Engine_StopPlayback
171 |
172 | ; Shutdown the engine, also stopping all active streams
173 | Func DSEngine_Shutdown()
174 | DllCall($DllEngine, "int:cdecl", "ShutdownEngine", "ptr", $hEngine)
175 | DllClose($DllEngine)
176 | EndFunc ;==>Engine_Shutdown
177 |
178 | ; Gets the volume, max i 0 and min is -10 000 (divide by 100 to get dB)
179 | Func DSEngine_GetVolume()
180 | $ret = DllCall($DllEngine, "long:cdecl", "GetVolume", "ptr", $hEngine)
181 | Return $ret[0]
182 | EndFunc ;==>Engine_GetVolume
183 |
184 | ; Sets the volume, max i 0 and min is -10 000 (divide by 100 to get dB)
185 | Func DSEngine_SetVolume($vol)
186 | $ret = DllCall($DllEngine, "int:cdecl", "SetVolume", "ptr", $hEngine, "long", $vol)
187 | Return $ret[0]
188 | EndFunc ;==>Engine_SetVolume
189 |
190 | ; If this is set to false video will not be letterboxed while size changes
191 | Func DSEngine_MaintainAspectRatio($maintain = True)
192 | $ret = DllCall($DllEngine, "int:cdecl", "MaintainAspectRatio", "ptr", $hEngine, "int", $maintain)
193 | Return $ret[0]
194 | EndFunc ;==>Engine_MaintainAspectRatio
195 |
196 |
197 |
198 | ; Sets the playing window, also adjust video to client rect
199 | Func DSEngine_SetWindow($WinHandle)
200 | $ret = DllCall($DllEngine, "int:cdecl", "SetWindow", "ptr", $hEngine, "hwnd", $WinHandle)
201 | $wsize = WinGetClientSize($WinHandle)
202 | If @error Then Return False
203 | DSEngine_SetRects(0, 0, 0, 0, 0, 0, $wsize[0], $wsize[1])
204 | Return $ret[0]
205 | EndFunc ;==>Engine_SetWindow
206 |
207 | ; If rect1 = {0,0,0,0} source is entire video
208 | ; Rect1= source rect
209 | ; rect2 = destination rect
210 | Func DSEngine_SetRects($left1, $top1, $right1, $bottom1, $left2, $top2, $right2, $bottom2)
211 | If ($left1 + $top1 + $right1 + $bottom1) > 0 Then
212 | $rect1 = DllStructCreate($tagRECT)
213 | DllStructSetData($rect1, "left", $left1)
214 | DllStructSetData($rect1, "right", $right1)
215 | DllStructSetData($rect1, "top", $top1)
216 | DllStructSetData($rect1, "bottom", $bottom1)
217 | $prect1 = DllStructGetPtr($rect1)
218 | Else
219 | $prect1 = 0
220 | EndIf
221 | $rect2 = DllStructCreate($tagRECT)
222 | DllStructSetData($rect2, "left", $left2)
223 | DllStructSetData($rect2, "right", $right2)
224 | DllStructSetData($rect2, "top", $top2)
225 | DllStructSetData($rect2, "bottom", $bottom2)
226 | $prect2 = DllStructGetPtr($rect2)
227 |
228 | $ret = DllCall($DllEngine, "int:cdecl", "SetRects", "ptr", $hEngine, "ptr", $prect1, "ptr", $prect2)
229 | EndFunc ;==>Engine_SetRects
230 |
231 |
232 | ; Starts the engine.
233 | Func DSEngine_Startup($sPath = "")
234 | If Not $sPath Then
235 | If @AutoItX64 Then
236 | $sPath = "DSEngine_x64.dll"
237 | ElseIf Not @AutoItX64 Then
238 | $sPath = "DSEngine_x86.dll"
239 | EndIf
240 | EndIf
241 | $DllEngine = DllOpen($sPath)
242 | $ret = DllCall($DllEngine, "ptr:cdecl", "StartupEngine")
243 | $hEngine = $ret[0]
244 | EndFunc ;==>Engine_Startup
--------------------------------------------------------------------------------
/assets/libs/DSEngine/DSEngineConstants.au3:
--------------------------------------------------------------------------------
1 |
2 | Global Const $ES_ACTIVATE = 0x13
3 | Global Const $EC_BUFFERING_DATA = 0x11
4 | Global Const $EC_COMPLETE = 0x01
5 | Global Const $EC_ERRORABORT = 0x03
6 | Global Const $EC_OPENING_FILE = 0x10
7 | Global Const $EC_PAUSED = 0x0E
8 | Global Const $EC_REPAINT = 0x05
9 |
10 | Global Const $STATE_UNITIALIZED = 0
11 | Global Const $STATE_PAUSED = 1
12 | Global Const $STATE_PLAYING = 2
13 |
14 | Global Const $E_FAIL=0x80004005
15 | GLobal Const $S_OK=0
--------------------------------------------------------------------------------
/assets/libs/DSEngine/DSEngine_x64.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/libs/DSEngine/DSEngine_x64.dll
--------------------------------------------------------------------------------
/assets/libs/DSEngine/DSEngine_x86.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/libs/DSEngine/DSEngine_x86.dll
--------------------------------------------------------------------------------
/assets/libs/Google API/BinaryCall.au3:
--------------------------------------------------------------------------------
1 | ; =============================================================================
2 | ; AutoIt BinaryCall UDF (2014.7.24)
3 | ; Purpose: Allocate, Decompress, And Prepare Binary Machine Code
4 | ; Author: Ward
5 | ; =============================================================================
6 |
7 | #Include-once
8 |
9 | Global $__BinaryCall_Kernel32dll = DllOpen('kernel32.dll')
10 | Global $__BinaryCall_Msvcrtdll = DllOpen('msvcrt.dll')
11 | Global $__BinaryCall_LastError = ""
12 |
13 | Func _BinaryCall_GetProcAddress($Module, $Proc)
14 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, 'ptr', 'GetProcAddress', 'ptr', $Module, 'str', $Proc)
15 | If @Error Or Not $Ret[0] Then Return SetError(1, @Error, 0)
16 | Return $Ret[0]
17 | EndFunc
18 |
19 | Func _BinaryCall_LoadLibrary($Filename)
20 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, "handle", "LoadLibraryW", "wstr", $Filename)
21 | If @Error Then Return SetError(1, @Error, 0)
22 | Return $Ret[0]
23 | EndFunc
24 |
25 | Func _BinaryCall_lstrlenA($Ptr)
26 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, "int", "lstrlenA", "ptr", $Ptr)
27 | If @Error Then Return SetError(1, @Error, 0)
28 | Return $Ret[0]
29 | EndFunc
30 |
31 | Func _BinaryCall_Alloc($Code, $Padding = 0)
32 | Local $Length = BinaryLen($Code) + $Padding
33 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, "ptr", "VirtualAlloc", "ptr", 0, "ulong_ptr", $Length, "dword", 0x1000, "dword", 0x40)
34 | If @Error Or Not $Ret[0] Then Return SetError(1, @Error, 0)
35 | If BinaryLen($Code) Then
36 | Local $Buffer = DllStructCreate("byte[" & $Length & "]", $Ret[0])
37 | DllStructSetData($Buffer, 1, $Code)
38 | EndIf
39 | Return $Ret[0]
40 | EndFunc
41 |
42 | Func _BinaryCall_RegionSize($Ptr)
43 | Local $Buffer = DllStructCreate("ptr;ptr;dword;uint_ptr;dword;dword;dword")
44 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, "int", "VirtualQuery", "ptr", $Ptr, "ptr", DllStructGetPtr($Buffer), "uint_ptr", DllStructGetSize($Buffer))
45 | If @Error Or $Ret[0] = 0 Then Return SetError(1, @Error, 0)
46 | Return DllStructGetData($Buffer, 4)
47 | EndFunc
48 |
49 | Func _BinaryCall_Free($Ptr)
50 | Local $Ret = DllCall($__BinaryCall_Kernel32dll, "bool", "VirtualFree", "ptr", $Ptr, "ulong_ptr", 0, "dword", 0x8000)
51 | If @Error Or $Ret[0] = 0 Then
52 | $Ret = DllCall($__BinaryCall_Kernel32dll, "bool", "GlobalFree", "ptr", $Ptr)
53 | If @Error Or $Ret[0] <> 0 Then Return SetError(1, @Error, False)
54 | EndIf
55 | Return True
56 | EndFunc
57 |
58 | Func _BinaryCall_Release($CodeBase)
59 | Local $Ret = _BinaryCall_Free($CodeBase)
60 | Return SetError(@Error, @Extended, $Ret)
61 | EndFunc
62 |
63 | Func _BinaryCall_MemorySearch($Ptr, $Length, $Binary)
64 | Static $CodeBase
65 | If Not $CodeBase Then
66 | If @AutoItX64 Then
67 | $CodeBase = _BinaryCall_Create('0x4883EC084D85C94889C8742C4C39CA72254C29CA488D141131C9EB0848FFC14C39C97414448A1408453A140874EE48FFC04839D076E231C05AC3', '', 0, True, False)
68 | Else
69 | $CodeBase = _BinaryCall_Create('0x5589E58B4D14578B4508568B550C538B7D1085C9742139CA721B29CA8D341031D2EB054239CA740F8A1C17381C1074F34039F076EA31C05B5E5F5DC3', '', 0, True, False)
70 | EndIf
71 | If Not $CodeBase Then Return SetError(1, 0, 0)
72 | EndIf
73 |
74 | $Binary = Binary($Binary)
75 | Local $Buffer = DllStructCreate("byte[" & BinaryLen($Binary) & "]")
76 | DllStructSetData($Buffer, 1, $Binary)
77 |
78 | Local $Ret = DllCallAddress("ptr:cdecl", $CodeBase, "ptr", $Ptr, "uint", $Length, "ptr", DllStructGetPtr($Buffer), "uint", DllStructGetSize($Buffer))
79 | Return $Ret[0]
80 | EndFunc
81 |
82 | Func _BinaryCall_Base64Decode($Src)
83 | Static $CodeBase
84 | If Not $CodeBase Then
85 | If @AutoItX64 Then
86 | $CodeBase = _BinaryCall_Create('0x41544989CAB9FF000000555756E8BE000000534881EC000100004889E7F3A44C89D6E98A0000004439C87E0731C0E98D0000000FB66E01440FB626FFC00FB65E020FB62C2C460FB62424408A3C1C0FB65E034189EB41C1E4024183E3308A1C1C41C1FB044509E34080FF634189CC45881C08744C440FB6DFC1E5044489DF4088E883E73CC1FF0209C7418D44240241887C08014883C10380FB63742488D841C1E3064883C60483E03F4409D841884408FF89F389C84429D339D30F8C67FFFFFF4881C4000100005B5E5F5D415CC35EC3E8F9FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E0000003F3435363738393A3B3C3D00000063000000000102030405060708090A0B0C0D0E0F101112131415161718190000000000001A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233', '', 132, True, False)
87 | Else
88 | $CodeBase = _BinaryCall_Create('0x55B9FF00000089E531C05756E8F10000005381EC0C0100008B55088DBDF5FEFFFFF3A4E9C00000003B45140F8FC20000000FB65C0A028A9C1DF5FEFFFF889DF3FEFFFF0FB65C0A038A9C1DF5FEFFFF889DF2FEFFFF0FB65C0A018985E8FEFFFF0FB69C1DF5FEFFFF899DECFEFFFF0FB63C0A89DE83E630C1FE040FB6BC3DF5FEFFFFC1E70209FE8B7D1089F3881C074080BDF3FEFFFF63745C0FB6B5F3FEFFFF8BBDECFEFFFF8B9DE8FEFFFF89F083E03CC1E704C1F80209F88B7D1088441F0189D883C00280BDF2FEFFFF6374278A85F2FEFFFFC1E60683C10483E03F09F088441F0289D883C0033B4D0C0F8C37FFFFFFEB0231C081C40C0100005B5E5F5DC35EC3E8F9FFFFFF000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E0000003F3435363738393A3B3C3D00000063000000000102030405060708090A0B0C0D0E0F101112131415161718190000000000001A1B1C1D1E1F202122232425262728292A2B2C2D2E2F30313233', '', 132, True, False)
89 | EndIf
90 | If Not $CodeBase Then Return SetError(1, 0, Binary(""))
91 | EndIf
92 |
93 | $Src = String($Src)
94 | Local $SrcLen = StringLen($Src)
95 | Local $SrcBuf = DllStructCreate("char[" & $SrcLen & "]")
96 | DllStructSetData($SrcBuf, 1, $Src)
97 |
98 | Local $DstLen = Int(($SrcLen + 2) / 4) * 3 + 1
99 | Local $DstBuf = DllStructCreate("byte[" & $DstLen & "]")
100 |
101 | Local $Ret = DllCallAddress("uint:cdecl", $CodeBase, "ptr", DllStructGetPtr($SrcBuf), "uint", $SrcLen, "ptr", DllStructGetPtr($DstBuf), "uint", $DstLen)
102 | If $Ret[0] = 0 Then Return SetError(2, 0, Binary(""))
103 | Return BinaryMid(DllStructGetData($DstBuf, 1), 1, $Ret[0])
104 | EndFunc
105 |
106 | Func _BinaryCall_Base64Encode($Src)
107 | Static $CodeBase
108 | If Not $CodeBase Then
109 | If @AutoItX64 Then
110 | $CodeBase = _BinaryCall_Create('AwAAAARiAQAAAAAAAAArkuFQDAlvIp0qAgbDnjr76UDZs1EPNIP2K18t9s6SNTbd43IB7HfdyPM8VfD/o36z4AmSW2m2AIsC6Af3fKNsHU4BdQKGd0PQXHxPSX0iNqp1YAKovksqQna06NeKMoOYqryTUX4WgpHjokhp6zY2sEFSIjcL7dW3FDoNVz4bGPyZHRvjFwmqvr7YGlNYKwNoh+SYCXmIgVPVZ63Vz1fbT33/QFpWmWOeBRqs4J+c8Qp6zJFsK345Pjw0I8kMSsnho4F4oNzQ2OsAbmIioaQ6Ma2ziw5NH+M+t4SpEeHDnBdUTTL20sxWZ0yKruFAsBIRoHvM7LYcid2eBV2d5roSjnkwMG0g69LNjs1fHjbI/9iU/hJwpSsgl4fltXdZG659/li13UFY89M7UfckiZ9XOeBM0zadgNsy8r8M3rEAAA==')
111 | Else
112 | $CodeBase = _BinaryCall_Create('AwAAAARVAQAAAAAAAAAqr7blBndrIGnmhhfXD7R1fkOTKhicg1W6MCtStbz+CsneBEg0bbHH1sqTLmLfY7A6LqZl6LYWT5ULVj6MXgugPbBn9wKsSU2ZCcBBPNkx09HVPdUaKnbqghDGj/C5SHoF+A/5g+UgE1C5zJZORjJ8ljs5lt2Y9lA4BsY7jVKX2vmDvHK1NnSR6nVwh7Pb+Po/UpNcy5sObVWDKkYSCCtCIjKIYqOe3c6k8Xsp4eritCUprXEVvCFi7K5Z6HFXdm3nZsFcE+eSJ1WkRnVQbWcmpjGMGka61C68+CI7tsQ13UnCFWNSpDrCbzUejMZh8HdPgEc5vCg3pKMKin/NavNpB6+87Y9y7HIxmKsPdjDT30u9hUKWnYiRe3nrwKyVDsiYpKU/Nse368jHag5B5or3UKA+nb2+eY8JwzgA')
113 | EndIf
114 | If Not $CodeBase Then Return SetError(1, 0, Binary(""))
115 | EndIf
116 |
117 | $Src = Binary($Src)
118 | Local $SrcLen = BinaryLen($Src)
119 | Local $SrcBuf = DllStructCreate("byte[" & $SrcLen & "]")
120 | DllStructSetData($SrcBuf, 1, $Src)
121 |
122 | Local $DstLen = Int(($SrcLen + 2) / 3) * 4 + 1
123 | Local $DstBuf = DllStructCreate("char[" & $DstLen & "]")
124 |
125 | Local $Ret = DllCallAddress("uint:cdecl", $CodeBase, "ptr", DllStructGetPtr($SrcBuf), "uint", $SrcLen, "ptr", DllStructGetPtr($DstBuf), "uint", $DstLen)
126 | If $Ret[0] = 0 Then Return Binary("")
127 | Return StringMid(DllStructGetData($DstBuf, 1), 1, $Ret[0])
128 | EndFunc
129 |
130 | Func _BinaryCall_LzmaDecompress($Src)
131 | Static $CodeBase
132 | If Not $CodeBase Then
133 | If @AutoItX64 Then
134 | $CodeBase = _BinaryCall_Create(_BinaryCall_Base64Decode('QVcxwEFWQVVBVFVXSInXVkiJzlMx20iB7OgAAABEiiFBgPzgdgnpyQAAAEGD7C1BiMf/wEGA/Cx38THA6wRBg+wJQYjG/8BBgPwId/GLRglEi24FQQ+2zkyJRCQoRQ+2/0HB5xBBiQFBD7bEAcG4AAMAANPgjYQAcA4AAEhjyOjIBAAATInpSInF6L0EAABIicMxwEyJ8kSI4EyLRCQoiNQl//8A/0QJ+EiF24lFAHQoTYXtdCNIjVfzSI1MJDhIg8YNTIkEJE2J6UmJ2EiJ7+g2AAAAicbrBb4BAAAASInp6IQEAACF9nQKSInZMdvodgQAAEiJ2EiBxOgAAABbXl9dQVxBXUFeQV/DVVNBV0FWQVVBVEFQTQHBQVFNicVRVkgB8lJIieX8SYn0iwdMjX8Eik8Cg8r/0+L30olV6Ijhg8r/0+L30olV5ADBiUXsuAEAAACJReCJRdyJRdhIiUXQRSnJKfaDy/8A0bgAAwAA0+BIjYg2BwAAuAAEAARMif/R6fOrvwUAAADoUAMAAP/PdfdEie9EicgrfSDB4ARBifpEI1XoRAHQTY0cR+hAAwAAD4WTAAAAik3sI33k0+eA6Qj22dPuAfe4AQAAAEiNPH++AAEAAMHnCEGD+QdNjbR/bA4AAHI0TInvSCt90A+2P9HnQYnzIf5BAfNPjRxe6O8CAACJwcHuCIPhATnOvgABAAB1DjnGd9jrDE2J8+jQAgAAOfBy9EyJ76pEiclBg/kEcg65AwAAAEGD+QpyA4PBA0EpyelDAgAAT42cT4ABAADomgIAAHUsi0XcQYP5B4lF4BnAi1XY99CLTdCD4AOJVdxBicGJTdhNjbdkBgAA6akAAABPjZxPmAEAAOhfAgAAdUZEicjB4AREAdBNjZxH4AEAAOhHAgAAdWpBg/kHuQkAAAByA4PBAkGJyUyJ70grfdBIO30gD4L9AQAAigdIA33QqumzAQAAT42cT7ABAADoCgIAAIt12HQhT42cT8gBAADo+AEAAIt13HQJi03ci3XgiU3gi03YiU3ci03QiU3YiXXQQYP5B7kIAAAAcgODwQNBiclNjbdoCgAATYnz6LsBAAB1FESJ0CnJweADvggAAABJjXxGBOs2TY1eAuicAQAAdRpEidC5CAAAAMHgA74IAAAASY28RgQBAADrEUmNvgQCAAC5EAAAAL4AAQAAiU3MuAEAAABJifvoYQEAAInCKfJy8gNVzEGD+QSJVcwPg7kAAABBg8EHuQMAAAA50XICidHB4Qa4AQAAAEmNvE9gAwAAvkAAAABJifvoHwEAAEGJwkEp8nLwQYP6BHJ4RInWRIlV0NHug2XQAf/Og03QAkGD+g5zFYnx0mXQi0XQRCnQTY20R14FAADrLIPuBOi6AAAA0evRZdBBOdhyBv9F0EEp2P/OdedNjbdEBgAAwWXQBL4EAAAAvwEAAACJ+E2J8+ioAAAAqAF0Awl90NHn/8516+sERIlV0P9F0EyJ74tNzEiJ+IPBAkgrRSBIOUXQd1RIif5IK3XQSItVGKyqSDnXcwT/yXX1SYn9D7bwTDttGA+C9fz//+gwAAAAKcBIi1UQTCtlCESJIkiLVWBMK20gRIkqSIPEKEFcQV1BXUFfW13DXli4AQAAAOvSgfsAAAABcgHDweMITDtlAHPmQcHgCEWKBCRJg8QBwynATY0cQ4H7AAAAAXMVweMITDtlAHPBQcHgCEWKBCRJg8QBidlBD7cTwekLD6/KQTnIcxOJy7kACAAAKdHB6QVmQQELAcDDKcvB6gVBKchmQSkTAcCDwAHDSLj////////////gbXN2Y3J0LmRsbHxtYWxsb2MASLj////////////gZnJlZQA='))
135 | Else
136 | $CodeBase = _BinaryCall_Create(_BinaryCall_Base64Decode('VYnlVzH/VlOD7EyLXQiKC4D54A+HxQAAADHA6wWD6S2I0ID5LI1QAXfziEXmMcDrBYPpCYjQgPkIjVABd/OIReWLRRSITeSLUwkPtsmLcwWJEA+2ReUBwbgAAwAA0+CNhABwDgAAiQQk6EcEAACJNCSJRdToPAQAAItV1InHi0Xkhf+JArgBAAAAdDaF9nQyi0UQg8MNiRQkiXQkFIl8JBCJRCQYjUXgiUQkDItFDIlcJASD6A2JRCQI6CkAAACLVdSJRdSJFCToAQQAAItF1IXAdAqJPCQx/+jwAwAAg8RMifhbXl9dw1dWU1WJ5YtFJAFFKFD8i3UYAXUcVot1FK2SUopO/oPI/9Pg99BQiPGDyP/T4PfQUADRifeD7AwpwEBQUFBQUFcp9laDy/+4AAMAANPgjYg2BwAAuAAEAATR6fOragVZ6MoCAADi+Yt9/ItF8Ct9JCH4iUXosADoywIAAA+FhQAAAIpN9CN97NPngOkI9tnT7lgB916NPH/B5wg8B1qNjH5sDgAAUVa+AAEAAFCwAXI0i338K33cD7Y/i23M0eeJ8SH+AfGNbE0A6JgCAACJwcHuCIPhATnOvgABAAB1DjnwctfrDIttzOh5AgAAOfBy9FqD+gSJ0XIJg/oKsQNyArEGKcpS60mwwOhJAgAAdRRYX1pZWln/NCRRUrpkBgAAsQDrb7DM6CwCAAB1LLDw6BMCAAB1U1g8B7AJcgKwC1CLdfwrddw7dSQPgs8BAACsi338qumOAQAAsNjo9wEAAIt12HQbsOTo6wEAAIt11HQJi3XQi03UiU3Qi03YiU3Ui03ciU3YiXXcWF9ZumgKAACxCAH6Ulc8B4jIcgIEA1CLbczovAEAAHUUi0Xoi33MweADKclqCF6NfEcE6zWLbcyDxQLomwEAAHUYi0Xoi33MweADaghZaghejbxHBAEAAOsQvwQCAAADfcxqEFm+AAEAAIlN5CnAQIn96GYBAACJwSnxcvMBTeSDfcQED4OwAAAAg0XEB4tN5IP5BHIDagNZi33IweEGKcBAakBejbxPYAMAAIn96CoBAACJwSnxcvOJTeiJTdyD+QRyc4nOg2XcAdHug03cAk6D+Q5zGbivAgAAKciJ8dJl3ANF3NHgA0XIiUXM6y2D7gToowAAANHr0WXcOV3gcgb/RdwpXeBOdei4RAYAAANFyIlFzMFl3ARqBF4p/0eJ+IttzOi0AAAAqAF0Awl93NHnTnXs6wD/RdyLTeSDwQKLffyJ+CtFJDlF3HdIif4rddyLVSisqjnXcwNJdfeJffwPtvA7fSgPgnH9///oKAAAACnAjWwkPItVIIt1+Ct1GIkyi1Usi338K30kiTrJW15fw15YKcBA69qB+wAAAAFyAcPB4whWi3X4O3Ucc+SLReDB4AisiUXgiXX4XsOLTcQPtsDB4QQDRegByOsGD7bAA0XEi23IjWxFACnAjWxFAIH7AAAAAXMci0wkOMFkJCAIO0wkXHOcihH/RCQ4weMIiFQkIInZD7dVAMHpCw+vyjlMJCBzF4nLuQAIAAAp0cHpBWYBTQABwI1sJEDDweoFKUwkICnLZilVAAHAg8ABjWwkQMO4///////gbXN2Y3J0LmRsbHxtYWxsb2MAuP//////4GZyZWUA'))
137 | EndIf
138 | If Not $CodeBase Then Return SetError(1, 0, Binary(""))
139 | EndIf
140 |
141 | $Src = Binary($Src)
142 | Local $SrcLen = BinaryLen($Src)
143 | Local $SrcBuf = DllStructCreate("byte[" & $SrcLen & "]")
144 | DllStructSetData($SrcBuf, 1, $Src)
145 |
146 | Local $Ret = DllCallAddress("ptr:cdecl", $CodeBase, "ptr", DllStructGetPtr($SrcBuf), "uint_ptr", $SrcLen, "uint_ptr*", 0, "uint*", 0)
147 | If $Ret[0] Then
148 | Local $DstBuf = DllStructCreate("byte[" & $Ret[3] & "]", $Ret[0])
149 | Local $Output = DllStructGetData($DstBuf, 1)
150 | DllCall($__BinaryCall_Msvcrtdll, "none:cdecl", "free", "ptr", $Ret[0])
151 |
152 | Return $Output
153 | EndIf
154 | Return SetError(2, 0, Binary(""))
155 | EndFunc
156 |
157 | Func _BinaryCall_Relocation($Base, $Reloc)
158 | Local $Size = Int(BinaryMid($Reloc, 1, 2))
159 |
160 | For $i = 3 To BinaryLen($Reloc) Step $Size
161 | Local $Offset = Int(BinaryMid($Reloc, $i, $Size))
162 | Local $Ptr = $Base + $Offset
163 | DllStructSetData(DllStructCreate("ptr", $Ptr), 1, DllStructGetData(DllStructCreate("ptr", $Ptr), 1) + $Base)
164 | Next
165 | EndFunc
166 |
167 | Func _BinaryCall_ImportLibrary($Base, $Length)
168 | Local $JmpBin, $JmpOff, $JmpLen, $DllName, $ProcName
169 | If @AutoItX64 Then
170 | $JmpBin = Binary("0x48B8FFFFFFFFFFFFFFFFFFE0")
171 | $JmpOff = 2
172 | Else
173 | $JmpBin = Binary("0xB8FFFFFFFFFFE0")
174 | $JmpOff = 1
175 | EndIf
176 | $JmpLen = BinaryLen($JmpBin)
177 |
178 | Do
179 | Local $Ptr = _BinaryCall_MemorySearch($Base, $Length, $JmpBin)
180 | If $Ptr = 0 Then ExitLoop
181 |
182 | Local $StringPtr = $Ptr + $JmpLen
183 | Local $StringLen = _BinaryCall_lstrlenA($StringPtr)
184 | Local $String = DllStructGetData(DllStructCreate("char[" & $StringLen & "]", $StringPtr), 1)
185 | Local $Split = StringSplit($String, "|")
186 |
187 | If $Split[0] = 1 Then
188 | $ProcName = $Split[1]
189 | ElseIf $Split[0] = 2 Then
190 | If $Split[1] Then $DllName = $Split[1]
191 | $ProcName = $Split[2]
192 | EndIf
193 |
194 | If $DllName And $ProcName Then
195 | Local $Handle = _BinaryCall_LoadLibrary($DllName)
196 | If Not $Handle Then
197 | $__BinaryCall_LastError = "LoadLibrary fail on " & $DllName
198 | Return SetError(1, 0, False)
199 | EndIf
200 |
201 | Local $Proc = _BinaryCall_GetProcAddress($Handle, $ProcName)
202 | If Not $Proc Then
203 | $__BinaryCall_LastError = "GetProcAddress failed on " & $ProcName
204 | Return SetError(2, 0, False)
205 | EndIf
206 |
207 | DllStructSetData(DllStructCreate("ptr", $Ptr + $JmpOff), 1, $Proc)
208 | EndIf
209 |
210 | Local $Diff = Int($Ptr - $Base + $JmpLen + $StringLen + 1)
211 | $Base += $Diff
212 | $Length -= $Diff
213 |
214 | Until $Length <= $JmpLen
215 | Return True
216 | EndFunc
217 |
218 | Func _BinaryCall_CodePrepare($Code)
219 | If Not $Code Then Return ""
220 | If IsBinary($Code) Then Return $Code
221 |
222 | $Code = String($Code)
223 | If StringLeft($Code, 2) = "0x" Then Return Binary($Code)
224 | If StringIsXDigit($Code) Then Return Binary("0x" & $Code)
225 |
226 | Return _BinaryCall_LzmaDecompress(_BinaryCall_Base64Decode($Code))
227 | EndFunc
228 |
229 | Func _BinaryCall_SymbolFind($CodeBase, $Identify, $Length = Default)
230 | $Identify = Binary($Identify)
231 |
232 | If IsKeyword($Length) Then
233 | $Length = _BinaryCall_RegionSize($CodeBase)
234 | EndIf
235 |
236 | Local $Ptr = _BinaryCall_MemorySearch($CodeBase, $Length, $Identify)
237 | If $Ptr = 0 Then Return SetError(1, 0, 0)
238 |
239 | Return $Ptr + BinaryLen($Identify)
240 | EndFunc
241 |
242 | Func _BinaryCall_SymbolList($CodeBase, $Symbol)
243 | If Not IsArray($Symbol) Or $CodeBase = 0 Then Return SetError(1, 0, 0)
244 |
245 | Local $Tag = ""
246 | For $i = 0 To UBound($Symbol) - 1
247 | $Tag &= "ptr " & $Symbol[$i] & ";"
248 | Next
249 |
250 | Local $SymbolList = DllStructCreate($Tag)
251 | If @Error Then Return SetError(1, 0, 0)
252 |
253 | For $i = 0 To UBound($Symbol) - 1
254 | $CodeBase = _BinaryCall_SymbolFind($CodeBase, $Symbol[$i])
255 | DllStructSetData($SymbolList, $Symbol[$i], $CodeBase)
256 | Next
257 | Return $SymbolList
258 | EndFunc
259 |
260 | Func _BinaryCall_Create($Code, $Reloc = '', $Padding = 0, $ReleaseOnExit = True, $LibraryImport = True)
261 | Local $BinaryCode = _BinaryCall_CodePrepare($Code)
262 | If Not $BinaryCode Then Return SetError(1, 0, 0)
263 |
264 | Local $BinaryCodeLen = BinaryLen($BinaryCode)
265 | Local $TotalCodeLen = $BinaryCodeLen + $Padding
266 |
267 | Local $CodeBase = _BinaryCall_Alloc($BinaryCode, $Padding)
268 | If Not $CodeBase Then Return SetError(2, 0, 0)
269 |
270 | If $Reloc Then
271 | $Reloc = _BinaryCall_CodePrepare($Reloc)
272 | If Not $Reloc Then Return SetError(3, 0, 0)
273 | _BinaryCall_Relocation($CodeBase, $Reloc)
274 | EndIf
275 |
276 | If $LibraryImport Then
277 | If Not _BinaryCall_ImportLibrary($CodeBase, $BinaryCodeLen) Then
278 | _BinaryCall_Free($CodeBase)
279 | Return SetError(4, 0, 0)
280 | EndIf
281 | EndIf
282 |
283 | If $ReleaseOnExit Then
284 | _BinaryCall_ReleaseOnExit($CodeBase)
285 | EndIf
286 |
287 | Return SetError(0, $TotalCodeLen, $CodeBase)
288 | EndFunc
289 |
290 | Func _BinaryCall_CommandLineToArgv($CommandLine, ByRef $Argc, $IsUnicode = False)
291 | Static $SymbolList
292 | If Not IsDllStruct($SymbolList) Then
293 | Local $Code
294 | If @AutoItX64 Then
295 | $Code = 'AwAAAASuAgAAAAAAAAAkL48ClEB9jTEOeYv4yYTosNjFNgf81Ag4vS2VP4y4wxFa+4yMI7GDB7CG+xn4JE3cdEVvk8cMp4oIuS3DgTxlcKHGVIg94tvzG/256bizZfGtAETQUCPQjW5+JSx2C/Y4C0VNJMKTlSCHiV5AzXRZ5gw3WFghbtkCCFxWOX+RDSI2oH/vROEOnqc0jfKTo17EBjqX+dW3QxrUe45xsbyYTZ9ccIGySgcOAxetbRiSxQnz8BOMbJyfrbZbuVJyGpKrXFLh/5MlBZ09Cim9qgflbGzmkrGStT9QL1f+O2krzyOzgaWWqhWL6S+y0G32RWVi0uMLR/JOGLEW/+Yg/4bzkeC0lKELT+RmWAatNa38BRfaitROMN12moRDHM6LYD1lzPLnaiefSQRVti561sxni/AFkYoCb5Lkuyw4RIn/r/flRiUg5w48YkqBBd9rXkaXrEoKwPg6rmOvOCZadu//B6HN4+Ipq5aYNuZMxSJXmxwXVRSQZVpSfLS2ATZMd9/Y7kLqrKy1H4V76SgI/d9OKApfKSbQ8ZaKIHBCsoluEip3UDOB82Z21zd933UH5l0laGWLIrTz7xVGkecjo0NQzR7LyhhoV3xszlIuw2v8q0Q/S9LxB5G6tYbOXo7lLjNIZc0derZz7DNeeeJ9dQE9hp8unubaTBpulPxTNtRjog=='
296 | Else
297 | $Code = 'AwAAAAR6AgAAAAAAAABcQfD553vjya/3DmalU0BKqABevUb/60GZ55rMwmzpQfPSRUlIl04lEiS8RDrXpS0EoBUe+uzDgZd37nVu9wsJ4fykqYvLoMz3ApxQbTBKleOIRSla6I0V8dNP3P7rHeUfjH0jCho0RvhhVpf0o4ht/iZptauxaoy1zQ19TkPZ/vf5Im8ecY6qEdHNzjo2H60jVwiOJ+1J47TmQRwxJ+yKLakq8QNxtKkRIB9B9ugfo3NAL0QslDxbyU0dSgw2aOPxV+uttLzYNnWbLBZVQbchcKgLRjC/32U3Op576sOYFolB1Nj4/33c7MRgtGLjlZfTB/4yNvd4/E+u3U6/Q4MYApCfWF4R/d9CAdiwgIjCYUkGDExKjFtHbAWXfWh9kQ7Q/GWUjsfF9BtHO6924Cy1Ou+BUKksqsxmIKP4dBjvvmz9OHc1FdtR9I63XKyYtlUnqVRtKwlNrYAZVCSFsyAefMbteq1ihU33sCsLkAnp1LRZ2wofgT1/JtT8+GO2s/n52D18wM70RH2n5uJJv8tlxQc1lwbmo4XQvcbcE91U2j9glvt2wC1pkP0hF23Nr/iiIEZHIPAOAHvhervlHE830LSHyUx8yh5Tjojr0gdLvQ=='
298 | EndIf
299 | Local $CodeBase = _BinaryCall_Create($Code)
300 | If @Error Then Return SetError(1, 0, 0)
301 |
302 | Local $Symbol[] = ["ToArgvW","ToArgvA"]
303 | $SymbolList = _BinaryCall_SymbolList($CodeBase, $Symbol)
304 | If @Error Then Return SetError(1, 0, 0)
305 | EndIf
306 |
307 | Local $Ret
308 | If $IsUnicode Then
309 | $Ret = DllCallAddress("ptr:cdecl", DllStructGetData($SymbolList, "ToArgvW"), "wstr", $CommandLine, "int*", 0)
310 | Else
311 | $Ret = DllCallAddress("ptr:cdecl", DllStructGetData($SymbolList, "ToArgvA"), "str", $CommandLine, "int*", 0)
312 | EndIf
313 |
314 | If Not @Error And $Ret[0] <> 0 Then
315 | _BinaryCall_ReleaseOnExit($Ret[0])
316 | $Argc = $Ret[2]
317 | Return $Ret[0]
318 | Else
319 | Return SetError(2, 0, 0)
320 | EndIf
321 | EndFunc
322 |
323 | Func _BinaryCall_StdioRedirect($Filename = "CON", $Flag = 1 + 2 + 4)
324 | Static $SymbolList
325 | If Not IsDllStruct($SymbolList) Then
326 | Local $Code, $Reloc
327 | If @AutoItX64 Then
328 | $Code = 'AwAAAASjAQAAAAAAAAAkL48ClEB9jTEOeYv4yYTosNjFM1rLNdMULriZUDxTj+ZdkQ01F5zKL+WDCScfQKKLn66EDmcA+gXIkPcZV4lyz8VPw8BPZlNB5KymydM15kCA+uqvmBc1V0NJfzgsF0Amhn0JhM/ZIguYCHxywMQ1SgKxUb05dxDg8WlX/2aPfSolcX47+4/72lPDNTeT7d7XRdm0ND+eCauuQcRH2YOahare9ASxuU4IMHCh2rbZYHwmTNRiQUB/8dLGtph93yhmwdHtyMPLX2x5n6sdA1mxua9htLsLTulE05LLmXbRYXylDz0A'
329 | $Reloc = 'AwAAAAQIAAAAAAAAAAABAB7T+CzGn9ScQAC='
330 | Else
331 | $Code = 'AwAAAASVAQAAAAAAAABcQfD553vjya/3DmalU0BKqABaUcndypZ3mTYUkHxlLV/lKZPrXYWXgNATjyiowkUQGDVYUy5THQwK4zYdU7xuGf7qfVDELc1SNbiW3NgD4D6N6ZM7auI1jPaThsPfA/ouBcx2aVQX36fjmViTZ8ZLzafjJeR7d5OG5s9sAoIzFLTZsqrFlkIJedqDAOfhA/0mMrkavTWnsio6yTbic1dER0DcEsXpLn0vBNErKHoagLzAgofHNLeFRw5yHWz5owR5CYL7rgiv2k51neHBWGx97A=='
332 | $Reloc = 'AwAAAAQgAAAAAAAAAAABABfyHS/VRkdjBBzbtGPD6vtmVH/IsGHYvPsTv2lGuqJxGlAA'
333 | EndIf
334 |
335 | Local $CodeBase = _BinaryCall_Create($Code, $Reloc)
336 | If @Error Then Return SetError(1, 0, 0)
337 |
338 | Local $Symbol[] = ["StdinRedirect","StdoutRedirect","StderrRedirect"]
339 | $SymbolList = _BinaryCall_SymbolList($CodeBase, $Symbol)
340 | If @Error Then Return SetError(1, 0, 0)
341 | EndIf
342 |
343 | If BitAND($Flag, 1) Then DllCallAddress("none:cdecl", DllStructGetData($SymbolList, "StdinRedirect"), "str", $Filename)
344 | If BitAND($Flag, 2) Then DllCallAddress("none:cdecl", DllStructGetData($SymbolList, "StdoutRedirect"), "str", $Filename)
345 | If BitAND($Flag, 4) Then DllCallAddress("none:cdecl", DllStructGetData($SymbolList, "StderrRedirect"), "str", $Filename)
346 | EndFunc
347 |
348 | Func _BinaryCall_StdinRedirect($Filename = "CON")
349 | Local $Ret = _BinaryCall_StdioRedirect($Filename, 1)
350 | Return SetError(@Error, @Extended, $Ret)
351 | EndFunc
352 |
353 | Func _BinaryCall_StdoutRedirect($Filename = "CON")
354 | Local $Ret = _BinaryCall_StdioRedirect($Filename, 2)
355 | Return SetError(@Error, @Extended, $Ret)
356 | EndFunc
357 |
358 | Func _BinaryCall_StderrRedirect($Filename = "CON")
359 | Local $Ret = _BinaryCall_StdioRedirect($Filename, 4)
360 | Return SetError(@Error, @Extended, $Ret)
361 | EndFunc
362 |
363 | Func _BinaryCall_ReleaseOnExit($Ptr)
364 | OnAutoItExitRegister('__BinaryCall_DoRelease')
365 | __BinaryCall_ReleaseOnExit_Handle($Ptr)
366 | EndFunc
367 |
368 | Func __BinaryCall_DoRelease()
369 | __BinaryCall_ReleaseOnExit_Handle()
370 | EndFunc
371 |
372 | Func __BinaryCall_ReleaseOnExit_Handle($Ptr = Default)
373 | Static $PtrList
374 |
375 | If @NumParams = 0 Then
376 | If IsArray($PtrList) Then
377 | For $i = 1 To $PtrList[0]
378 | _BinaryCall_Free($PtrList[$i])
379 | Next
380 | EndIf
381 | Else
382 | If Not IsArray($PtrList) Then
383 | Local $InitArray[1] = [0]
384 | $PtrList = $InitArray
385 | EndIf
386 |
387 | If IsPtr($Ptr) Then
388 | Local $Array = $PtrList
389 | Local $Size = UBound($Array)
390 | ReDim $Array[$Size + 1]
391 | $Array[$Size] = $Ptr
392 | $Array[0] += 1
393 | $PtrList = $Array
394 | EndIf
395 | EndIf
396 | EndFunc
--------------------------------------------------------------------------------
/assets/libs/Google API/Google API.au3:
--------------------------------------------------------------------------------
1 | #include-once
2 | #include
3 | #include
4 |
5 | Func YouTube_Search($sAPIKey, $sQuery, $sType = "video", $iMaxResults = 50)
6 | Local $sAPI_Name = "youtube"
7 | Local $sAPI_Version = "v3"
8 | Local $sAPI_Endpoint = "search"
9 | Local $aAPI_Parameters = ["part", "maxResults", "q", "type", "key"]
10 | Local $sAPI_URL = Google_API_FormURL($sAPI_Name, $sAPI_Version, $sAPI_Endpoint, $aAPI_Parameters)
11 | Google_API_BindParam($sAPI_URL, "snippet")
12 | Google_API_BindParam($sAPI_URL, $iMaxResults)
13 | Google_API_BindParam($sAPI_URL, $sQuery)
14 | Google_API_BindParam($sAPI_URL, $sType)
15 | Google_API_BindParam($sAPI_URL, $sAPIKey)
16 |
17 | Local $bJSON_Results = InetRead($sAPI_URL)
18 | If @error Then Return SetError(1, @error, False)
19 | Local $sJSON_Results = BinaryToString($bJSON_Results)
20 | Local $oJSON_Results = Json_Decode($sJSON_Results)
21 | Local $aJSON_Items = Json_Get($oJSON_Results, '["items"]')
22 | If Not IsArray($aJSON_Items) Then Return SetError(2, 0, False)
23 |
24 | Local $aResults[0][5] ;Video ID, Publisher, Title, Description, Publish Date
25 | For $i = 0 To UBound($aJSON_Items) - 1
26 | Local $aJSON_Result_ID = Json_Get($aJSON_Items[$i], '["id"]')
27 | Local $sResult_VideoID = Json_Get($aJSON_Result_ID, '["videoId"]')
28 | Local $aJSON_Result_Snippet = Json_Get($aJSON_Items[$i], '["snippet"]')
29 | Local $sResult_Publisher = Json_Get($aJSON_Result_Snippet, '["channelTitle"]')
30 | Local $sResult_Title = Json_Get($aJSON_Result_Snippet, '["title"]')
31 | Local $sResult_Description = Json_Get($aJSON_Result_Snippet, '["description"]')
32 | Local $sResult_PublishDate = Json_Get($aJSON_Result_Snippet, '["publishedAt"]')
33 |
34 | ReDim $aResults[UBound($aResults) + 1][5]
35 | $aResults[UBound($aResults) - 1][0] = $sResult_VideoID
36 | $aResults[UBound($aResults) - 1][1] = $sResult_Publisher
37 | $aResults[UBound($aResults) - 1][2] = $sResult_Title
38 | $aResults[UBound($aResults) - 1][3] = $sResult_Description
39 | $aResults[UBound($aResults) - 1][4] = $sResult_PublishDate
40 | Next
41 | Return SetError(0, 0, $aResults)
42 | EndFunc
43 | Func YouTube_Playlist_GetVideos($sAPIKey, $sPlaylistID, $iMaxResults = 50)
44 | Local $sAPI_Name = "youtube"
45 | Local $sAPI_Version = "v3"
46 | Local $sAPI_Endpoint = "playlistItems"
47 | Local $aAPI_Parameters = ["part", "maxResults", "playlistId", "key"]
48 | Local $sAPI_URL = Google_API_FormURL($sAPI_Name, $sAPI_Version, $sAPI_Endpoint, $aAPI_Parameters)
49 | Google_API_BindParam($sAPI_URL, "snippet")
50 | Google_API_BindParam($sAPI_URL, $iMaxResults)
51 | Google_API_BindParam($sAPI_URL, $sPlaylistID)
52 | Google_API_BindParam($sAPI_URL, $sAPIKey)
53 |
54 | Local $bJSON_Results = InetRead($sAPI_URL)
55 | If @error Then Return SetError(1, @error, False)
56 | Local $sJSON_Results = BinaryToString($bJSON_Results)
57 | Local $oJSON_Results = Json_Decode($sJSON_Results)
58 | Local $aJSON_Items = Json_Get($oJSON_Results, '["items"]')
59 | If Not IsArray($aJSON_Items) Then Return SetError(2, 0, False)
60 |
61 | Local $aResults[0][5] ;Video ID, Publisher, Title, Description, Publish Date
62 | For $i = 0 To UBound($aJSON_Items) - 1
63 | Local $aJSON_Result_Snippet = Json_Get($aJSON_Items[$i], '["snippet"]')
64 | Local $sResult_Publisher = Json_Get($aJSON_Result_Snippet, '["channelTitle"]')
65 | Local $sResult_Title = Json_Get($aJSON_Result_Snippet, '["title"]')
66 | Local $sResult_Description = Json_Get($aJSON_Result_Snippet, '["description"]')
67 | Local $sResult_PublishDate = Json_Get($aJSON_Result_Snippet, '["publishedAt"]')
68 | Local $aJSON_Result_Snippet_ResourceID = Json_Get($aJSON_Result_Snippet, '["resourceId"]')
69 | Local $sResult_VideoID = Json_Get($aJSON_Result_Snippet_ResourceID, '["videoId"]')
70 |
71 | ReDim $aResults[UBound($aResults) + 1][5]
72 | $aResults[UBound($aResults) - 1][0] = $sResult_VideoID
73 | $aResults[UBound($aResults) - 1][1] = $sResult_Publisher
74 | $aResults[UBound($aResults) - 1][2] = $sResult_Title
75 | $aResults[UBound($aResults) - 1][3] = $sResult_Description
76 | $aResults[UBound($aResults) - 1][4] = $sResult_PublishDate
77 | Next
78 | Return SetError(0, 0, $aResults)
79 | EndFunc
80 | Func Google_API_FormURL($sName, $sVersion, $sEndpoint, $aParams = Null)
81 | Local $sAPI_URL = "https://www.googleapis.com/" & $sName & "/" & $sVersion & "/" & $sEndpoint
82 | If IsArray($aParams) Then
83 | $sAPI_URL &= "?" & $aParams[0] & "=*"
84 | If UBound($aParams) >= 2 Then
85 | For $i = 1 To UBound($aParams) - 1
86 | $sAPI_URL &= "&" & $aParams[$i] & "=*"
87 | Next
88 | EndIf
89 | EndIf
90 | Return $sAPI_URL
91 | EndFunc
92 | Func Google_API_BindParam(ByRef $sAPIURL, $sValue)
93 | $sAPIURL = StringReplace($sAPIURL, "=*", "=" & $sValue, 1)
94 | If @error Then
95 | Return False
96 | Else
97 | Return $sAPIURL
98 | EndIf
99 | EndFunc
--------------------------------------------------------------------------------
/assets/libs/Google API/JSON.au3:
--------------------------------------------------------------------------------
1 | ; ============================================================================================================================
2 | ; File : Json.au3 (2015.01.08)
3 | ; Purpose : A Non-Strict JavaScript Object Notation (JSON) Parser UDF
4 | ; Author : Ward
5 | ; Dependency: BinaryCall.au3
6 | ; Website : http://www.json.org/index.html
7 | ;
8 | ; Source : jsmn.c
9 | ; Author : zserge
10 | ; Website : http://zserge.com/jsmn.html
11 | ;
12 | ; Source : json_string_encode.c, json_string_decode.c
13 | ; Author : Ward
14 | ; ============================================================================================================================
15 |
16 | ; ============================================================================================================================
17 | ; Public Functions:
18 | ; Json_StringEncode($String, $Option = 0)
19 | ; Json_StringDecode($String)
20 | ; Json_IsObject(ByRef $Object)
21 | ; Json_IsNull(ByRef $Null)
22 | ; Json_Encode($Data, $Option = 0, $Indent = Default, $ArraySep = Default, $ObjectSep = Default, $ColonSep = Default)
23 | ; Json_Decode($Json, $InitTokenCount = 1000)
24 | ; Json_ObjCreate()
25 | ; Json_ObjPut(ByRef $Object, $Key, $Value)
26 | ; Json_ObjGet(ByRef $Object, $Key)
27 | ; Json_ObjDelete(ByRef $Object, $Key)
28 | ; Json_ObjExists(ByRef $Object, $Key)
29 | ; Json_ObjGetCount(ByRef $Object)
30 | ; Json_ObjGetKeys(ByRef $Object)
31 | ; Json_ObjClear(ByRef $Object)
32 | ; Json_Put(ByRef $Var, $Notation, $Data, $CheckExists = False)
33 | ; Json_Get(ByRef $Var, $Notation)
34 | ; ============================================================================================================================
35 |
36 | #Include-once
37 | #Include "BinaryCall.au3"
38 |
39 | ; The following constants can be combined to form options for Json_Encode()
40 | Global Const $JSON_UNESCAPED_UNICODE = 1 ; Encode multibyte Unicode characters literally
41 | Global Const $JSON_UNESCAPED_SLASHES = 2 ; Don't escape /
42 | Global Const $JSON_HEX_TAG = 4 ; All < and > are converted to \u003C and \u003E
43 | Global Const $JSON_HEX_AMP = 8 ; All &s are converted to \u0026
44 | Global Const $JSON_HEX_APOS = 16 ; All ' are converted to \u0027
45 | Global Const $JSON_HEX_QUOT = 32 ; All " are converted to \u0022
46 | Global Const $JSON_UNESCAPED_ASCII = 64 ; Don't escape ascii charcters between chr(1) ~ chr(0x1f)
47 | Global Const $JSON_PRETTY_PRINT = 128 ; Use whitespace in returned data to format it
48 | Global Const $JSON_STRICT_PRINT = 256 ; Make sure returned JSON string is RFC4627 compliant
49 | Global Const $JSON_UNQUOTED_STRING = 512 ; Output unquoted string if possible (conflicting with $Json_STRICT_PRINT)
50 |
51 | ; Error value returnd by Json_Decode()
52 | Global Const $JSMN_ERROR_NOMEM = -1 ; Not enough tokens were provided
53 | Global Const $JSMN_ERROR_INVAL = -2 ; Invalid character inside JSON string
54 | Global Const $JSMN_ERROR_PART = -3 ; The string is not a full JSON packet, more bytes expected
55 |
56 | Func __Jsmn_RuntimeLoader($ProcName = "")
57 | Static $SymbolList
58 | If Not IsDllStruct($SymbolList) Then
59 | Local $Code
60 | If @AutoItX64 Then
61 | $Code = 'AwAAAAQfCAAAAAAAAAA1HbEvgTNrvX54gCiWSTVmt5v7RCdoFJ/zhkKmwcm8yVqZPjJBoVhNHHAIzrHWKbZh1J0QAUaHB5zyQTilTmWa9O0OKeLrk/Jg+o7CmMzjEk74uPongdHv37nwYXvg97fiHvjP2bBzI9gxSkKq9Cqh/GxSHIlZPYyW76pXUt//25Aqs2Icfpyay/NFd50rW7eMliH5ynkrp16HM1afithVrO+LpSaz/IojowApmXnBHUncHliDqbkx6/AODUkyDm1hj+AiEZ9Me1Jy+hBQ1/wC/YnuuYSJvNAKp6XDnyc8Nwr54Uqx5SbUW2CezwQQ7aXX/HFiHSKpQcFW/gi8oSx5nsoxUXVjxeNI/L7z6GF2mfu3Tnpt7hliWEdA2r2VB+TIM7Pgwl9X3Ge0T3KJQUaRtLJZcPvVtOuKXr2Q9wy7hl80hVRrt9zYrbjBHXLrRx/HeIMkZwxhmKo/dD/vvaNgE+BdU8eeJqFBJK2alrK2rh2WkRynftyepm1WrdKrz/5KhQPp/4PqH+9IADDjoGBbfvJQXdT+yiO8DtfrVnd+JOEKsKEsdgeM3UXx5r6tEHO9rYWbzbnyEiX7WozZemry+vBZMMtHn1aA63+RcDQED73xOsnj00/9E5Z6hszM5Hi8vi6Hw3iOgf3cHwcXG44aau0JpuA2DlrUvnJOYkNnY+bECeSdAR1UQkFNyqRoH2xm4Y7gYMCPsFtPBlwwleEKI27SsUq1ZHVQvFCoef7DXgf/GwPCAvwDMIQfb3hJtIVubOkASRQZVNIJ/y4KPrn/gcASV7fvMjE34loltTVlyqprUWxpI51tN6vhTOLAp+CHseKxWaf9g1wdbVs0e/5xAiqgJbmKNi9OYbhV/blpp3SL63XKxGiHdxhK1aR+4rUY4eckNbaHfW7ob+q7aBoHSs6LVX9lWakb/xWxwQdwcX/7/C+TcQSOOg6rLoWZ8wur9qp+QwzoCbXkf04OYpvD5kqgEiwQnB90kLtcA+2XSbDRu+aq02eNNCzgkZujeL/HjVISjf2EuQKSsZkBhS15eiXoRgPaUoQ5586VS7t7rhM8ng5LiVzoUQIZ0pNKxWWqD+gXRBvOMIXY2yd0Ei4sE5KFIEhbs3u8vwP7nFLIpZ/RembPTuc0ZlguGJgJ2F5iApfia+C2tRYRNjVCqECCveWw6P2Btfaq9gw7cWWmJflIQbjxtccDqsn52cftLqXSna9zk05mYdJSV8z2W7vM1YJ5Rd82v0j3kau710A/kQrN41bdaxmKjL+gvSRlOLB1bpvkCtf9+h+eVA4XIkIXKFydr1OjMZ8wq2FIxPJXskAe4YMgwQmeWZXMK1KBbLB3yQR1YOYaaHk1fNea9KsXgs5YLbiP/noAusz76oEDo/DJh1aw7cUwdhboVPg1bNq88mRb5RGa13KDK9uEET7OA02KbSL+Q4HOtyasLUoVrZzVyd8iZPoGrV36vHnj+yvG4fq6F/fkug/sBRp186yVZQVmdAgFd+WiRLnUjxHUKJ6xBbpt4FTP42E/PzPw3JlDb0UQtXTDnIL0CWqbns2E7rZ5PBwrwQYwvBn/gaEeLVGDSh84DfW4zknIneGnYDXdVEHC+ITzejAnNxb1duB+w2aVTk64iXsKHETq53GMH6DuFi0oUeEFb/xp0HsRyNC8vBjOq3Kk7NZHxCQLh7UATFttG7sH+VIqGjjNwmraGJ0C92XhpQwSgfAb3KHucCHGTTti0sn6cgS3vb36BkjGKsRhXVuoQCFH96bvTYtl8paQQW9ufRfvxPqmU0sALdR0fIvZwd7Z8z0UoEec6b1Sul4e60REj/H4scb6N2ryHBR9ua5N1YxJu1uwgoLXUL2wT9ZPBjPjySUzeqXikUIKKYgNlWy+VlNIiWWTPtKpCTr508logA=='
62 | Else
63 | $Code = 'AwAAAASFBwAAAAAAAAA1HbEvgTNrvX54gCiqsa1mt5v7RCdoAFjCfVE40DZbE5UfabA9UKuHrjqOMbvjSoB2zBJTEYEQejBREnPrXL3VwpVOW+L9SSfo0rTfA8U2W+Veqo1uy0dOsPhl7vAHbBHrvJNfEUe8TT0q2eaTX2LeWpyrFEm4I3mhDJY/E9cpWf0A78e+y4c7NxewvcVvAakIHE8Xb8fgtqCTVQj3Q1eso7n1fKQj5YsQ20A86Gy9fz8dky78raeZnhYayn0b1riSUKxGVnWja2i02OvAVM3tCCvXwcbSkHTRjuIAbMu2mXF1UpKci3i/GzPmbxo9n/3aX/jpR6UvxMZuaEDEij4yzfZv7EyK9WCNBXxMmtTp3Uv6MZsK+nopXO3C0xFzZA/zQObwP3zhJ4sdatzMhFi9GAM70R4kgMzsxQDNArueXj+UFzbCCFZ89zXs22F7Ixi0FyFTk3jhH56dBaN65S+gtPztNGzEUmtk4M8IanhQSw8xCXr0x0MPDpDFDZs3aN5TtTPYmyk3psk7OrmofCQGG5cRcqEt9902qtxQDOHumfuCPMvU+oMjzLzBVEDnBbj+tY3y1jvgGbmEJguAgfB04tSeAt/2618ksnJJK+dbBkDLxjB4xrFr3uIFFadJQWUckl5vfh4MVXbsFA1hG49lqWDa7uSuPCnOhv8Yql376I4U4gfcF8LcgorkxS+64urv2nMUq6AkBEMQ8bdkI64oKLFfO7fGxh5iMNZuLoutDn2ll3nq4rPi4kOyAtfhW0UPyjvqNtXJ/h0Wik5Mi8z7BVxaURTDk81TP8y9+tzjySB/uGfHFAzjF8DUY1vqJCgn0GQ8ANtiiElX/+Wnc9HWi2bEEXItbm4yv97QrEPvJG9nPRBKWGiAQsIA5J+WryX5NrfEfRPk0QQwyl16lpHlw6l0UMuk7S21xjQgyWo0MywfzoBWW7+t4HH9sqavvP4dYAw81BxXqVHQhefUOS23en4bFUPWE98pAN6bul+kS767vDK34yTC3lA2a8wLrBEilmFhdB74fxbAl+db91PivhwF/CR4Igxr35uLdof7+jAYyACopQzmsbHpvAAwT2lapLix8H03nztAC3fBqFSPBVdIv12lsrrDw4dfhJEzq7AbL/Y7L/nIcBsQ/3UyVnZk4kZP1KzyPCBLLIQNpCVgOLJzQuyaQ6k2QCBy0eJ0ppUyfp54LjwVg0X7bwncYbAomG4ZcFwTQnC2AX3oYG5n6Bz4SLLjxrFsY+v/SVa+GqH8uePBh1TPkHVNmzjXXymEf5jROlnd+EjfQdRyitkjPrg2HiQxxDcVhCh5J2L5+6CY9eIaYgrbd8zJnzAD8KnowHwh2bi4JLgmt7ktJ1XGizox7cWf3/Dod56KAcaIrSVw9XzYybdJCf0YRA6yrwPWXbwnzc/4+UDkmegi+AoCEMoue+cC7vnYVdmlbq/YLE/DWJX383oz2Ryq8anFrZ8jYvdoh8WI+dIugYL2SwRjmBoSwn56XIaot/QpMo3pYJIa4o8aZIZrjvB7BXO5aCDeMuZdUMT6AXGAGF1AeAWxFd2XIo1coR+OplMNDuYia8YAtnSTJ9JwGYWi2dJz3xrxsTQpBONf3yn8LVf8eH+o5eXc7lzCtHlDB+YyI8V9PyMsUPOeyvpB3rr9fDfNy263Zx33zTi5jldgP2OetUqGfbwl+0+zNYnrg64bluyIN/Awt1doDCQkCKpKXxuPaem/SyCHrKjg'
64 | EndIf
65 |
66 | Local $Symbol[] = ["jsmn_parse","jsmn_init","json_string_decode","json_string_encode"]
67 | Local $CodeBase = _BinaryCall_Create($Code)
68 | If @Error Then Exit MsgBox(16, "Json", "Startup Failure!")
69 |
70 | $SymbolList = _BinaryCall_SymbolList($CodeBase, $Symbol)
71 | If @Error Then Exit MsgBox(16, "Json", "Startup Failure!")
72 | EndIf
73 | If $ProcName Then Return DllStructGetData($SymbolList, $ProcName)
74 | EndFunc
75 |
76 | Func Json_StringEncode($String, $Option = 0)
77 | Static $Json_StringEncode = __Jsmn_RuntimeLoader("json_string_encode")
78 | Local $Length = StringLen($String) * 6 + 1
79 | Local $Buffer = DllStructCreate("wchar[" & $Length & "]")
80 | Local $Ret = DllCallAddress("int:cdecl", $Json_StringEncode, "wstr", $String, "ptr", DllStructGetPtr($Buffer), "uint", $Length, "int", $Option)
81 | Return SetError($Ret[0], 0, DllStructGetData($Buffer, 1))
82 | EndFunc
83 |
84 | Func Json_StringDecode($String)
85 | Static $Json_StringDecode = __Jsmn_RuntimeLoader("json_string_decode")
86 | Local $Length = StringLen($String) + 1
87 | Local $Buffer = DllStructCreate("wchar[" & $Length & "]")
88 | Local $Ret = DllCallAddress("int:cdecl", $Json_StringDecode, "wstr", $String, "ptr", DllStructGetPtr($Buffer), "uint", $Length)
89 | Return SetError($Ret[0], 0, DllStructGetData($Buffer, 1))
90 | EndFunc
91 |
92 | Func Json_Decode($Json, $InitTokenCount = 1000)
93 | Static $Jsmn_Init = __Jsmn_RuntimeLoader("jsmn_init"), $Jsmn_Parse = __Jsmn_RuntimeLoader("jsmn_parse")
94 | If $Json = "" Then $Json = '""'
95 | Local $TokenList, $Ret
96 | Local $Parser = DllStructCreate("uint pos;int toknext;int toksuper")
97 | Do
98 | DllCallAddress("none:cdecl", $Jsmn_Init, "ptr", DllStructGetPtr($Parser))
99 | $TokenList = DllStructCreate("byte[" & ($InitTokenCount * 20) & "]")
100 | $Ret = DllCallAddress("int:cdecl", $Jsmn_Parse, "ptr", DllStructGetPtr($Parser), "wstr", $Json, "ptr", DllStructGetPtr($TokenList), "uint", $InitTokenCount)
101 | $InitTokenCount *= 2
102 | Until $Ret[0] <> $JSMN_ERROR_NOMEM
103 |
104 | Local $Next = 0
105 | Return SetError($Ret[0], 0, _Json_Token($Json, DllStructGetPtr($TokenList), $Next))
106 | EndFunc
107 |
108 | Func _Json_Token(ByRef $Json, $Ptr, ByRef $Next)
109 | If $Next = -1 Then Return Null
110 |
111 | Local $Token = DllStructCreate("int;int;int;int", $Ptr + ($Next * 20))
112 | Local $Type = DllStructGetData($Token, 1)
113 | Local $Start = DllStructGetData($Token, 2)
114 | Local $End = DllStructGetData($Token, 3)
115 | Local $Size = DllStructGetData($Token, 4)
116 | $Next += 1
117 |
118 | If $Type = 0 And $Start = 0 And $End = 0 And $Size = 0 Then ; Null Item
119 | $Next = -1
120 | Return Null
121 | EndIf
122 |
123 | Switch $Type
124 | Case 0 ; Json_PRIMITIVE
125 | Local $Primitive = StringMid($Json, $Start + 1, $End - $Start)
126 | Switch $Primitive
127 | Case "true"
128 | Return True
129 | Case "false"
130 | Return False
131 | Case "null"
132 | Return Null
133 | Case Else
134 | If StringRegExp($Primitive, "^[+\-0-9]") Then
135 | Return Number($Primitive)
136 | Else
137 | Return Json_StringDecode($Primitive)
138 | EndIf
139 | EndSwitch
140 |
141 | Case 1 ; Json_OBJECT
142 | Local $Object = Json_ObjCreate()
143 | For $i = 0 To $Size - 1 Step 2
144 | Local $Key = _Json_Token($Json, $Ptr, $Next)
145 | Local $Value = _Json_Token($Json, $Ptr, $Next)
146 | If Not IsString($Key) Then $Key = Json_Encode($Key)
147 |
148 | If $Object.Exists($Key) Then $Object.Remove($Key)
149 | $Object.Add($Key, $Value)
150 | Next
151 | Return $Object
152 |
153 | Case 2 ; Json_ARRAY
154 | Local $Array[$Size]
155 | For $i = 0 To $Size - 1
156 | $Array[$i] = _Json_Token($Json, $Ptr, $Next)
157 | Next
158 | Return $Array
159 |
160 | Case 3 ; Json_STRING
161 | Return Json_StringDecode(StringMid($Json, $Start + 1, $End - $Start))
162 | EndSwitch
163 | EndFunc
164 |
165 | Func Json_IsObject(ByRef $Object)
166 | Return (IsObj($Object) And ObjName($Object) = "Dictionary")
167 | EndFunc
168 |
169 | Func Json_IsNull(ByRef $Null)
170 | Return IsKeyword($Null) Or (Not IsObj($Null) And VarGetType($Null) = "Object")
171 | EndFunc
172 |
173 | Func Json_Encode_Compact($Data, $Option = 0)
174 | Select
175 | Case IsString($Data)
176 | Return '"' & Json_StringEncode($Data, $Option) & '"'
177 |
178 | Case IsNumber($Data)
179 | Return $Data
180 |
181 | Case IsArray($Data) And UBound($Data, 0) = 1
182 | Local $Json = "["
183 | For $i = 0 To UBound($Data) - 1
184 | $Json &= Json_Encode_Compact($Data[$i], $Option) & ","
185 | Next
186 | If StringRight($Json, 1) = "," Then $Json = StringTrimRight($Json, 1)
187 | Return $Json & "]"
188 |
189 | Case Json_IsObject($Data)
190 | Local $Json = "{"
191 | Local $Keys = $Data.Keys()
192 | For $i = 0 To UBound($Keys) - 1
193 | $Json &= '"' & Json_StringEncode($Keys[$i], $Option) & '":' & Json_Encode_Compact($Data.Item($Keys[$i]), $Option) & ","
194 | Next
195 | If StringRight($Json, 1) = "," Then $Json = StringTrimRight($Json, 1)
196 | Return $Json & "}"
197 |
198 | Case IsBool($Data)
199 | Return StringLower($Data)
200 |
201 | Case IsPtr($Data)
202 | Return Number($Data)
203 |
204 | Case IsBinary($Data)
205 | Return '"' & Json_StringEncode(BinaryToString($Data, 4), $Option) & '"'
206 |
207 | Case Else ; Keyword, DllStruct, Object
208 | Return "null"
209 | EndSelect
210 | EndFunc
211 |
212 | Func Json_Encode_Pretty($Data, $Option, $Indent, $ArraySep, $ObjectSep, $ColonSep, $ArrayCRLF = Default, $ObjectCRLF = Default, $NextIdent = "")
213 | Local $ThisIdent = $NextIdent, $Json = ""
214 | Select
215 | Case IsString($Data)
216 | Local $String = Json_StringEncode($Data, $Option)
217 | If BitAND($Option, $Json_UNQUOTED_STRING) And Not BitAND($Option, $Json_STRICT_PRINT) And Not StringRegExp($String, "[\s,:]") And Not StringRegExp($String, "^[+\-0-9]") Then
218 | Return $String
219 | Else
220 | Return '"' & $String & '"'
221 | EndIf
222 |
223 | Case IsArray($Data) And UBound($Data, 0) = 1
224 | If UBound($Data) = 0 Then Return "[]"
225 | If IsKeyword($ArrayCRLF) Then
226 | $ArrayCRLF = ""
227 | Local $Match = StringRegExp($ArraySep, "[\r\n]+$", 3)
228 | If IsArray($Match) Then $ArrayCRLF = $Match[0]
229 | EndIf
230 |
231 | If $ArrayCRLF Then $NextIdent &= $Indent
232 | Local $Length = UBound($Data) - 1
233 | For $i = 0 To $Length
234 | If $ArrayCRLF Then $Json &= $NextIdent
235 | $Json &= Json_Encode_Pretty($Data[$i], $Option, $Indent, $ArraySep, $ObjectSep, $ColonSep, $ArrayCRLF, $ObjectCRLF, $NextIdent)
236 | If $i < $Length Then $Json &= $ArraySep
237 | Next
238 |
239 | If $ArrayCRLF Then Return "[" & $ArrayCRLF & $Json & $ArrayCRLF & $ThisIdent & "]"
240 | Return "[" & $Json & "]"
241 |
242 | Case Json_IsObject($Data)
243 | If $Data.Count = 0 Then Return "{}"
244 | If IsKeyword($ObjectCRLF) Then
245 | $ObjectCRLF = ""
246 | Local $Match = StringRegExp($ObjectSep, "[\r\n]+$", 3)
247 | If IsArray($Match) Then $ObjectCRLF = $Match[0]
248 | EndIf
249 |
250 | If $ObjectCRLF Then $NextIdent &= $Indent
251 | Local $Keys = $Data.Keys()
252 | Local $Length = UBound($Keys) - 1
253 | For $i = 0 To $Length
254 | If $ObjectCRLF Then $Json &= $NextIdent
255 | $Json &= Json_Encode_Pretty(String($Keys[$i]), $Option, $Indent, $ArraySep, $ObjectSep, $ColonSep) & $ColonSep _
256 | & Json_Encode_Pretty($Data.Item($Keys[$i]), $Option, $Indent, $ArraySep, $ObjectSep, $ColonSep, $ArrayCRLF, $ObjectCRLF, $NextIdent)
257 | If $i < $Length Then $Json &= $ObjectSep
258 | Next
259 |
260 | If $ObjectCRLF Then Return "{" & $ObjectCRLF & $Json & $ObjectCRLF & $ThisIdent & "}"
261 | Return "{" & $Json & "}"
262 |
263 | Case Else
264 | Return Json_Encode_Compact($Data, $Option)
265 |
266 | EndSelect
267 | EndFunc
268 |
269 | Func Json_Encode($Data, $Option = 0, $Indent = Default, $ArraySep = Default, $ObjectSep = Default, $ColonSep = Default)
270 | If BitAND($Option, $Json_PRETTY_PRINT) Then
271 | Local $Strict = BitAND($Option, $Json_STRICT_PRINT)
272 |
273 | If IsKeyword($Indent) Then
274 | $Indent = @Tab
275 | Else
276 | $Indent = Json_StringDecode($Indent)
277 | If StringRegExp($Indent, "[^\t ]") Then $Indent = @Tab
278 | EndIf
279 |
280 | If IsKeyword($ArraySep) Then
281 | $ArraySep = "," & @CRLF
282 | Else
283 | $ArraySep = Json_StringDecode($ArraySep)
284 | If $ArraySep = "" Or StringRegExp($ArraySep, "[^\s,]|,.*,") Or ($Strict And Not StringRegExp($ArraySep, ",")) Then $ArraySep = "," & @CRLF
285 | EndIf
286 |
287 | If IsKeyword($ObjectSep) Then
288 | $ObjectSep = "," & @CRLF
289 | Else
290 | $ObjectSep = Json_StringDecode($ObjectSep)
291 | If $ObjectSep = "" Or StringRegExp($ObjectSep, "[^\s,]|,.*,") Or ($Strict And Not StringRegExp($ObjectSep, ",")) Then $ObjectSep = "," & @CRLF
292 | EndIf
293 |
294 | If IsKeyword($ColonSep) Then
295 | $ColonSep = ": "
296 | Else
297 | $ColonSep = Json_StringDecode($ColonSep)
298 | If $ColonSep = "" Or StringRegExp($ColonSep, "[^\s,:]|[,:].*[,:]") Or ($Strict And (StringRegExp($ColonSep, ",") Or Not StringRegExp($ColonSep, ":"))) Then $ColonSep = ": "
299 | EndIf
300 |
301 | Return Json_Encode_Pretty($Data, $Option, $Indent, $ArraySep, $ObjectSep, $ColonSep)
302 |
303 | ElseIf BitAND($Option, $Json_UNQUOTED_STRING) Then
304 | Return Json_Encode_Pretty($Data, $Option, "", ",", ",", ":")
305 | Else
306 | Return Json_Encode_Compact($Data, $Option)
307 | EndIf
308 | EndFunc
309 |
310 | Func Json_ObjCreate()
311 | Local $Object = ObjCreate('Scripting.Dictionary')
312 | $Object.CompareMode = 0
313 | Return $Object
314 | EndFunc
315 |
316 | Func Json_ObjPut(ByRef $Object, $Key, $Value)
317 | $Key = String($Key)
318 | If $Object.Exists($Key) Then $Object.Remove($Key)
319 | $Object.Add($Key, $Value)
320 | EndFunc
321 |
322 | Func Json_ObjGet(ByRef $Object, $Key)
323 | $Key = String($Key)
324 | If $Object.Exists($Key) Then Return $Object.Item($Key)
325 | Return SetError(1, 0, '')
326 | EndFunc
327 |
328 | Func Json_ObjDelete(ByRef $Object, $Key)
329 | $Key = String($Key)
330 | If $Object.Exists($Key) Then $Object.Remove($Key)
331 | EndFunc
332 |
333 | Func Json_ObjExists(ByRef $Object, $Key)
334 | Return $Object.Exists(String($Key))
335 | EndFunc
336 |
337 | Func Json_ObjGetCount(ByRef $Object)
338 | Return $Object.Count
339 | EndFunc
340 |
341 | Func Json_ObjGetKeys(ByRef $Object)
342 | Return $Object.Keys()
343 | EndFunc
344 |
345 | Func Json_ObjClear(ByRef $Object)
346 | Return $Object.RemoveAll()
347 | EndFunc
348 |
349 | ; Both dot notation and square bracket notation can be supported
350 | Func Json_Put(ByRef $Var, $Notation, $Data, $CheckExists = False)
351 | Local $Match = StringRegExp($Notation, "(^\[([^\]]+)\])|(^\.([^\.\[]+))", 3)
352 | If IsArray($Match) Then
353 | Local $Index
354 | If UBound($Match) = 4 Then
355 | $Index = String(Json_Decode($Match[3])) ; only string using dot notation
356 | $Notation = StringTrimLeft($Notation, StringLen($Match[2]))
357 | Else
358 | $Index = Json_Decode($Match[1])
359 | $Notation = StringTrimLeft($Notation, StringLen($Match[0]))
360 | EndIf
361 |
362 | If IsString($Index) Then
363 | If $CheckExists And (Not Json_IsObject($Var) Or Not Json_ObjExists($Var, $Index)) Then
364 | Return SetError(1, 0, False) ; no specific object
365 | EndIf
366 |
367 | If Not Json_IsObject($Var) Then $Var = Json_ObjCreate()
368 | If $Notation Then
369 | Local $Item = Json_ObjGet($Var, $Index)
370 | Local $Ret = Json_Put($Item, $Notation, $Data, $CheckExists)
371 | Local $Error = @Error
372 | If Not $Error Then Json_ObjPut($Var, $Index, $Item)
373 | Return SetError($Error, 0, $Ret)
374 | Else
375 | Json_ObjPut($Var, $Index, $Data)
376 | Return True
377 | EndIf
378 |
379 | ElseIf IsInt($Index) Then
380 | If $Index < 0 Or ($CheckExists And (Not IsArray($Var) Or UBound($Var, 0) <> 1 Or $Index >= UBound($Var))) Then
381 | Return SetError(1, 0, False) ; no specific object
382 | EndIf
383 |
384 | If Not IsArray($Var) Or UBound($Var, 0) <> 1 Then
385 | Dim $Var[$Index + 1]
386 | ElseIf $Index >= UBound($Var) Then
387 | ReDim $Var[$Index + 1]
388 | EndIf
389 |
390 | If $Notation Then
391 | Local $Ret = Json_Put($Var[$Index], $Notation, $Data, $CheckExists)
392 | Return SetError(@Error, 0, $Ret)
393 | Else
394 | $Var[$Index] = $Data
395 | Return True
396 | EndIf
397 |
398 | EndIf
399 | EndIf
400 | Return SetError(2, 0, False) ; invalid notation
401 | EndFunc
402 |
403 | ; Both dot notation and square bracket notation can be supported
404 | Func Json_Get(ByRef $Var, $Notation)
405 | Local $Match = StringRegExp($Notation, "(^\[([^\]]+)\])|(^\.([^\.\[]+))", 3)
406 | If IsArray($Match) Then
407 | Local $Index
408 | If UBound($Match) = 4 Then
409 | $Index = String(Json_Decode($Match[3])) ; only string using dot notation
410 | $Notation = StringTrimLeft($Notation, StringLen($Match[2]))
411 | Else
412 | $Index = Json_Decode($Match[1])
413 | $Notation = StringTrimLeft($Notation, StringLen($Match[0]))
414 | EndIf
415 |
416 | Local $Item
417 | If IsString($Index) And Json_IsObject($Var) And Json_ObjExists($Var, $Index) Then
418 | $Item = Json_ObjGet($Var, $Index)
419 | ElseIf IsInt($Index) And IsArray($Var) And UBound($Var, 0) = 1 And $Index >= 0 And $Index < UBound($Var) Then
420 | $Item = $Var[$Index]
421 | Else
422 | Return SetError(1, 0, "") ; no specific object
423 | EndIf
424 |
425 | If Not $Notation Then Return $Item
426 | Local $Ret = Json_Get($Item, $Notation)
427 | Return SetError(@Error, 0, $Ret)
428 | EndIf
429 | Return SetError(2, 0, "") ; invalid notation
430 | EndFunc
--------------------------------------------------------------------------------
/assets/libs/Snippets.au3:
--------------------------------------------------------------------------------
1 | #Region ;Snippets that are conversions by JoshuaDoes from other source codes
2 | #cs ;This code is from https://gist.github.com/opello/3797251
3 | -- Helper function to get a parameter's value in a URL
4 | function get_url_param( url, name )
5 | local _, _, res = string.find( url, "[&?]"..name.."=([^&]*)" )
6 | return res
7 | end
8 | #ce
9 | Func Get_URL_Param($sURL, $sName)
10 | Local $Result = StringRegExp($sURL, "[&?]" & $sName & "=([^&]*)", 1)
11 | If @error Then
12 | Return SetError(1, @error, False)
13 | Else
14 | Return SetError(0, $Result, $Result[0])
15 | EndIf
16 | EndFunc
17 |
18 | #cs ;This code is from https://gist.github.com/opello/3797251
19 | function get_arturl()
20 | local iurl = get_url_param( vlc.path, "iurl" )
21 | if iurl then
22 | return iurl
23 | end
24 | local video_id = get_url_param( vlc.path, "v" )
25 | if not video_id then
26 | return nil
27 | end
28 | return "http://img.youtube.com/vi/"..video_id.."/default.jpg"
29 | end
30 | #ce
31 | Func YouTube_Get_ArtURL($sYouTubeWatchURL)
32 | Local $VideoID = Get_URL_Param($sYouTubeWatchURL, "v")
33 | If Not $VideoID Then
34 | Return SetError(1, 0, False)
35 | Else
36 | Return SetError(0, $sYouTubeWatchURL, "https://img.youtube.com/vi/" & $VideoID & "/maxresdefault.jpg")
37 | EndIf
38 | EndFunc
39 | #EndRegion
40 |
41 | #Region ;Snippets from the AutoIt website
42 | Func _URIDecode($sData) ;Modified to look neater
43 | ; Prog@ndy
44 | Local $aData = StringSplit(StringReplace($sData, "+", " ", 0, 1), "%")
45 | $sData = ""
46 | For $i = 2 To $aData[0]
47 | $aData[1] &= Chr(Dec(StringLeft($aData[$i], 2))) & StringTrimLeft($aData[$i], 2)
48 | Next
49 | Return BinaryToString(StringToBinary($aData[1], 1), 4)
50 | EndFunc
51 | #EndRegion
52 |
53 | #Region ;Snippets from the AutoIt website, sources will be found again soon
54 | Func Seconds2Time($nr_sec)
55 | $sec2time_hour = Int($nr_sec / 3600)
56 | $sec2time_min = Int(($nr_sec - $sec2time_hour * 3600) / 60)
57 | $sec2time_sec = $nr_sec - $sec2time_hour * 3600 - $sec2time_min * 60
58 | Return StringFormat('%02d:%02d:%02d', $sec2time_hour, $sec2time_min, $sec2time_sec)
59 | EndFunc
60 | Func _IsInternetConnected() ;Created by "guinness": http://www.autoitscript.com/forum/user/35302-guinness
61 | Local $aReturn = DllCall('connect.dll', 'long', 'IsInternetConnected')
62 | If @error Then
63 | Return SetError(1, 0, False)
64 | EndIf
65 | Return $aReturn[0] = 0
66 | EndFunc ;==>_IsInternetConnected
67 | #EndRegion
--------------------------------------------------------------------------------
/assets/themes/dark/Add CD.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Add CD.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Add File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Add File.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Add Link.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Add Link.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Broken Link.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Broken Link.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Delete File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Delete File.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Delete Link.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Delete Link.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Delete.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Delete.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Export Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Export Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Fast Forward.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Fast Forward.ico
--------------------------------------------------------------------------------
/assets/themes/dark/File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/File.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Hibernate.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Hibernate.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Import Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Import Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Maximize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Maximize Window.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Minimize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Minimize Window.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Next.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Next.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Notifications.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Notifications.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Pause.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Pause.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Play.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Play.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Previous.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Previous.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Random.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Random.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Repeat.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Repeat.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Restart.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Restart.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Restore Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Restore Window.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Resume.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Resume.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Rewind.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Rewind.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Save File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Save File.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Settings.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Settings.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Shutdown.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Shutdown.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Stop.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Stop.ico
--------------------------------------------------------------------------------
/assets/themes/dark/Theme.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/Theme.ico
--------------------------------------------------------------------------------
/assets/themes/dark/View.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/View.ico
--------------------------------------------------------------------------------
/assets/themes/dark/YouTube.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/YouTube.ico
--------------------------------------------------------------------------------
/assets/themes/dark/theme.properties:
--------------------------------------------------------------------------------
1 | [Theme Settings]
2 | DisplayName=Dark
3 | BackgroundColor=0x1C1C1C
4 | TextColor=0xFFFFFF
5 |
6 | [Theme Icons]
7 | Logo=zPlayer
8 | Shutdown=Shutdown
9 | Maximize=Maximize Window
10 | Restore=Restore Window
11 | Hibernate=Hibernate
12 | Minimize=Minimize Window
13 | Theme=Theme
14 | AddFile=Add File
15 | AddURL=Add Link
16 | AddCD=Add CD
17 | Playlist=Playlist
18 | PlaylistImport=Import Playlist
19 | PlaylistExport=Export Playlist
20 | Previous=Previous
21 | Play=Play
22 | Pause=Pause
23 | Resume=Resume
24 | Next=Next
25 | Stop=Stop
26 | Random=Random
27 | Repeat=Repeat
28 | Fill=Black
29 | YouTube=YouTube
30 | File=File
31 | Delete=Delete
32 | SaveFile=Save File
33 | View=View
34 | Notifications=Notifications
35 | Settings=Settings
--------------------------------------------------------------------------------
/assets/themes/dark/zPlayer.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/dark/zPlayer.ico
--------------------------------------------------------------------------------
/assets/themes/icons8-High Volume Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-High Volume Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/icons8-Medium Volume Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-Medium Volume Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/icons8-Mute Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-Mute Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/icons8-Notification Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-Notification Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/icons8-Vertical Settings Mixer Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-Vertical Settings Mixer Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/icons8-View Filled-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/icons8-View Filled-64.png
--------------------------------------------------------------------------------
/assets/themes/light/Add CD.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Add CD.ico
--------------------------------------------------------------------------------
/assets/themes/light/Add File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Add File.ico
--------------------------------------------------------------------------------
/assets/themes/light/Add Link.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Add Link.ico
--------------------------------------------------------------------------------
/assets/themes/light/Delete.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Delete.ico
--------------------------------------------------------------------------------
/assets/themes/light/Export Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Export Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/light/Fast Forward.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Fast Forward.ico
--------------------------------------------------------------------------------
/assets/themes/light/File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/File.ico
--------------------------------------------------------------------------------
/assets/themes/light/Hibernate.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Hibernate.ico
--------------------------------------------------------------------------------
/assets/themes/light/Import Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Import Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/light/Maximize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Maximize Window.ico
--------------------------------------------------------------------------------
/assets/themes/light/Minimize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Minimize Window.ico
--------------------------------------------------------------------------------
/assets/themes/light/Next.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Next.ico
--------------------------------------------------------------------------------
/assets/themes/light/Notifications.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Notifications.ico
--------------------------------------------------------------------------------
/assets/themes/light/Pause.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Pause.ico
--------------------------------------------------------------------------------
/assets/themes/light/Play.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Play.ico
--------------------------------------------------------------------------------
/assets/themes/light/Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/light/Previous.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Previous.ico
--------------------------------------------------------------------------------
/assets/themes/light/Random.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Random.ico
--------------------------------------------------------------------------------
/assets/themes/light/Repeat.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Repeat.ico
--------------------------------------------------------------------------------
/assets/themes/light/Restore Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Restore Window.ico
--------------------------------------------------------------------------------
/assets/themes/light/Resume.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Resume.ico
--------------------------------------------------------------------------------
/assets/themes/light/Rewind.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Rewind.ico
--------------------------------------------------------------------------------
/assets/themes/light/Save File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Save File.ico
--------------------------------------------------------------------------------
/assets/themes/light/Settings.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Settings.ico
--------------------------------------------------------------------------------
/assets/themes/light/Shutdown.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Shutdown.ico
--------------------------------------------------------------------------------
/assets/themes/light/Stop.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Stop.ico
--------------------------------------------------------------------------------
/assets/themes/light/Theme.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/Theme.ico
--------------------------------------------------------------------------------
/assets/themes/light/View.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/View.ico
--------------------------------------------------------------------------------
/assets/themes/light/YouTube.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/YouTube.ico
--------------------------------------------------------------------------------
/assets/themes/light/theme.properties:
--------------------------------------------------------------------------------
1 | [Theme Settings]
2 | DisplayName=Light
3 | BackgroundColor=0xFAFAFA
4 | TextColor=0x000000
5 |
6 | [Theme Icons]
7 | Logo=zPlayer
8 | Shutdown=Shutdown
9 | Maximize=Maximize Window
10 | Restore=Restore Window
11 | Hibernate=Hibernate
12 | Minimize=Minimize Window
13 | Theme=Theme
14 | AddFile=Add File
15 | AddURL=Add Link
16 | AddCD=Add CD
17 | Playlist=Playlist
18 | PlaylistImport=Import Playlist
19 | PlaylistExport=Export Playlist
20 | Previous=Previous
21 | Play=Play
22 | Pause=Pause
23 | Resume=Resume
24 | Next=Next
25 | Stop=Stop
26 | Random=Random
27 | Repeat=Repeat
28 | Fill=Black
29 | YouTube=YouTube
30 | File=File
31 | Delete=Delete
32 | SaveFile=Save File
33 | View=View
34 | Notifications=Notifications
35 | Settings=Settings
--------------------------------------------------------------------------------
/assets/themes/light/zPlayer.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/light/zPlayer.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Add CD.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Add CD.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Add File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Add File.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Add Link.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Add Link.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Delete.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Delete.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Equalizer.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Equalizer.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Export Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Export Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Fast Forward.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Fast Forward.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/File.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Hibernate.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Hibernate.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Import Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Import Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Maximize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Maximize Window.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Minimize Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Minimize Window.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Next.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Next.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Notifications.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Notifications.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Pause.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Pause.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Play.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Play.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Playlist.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Playlist.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Previous.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Previous.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Random.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Random.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Repeat.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Repeat.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Restore Window.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Restore Window.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Resume.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Resume.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Rewind.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Rewind.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Save File.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Save File.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Settings.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Settings.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Shutdown.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Shutdown.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Stop.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Stop.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Theme.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Theme.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/View.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/View.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Volume High.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Volume High.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Volume Medium.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Volume Medium.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/Volume Mute.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/Volume Mute.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/YouTube.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/YouTube.ico
--------------------------------------------------------------------------------
/assets/themes/nolan/theme.properties:
--------------------------------------------------------------------------------
1 | [Theme Settings]
2 | DisplayName=Nolan
3 | BackgroundColor=0x0F0F0F
4 | TextColor=0xFFFFFF
5 |
6 | [Theme Icons]
7 | Logo=zPlayer
8 | Shutdown=Shutdown
9 | Maximize=Maximize Window
10 | Restore=Restore Window
11 | Hibernate=Hibernate
12 | Minimize=Minimize Window
13 | Theme=Theme
14 | AddFile=Add File
15 | AddURL=Add Link
16 | AddCD=Add CD
17 | Playlist=Playlist
18 | PlaylistImport=Import Playlist
19 | PlaylistExport=Export Playlist
20 | Previous=Previous
21 | Play=Play
22 | Pause=Pause
23 | Resume=Resume
24 | Next=Next
25 | Stop=Stop
26 | Random=Random
27 | Repeat=Repeat
28 | Fill=Black
29 | YouTube=YouTube
30 | File=File
31 | Delete=Delete
32 | SaveFile=Save File
33 | View=View
34 | Notifications=Notifications
35 | Settings=Settings
--------------------------------------------------------------------------------
/assets/themes/nolan/zPlayer.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/assets/themes/nolan/zPlayer.ico
--------------------------------------------------------------------------------
/changelog.txt:
--------------------------------------------------------------------------------
1 | --- TODO ---
2 | - Modulate all the things and give each module an STDIN/STDOUT pipeline for
3 | communication amongst each other
4 | * Possible latency on very slow systems
5 | + Add support for YouTube-DL as a system module to replace the unstable
6 | YouTubeInMP3 API service
7 | * This will widen the range of supported services to more than just YouTube,
8 | and zPlayer will attempt to support as many of these as possible
9 | * This will also re-implement the fossil of the network cache, where the
10 | module will keep track of the current downloads and also add a placeholder
11 | entry in the playlist for the track with a status flag for "Not ready" until
12 | the track is ready
13 | - Add automatic updating with Stable and Beta channels, optionally supporting
14 | a custom update URL for other forks of zPlayer's source code
15 | * If one were to supply a custom update URL for other forks and the fork
16 | has a modified or different update system, this URL could point to a
17 | static file that will download and open the latest version of the custom
18 | zPlayer fork to auto-install it rather than being required to follow the
19 | update logic currently implemented and download the custom zPlayer fork
20 | manually
21 | - Add CD playback
22 | - Add video playback
23 | - Add Last.FM support for scrobbling tracks
24 | - Add translation support for all the things
25 | - Add a settings menu
26 | - Add equalizer
27 | - Add download progress info in the playlist view when downloading/buffering a
28 | network stream
29 | - Implement YouTube-DL to replace current network handling
30 | - Add file tag/info viewer/editor
31 | - Add informative text that appears in the notification text area to explain what
32 | something is when you hover over it with your mouse
33 |
34 | --- KNOWN BUGS ---
35 | - You must triple-click an entry in the playlist view to play it, or delay the second click when doing a double click with accurate timing
36 | - The current API being used for YouTube MP3 playback sometimes returns the
37 | HTML page for conversion rather than the MP3 file itself if they don't have the
38 | MP3 in their database
39 | - Sometimes when adding tracks, the GUI will not update until the window is moved or
40 | maximized/restored
41 | * Please report any and all bugs found to me
42 |
43 | --- CHANGELOG ---
44 | Build 24 - JoshuaDoes - September 20th, 2017 - 11:33 AM ST / 11:33 EST
45 | + Added the ability to search for YouTube videos by pressing the button combination [CTRL + F]
46 | + Added the ability to import a YouTube playlist by holding [CTRL] while pressing the Import Playlist button or adding it via the Add URL button
47 | + Copied the logic for displaying available ID3 tags to network URLs and edited the BassTags functions to accomodate
48 | + Other things that I don't recall doing, as I have not kept up with the changelog
49 | - Sorry, been a couple months
50 | - I'm also working on (another) rewrite that's more stable, has more checks, and is overall nicer to use and faster c:
51 | - Betas for the rewrite will start soon
52 | - This preview channel is permanently on a feature freeze
53 | - This changelog is now irrelevant for any future releases (except in the case of bugfixes before the betas start)
54 |
55 | Build 23 - JoshuaDoes - July 24th, 2017 - 11:52 AM EST / 11:52 EST
56 | + Added the "Nolan" theme
57 | + Added functionality to dynamically scan themes directory for all new themes
58 | * All folders under the theme directory must contain a "themes.properties" file detailing
59 | information about the theme and the names of each icon
60 | + Modified the "Change Theme" button to switch to the new Theme Management interface,
61 | which shows the current list of themes and allows you to apply a theme to the interface
62 | + Added the "View" button to switch to the new View interface, which will show the album art
63 | of the current audio file (if any), or, once implemented, the currently playing video
64 | + Added the "Settings" button to switch to the new (currently empty) Settings interface, which
65 | will contain a list of settings that can be edited with ease after implementation
66 | + Added the "Notifications" button to switch to the new Notifications interface, which contains
67 | a list of all notifications (originally known as notices) for the current session
68 | + Changed functionality so that when a new notice is received, it is instead shown in the
69 | viewable custom titlebar rather than under the current child interface
70 | + Re-organized some of the interface
71 | + Improved performance on notifications and overall startup speed
72 | + Fixed an issue where adding a new entry to the playlist while Playlist Management was not
73 | open would result in the current child interface refreshing
74 | + Fixed an issue where the volume counter would not update in real time while changing the
75 | volume
76 | + Fixed a major issue spanning many builds where resizing the window and then changing to
77 | a different child interface would result in an invalidly sized and invalidly docked control
78 | * The mitigation for this issue was only successful if the window was maximized and its
79 | original state had an untouched size, but now with the issue being fixed this mitigation
80 | has been (proudly) removed
81 | + Fixed a flaw in logic where removing the first entry from the playlist while other entries are
82 | still present would result in the current track variable equalling negative one, which is out
83 | of bounds of what the rest of zPlayer expects and immediately results in a crash when a
84 | function utilizing the playlist is executed
85 | + Changed logic in selecting a playlist entry from sorting through the actual playlist array for
86 | the playlist entry's visual ID to directly reading the position of the playlist array from the
87 | playlist entry itself, improving the amount of time it takes to play a song from the playlist
88 | view in a large playlist
89 | + Added the saving (on exit) and loading of settings from the registry at the address
90 | "HKEY_CURRENT_USER\Software\JoshuaDoes\zPlayer"
91 | + Added YouTube video thumbnail loading logic for the View interface, which will load the
92 | highest quality thumbnail possible
93 | + Changed functionality so that the zPlayer window defaults to the center of the screen rather
94 | than an X and Y position of 20
95 | - Removed automatic playback if loading a hibernation playlist
96 | + Added a check to escape the add URL function if no URL was entered rather than allow the
97 | internal add URL function to fail adding a blank URL
98 | + Fixed an issue where ID3 tags containing a pipe character would result in failed attempts to
99 | display playlist entries in the playlist view
100 | * For a more technical explanation, AutoIt by default separates data for list views with the
101 | pipe character; the simple mitigation for this was to instead use a character that normally
102 | should not appear in an ID3 tag, in this case ASCII char 01 ("SOH")
103 | + Added SoundCloud support
104 | * You must provide your own client ID at this time
105 | + Added logic to clean up the ID3 tags displayed above the audio position slider when the current
106 | entry in the playlist is being played
107 | + Fixed a major issue in debugging where undefined notifications were displayed as nothing rather than
108 | the UID used in attempt to translate to the description of the notification
109 | * This occurs due to a logical mistype in which I converted the original variables to new names and
110 | accidentally declared $sNotification (which should contain the description of the notification,
111 | in this case it's intended to be an invalid UID message) instead of $sNotificationUID (the unique
112 | identifier that is translated to a more detailed message) in the Else case
113 | + Changed the undefined notification UID text to reflect on extra data parameters passed to the UID, if
114 | any, to help with debugging purposes.
115 |
116 | Build 22 - JoshuaDoes - June 12th, 2017 - 10:32 AM EST / 10:32 EST
117 | + Changing the "Changing position..." text to "Seeking..." in the bottom right when
118 | seeking through the current track
119 | + Fixed an issue where seeking while the track was paused or stopped would result in
120 | the track playing after seeking to the desired position
121 | + Fixed an issue where stopping the track would prevent the ability to seek to the desired
122 | position
123 | + Fixed an issue where the audio position slider could be dragged away from the 0 position
124 | before any tracks were ever added to the playlist
125 | + Added preparations for custom theme support
126 | + Fixed a startup speed impactor by removing a theme re-apply during startup
127 | + Re-added the light theme
128 | + Fixed an issue where the GUI would slowly repaint every individual control in front of the
129 | user instead of repainting everything silently and then instantly switching to the finished
130 | product (to look sleek and fast of course, because realism doesn't appeal to people)
131 |
132 | Build 21 - JoshuaDoes - June 10th, 2017 - 09:21 PM EST / 21:21 PM
133 | + Fixed an issue where adding new tracks to the playlist while the playlist view was
134 | active and the window was maxmized would result in zPlayer restoring and then
135 | maximizing again
136 | + Fixed an issue where deleting entries from the playlist would not be reflected in
137 | the playlist view
138 | + Changed frequency from 44100 Hz to 48000 Hz for better audio quality
139 | + Fixed an issue where adding one or more entries to the playlist and then deleting
140 | them all, then attempting to delete or play a non-existant entry, would result in an
141 | array out-of-bounds error caused by invalid handling of playlist entry deletion
142 | + Added multiple out-of-bounds checks to ensure functions requiring entries in the
143 | playlist would not be ran without there first being an entry in the playlist
144 | + Replaced "Unknown" with "?" in all audio tag reads as the default if none exist
145 | + Added checks to ensure the GUI wasn't being redrawn when it didn't need to be,
146 | preventing most unusual flickering on slower systems
147 | + Fixed an issue where displaying the proper audio position was being handled
148 | incorrectly
149 |
150 | Build 20 - JoshuaDoes - June 9th, 2017 - 11:17 PM EST / 23:17 EST
151 | *** I've officially forgotten all about this changelog so I'm just going to
152 | cross-reference with the previous build for these changes, please
153 | correct me on any mistakes with a pull request to the GitHub at
154 | (JoshuaDoes/zPlayer)
155 | + Added "random" track selection, disabled by default
156 | * Currently this is only incorporated to the "next" function, which is used after the
157 | current track ends and also when pressing the "Next" button
158 | + Added playlist repeating to go back to the beginning of the playlist and continue
159 | playing from there, enabled by default
160 | + Added a proper playlist view, with a strange bug requiring triple-clicking to play
161 | the selection rather than double-clicking
162 | - Removed a few file types from file selection until proper libraries are implemented
163 | to handle them (such as FLAC)
164 | + Added "fake black" (0x1C1C1C) and "fake white" (0xFAFAFA) as replacements for
165 | the original black (0x000000) and white (0xFFFFFF) colors in use for the interface
166 | + Fixed an issue where some notices were undefined
167 | + Added proper CD drive listing, currently with no purpose
168 | + Changed functionality to properly handle HTTP, HTTPS, FTP, and YouTube URLs when
169 | parsing any URL added to the "Add URL" dialog box
170 | + Prepare for file injection into a currently running zPlayer instance, not yet implemented
171 | * If you have two separate zPlayer files (renamed or separate folders), they will be
172 | able to run alongside each other; opening a file using zPlayer will only apply to
173 | whichever instance's file location matches that of the registry
174 | + Fixed an issue where changing the track position would fail
175 | * It failed very miserably, so I'm actually quite happy that I fixed it
176 | - Removed the "About" window due to the clunky way it was displayed
177 | + Added the ability to silently toggle developer mode
178 | * To toggle, hold SHIFT and then press G, O, and D at the same time
179 | + Added a save button, which, when playing a network track, will silently download
180 | the track to the chosen location without checking progress
181 | * In the next update, plans are to have a download progress bar (or buffer bar)
182 | and also add more things to do with the download either during or after
183 | + Added self-extraction of required files so that an entire release can be packed into a
184 | single executable
185 |
186 | Build 19 - JoshuaDoes - April 6th, 2017 - 11:18 PM EST / 23:18 EST
187 | *** Changed name to zPlayer Preview
188 | * This was done to match the "perpetual beta" technique I've been using for
189 | releasing zPlayer builds
190 | - Removed everything to do with modules
191 | * Modules will be implemented (properly) at a later date, but I need to get
192 | other things out and working first since this will take up a lot of my time
193 | + Fixed an issue where fullscreening the zPlayer window would sometimes have a
194 | white border of varying widths all the way around
195 | * In order for this to be fixed, the drop shadow was sacrificed
196 | + Added log file functionality
197 | * Debug messages will save to and append [.\zPlayer-MON-DAY-YEAR.log]
198 | + Changed functionality so that removing the current track would hold the position
199 | of where you are in the playlist rather than reset back to the beginning of the
200 | playlist
201 | + Fixed functionality so that changing the channel volume when no tracks exist would
202 | not result in an array out-of-bounds error
203 | + Added hotkeys for specific media tasks
204 | + Added functionality to allow the user to go to the end of the playlist if they use
205 | the Previous button while on the first track of the playlist
206 | + Added importing/exporting of playlists and the Import Playlist and Export Playlist
207 | buttons
208 | * Currently only importing of M3U, M3U8, and XSPF playlists are supported
209 | * Currently only exporting of M3U and M3U8 playlists are supported
210 | + Extended the minimum width of the main GUI to accomodate for new buttons
211 | + Added the ability to launch zPlayer with files, network URLs, and playlists as
212 | multiple command-line arguments
213 | * This can allow you to choose to open an audio track via zPlayer, opening up the
214 | availability of using zPlayer as a daily music player
215 | * The zPlayer window will not appear until a playlist, file, or network stream is
216 | completely loaded
217 | + Changed the logo displayed from the JPG to the ICO, deleting the JPG as ICO has
218 | transparency
219 | * This makes me happy because better quality
220 | + Added an "About" window that appears when you click on the zPlayer logo
221 | * Currently this launches zPlayer in an external process with no goal other than
222 | to display the About window and then exit
223 | * A better method will be implemented once child GUIs are a thing again
224 | + Fixed an issue where pressing Next while the last track in the playlist was playing
225 | would not play the track at the beginning of the playlist
226 | + Switched from using ugly and full-color JPGs to transparent ICOs
227 | * Not only is it also native to AutoIt, but this brings back the quality icons
228 | used for making zPlayer look amazing
229 | + Added a Maxmize/Restore button
230 | * When you click it to maximize the window, the icon changes to the restore icon
231 | and vice versa
232 | * Using Aero-snap to maximize or restore the window will also change the icon,
233 | however due to AutoIt's limitations the icon won't redraw until you release the
234 | window
235 | + Finally removed the network cache check timer from ages ago
236 | * Why did I never catch this?
237 | + Added logic to use the user's clipboard contents as the default text entry for the
238 | Add URL input box if it contains "http://", "https://", or "ftp://"
239 | * The text is selected by default, so if you need to manually type something or
240 | if you paste in what's in your clipboard then regardless both sides of the party
241 | will get the job done
242 | + Added logic for hiberation, thus enabling the Hibernate button once again
243 | + Added logic to delete the file [hiberfil.m3u] if zPlayer has startup parameters to
244 | load certain files and/or playlists
245 | + Added logic to automatically play the current song if loading from hibernation mode
246 | or command-line parameters were entered
247 | + Moved the Add CD and Playlist Management buttons down one row and aligned them to
248 | the left
249 | + Moved the Import Playlist and Export Playlist buttons to the original locations of
250 | the Add CD and Playlist Management buttons respectively
251 | + Removed the BassCD library until CD playback is progressed on
252 |
253 | Build 18 - JoshuaDoes - March 4th, 2017 - 02:28 AM EST / 02:28 EST
254 | + Added resizing of the main interface
255 | + Switched from using transparent PNGs to full-color JPGs
256 | * Sadly JPGs don't have the best quality in the world due to the lack of an
257 | alpha channel, so the new icons are going to look a little sharper than
258 | the old ones
259 | * The logo is going to be replaced soon anyways so sorry that it looks terribad
260 | + Added logic to display the "File" icon in the service area if a local file is
261 | either queued or playing
262 | + Fixed many issues regarding interface usage
263 | + Added logic to prevent adding network URLs to the playlist if no internet connection
264 | is detected
265 | + Added a new status for tracks, "Changing position...", for when the user is sliding
266 | the audio position slider and a track is loaded
267 | + Fixed an issue (that was highly annoying to fix, mind you) where the audio position
268 | slider would not update while the track was playing unless the user clicked on a
269 | different control in the interface
270 | + Fixed an issue where the displayed data would either update more than necessary or
271 | when it's not supposed to
272 | + Proudly removed the PNG Buttons library
273 | + Fixed an issue in the changelog in regards to how the build date and time was
274 | separated in the changelog for Build 17
275 |
276 | Build 17 - JoshuaDoes - March 2nd, 2017 - 03:33 AM EST / 03:33 EST
277 | + Added the ability to click on the service icon to open the current track's
278 | remote location
279 | + Fixed an issue where clicking on the delete button while the current track is
280 | playing would result in the track being removed from the playlist yet continue
281 | to play and be unable to be stopped
282 | + Fixed an issue where pressing the Previous or Next buttons while there was no
283 | track in the playlist would result in a crash due to an out-of-bounds error
284 | + Added a status system for the state of the current track, also allowing for
285 | slightly more detail to notices
286 | + Fixed an issue where the service icon of the current network track would not
287 | always update properly
288 | + Added a very early work-in-progress module system
289 | * This will load anything in the "modules" folder and kill it at shutdown
290 | at this point in time, but the plan is to have "system modules" that are
291 | absolutely necessary for zPlayer to have its official functions which can
292 | be swapped out by users for alternatives and also have "custom modules"
293 | which can guide zPlayer to do whatever the module wishies
294 | * Later on a permissions system will be implemented to govern over all modules
295 | + Added a very early work-in-progress playlist import and export system
296 | * This is not yet available for the user to use at all and is not ready, however
297 | it will be used for the hibernation playlist and also some playlists from other
298 | media players
299 | + Added preparations for a YouTube-DL module via the new status flag for the state of
300 | the current track, the flag being the number 3 meaning "Not ready"
301 | + Fixed an issue where the file version number of the compiled version of zPlayer was
302 | "1.0.0.0" rather than "16.0.0.0", however this number has incremented to "17.0.0.0"
303 | in this build and will not be made apparent in zPlayer Build 16 by anything except
304 | the title
305 |
306 | Build 16 - JoshuaDoes - February 24th, 2017 - 01:53 AM EST / 01:53 EST
307 | -+* Began rewriting from scratch
308 | *** Changed name to zPlayer Rewrite
309 | + Added as much functionality as possible from Build 15
310 | * Known features not included
311 | - CD Management
312 | - Playlist Management (except for the delete button for the current track)
313 | - Hibernation
314 | + Many, many, many performance enhancements
315 | + Much cleaner code and overall much easier to manage
316 |
317 | Build 15 - JoshuaDoes - February 23rd, 2017 - 02:16 PM EST / 14:16 EST
318 | + Fixed the changelog to show the compile date of Build 14
319 | + Fixed an issue where adding multiple network tracks to the playlist and then
320 | hibernating would result in an array out-of-bounds error with the network
321 | cache at the next startup and also only the very first network track appearing
322 | in the playlist after rebooting zPlayer
323 | + Added the current millisecond to debug logs
324 | + Added a shortcut to view the current logs by pressing [CTRL + L] while the
325 | main zPlayer window is in focus
326 | * If you have previously clicked on a button or the playlist view in the
327 | main window, please click on one of the empty black areas in order for
328 | the shortcut to register
329 | + Fixed an issue where adding to or removing from the playlist would not
330 | update the playlist, and the user was required to click on the Add CD button
331 | to trigger an update
332 | + Fixed an issue where some usage scenarios would result in the audio position
333 | slider's control becoming fully white
334 | + Fixed an issue where some debug logs were logging as the incorrect function
335 | - Removed old debug logging that was used in test case scenarios
336 | + Fixed an issue where adding new local files to the playlist would result in
337 | the track position area showing " KB/s" instead of "Ready"
338 | + Fixed an issue where displaying or refreshing child GUIs would seem rather
339 | laggy on most systems
340 | + Added some more verbosity to debug logs and notices
341 | + Fixed an issue where moving the audio position slider longer than one second
342 | would result in the audio position slider being reset back to the position
343 | of the current audio track position, fixing many issues involving the audio
344 | position slider
345 | + Fixed an issue where the current track position, the current audio position,
346 | and the current audio length would flash either rapidly or once every second
347 |
348 | Build 14 - JoshuaDoes - February 20th, 2017 - 03:57 PM EST / 15:57 EST
349 | + Fixed an issue where MP4 files were listed in the file selection dialog
350 | * This was a test for BASS functionality and it was forgotten about
351 | soon after testing
352 | + Fixed an issue where playlist management had the track's title under "Track"
353 | instead of "Title"
354 | + Fixed an issue where changing the position of the audio track manually and
355 | then playing a new track would lock the state of the audio position slider
356 | + Fixed an issue where clicking on either the Add CD or the Playlist Management
357 | buttons if their child GUI was currently in view would unload it and then
358 | load it again, resulting in delays in other ongoing tasks
359 | + Added a basic implementation of CD drive listing
360 | * If no CD-ROM drives exist, an error will be displayed as a notice and
361 | the Playlist Management interface will be returned to view
362 | + Added a download speed calculator in kilobytes that is always calculated
363 | internally but is only shown if the currently selected track is being
364 | cached from the network
365 | * Later on, custom choices on what to display this in may be available
366 | + Fixed an issue where pressing the Previous or Next button while audio is not
367 | playing would result in the previous (if audio track position was 3 seconds
368 | or less), current (if audio track position was more than 3 seconds), or next
369 | track being played
370 |
371 | Build 13 - JoshuaDoes - February 18th, 2017 - 07:56 AM EST / 07:56 EST
372 | + Added logic for child GUIs
373 | + Added a child GUI for playlist management, activated by clicking the
374 | Playlist Management button
375 | * This is very experimental and may prove to be ultimately buggy
376 | + Added better handling of ID3 tags
377 | + Added a Delete Selected Playlist Entry button, which will delete either the
378 | current track number from the playlist or, if one is selected, the currently
379 | selected track from the playlist
380 | * This is not properly implemented and may prove to be buggy
381 | + Fixed an issue where adding multiple files failed to succeed
382 |
383 | Build 12 - JoshuaDoes - February 18th, 2017 - 02:31 AM EST / 02:31 EST
384 | + Fixed an issue where the event for the previous function was set to the GUI
385 | containing the Previous icon rather than the Previous icon itself
386 | + Fixed an issue where the current track number would not be updated if there
387 | was an issue with trying to play the currently selected track
388 | + Fixed an issue where the currently displayed data would not be removed if
389 | the audio was stopped by a reason other than the Stop button
390 | + Fixed an issue where holding the hardware keyboard Volume Down or Volume Up
391 | would only update the volume once every second when the displayed audio data
392 | was refreshed
393 | + Fixed an issue where adding a track while the displayed audio data is not
394 | being refreshed would not update the playlist track count
395 | + Fixed an issue where pressing the Next button when at the end of the playlist
396 | would not update the track position
397 | + Fixed a major logic bug where importing a playlist results in a failed import
398 | of simply the last audio track and also results in a failed attempt at caching
399 | the network audio track
400 | * Network caching of audio tracks after opening a playlist will begin
401 | immediately up on their addition to the playlist
402 | * This issue was currently only able to be produced by opening zPlayer from
403 | a hibernation state, as multiple custom playlists can not yet be managed
404 |
405 | Build 11 - JoshuaDoes - February 18th, 2017 - 12:13 AM EST / 00:13 EST
406 | + Fixed an issue where the audio track position and the volume could not be
407 | changed while the audio track is paused
408 | + Changed where certain interface elements are located
409 | + Changed logic so that all GUI events are handled on a per-event basis
410 | rather than running a check every millisecond
411 | + Changed logic so that the audio track position and the volume is checked
412 | via a timer rather than every millisecond
413 | + Fixed an annoying issue where one of the two sliders would be selected
414 | when zPlayer opens and stay selected after using it
415 | + Added support for streaming YouTube videos in an MP3 audio format by
416 | utilizing the "YouTubeInMP3" API located at
417 | [https://www.youtubeinmp3.com/api/]
418 | + Added logic so that any new additions to services (including the new
419 | YouTube streaming support) will display their icons under the titlebar
420 | when an audio stream is played from their site
421 | + Fixed a logic bug where the volume change was being used to detect
422 | errors in the creation of an audio stream rather than using the audio
423 | stream creation itself
424 | + Fixed logic to specifically require "http://", "https://", or "ftp://"
425 | + Added the current date and time to debug logs (only available by
426 | running the program from source)
427 | + Added a proper implementation of network caching for network audio
428 | tracks
429 | * Pressing the Play button while on a track number that is not yet
430 | finished being cached will not play the track and will display
431 | the current percentage as a notice
432 | * Once a network track is fully cached, the user will be notified
433 | in a notice
434 | * This quite literally took hours to do properly and bug-free, and
435 | I just figured I should point out that I am very proud of myself
436 | for this
437 | + Added re-caching of network audio tracks for when a playlist is
438 | imported, especially after opening zPlayer from hibernation
439 | + Added the current track number out of how many tracks are available
440 | in the current playlist with the total percentage of how available
441 | the current track is
442 | * The total percentage is updated live if the currently selected
443 | track is being cached in the background
444 |
445 | Build 10 - JoshuaDoes - February 16th, 2017 - 12:06 AM EST / 00:06 EST
446 | + Added new icons to replace some of the old ones, giving more space to click
447 | on the icons
448 | * All icons were replaced with full-white icons as to be custom-colored
449 | programatically
450 | + Added method to resize the displayed icons programatically from 64x64 to
451 | 32x32 to reduce window click-and-drag lag and provide space for more content
452 | * Any size may be specified in the source code, this being for a planned
453 | feature involving icon scaling
454 | + Added a volume slider to control the volume of the track
455 | * The volume is updated live as the slider moves
456 | + Added a position slider to control the audio position of the track
457 | * The audio position of the track is updated live as the sldier moves
458 | + Added the new "Z" logo
459 | * Credits to Ryan Rock for the design
460 |
461 | Build 9 - JoshuaDoes - February 13th, 2017 - 07:28 PM EST / 19:28 EST
462 | + Fixed file description to be "zPlayer" and moved current file description
463 | to file comment, thus resulting in the window in the task bar and the
464 | process in task manager no longer being the long description of the
465 | program
466 | + Fixed an issue where changing from light mode to dark mode would not set
467 | the Waxing Crescent icon of the Color Mode button to be the Waxing
468 | Gibbous and vice versa
469 | + Fixed an issue where pressing the stop button on the native keyboard would
470 | result in zPlayer crashing
471 | + Fixed an issue where an audio track ending while zPlayer is not in focus
472 | would result in random modifier keys being virtually stuck and the next
473 | audio track would not play unless zPlayer was focused again
474 | + Fixed an issue where changing the audio track would result in the volume
475 | resetting to 100
476 | + Added precaching for network audio tracks (refer to known bug about issue
477 | with playing network audio tracks that are still being precached)
478 | + Changed functionality so that the Playlist Management button will
479 | temporarily display an AutoIt-based listing of the current playlist even
480 | if the internal DevMode flag is disabled
481 |
482 | Build 8 - JoshuaDoes - February 12th, 2017 - 02:10 PM EST / 14:10 EST
483 | + Updated logic to support multiple file selections in one go
484 |
485 | Build 7 - JoshuaDoes - February 12th, 2017 - 01:17 PM EST / 13:17 EST
486 | + Added a dark theme along with a theme changer
487 | + Added internal playlist importing and exporting
488 | + Changed functionality so that the hibernate button will export the current
489 | playlist to ``hiberfil.zplay`` and the current track number to
490 | ``hiberfil.dat`` and close zPlayer, then load the playlist and track
491 | number upon next launch of zPlayer
492 | + Fixed an issue where media controls via native keyboard buttons would
493 | control zPlayer only, even if the user had another app in focus or wanted
494 | to change their system volume
495 | + Changed functionality so that the current theme mode is always saved to
496 | ``options.dat`` upon start and exit, and is loaded upon start if it exists
497 | + Fixed an issue where some notices were not defined
498 | + Changed functionality so that DevMode is dynamically enabled or disabled
499 | depending on whether or not zPlayer is ran from source or binary, as to
500 | help with performance for users who will not need to see the console logs
501 | + Added support for MP1, MP2, WAV, and AIFF audio codecs
502 | + Changed functionality so that the array for the playlist will only be
503 | shown if the DevMode flag is enabled
504 |
505 | Build 6 - JoshuaDoes - February 12th, 2017 - 05:35 AM EST / 05:35 EST
506 | + Added the displaying of the volume of the current track on the same line as
507 | the audio position
508 | + Added media and volume controls via native keyboard buttons
509 | + Added a work-in-progress playlist system
510 | + Changed functionality so that the next button will go to the next song in
511 | the playlist
512 | + Changed functionality so that the previous button will return to the
513 | beginning of the song if the position is 3 seconds or more, else go to the
514 | previous song in the playlist
515 | + Changed functionality so that the next button will go to the next song in
516 | the playlist, and if there is no next song then return to the beginning of
517 | the playlist and halt playback
518 | + Added a shutdown button that shuts down zPlayer properly
519 | + Added a hibernate button that currently does nothing, but is planned to
520 | save the playlist to a file and exit and then resume the playlist upon
521 | next app launch
522 | + Added a minimize button that minimizes the window
523 | + Added a color mode button to toggle a light theme and a dark theme
524 |
525 | Build 5 - JoshuaDoes - February 12th, 2017 - 12:36 AM EST / 00:36 EST
526 | + Fixed an issue where some notices were incorrectly defined
527 | + Added the displaying of ID3 tags on the main GUI
528 | + Fixed an issue where stopping an audio track would result in the audio location
529 | being blank preventing users from playing the track from the beginning
530 | + Fixed positioning of ID3 tags, audio position, and notices to look nicer
531 | + Fixed an issue where the audio position thread's timer would stop updating the
532 | displayed audio position after the notice thread's timer unregistered itself
533 |
534 | Build 4 - JoshuaDoes - February 11th, 2017 - 11:38 PM EST / 23:38 EST
535 | + Fixed the network URL input box to also display "https://"
536 | + Fixed the network URL input box to divide URIs by "|" instead of ","
537 | + Fixed an issue where some notices were undefined
538 | + Fixed an issue where attempting to add a new track while one is currently
539 | playing and then cancelling the track addition will result in the audio
540 | location becoming blank and the current audio stream pausing
541 | + Fixed an issue where attempting to add the current track will simply
542 | pause/resume it; now, it unloads the current track and loads the new one
543 | even if it is the same track
544 |
545 | Build 3 - JoshuaDoes - Saturday, February 11th, 2017 - 10:57 PM EST / 22:57 EST
546 | + Added network URL playback
547 | + Fixed an issue where some notices were undefined
548 |
549 | Build 2 - JoshuaDoes - Saturday, February 11th, 2017 - 09:55 PM EST / 21:55 EST
550 | + Fixed an issue where stopping the current audio stream and then opening a new
551 | track would trigger the position update thread but would not actually play the
552 | new audio stream
553 |
554 | Build 1 - JoshuaDoes - Saturday, February 11th, 2017 - 09:19 PM EST / 21:19 EST
555 | + Initial program
--------------------------------------------------------------------------------
/zPlayer Preview.au3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JoshuaDoes/zPlayer/13fb682341a249a5221ff21ce18d5a16ed3099fa/zPlayer Preview.au3
--------------------------------------------------------------------------------