├── 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 --------------------------------------------------------------------------------