Revision 6:574625715c4d
| .hgsub | ||
|---|---|---|
| 1 |
onsetsds = [git]https://github.com/danstowell/onsetsds |
|
| 2 |
|
|
| 1 |
onsetsds = [svn]svn://svn.code.sf.net/p/onsetsds/code/ |
|
| .hgsubstate | ||
|---|---|---|
| 1 |
3b5daceeb8f419e95c72ed767765714177ff275f onsetsds |
|
| 1 |
9 onsetsds |
|
| AUTHORS | ||
|---|---|---|
| 1 |
|
|
| 2 |
Dan Stowell, dan.stowell@elec.qmul.ac.uk |
|
| 3 |
|
|
| 4 |
Vamp-plugin-ified by Chris Cannam, cannam@all-day-breakfast.com |
|
| 5 |
|
|
| COPYING | ||
|---|---|---|
| 1 |
GNU GENERAL PUBLIC LICENSE |
|
| 2 |
Version 2, June 1991 |
|
| 3 |
|
|
| 4 |
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
|
| 5 |
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
| 6 |
Everyone is permitted to copy and distribute verbatim copies |
|
| 7 |
of this license document, but changing it is not allowed. |
|
| 8 |
|
|
| 9 |
Preamble |
|
| 10 |
|
|
| 11 |
The licenses for most software are designed to take away your |
|
| 12 |
freedom to share and change it. By contrast, the GNU General Public |
|
| 13 |
License is intended to guarantee your freedom to share and change free |
|
| 14 |
software--to make sure the software is free for all its users. This |
|
| 15 |
General Public License applies to most of the Free Software |
|
| 16 |
Foundation's software and to any other program whose authors commit to |
|
| 17 |
using it. (Some other Free Software Foundation software is covered by |
|
| 18 |
the GNU Library General Public License instead.) You can apply it to |
|
| 19 |
your programs, too. |
|
| 20 |
|
|
| 21 |
When we speak of free software, we are referring to freedom, not |
|
| 22 |
price. Our General Public Licenses are designed to make sure that you |
|
| 23 |
have the freedom to distribute copies of free software (and charge for |
|
| 24 |
this service if you wish), that you receive source code or can get it |
|
| 25 |
if you want it, that you can change the software or use pieces of it |
|
| 26 |
in new free programs; and that you know you can do these things. |
|
| 27 |
|
|
| 28 |
To protect your rights, we need to make restrictions that forbid |
|
| 29 |
anyone to deny you these rights or to ask you to surrender the rights. |
|
| 30 |
These restrictions translate to certain responsibilities for you if you |
|
| 31 |
distribute copies of the software, or if you modify it. |
|
| 32 |
|
|
| 33 |
For example, if you distribute copies of such a program, whether |
|
| 34 |
gratis or for a fee, you must give the recipients all the rights that |
|
| 35 |
you have. You must make sure that they, too, receive or can get the |
|
| 36 |
source code. And you must show them these terms so they know their |
|
| 37 |
rights. |
|
| 38 |
|
|
| 39 |
We protect your rights with two steps: (1) copyright the software, and |
|
| 40 |
(2) offer you this license which gives you legal permission to copy, |
|
| 41 |
distribute and/or modify the software. |
|
| 42 |
|
|
| 43 |
Also, for each author's protection and ours, we want to make certain |
|
| 44 |
that everyone understands that there is no warranty for this free |
|
| 45 |
software. If the software is modified by someone else and passed on, we |
|
| 46 |
want its recipients to know that what they have is not the original, so |
|
| 47 |
that any problems introduced by others will not reflect on the original |
|
| 48 |
authors' reputations. |
|
| 49 |
|
|
| 50 |
Finally, any free program is threatened constantly by software |
|
| 51 |
patents. We wish to avoid the danger that redistributors of a free |
|
| 52 |
program will individually obtain patent licenses, in effect making the |
|
| 53 |
program proprietary. To prevent this, we have made it clear that any |
|
| 54 |
patent must be licensed for everyone's free use or not licensed at all. |
|
| 55 |
|
|
| 56 |
The precise terms and conditions for copying, distribution and |
|
| 57 |
modification follow. |
|
| 58 |
|
|
| 59 |
GNU GENERAL PUBLIC LICENSE |
|
| 60 |
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION |
|
| 61 |
|
|
| 62 |
0. This License applies to any program or other work which contains |
|
| 63 |
a notice placed by the copyright holder saying it may be distributed |
|
| 64 |
under the terms of this General Public License. The "Program", below, |
|
| 65 |
refers to any such program or work, and a "work based on the Program" |
|
| 66 |
means either the Program or any derivative work under copyright law: |
|
| 67 |
that is to say, a work containing the Program or a portion of it, |
|
| 68 |
either verbatim or with modifications and/or translated into another |
|
| 69 |
language. (Hereinafter, translation is included without limitation in |
|
| 70 |
the term "modification".) Each licensee is addressed as "you". |
|
| 71 |
|
|
| 72 |
Activities other than copying, distribution and modification are not |
|
| 73 |
covered by this License; they are outside its scope. The act of |
|
| 74 |
running the Program is not restricted, and the output from the Program |
|
| 75 |
is covered only if its contents constitute a work based on the |
|
| 76 |
Program (independent of having been made by running the Program). |
|
| 77 |
Whether that is true depends on what the Program does. |
|
| 78 |
|
|
| 79 |
1. You may copy and distribute verbatim copies of the Program's |
|
| 80 |
source code as you receive it, in any medium, provided that you |
|
| 81 |
conspicuously and appropriately publish on each copy an appropriate |
|
| 82 |
copyright notice and disclaimer of warranty; keep intact all the |
|
| 83 |
notices that refer to this License and to the absence of any warranty; |
|
| 84 |
and give any other recipients of the Program a copy of this License |
|
| 85 |
along with the Program. |
|
| 86 |
|
|
| 87 |
You may charge a fee for the physical act of transferring a copy, and |
|
| 88 |
you may at your option offer warranty protection in exchange for a fee. |
|
| 89 |
|
|
| 90 |
2. You may modify your copy or copies of the Program or any portion |
|
| 91 |
of it, thus forming a work based on the Program, and copy and |
|
| 92 |
distribute such modifications or work under the terms of Section 1 |
|
| 93 |
above, provided that you also meet all of these conditions: |
|
| 94 |
|
|
| 95 |
a) You must cause the modified files to carry prominent notices |
|
| 96 |
stating that you changed the files and the date of any change. |
|
| 97 |
|
|
| 98 |
b) You must cause any work that you distribute or publish, that in |
|
| 99 |
whole or in part contains or is derived from the Program or any |
|
| 100 |
part thereof, to be licensed as a whole at no charge to all third |
|
| 101 |
parties under the terms of this License. |
|
| 102 |
|
|
| 103 |
c) If the modified program normally reads commands interactively |
|
| 104 |
when run, you must cause it, when started running for such |
|
| 105 |
interactive use in the most ordinary way, to print or display an |
|
| 106 |
announcement including an appropriate copyright notice and a |
|
| 107 |
notice that there is no warranty (or else, saying that you provide |
|
| 108 |
a warranty) and that users may redistribute the program under |
|
| 109 |
these conditions, and telling the user how to view a copy of this |
|
| 110 |
License. (Exception: if the Program itself is interactive but |
|
| 111 |
does not normally print such an announcement, your work based on |
|
| 112 |
the Program is not required to print an announcement.) |
|
| 113 |
|
|
| 114 |
These requirements apply to the modified work as a whole. If |
|
| 115 |
identifiable sections of that work are not derived from the Program, |
|
| 116 |
and can be reasonably considered independent and separate works in |
|
| 117 |
themselves, then this License, and its terms, do not apply to those |
|
| 118 |
sections when you distribute them as separate works. But when you |
|
| 119 |
distribute the same sections as part of a whole which is a work based |
|
| 120 |
on the Program, the distribution of the whole must be on the terms of |
|
| 121 |
this License, whose permissions for other licensees extend to the |
|
| 122 |
entire whole, and thus to each and every part regardless of who wrote it. |
|
| 123 |
|
|
| 124 |
Thus, it is not the intent of this section to claim rights or contest |
|
| 125 |
your rights to work written entirely by you; rather, the intent is to |
|
| 126 |
exercise the right to control the distribution of derivative or |
|
| 127 |
collective works based on the Program. |
|
| 128 |
|
|
| 129 |
In addition, mere aggregation of another work not based on the Program |
|
| 130 |
with the Program (or with a work based on the Program) on a volume of |
|
| 131 |
a storage or distribution medium does not bring the other work under |
|
| 132 |
the scope of this License. |
|
| 133 |
|
|
| 134 |
3. You may copy and distribute the Program (or a work based on it, |
|
| 135 |
under Section 2) in object code or executable form under the terms of |
|
| 136 |
Sections 1 and 2 above provided that you also do one of the following: |
|
| 137 |
|
|
| 138 |
a) Accompany it with the complete corresponding machine-readable |
|
| 139 |
source code, which must be distributed under the terms of Sections |
|
| 140 |
1 and 2 above on a medium customarily used for software interchange; or, |
|
| 141 |
|
|
| 142 |
b) Accompany it with a written offer, valid for at least three |
|
| 143 |
years, to give any third party, for a charge no more than your |
|
| 144 |
cost of physically performing source distribution, a complete |
|
| 145 |
machine-readable copy of the corresponding source code, to be |
|
| 146 |
distributed under the terms of Sections 1 and 2 above on a medium |
|
| 147 |
customarily used for software interchange; or, |
|
| 148 |
|
|
| 149 |
c) Accompany it with the information you received as to the offer |
|
| 150 |
to distribute corresponding source code. (This alternative is |
|
| 151 |
allowed only for noncommercial distribution and only if you |
|
| 152 |
received the program in object code or executable form with such |
|
| 153 |
an offer, in accord with Subsection b above.) |
|
| 154 |
|
|
| 155 |
The source code for a work means the preferred form of the work for |
|
| 156 |
making modifications to it. For an executable work, complete source |
|
| 157 |
code means all the source code for all modules it contains, plus any |
|
| 158 |
associated interface definition files, plus the scripts used to |
|
| 159 |
control compilation and installation of the executable. However, as a |
|
| 160 |
special exception, the source code distributed need not include |
|
| 161 |
anything that is normally distributed (in either source or binary |
|
| 162 |
form) with the major components (compiler, kernel, and so on) of the |
|
| 163 |
operating system on which the executable runs, unless that component |
|
| 164 |
itself accompanies the executable. |
|
| 165 |
|
|
| 166 |
If distribution of executable or object code is made by offering |
|
| 167 |
access to copy from a designated place, then offering equivalent |
|
| 168 |
access to copy the source code from the same place counts as |
|
| 169 |
distribution of the source code, even though third parties are not |
|
| 170 |
compelled to copy the source along with the object code. |
|
| 171 |
|
|
| 172 |
4. You may not copy, modify, sublicense, or distribute the Program |
|
| 173 |
except as expressly provided under this License. Any attempt |
|
| 174 |
otherwise to copy, modify, sublicense or distribute the Program is |
|
| 175 |
void, and will automatically terminate your rights under this License. |
|
| 176 |
However, parties who have received copies, or rights, from you under |
|
| 177 |
this License will not have their licenses terminated so long as such |
|
| 178 |
parties remain in full compliance. |
|
| 179 |
|
|
| 180 |
5. You are not required to accept this License, since you have not |
|
| 181 |
signed it. However, nothing else grants you permission to modify or |
|
| 182 |
distribute the Program or its derivative works. These actions are |
|
| 183 |
prohibited by law if you do not accept this License. Therefore, by |
|
| 184 |
modifying or distributing the Program (or any work based on the |
|
| 185 |
Program), you indicate your acceptance of this License to do so, and |
|
| 186 |
all its terms and conditions for copying, distributing or modifying |
|
| 187 |
the Program or works based on it. |
|
| 188 |
|
|
| 189 |
6. Each time you redistribute the Program (or any work based on the |
|
| 190 |
Program), the recipient automatically receives a license from the |
|
| 191 |
original licensor to copy, distribute or modify the Program subject to |
|
| 192 |
these terms and conditions. You may not impose any further |
|
| 193 |
restrictions on the recipients' exercise of the rights granted herein. |
|
| 194 |
You are not responsible for enforcing compliance by third parties to |
|
| 195 |
this License. |
|
| 196 |
|
|
| 197 |
7. If, as a consequence of a court judgment or allegation of patent |
|
| 198 |
infringement or for any other reason (not limited to patent issues), |
|
| 199 |
conditions are imposed on you (whether by court order, agreement or |
|
| 200 |
otherwise) that contradict the conditions of this License, they do not |
|
| 201 |
excuse you from the conditions of this License. If you cannot |
|
| 202 |
distribute so as to satisfy simultaneously your obligations under this |
|
| 203 |
License and any other pertinent obligations, then as a consequence you |
|
| 204 |
may not distribute the Program at all. For example, if a patent |
|
| 205 |
license would not permit royalty-free redistribution of the Program by |
|
| 206 |
all those who receive copies directly or indirectly through you, then |
|
| 207 |
the only way you could satisfy both it and this License would be to |
|
| 208 |
refrain entirely from distribution of the Program. |
|
| 209 |
|
|
| 210 |
If any portion of this section is held invalid or unenforceable under |
|
| 211 |
any particular circumstance, the balance of the section is intended to |
|
| 212 |
apply and the section as a whole is intended to apply in other |
|
| 213 |
circumstances. |
|
| 214 |
|
|
| 215 |
It is not the purpose of this section to induce you to infringe any |
|
| 216 |
patents or other property right claims or to contest validity of any |
|
| 217 |
such claims; this section has the sole purpose of protecting the |
|
| 218 |
integrity of the free software distribution system, which is |
|
| 219 |
implemented by public license practices. Many people have made |
|
| 220 |
generous contributions to the wide range of software distributed |
|
| 221 |
through that system in reliance on consistent application of that |
|
| 222 |
system; it is up to the author/donor to decide if he or she is willing |
|
| 223 |
to distribute software through any other system and a licensee cannot |
|
| 224 |
impose that choice. |
|
| 225 |
|
|
| 226 |
This section is intended to make thoroughly clear what is believed to |
|
| 227 |
be a consequence of the rest of this License. |
|
| 228 |
|
|
| 229 |
8. If the distribution and/or use of the Program is restricted in |
|
| 230 |
certain countries either by patents or by copyrighted interfaces, the |
|
| 231 |
original copyright holder who places the Program under this License |
|
| 232 |
may add an explicit geographical distribution limitation excluding |
|
| 233 |
those countries, so that distribution is permitted only in or among |
|
| 234 |
countries not thus excluded. In such case, this License incorporates |
|
| 235 |
the limitation as if written in the body of this License. |
|
| 236 |
|
|
| 237 |
9. The Free Software Foundation may publish revised and/or new versions |
|
| 238 |
of the General Public License from time to time. Such new versions will |
|
| 239 |
be similar in spirit to the present version, but may differ in detail to |
|
| 240 |
address new problems or concerns. |
|
| 241 |
|
|
| 242 |
Each version is given a distinguishing version number. If the Program |
|
| 243 |
specifies a version number of this License which applies to it and "any |
|
| 244 |
later version", you have the option of following the terms and conditions |
|
| 245 |
either of that version or of any later version published by the Free |
|
| 246 |
Software Foundation. If the Program does not specify a version number of |
|
| 247 |
this License, you may choose any version ever published by the Free Software |
|
| 248 |
Foundation. |
|
| 249 |
|
|
| 250 |
10. If you wish to incorporate parts of the Program into other free |
|
| 251 |
programs whose distribution conditions are different, write to the author |
|
| 252 |
to ask for permission. For software which is copyrighted by the Free |
|
| 253 |
Software Foundation, write to the Free Software Foundation; we sometimes |
|
| 254 |
make exceptions for this. Our decision will be guided by the two goals |
|
| 255 |
of preserving the free status of all derivatives of our free software and |
|
| 256 |
of promoting the sharing and reuse of software generally. |
|
| 257 |
|
|
| 258 |
NO WARRANTY |
|
| 259 |
|
|
| 260 |
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
|
| 261 |
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
|
| 262 |
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
|
| 263 |
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
|
| 264 |
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
|
| 265 |
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
|
| 266 |
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
|
| 267 |
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
|
| 268 |
REPAIR OR CORRECTION. |
|
| 269 |
|
|
| 270 |
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
|
| 271 |
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
|
| 272 |
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
|
| 273 |
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
|
| 274 |
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
|
| 275 |
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
|
| 276 |
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
|
| 277 |
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
|
| 278 |
POSSIBILITY OF SUCH DAMAGES. |
|
| 279 |
|
|
| 280 |
END OF TERMS AND CONDITIONS |
|
| 281 |
|
|
| 282 |
How to Apply These Terms to Your New Programs |
|
| 283 |
|
|
| 284 |
If you develop a new program, and you want it to be of the greatest |
|
| 285 |
possible use to the public, the best way to achieve this is to make it |
|
| 286 |
free software which everyone can redistribute and change under these terms. |
|
| 287 |
|
|
| 288 |
To do so, attach the following notices to the program. It is safest |
|
| 289 |
to attach them to the start of each source file to most effectively |
|
| 290 |
convey the exclusion of warranty; and each file should have at least |
|
| 291 |
the "copyright" line and a pointer to where the full notice is found. |
|
| 292 |
|
|
| 293 |
<one line to give the program's name and a brief idea of what it does.> |
|
| 294 |
Copyright (C) <year> <name of author> |
|
| 295 |
|
|
| 296 |
This program is free software; you can redistribute it and/or modify |
|
| 297 |
it under the terms of the GNU General Public License as published by |
|
| 298 |
the Free Software Foundation; either version 2 of the License, or |
|
| 299 |
(at your option) any later version. |
|
| 300 |
|
|
| 301 |
This program is distributed in the hope that it will be useful, |
|
| 302 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 303 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 304 |
GNU General Public License for more details. |
|
| 305 |
|
|
| 306 |
You should have received a copy of the GNU General Public License |
|
| 307 |
along with this program; if not, write to the Free Software |
|
| 308 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
| 309 |
|
|
| 310 |
|
|
| 311 |
Also add information on how to contact you by electronic and paper mail. |
|
| 312 |
|
|
| 313 |
If the program is interactive, make it output a short notice like this |
|
| 314 |
when it starts in an interactive mode: |
|
| 315 |
|
|
| 316 |
Gnomovision version 69, Copyright (C) year name of author |
|
| 317 |
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. |
|
| 318 |
This is free software, and you are welcome to redistribute it |
|
| 319 |
under certain conditions; type `show c' for details. |
|
| 320 |
|
|
| 321 |
The hypothetical commands `show w' and `show c' should show the appropriate |
|
| 322 |
parts of the General Public License. Of course, the commands you use may |
|
| 323 |
be called something other than `show w' and `show c'; they could even be |
|
| 324 |
mouse-clicks or menu items--whatever suits your program. |
|
| 325 |
|
|
| 326 |
You should also get your employer (if you work as a programmer) or your |
|
| 327 |
school, if any, to sign a "copyright disclaimer" for the program, if |
|
| 328 |
necessary. Here is a sample; alter the names: |
|
| 329 |
|
|
| 330 |
Yoyodyne, Inc., hereby disclaims all copyright interest in the program |
|
| 331 |
`Gnomovision' (which makes passes at compilers) written by James Hacker. |
|
| 332 |
|
|
| 333 |
<signature of Ty Coon>, 1 April 1989 |
|
| 334 |
Ty Coon, President of Vice |
|
| 335 |
|
|
| 336 |
This General Public License does not permit incorporating your program into |
|
| 337 |
proprietary programs. If your program is a subroutine library, you may |
|
| 338 |
consider it more useful to permit linking proprietary applications with the |
|
| 339 |
library. If this is what you want to do, use the GNU Library General |
|
| 340 |
Public License instead of this License. |
|
| Makefile | ||
|---|---|---|
| 1 |
|
|
| 2 |
CXXFLAGS := -I../vamp-plugin-sdk -O3 -Wall -fPIC |
|
| 3 |
CFLAGS := -O3 -Wall -fPIC |
|
| 4 |
|
|
| 5 |
vamp-onsetsds.so: onsetsdsplugin.o onsetsds/src/onsetsds.o |
|
| 6 |
g++ -shared $^ -o $@ -L../vamp-plugin-sdk/vamp-sdk -Wl,-Bstatic -lvamp-sdk -Wl,-Bdynamic -lpthread |
|
| 7 |
|
|
| 8 |
clean: |
|
| 9 |
rm -f *.o */src/*.o |
|
| 10 |
|
|
| 11 |
onsetsdsplugin.o: onsetsdsplugin.h onsetsds/src/onsetsds.h |
|
| 12 |
onsetsds/onsetsds.o: onsetsds/src/onsetsds.h |
|
| Makefile.osx | ||
|---|---|---|
| 1 |
PLUGIN_LIBRARY_NAME = onsetsdsplugin |
|
| 2 |
VAMP_SDK_DIR = ../vamp-plugin-sdk |
|
| 3 |
|
|
| 4 |
PLUGIN_CODE_OBJECTS = onsetsdsplugin.o onsetsds/src/onsetsds.o |
|
| 5 |
|
|
| 6 |
ARCHFLAGS = -mmacosx-version-min=10.7 -arch x86_64 -stdlib=libc++ |
|
| 7 |
CFLAGS = $(ARCHFLAGS) -Wall -fPIC -g -O3 |
|
| 8 |
CXXFLAGS = $(CFLAGS) -I$(VAMP_SDK_DIR) -I. |
|
| 9 |
PLUGIN_EXT = .dylib |
|
| 10 |
PLUGIN = $(PLUGIN_LIBRARY_NAME)$(PLUGIN_EXT) |
|
| 11 |
LDFLAGS = $(ARCHFLAGS) -dynamiclib -install_name $(PLUGIN) $(VAMP_SDK_DIR)/libvamp-sdk.a -framework Accelerate |
|
| 12 |
|
|
| 13 |
|
|
| 14 |
$(PLUGIN): $(PLUGIN_CODE_OBJECTS) |
|
| 15 |
$(CXX) -o $@ $^ $(LDFLAGS) |
|
| 16 |
|
|
| 17 |
clean: |
|
| 18 |
rm -f *.o */src/*.o |
|
| 19 |
|
|
| 20 |
onsetsdsplugin.o: onsetsdsplugin.h onsetsds/src/onsetsds.h |
|
| 21 |
onsetsds/onsetsds.o: onsetsds/src/onsetsds.h |
|
| README | ||
|---|---|---|
| 1 |
This is a Vamp plugin of the OnsetsDS note onset detection library. |
|
| 2 |
See https://github.com/danstowell/onsetsds, http://vamp-plugins.org/, |
|
| 3 |
https://code.soundsoftware.ac.uk/projects/vamp-onsetsds-plugin |
|
| onsetsdsplugin.cpp | ||
|---|---|---|
| 1 |
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ |
|
| 2 |
/* |
|
| 3 |
Vamp feature extraction plugin using the OnsetsDS onset detector. |
|
| 4 |
This file copyright (c) 2008 Chris Cannam. |
|
| 5 |
|
|
| 6 |
OnsetsDS - real time musical onset detection library. |
|
| 7 |
Copyright (c) 2007 Dan Stowell. All rights reserved. |
|
| 8 |
|
|
| 9 |
This program is free software; you can redistribute it and/or modify |
|
| 10 |
it under the terms of the GNU General Public License as published by |
|
| 11 |
the Free Software Foundation; either version 2 of the License, or |
|
| 12 |
(at your option) any later version. |
|
| 13 |
|
|
| 14 |
This program is distributed in the hope that it will be useful, |
|
| 15 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 16 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 17 |
GNU General Public License for more details. |
|
| 18 |
|
|
| 19 |
You should have received a copy of the GNU General Public License |
|
| 20 |
along with this program; if not, write to the Free Software |
|
| 21 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
| 22 |
*/ |
|
| 23 |
|
|
| 24 |
#include "onsetsdsplugin.h" |
|
| 25 |
#include <vamp-sdk/PluginAdapter.h> |
|
| 26 |
|
|
| 27 |
using std::string; |
|
| 28 |
using std::vector; |
|
| 29 |
using std::cerr; |
|
| 30 |
using std::endl; |
|
| 31 |
|
|
| 32 |
|
|
| 33 |
OnsetsDSPlugin::OnsetsDSPlugin(float inputSampleRate) : |
|
| 34 |
Vamp::Plugin(inputSampleRate), |
|
| 35 |
m_ods(0), |
|
| 36 |
m_odsdata(0), |
|
| 37 |
m_dfType(ODS_ODF_RCOMPLEX), |
|
| 38 |
m_threshold(0.5), |
|
| 39 |
m_medspan(11), |
|
| 40 |
m_stepSize(256), |
|
| 41 |
m_fftSize(512) |
|
| 42 |
{
|
|
| 43 |
} |
|
| 44 |
|
|
| 45 |
OnsetsDSPlugin::~OnsetsDSPlugin() |
|
| 46 |
{
|
|
| 47 |
delete[] m_odsdata; |
|
| 48 |
delete m_ods; |
|
| 49 |
} |
|
| 50 |
|
|
| 51 |
string |
|
| 52 |
OnsetsDSPlugin::getIdentifier() const |
|
| 53 |
{
|
|
| 54 |
return "onsetsds"; |
|
| 55 |
} |
|
| 56 |
|
|
| 57 |
string |
|
| 58 |
OnsetsDSPlugin::getName() const |
|
| 59 |
{
|
|
| 60 |
return "OnsetsDS Onset Detector"; |
|
| 61 |
} |
|
| 62 |
|
|
| 63 |
string |
|
| 64 |
OnsetsDSPlugin::getDescription() const |
|
| 65 |
{
|
|
| 66 |
return "Detect note onsets"; |
|
| 67 |
} |
|
| 68 |
|
|
| 69 |
string |
|
| 70 |
OnsetsDSPlugin::getMaker() const |
|
| 71 |
{
|
|
| 72 |
return "Dan Stowell"; |
|
| 73 |
} |
|
| 74 |
|
|
| 75 |
int |
|
| 76 |
OnsetsDSPlugin::getPluginVersion() const |
|
| 77 |
{
|
|
| 78 |
return 2; |
|
| 79 |
} |
|
| 80 |
|
|
| 81 |
string |
|
| 82 |
OnsetsDSPlugin::getCopyright() const |
|
| 83 |
{
|
|
| 84 |
return "Copyright (c) 2007-2008 Dan Stowell"; |
|
| 85 |
} |
|
| 86 |
|
|
| 87 |
OnsetsDSPlugin::ParameterList |
|
| 88 |
OnsetsDSPlugin::getParameterDescriptors() const |
|
| 89 |
{
|
|
| 90 |
ParameterList list; |
|
| 91 |
|
|
| 92 |
ParameterDescriptor desc; |
|
| 93 |
desc.identifier = "dftype"; |
|
| 94 |
desc.name = "Onset detection function"; |
|
| 95 |
desc.description = "Method used to calculate the onset detection function"; |
|
| 96 |
desc.minValue = 0; |
|
| 97 |
desc.maxValue = 6; |
|
| 98 |
desc.defaultValue = 3; |
|
| 99 |
desc.isQuantized = true; |
|
| 100 |
desc.quantizeStep = 1; |
|
| 101 |
desc.valueNames.push_back("Power");
|
|
| 102 |
desc.valueNames.push_back("Sum of magnitudes");
|
|
| 103 |
desc.valueNames.push_back("Complex-domain deviation");
|
|
| 104 |
desc.valueNames.push_back("Rectified complex-domain deviation");
|
|
| 105 |
desc.valueNames.push_back("Phase deviation");
|
|
| 106 |
desc.valueNames.push_back("Weighted phase deviation");
|
|
| 107 |
desc.valueNames.push_back("Modified Kullback-Liebler deviation");
|
|
| 108 |
list.push_back(desc); |
|
| 109 |
|
|
| 110 |
desc.identifier = "threshold"; |
|
| 111 |
desc.name = "Detection threshold"; |
|
| 112 |
desc.description = "Onsets trigger when the function beats this value"; |
|
| 113 |
desc.minValue = 0; |
|
| 114 |
desc.maxValue = 1; |
|
| 115 |
desc.defaultValue = 0.5; |
|
| 116 |
desc.isQuantized = false; |
|
| 117 |
desc.valueNames.clear(); |
|
| 118 |
list.push_back(desc); |
|
| 119 |
|
|
| 120 |
desc.identifier = "medspan"; |
|
| 121 |
desc.name = "Median frame span"; |
|
| 122 |
desc.description = "Number of past frames used in median calculation"; |
|
| 123 |
desc.minValue = 5; |
|
| 124 |
desc.maxValue = 21; |
|
| 125 |
desc.defaultValue = 11; |
|
| 126 |
desc.isQuantized = true; |
|
| 127 |
desc.quantizeStep = 2; |
|
| 128 |
desc.valueNames.clear(); |
|
| 129 |
list.push_back(desc); |
|
| 130 |
|
|
| 131 |
return list; |
|
| 132 |
} |
|
| 133 |
|
|
| 134 |
float |
|
| 135 |
OnsetsDSPlugin::getParameter(std::string name) const |
|
| 136 |
{
|
|
| 137 |
if (name == "dftype") {
|
|
| 138 |
switch (m_dfType) {
|
|
| 139 |
case ODS_ODF_POWER: return 0; |
|
| 140 |
case ODS_ODF_MAGSUM: return 1; |
|
| 141 |
case ODS_ODF_COMPLEX: return 2; |
|
| 142 |
case ODS_ODF_RCOMPLEX: return 3; |
|
| 143 |
case ODS_ODF_PHASE: return 4; |
|
| 144 |
case ODS_ODF_WPHASE: return 5; |
|
| 145 |
case ODS_ODF_MKL: return 6; |
|
| 146 |
} |
|
| 147 |
} else if (name == "threshold") {
|
|
| 148 |
return m_threshold; |
|
| 149 |
} else if (name == "medspan") {
|
|
| 150 |
return m_medspan; |
|
| 151 |
} |
|
| 152 |
return 0.0; |
|
| 153 |
} |
|
| 154 |
|
|
| 155 |
void |
|
| 156 |
OnsetsDSPlugin::setParameter(std::string name, float value) |
|
| 157 |
{
|
|
| 158 |
if (name == "dftype") {
|
|
| 159 |
onsetsds_odf_types dfType = m_dfType; |
|
| 160 |
switch (lrintf(value)) {
|
|
| 161 |
case 0: dfType = ODS_ODF_POWER; break; |
|
| 162 |
case 1: dfType = ODS_ODF_MAGSUM; break; |
|
| 163 |
case 2: dfType = ODS_ODF_COMPLEX; break; |
|
| 164 |
case 3: dfType = ODS_ODF_RCOMPLEX; break; |
|
| 165 |
case 4: dfType = ODS_ODF_PHASE; break; |
|
| 166 |
case 5: dfType = ODS_ODF_WPHASE; break; |
|
| 167 |
case 6: dfType = ODS_ODF_MKL; break; |
|
| 168 |
} |
|
| 169 |
if (dfType == m_dfType) return; |
|
| 170 |
m_dfType = dfType; |
|
| 171 |
} else if (name == "threshold") {
|
|
| 172 |
m_threshold = value; |
|
| 173 |
} else if (name == "medspan") {
|
|
| 174 |
m_medspan = lrintf(value); |
|
| 175 |
} |
|
| 176 |
} |
|
| 177 |
|
|
| 178 |
bool |
|
| 179 |
OnsetsDSPlugin::initialise(size_t channels, size_t stepSize, size_t blockSize) |
|
| 180 |
{
|
|
| 181 |
if (channels < getMinChannelCount() || |
|
| 182 |
channels > getMaxChannelCount()) {
|
|
| 183 |
std::cerr << "OnsetsDSPlugin::initialise: Unsupported channel count: " |
|
| 184 |
<< channels << std::endl; |
|
| 185 |
return false; |
|
| 186 |
} |
|
| 187 |
|
|
| 188 |
if (stepSize != getPreferredStepSize()) {
|
|
| 189 |
std::cerr << "WARNING: OnsetsDSPlugin::initialise: Using unusual step size: " |
|
| 190 |
<< stepSize << " (wanted " << (getPreferredStepSize()) << ")" << std::endl; |
|
| 191 |
} |
|
| 192 |
|
|
| 193 |
if (blockSize != getPreferredBlockSize()) {
|
|
| 194 |
std::cerr << "WARNING: OnsetsDSPlugin::initialise: Using unusual block size: " |
|
| 195 |
<< blockSize << " (wanted " << (getPreferredBlockSize()) << ")" << std::endl; |
|
| 196 |
} |
|
| 197 |
|
|
| 198 |
m_stepSize = stepSize; |
|
| 199 |
m_fftSize = blockSize; |
|
| 200 |
|
|
| 201 |
delete[] m_odsdata; |
|
| 202 |
delete m_ods; |
|
| 203 |
|
|
| 204 |
m_odsdata = new float[onsetsds_memneeded(m_dfType, m_fftSize, m_medspan)]; |
|
| 205 |
m_ods = new OnsetsDS; |
|
| 206 |
memset(m_ods, 0, sizeof(OnsetsDS)); |
|
| 207 |
onsetsds_init(m_ods, m_odsdata, ODS_FFT_FFTW3_R2C, m_dfType, m_fftSize, |
|
| 208 |
m_medspan, m_inputSampleRate); |
|
| 209 |
m_ods->thresh = m_threshold; |
|
| 210 |
|
|
| 211 |
return true; |
|
| 212 |
} |
|
| 213 |
|
|
| 214 |
void |
|
| 215 |
OnsetsDSPlugin::reset() |
|
| 216 |
{
|
|
| 217 |
if (!m_ods) {
|
|
| 218 |
std::cerr << "ERROR: OnsetsDSPlugin::reset: Plugin has not been initialised" << std::endl; |
|
| 219 |
return; |
|
| 220 |
} |
|
| 221 |
onsetsds_init(m_ods, m_odsdata, ODS_FFT_FFTW3_R2C, m_dfType, m_fftSize, |
|
| 222 |
m_medspan, m_inputSampleRate); |
|
| 223 |
m_ods->thresh = m_threshold; |
|
| 224 |
} |
|
| 225 |
|
|
| 226 |
size_t |
|
| 227 |
OnsetsDSPlugin::getPreferredStepSize() const |
|
| 228 |
{
|
|
| 229 |
return 256; |
|
| 230 |
} |
|
| 231 |
|
|
| 232 |
size_t |
|
| 233 |
OnsetsDSPlugin::getPreferredBlockSize() const |
|
| 234 |
{
|
|
| 235 |
return 512; |
|
| 236 |
} |
|
| 237 |
|
|
| 238 |
OnsetsDSPlugin::OutputList |
|
| 239 |
OnsetsDSPlugin::getOutputDescriptors() const |
|
| 240 |
{
|
|
| 241 |
OutputList list; |
|
| 242 |
|
|
| 243 |
OutputDescriptor onsets; |
|
| 244 |
onsets.identifier = "onsets"; |
|
| 245 |
onsets.name = "Note Onsets"; |
|
| 246 |
onsets.description = "Note onset positions"; |
|
| 247 |
onsets.unit = ""; |
|
| 248 |
onsets.hasFixedBinCount = true; |
|
| 249 |
onsets.binCount = 0; |
|
| 250 |
onsets.sampleType = OutputDescriptor::VariableSampleRate; |
|
| 251 |
onsets.sampleRate = (m_inputSampleRate / m_stepSize); |
|
| 252 |
list.push_back(onsets); |
|
| 253 |
|
|
| 254 |
//--- Extracting the ODF |
|
| 255 |
onsets = OutputDescriptor(); |
|
| 256 |
onsets.identifier = "odf"; |
|
| 257 |
onsets.name = "Onset Detection Function"; |
|
| 258 |
onsets.description = "Onset Detection Function used for detecting onsets"; |
|
| 259 |
onsets.unit = ""; |
|
| 260 |
onsets.hasFixedBinCount = false; |
|
| 261 |
onsets.binCount = 0; |
|
| 262 |
onsets.sampleType = OutputDescriptor::OneSamplePerStep; |
|
| 263 |
onsets.sampleRate = (m_inputSampleRate / m_stepSize); |
|
| 264 |
list.push_back(onsets); |
|
| 265 |
|
|
| 266 |
//--- Extracting the Filtered ODF |
|
| 267 |
onsets = OutputDescriptor(); |
|
| 268 |
onsets.identifier = "filtered_odf"; |
|
| 269 |
onsets.name = "Filtered Onset Detection Function"; |
|
| 270 |
onsets.description = "Filtered Onset Detection Function used for detecting onsets"; |
|
| 271 |
onsets.unit = ""; |
|
| 272 |
onsets.hasFixedBinCount = false; |
|
| 273 |
onsets.binCount = 0; |
|
| 274 |
onsets.sampleType = OutputDescriptor::OneSamplePerStep; |
|
| 275 |
onsets.sampleRate = (m_inputSampleRate / m_stepSize); |
|
| 276 |
list.push_back(onsets); |
|
| 277 |
|
|
| 278 |
return list; |
|
| 279 |
} |
|
| 280 |
|
|
| 281 |
OnsetsDSPlugin::FeatureSet |
|
| 282 |
OnsetsDSPlugin::process(const float *const *inputBuffers, |
|
| 283 |
Vamp::RealTime timestamp) |
|
| 284 |
{
|
|
| 285 |
if (!m_ods) {
|
|
| 286 |
cerr << "ERROR: OnsetsDSPlugin::process: Plugin has not been initialised" |
|
| 287 |
<< endl; |
|
| 288 |
return FeatureSet(); |
|
| 289 |
} |
|
| 290 |
|
|
| 291 |
// We can const_cast because we happen to know onsetsds_process |
|
| 292 |
// does not modify this buffer |
|
| 293 |
bool result = onsetsds_process(m_ods, const_cast<float *>(inputBuffers[0])); |
|
| 294 |
|
|
| 295 |
FeatureSet returnFeatures; |
|
| 296 |
|
|
| 297 |
if (result) {
|
|
| 298 |
Feature feature; |
|
| 299 |
feature.hasTimestamp = true; |
|
| 300 |
feature.timestamp = timestamp; |
|
| 301 |
returnFeatures[0].push_back(feature); // onsets are output 0 |
|
| 302 |
} |
|
| 303 |
|
|
| 304 |
//--- Extracting the ODF |
|
| 305 |
Feature odf_feature; |
|
| 306 |
odf_feature.hasTimestamp = false; |
|
| 307 |
odf_feature.values.push_back(m_ods->odfvals[0]); |
|
| 308 |
returnFeatures[1].push_back(odf_feature); |
|
| 309 |
|
|
| 310 |
//--- Extracting the Filtered ODF |
|
| 311 |
Feature filtered_odf_feature; |
|
| 312 |
filtered_odf_feature.hasTimestamp = false; |
|
| 313 |
filtered_odf_feature.values.push_back(m_ods->odfvalpost); |
|
| 314 |
returnFeatures[2].push_back(filtered_odf_feature); |
|
| 315 |
|
|
| 316 |
return returnFeatures; |
|
| 317 |
} |
|
| 318 |
|
|
| 319 |
OnsetsDSPlugin::FeatureSet |
|
| 320 |
OnsetsDSPlugin::getRemainingFeatures() |
|
| 321 |
{
|
|
| 322 |
return FeatureSet(); |
|
| 323 |
} |
|
| 324 |
|
|
| 325 |
|
|
| 326 |
static Vamp::PluginAdapter<OnsetsDSPlugin> adapter; |
|
| 327 |
|
|
| 328 |
const VampPluginDescriptor *vampGetPluginDescriptor(unsigned int version, |
|
| 329 |
unsigned int index) |
|
| 330 |
{
|
|
| 331 |
if (version < 1) return 0; |
|
| 332 |
|
|
| 333 |
switch (index) {
|
|
| 334 |
case 0: return adapter.getDescriptor(); |
|
| 335 |
default: return 0; |
|
| 336 |
} |
|
| 337 |
} |
|
| 338 |
|
|
| onsetsdsplugin.h | ||
|---|---|---|
| 1 |
/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ |
|
| 2 |
/* |
|
| 3 |
Vamp feature extraction plugin using the OnsetsDS onset detector. |
|
| 4 |
This file copyright (c) 2008 Chris Cannam. |
|
| 5 |
|
|
| 6 |
OnsetsDS - real time musical onset detection library. |
|
| 7 |
Copyright (c) 2007 Dan Stowell. All rights reserved. |
|
| 8 |
|
|
| 9 |
This program is free software; you can redistribute it and/or modify |
|
| 10 |
it under the terms of the GNU General Public License as published by |
|
| 11 |
the Free Software Foundation; either version 2 of the License, or |
|
| 12 |
(at your option) any later version. |
|
| 13 |
|
|
| 14 |
This program is distributed in the hope that it will be useful, |
|
| 15 |
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
| 16 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
| 17 |
GNU General Public License for more details. |
|
| 18 |
|
|
| 19 |
You should have received a copy of the GNU General Public License |
|
| 20 |
along with this program; if not, write to the Free Software |
|
| 21 |
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
|
| 22 |
*/ |
|
| 23 |
|
|
| 24 |
#ifndef _ONSETSDS_PLUGIN_H_ |
|
| 25 |
#define _ONSETSDS_PLUGIN_H_ |
|
| 26 |
|
|
| 27 |
#include <vamp-sdk/Plugin.h> |
|
| 28 |
|
|
| 29 |
#include "onsetsds/src/onsetsds.h" |
|
| 30 |
|
|
| 31 |
class OnsetsDSPlugin : public Vamp::Plugin |
|
| 32 |
{
|
|
| 33 |
public: |
|
| 34 |
OnsetsDSPlugin(float inputSampleRate); |
|
| 35 |
virtual ~OnsetsDSPlugin(); |
|
| 36 |
|
|
| 37 |
bool initialise(size_t channels, size_t stepSize, size_t blockSize); |
|
| 38 |
void reset(); |
|
| 39 |
|
|
| 40 |
InputDomain getInputDomain() const { return FrequencyDomain; }
|
|
| 41 |
|
|
| 42 |
std::string getIdentifier() const; |
|
| 43 |
std::string getName() const; |
|
| 44 |
std::string getDescription() const; |
|
| 45 |
std::string getMaker() const; |
|
| 46 |
int getPluginVersion() const; |
|
| 47 |
std::string getCopyright() const; |
|
| 48 |
|
|
| 49 |
ParameterList getParameterDescriptors() const; |
|
| 50 |
float getParameter(std::string) const; |
|
| 51 |
void setParameter(std::string, float); |
|
| 52 |
|
|
| 53 |
size_t getPreferredStepSize() const; |
|
| 54 |
size_t getPreferredBlockSize() const; |
|
| 55 |
|
|
| 56 |
OutputList getOutputDescriptors() const; |
|
| 57 |
|
|
| 58 |
FeatureSet process(const float *const *inputBuffers, |
|
| 59 |
Vamp::RealTime timestamp); |
|
| 60 |
|
|
| 61 |
FeatureSet getRemainingFeatures(); |
|
| 62 |
|
|
| 63 |
protected: |
|
| 64 |
OnsetsDS *m_ods; |
|
| 65 |
float *m_odsdata; |
|
| 66 |
onsetsds_odf_types m_dfType; |
|
| 67 |
float m_threshold; |
|
| 68 |
size_t m_medspan; |
|
| 69 |
size_t m_stepSize; |
|
| 70 |
size_t m_fftSize; |
|
| 71 |
}; |
|
| 72 |
|
|
| 73 |
|
|
| 74 |
#endif |
|
| vamp-onsetsds.cat | ||
|---|---|---|
| 1 |
vamp:vamp-onsetsds:onsetsds::Time > Onsets |
|
| vamp-onsetsds.n3 | ||
|---|---|---|
| 1 |
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . |
|
| 2 |
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . |
|
| 3 |
@prefix vamp: <http://purl.org/ontology/vamp/> . |
|
| 4 |
@prefix plugbase: <http://vamp-plugins.org/rdf/plugins/vamp-onsetsds#> . |
|
| 5 |
@prefix owl: <http://www.w3.org/2002/07/owl#> . |
|
| 6 |
@prefix dc: <http://purl.org/dc/elements/1.1/> . |
|
| 7 |
@prefix af: <http://purl.org/ontology/af/> . |
|
| 8 |
@prefix foaf: <http://xmlns.com/foaf/0.1/> . |
|
| 9 |
@prefix doap: <http://usefulinc.com/ns/doap#> . |
|
| 10 |
@prefix cc: <http://web.resource.org/cc/> . |
|
| 11 |
@prefix : <#> . |
|
| 12 |
|
|
| 13 |
<> a vamp:PluginDescription ; |
|
| 14 |
foaf:maker <http://www.vamp-plugins.org/doap.rdf#template-generator> ; |
|
| 15 |
foaf:primaryTopic <http://vamp-plugins.org/rdf/plugins/vamp-onsetsds> . |
|
| 16 |
|
|
| 17 |
:maker |
|
| 18 |
foaf:name "Dan Stowell" ; |
|
| 19 |
foaf:logo <http://vamp-plugins.org/rdf/plugins/makers/qm.png> ; |
|
| 20 |
foaf:page <http://c4dm.eecs.qmul.ac.uk/> . |
|
| 21 |
|
|
| 22 |
:vamp-onsetsds a vamp:PluginLibrary ; |
|
| 23 |
vamp:identifier "vamp-onsetsds" ; |
|
| 24 |
dc:title "OnsetsDS plugin" ; |
|
| 25 |
dc:description """Note onset detector using Dan Stowell's OnsetsDS library""" ; |
|
| 26 |
vamp:available_plugin plugbase:onsetsds ; |
|
| 27 |
foaf:maker :maker ; |
|
| 28 |
foaf:page <http://code.soundsoftware.ac.uk/projects/vamp-onsetsds-plugin> ; |
|
| 29 |
doap:download-page: <http://sourceforge.net/projects/vamp/files/vamp-onsetsds-plugin/0.2/> ; |
|
| 30 |
vamp:has_source true ; |
|
| 31 |
vamp:has_binary "win32" ; |
|
| 32 |
vamp:has_binary "osx" ; |
|
| 33 |
vamp:has_binary "linux32" ; |
|
| 34 |
. |
|
| 35 |
|
|
| 36 |
plugbase:onsetsds a vamp:Plugin ; |
|
| 37 |
dc:title "OnsetsDS Onset Detector" ; |
|
| 38 |
vamp:name "OnsetsDS Onset Detector" ; |
|
| 39 |
dc:description """Detect note onsets""" ; |
|
| 40 |
vamp:category "Time > Onsets" ; |
|
| 41 |
foaf:maker :maker ; |
|
| 42 |
dc:rights """Copyright (c) 2007-2008 Dan Stowell""" ; |
|
| 43 |
# cc:license <Place plugin license URI here and uncomment> ; |
|
| 44 |
vamp:identifier "onsetsds" ; |
|
| 45 |
vamp:vamp_API_version vamp:api_version_2 ; |
|
| 46 |
owl:versionInfo "1" ; |
|
| 47 |
vamp:input_domain vamp:FrequencyDomain ; |
|
| 48 |
|
|
| 49 |
|
|
| 50 |
vamp:parameter plugbase:onsetsds_param_dftype ; |
|
| 51 |
vamp:parameter plugbase:onsetsds_param_threshold ; |
|
| 52 |
vamp:parameter plugbase:onsetsds_param_medspan ; |
|
| 53 |
|
|
| 54 |
vamp:output plugbase:onsetsds_output_onsets ; |
|
| 55 |
. |
|
| 56 |
plugbase:onsetsds_param_dftype a vamp:QuantizedParameter ; |
|
| 57 |
vamp:identifier "dftype" ; |
|
| 58 |
dc:title "Onset detection function" ; |
|
| 59 |
dc:format "" ; |
|
| 60 |
vamp:min_value 0 ; |
|
| 61 |
vamp:max_value 6 ; |
|
| 62 |
vamp:unit "" ; |
|
| 63 |
vamp:quantize_step 1 ; |
|
| 64 |
vamp:default_value 3 ; |
|
| 65 |
vamp:value_names ( "Power" "Sum of magnitudes" "Complex-domain deviation" "Rectified complex-domain deviation" "Phase deviation" "Weighted phase deviation" "Modified Kullback-Liebler deviation"); |
|
| 66 |
. |
|
| 67 |
plugbase:onsetsds_param_threshold a vamp:Parameter ; |
|
| 68 |
vamp:identifier "threshold" ; |
|
| 69 |
dc:title "Detection threshold" ; |
|
| 70 |
dc:format "" ; |
|
| 71 |
vamp:min_value 0 ; |
|
| 72 |
vamp:max_value 1 ; |
|
| 73 |
vamp:unit "" ; |
|
| 74 |
vamp:default_value 0.5 ; |
|
| 75 |
vamp:value_names (); |
|
| 76 |
. |
|
| 77 |
plugbase:onsetsds_param_medspan a vamp:QuantizedParameter ; |
|
| 78 |
vamp:identifier "medspan" ; |
|
| 79 |
dc:title "Median frame span" ; |
|
| 80 |
dc:format "" ; |
|
| 81 |
vamp:min_value 5 ; |
|
| 82 |
vamp:max_value 21 ; |
|
| 83 |
vamp:unit "" ; |
|
| 84 |
vamp:quantize_step 2 ; |
|
| 85 |
vamp:default_value 11 ; |
|
| 86 |
vamp:value_names (); |
|
| 87 |
. |
|
| 88 |
plugbase:onsetsds_output_onsets a vamp:SparseOutput ; |
|
| 89 |
vamp:identifier "onsets" ; |
|
| 90 |
dc:title "Note Onsets" ; |
|
| 91 |
dc:description "Note onset positions" ; |
|
| 92 |
vamp:fixed_bin_count "true" ; |
|
| 93 |
vamp:unit "" ; |
|
| 94 |
vamp:bin_count 0 ; |
|
| 95 |
vamp:sample_type vamp:VariableSampleRate ; |
|
| 96 |
vamp:sample_rate 172.266 ; |
|
| 97 |
# vamp:computes_event_type <Place event type URI here and uncomment> ; |
|
| 98 |
# vamp:computes_feature <Place feature attribute URI here and uncomment> ; |
|
| 99 |
# vamp:computes_signal_type <Place signal type URI here and uncomment> ; |
|
| 100 |
. |
|
| 101 |
|
|
Also available in: Unified diff