From 70ccae1ba4721e8df121ac7da29d9f102c319de5 Mon Sep 17 00:00:00 2001 From: tropicananass Date: Fri, 22 Feb 2019 14:16:22 +0100 Subject: [PATCH] First working version : - pots - keyboard - octave selction --- .pioenvs/.sconsign.dblite | Bin 101198 -> 93492 bytes .pioenvs/do-not-modify-files-here.url | 3 - .pioenvs/micro/firmware.elf | Bin 28960 -> 27092 bytes .pioenvs/micro/firmware.hex | 1183 ++++++++--------- .pioenvs/structure.hash | 2 +- Arduino-MIDI.pdf => res/doc/Arduino-MIDI.pdf | Bin Midi.fzz => res/doc/Midi.fzz | Bin res/doc/buttonMatrixMap.ods | Bin 0 -> 12510 bytes .../doc/pro_micro_pinout.jpg | Bin res/tools/hairless-midiserial/.directory | 6 + res/tools/hairless-midiserial/README.txt | 74 ++ .../hairless-midiserial/ardumidi/LICENSE | 674 ++++++++++ .../hairless-midiserial/ardumidi/ardumidi.cpp | 122 ++ .../hairless-midiserial/ardumidi/ardumidi.h | 83 ++ .../examples/ardumidi_test/ardumidi_test.pde | 80 ++ .../ardumidi_test_all_instruments.pde | 86 ++ .../from_alsa_to_arduino.pde | 39 + .../hairless-midiserial/hairless-midiserial | Bin 0 -> 14309236 bytes src/main.cpp | 164 ++- 19 files changed, 1866 insertions(+), 650 deletions(-) delete mode 100644 .pioenvs/do-not-modify-files-here.url rename Arduino-MIDI.pdf => res/doc/Arduino-MIDI.pdf (100%) rename Midi.fzz => res/doc/Midi.fzz (100%) create mode 100644 res/doc/buttonMatrixMap.ods rename pro_micro_pinout.jpg => res/doc/pro_micro_pinout.jpg (100%) create mode 100644 res/tools/hairless-midiserial/.directory create mode 100644 res/tools/hairless-midiserial/README.txt create mode 100644 res/tools/hairless-midiserial/ardumidi/LICENSE create mode 100644 res/tools/hairless-midiserial/ardumidi/ardumidi.cpp create mode 100644 res/tools/hairless-midiserial/ardumidi/ardumidi.h create mode 100644 res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test/ardumidi_test.pde create mode 100644 res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test_all_instruments/ardumidi_test_all_instruments.pde create mode 100644 res/tools/hairless-midiserial/ardumidi/examples/from_alsa_to_arduino/from_alsa_to_arduino.pde create mode 100644 res/tools/hairless-midiserial/hairless-midiserial diff --git a/.pioenvs/.sconsign.dblite b/.pioenvs/.sconsign.dblite index 0762f5fc6271174d8ca457f8f448a9c0ecd944fe..18b001ecf72aef34d5e682d684a3e39ed5b0cee1 100644 GIT binary patch delta 20959 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 delta 24494 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 dTora#oZ8$fdZlVm(wL{v3AKoY=Y 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 zmFMceSerial Bridge and the +Ardumidi Arduino MIDI library (part of ttymidi.) + +"Hairless MIDI<->Serial Bridge" allows you to send MIDI messages +to/from a serial device (like an Arduino.) + +The project home page is http://projectgus.github.com/hairless-midiserial/ + +If you're a command line kind of person, I suggest checking out +ttymidi - http://www.varal.org/ttymidi/ - a different project that +creates a Serial/MIDI bridge on the command line. Hairless Bridge is +compatible with ttymidi. + + +RUNNING THE BRIDGE +================== + +Run "hairless-midiserial" in this directory. + +The executable is static linked, so you don't need to have installed Qt. + + +ARDUINO LIBRARIES +================= + +Hairless Bridge is compatible with at least two libraries for +sending/receiving MIDI data from Arduino: Ardumidi, which is included, +and "Arduino MIDI Library", which is available from +http://arduino.cc/playground/Main/MIDILibrary + +It's up to you which library to use. "Arduino MIDI Library" is nicer +in many ways, and seems to be the way of the future, but it doesn't +let you easily send debug messages to your computer along with the +MIDI messages. + + +USING ARDUINO MIDI LIBRARY +========================== + +If you use the Arduino MIDI Library, you can follow the instructions +on their page: http://arduino.cc/playground/Main/MIDILibrary + +The only difference is you need to initialise the serial port -after- +calling MIDI.begin(), like this: + +void setup() { + MIDI.begin(1); + Serial.begin(115200); +} + + +USING ARDUMIDI +============== + +Ardumidi is an Arduino MIDI library, part of the separate ttymidi +project (http://www.varal.org/ttymidi/). It can be used with Hairless +MIDI<->Serial Bridge. + +To install Ardumidi, place the "Ardumidi" directory inside a +"libraries" directory within your Arduino "sketchbook" directory. Then +restart the Arduino IDE. Example sketches can be found in the example/ folder. + + +LICENSE +======= + +The Hairless MIDI<->Serial Bridge is licensed under the GNU Lesser +General Public License 2.1, as described in the About box of the +application. + +The Ardumidi library is licensed under the GNU General Public License +3, as described in the file Ardumidi\LICENSE. + + diff --git a/res/tools/hairless-midiserial/ardumidi/LICENSE b/res/tools/hairless-midiserial/ardumidi/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/res/tools/hairless-midiserial/ardumidi/ardumidi.cpp b/res/tools/hairless-midiserial/ardumidi/ardumidi.cpp new file mode 100644 index 0000000..1dbc2ac --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/ardumidi.cpp @@ -0,0 +1,122 @@ +/* + This file is part of ttymidi. + + ttymidi is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ttymidi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ttymidi. If not, see . +*/ +// file version 0.60 + +#include "ardumidi.h" +#include "HardwareSerial.h" + +void midi_note_off(byte channel, byte key, byte velocity) +{ + midi_command(0x80, channel, key, velocity); +} + +void midi_note_on(byte channel, byte key, byte velocity) +{ + midi_command(0x90, channel, key, velocity); +} + +void midi_key_pressure(byte channel, byte key, byte value) +{ + midi_command(0xA0, channel, key, value); +} + +void midi_controller_change(byte channel, byte control, byte value) +{ + midi_command(0xB0, channel, control, value); +} + +void midi_program_change(byte channel, byte program) +{ + midi_command_short(0xC0, channel, program); +} + +void midi_channel_pressure(byte channel, byte value) +{ + midi_command_short(0xD0, channel, value); +} + +void midi_pitch_bend(byte channel, int value) +{ + midi_command(0xE0, channel, value & 0x7F, value >> 7); +} + +void midi_command(byte command, byte channel, byte param1, byte param2) +{ + Serial.print(command | (channel & 0x0F), BYTE); + Serial.print(param1 & 0x7F, BYTE); + Serial.print(param2 & 0x7F, BYTE); +} + +void midi_command_short(byte command, byte channel, byte param1) +{ + Serial.print(command | (channel & 0x0F), BYTE); + Serial.print(param1 & 0x7F, BYTE); +} + +void midi_print(char* msg, int len) +{ + Serial.print(0xFF, BYTE); + Serial.print(0x00, BYTE); + Serial.print(0x00, BYTE); + Serial.print(len , BYTE); + Serial.print(msg); +} + +void midi_comment(char* msg) +{ + int len = 0; + char* ptr = msg; + while (*ptr++) len++; + midi_print(msg, len); +} + +int midi_message_available() { + /* + This bit will check that next bytes to be read would actually + have the midi status bit. If not it will remove uncorrect bytes + from internal buffer + */ + while ((Serial.available() > 0) && ((Serial.peek() & B10000000) != 0x80)) { + Serial.read(); + } + + /* Well we don't exactly know how many commands there might be in the Serial buffer + so we'll just guess it according the type of message that happens to be waiting + in the buffer. At least we get first one right! */ + byte command = Serial.peek() & 11110000; + if (command != MIDI_PROGRAM_CHANGE && command != MIDI_CHANNEL_PRESSURE) { + return (Serial.available()/2); + } + return (Serial.available()/3); +} + +MidiMessage read_midi_message() { + MidiMessage message; + byte midi_status = Serial.read(); + message.command = (midi_status & B11110000); + message.channel = (midi_status & B00001111); + message.param1 = Serial.read(); + if (message.command != MIDI_PROGRAM_CHANGE && message.command != MIDI_CHANNEL_PRESSURE) { + message.param2 = Serial.read(); + } + return message; +} + +int get_pitch_bend(MidiMessage m) { + return (m.param1 & 0x7F) + ((m.param2 & 0x7F) << 7); +} + diff --git a/res/tools/hairless-midiserial/ardumidi/ardumidi.h b/res/tools/hairless-midiserial/ardumidi/ardumidi.h new file mode 100644 index 0000000..bd708c8 --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/ardumidi.h @@ -0,0 +1,83 @@ +/* + This file is part of ttymidi. + + ttymidi is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + ttymidi is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ttymidi. If not, see . +*/ +// file version 0.60 + +#ifndef ardumidi_h +#define ardumidi_h + +#if (ARDUINO >= 100) + #include +#else +#include "WProgram.h" +#endif + +// MIDI notes +#define MIDI_C0 0 +#define MIDI_D0 2 +#define MIDI_E0 4 +#define MIDI_F0 5 +#define MIDI_G0 7 +#define MIDI_A0 9 +#define MIDI_B0 11 +#define MIDI_C 60 +#define MIDI_D 62 +#define MIDI_E 64 +#define MIDI_F 65 +#define MIDI_G 67 +#define MIDI_A 69 +#define MIDI_B 71 +#define MIDI_SHARP 1 +#define MIDI_FLAT -1 +#define MIDI_OCTAVE 12 + +// MIDI out +#define MIDI_NOTE_OFF 0x80 +#define MIDI_NOTE_ON 0x90 +#define MIDI_PRESSURE 0xA0 +#define MIDI_CONTROLLER_CHANGE 0xB0 +#define MIDI_PROGRAM_CHANGE 0xC0 +#define MIDI_CHANNEL_PRESSURE 0xD0 +#define MIDI_PITCH_BEND 0xE0 + +struct MidiMessage { + byte command; + byte channel; + byte param1; + byte param2; +}; + +// MIDI in +void midi_note_off(byte channel, byte key, byte velocity); +void midi_note_on(byte channel, byte key, byte velocity); +void midi_key_pressure(byte channel, byte key, byte value); +void midi_controller_change(byte channel, byte control, byte value); +void midi_program_change(byte channel, byte program); +void midi_channel_pressure(byte channel, byte value); +void midi_pitch_bend(byte channel, int value); +void midi_command(byte command, byte channel, byte param1, byte param2); +void midi_command_short(byte command, byte channel, byte param1); + +// MIDI out +int midi_message_available(); +MidiMessage read_midi_message(); +int get_pitch_bend(MidiMessage msg); + +// Other +void midi_print(char* msg, int len); +void midi_comment(char* msg); + +#endif diff --git a/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test/ardumidi_test.pde b/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test/ardumidi_test.pde new file mode 100644 index 0000000..58f1ba7 --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test/ardumidi_test.pde @@ -0,0 +1,80 @@ +/* + This file is public domain. Use it as you like. +*/ + +#include + +int ledPin = 13; +int note_on = 0; + +void setup() +{ + Serial.begin(115200); + pinMode(ledPin, OUTPUT); +} + +void loop() +{ + + if (!note_on) + { + // play a Cminor chord on channel 0, at maximum volume (127) + midi_note_on(0, MIDI_C, 127); + midi_note_on(0, MIDI_E + MIDI_FLAT + MIDI_OCTAVE, 127); + midi_note_on(0, MIDI_G + MIDI_OCTAVE, 127); + + // The MIDI_* macros were created to make your life easier, but you + // don't have to use them. You may enter numbers instead if you know + // what you're doing. + + note_on = 1; + digitalWrite(ledPin, HIGH); + } + + else + { + // stop the Cminor chord + midi_note_off(0, MIDI_C, 127); + midi_note_off(0, MIDI_E + MIDI_FLAT + MIDI_OCTAVE, 127); + midi_note_off(0, MIDI_G + MIDI_OCTAVE, 127); + + note_on = 0; + digitalWrite(ledPin, LOW); + } + + delay(500); +} + +// Available commands: +// +// Start/stop playing a certain note: +// midi_note_on(byte channel, byte key, byte velocity); +// midi_note_off(byte channel, byte key, byte velocity); +// +// Change pressure of specific keys: +// midi_key_pressure(byte channel, byte key, byte value); +// +// Change controller value (used for knobs, etc): +// midi_controller_change(byte channel, byte controller, byte value); +// +// Change "program" (change the instrument): +// midi_program_change(byte channel, byte program); +// +// Change key pressure of entire channels: +// midi_channel_pressure(byte channel, byte value); +// +// Change pitch-bend wheel: +// midi_pitch_bend(byte channel, int value); +// +// Send a comment: +// midi_comment(char* str); +// +// Send a series of bytes (to be interpreted by another program): +// midi_printbytes(char* bytes, int len); +// +// Parameters: +// channel an integer from 0 to 15 +// pitch-bend value an integer from 0 to 16383 +// all other values an integer from 0 to 127 +// + diff --git a/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test_all_instruments/ardumidi_test_all_instruments.pde b/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test_all_instruments/ardumidi_test_all_instruments.pde new file mode 100644 index 0000000..a6b96db --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/examples/ardumidi_test_all_instruments/ardumidi_test_all_instruments.pde @@ -0,0 +1,86 @@ +/* + This file is public domain. Use it as you like. +*/ + +#include + +int ledPin = 13; +int note_on = 0; +int voice = 0; + +void setup() +{ + Serial.begin(115200); + pinMode(ledPin, OUTPUT); +} + +void loop() +{ + + if (!note_on) + { + // play a Cminor chord on channel 0, at maximum volume (127) + midi_note_on(0, MIDI_C, 127); + midi_note_on(0, MIDI_E + MIDI_FLAT + MIDI_OCTAVE, 127); + midi_note_on(0, MIDI_G + MIDI_OCTAVE, 127); + + // The MIDI_* macros were created to make your life easier, but you + // don't have to use them. You may enter numbers instead if you know + // what you're doing. + + note_on = 1; + digitalWrite(ledPin, HIGH); + } + + else + { + // stop the Cminor chord + midi_note_off(0, MIDI_C, 127); + midi_note_off(0, MIDI_E + MIDI_FLAT + MIDI_OCTAVE, 127); + midi_note_off(0, MIDI_G + MIDI_OCTAVE, 127); + + // go to next instrument + voice++; + if (voice > 255) voice = 0; + midi_program_change(0, voice); + + note_on = 0; + digitalWrite(ledPin, LOW); + } + + delay(500); +} + +// Available commands: +// +// Start/stop playing a certain note: +// midi_note_on(byte channel, byte key, byte velocity); +// midi_note_off(byte channel, byte key, byte velocity); +// +// Change pressure of specific keys: +// midi_key_pressure(byte channel, byte key, byte value); +// +// Change controller value (used for knobs, etc): +// midi_controller_change(byte channel, byte controller, byte value); +// +// Change "program" (change the instrument): +// midi_program_change(byte channel, byte program); +// +// Change key pressure of entire channels: +// midi_channel_pressure(byte channel, byte value); +// +// Change pitch-bend wheel: +// midi_pitch_bend(byte channel, int value); +// +// Send a comment: +// midi_comment(char* str); +// +// Send a series of bytes (to be interpreted by another program): +// midi_printbytes(char* bytes, int len); +// +// Parameters: +// channel an integer from 0 to 15 +// pitch-bend value an integer from 0 to 16383 +// all other values an integer from 0 to 127 +// + diff --git a/res/tools/hairless-midiserial/ardumidi/examples/from_alsa_to_arduino/from_alsa_to_arduino.pde b/res/tools/hairless-midiserial/ardumidi/examples/from_alsa_to_arduino/from_alsa_to_arduino.pde new file mode 100644 index 0000000..7bdacda --- /dev/null +++ b/res/tools/hairless-midiserial/ardumidi/examples/from_alsa_to_arduino/from_alsa_to_arduino.pde @@ -0,0 +1,39 @@ +/* + This file is public domain. Use it as you like. + + This is an example program to showcase reading with + Arduino the MIDI output from an ALSA sequencer. This simply + toggles the Arduino LED whenever a MIDI "note on" or "note off" + event takes place. +*/ + +#include + +void setup() +{ + Serial.begin(115200); + pinMode(ledPin, OUTPUT); +} + +int counter = 0; + +void loop() +{ + while (midi_message_available() > 0) { + + MidiMessage m = read_midi_message(); + + if (m.command == MIDI_NOTE_ON) { + /* + If you want to find out which key was pressed, check + the value of m.param1 + */ + digitalWrite(ledPin, HIGH); + } + + else if (m.command == MIDI_NOTE_OFF) { + digitalWrite(ledPin, LOW); + } + + } +} diff --git a/res/tools/hairless-midiserial/hairless-midiserial b/res/tools/hairless-midiserial/hairless-midiserial new file mode 100644 index 0000000000000000000000000000000000000000..817072448f6c804f90d5181ae47333f900442c7b GIT binary patch literal 14309236 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