{"id":13418896,"url":"https://github.com/thestk/stk","last_synced_at":"2025-05-14T13:00:15.913Z","repository":{"id":10662179,"uuid":"12895124","full_name":"thestk/stk","owner":"thestk","description":"The Synthesis ToolKit in C++ (STK) is a set of open source audio signal processing and algorithmic synthesis classes written in the C++ programming language.","archived":false,"fork":false,"pushed_at":"2025-03-29T19:25:00.000Z","size":7630,"stargazers_count":1086,"open_issues_count":20,"forks_count":187,"subscribers_count":70,"default_branch":"master","last_synced_at":"2025-04-13T13:13:34.879Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://ccrma.stanford.edu/software/stk/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thestk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2013-09-17T12:54:47.000Z","updated_at":"2025-04-12T14:51:44.000Z","dependencies_parsed_at":"2023-02-14T15:46:45.314Z","dependency_job_id":"52e814ea-0d3e-4f58-893c-13b8c709a67f","html_url":"https://github.com/thestk/stk","commit_stats":{"total_commits":240,"total_committers":26,"mean_commits":9.23076923076923,"dds":0.6916666666666667,"last_synced_commit":"d0345712db51a01d8d6ca44980c56798a54b0fc3"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thestk%2Fstk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thestk%2Fstk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thestk%2Fstk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thestk%2Fstk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thestk","download_url":"https://codeload.github.com/thestk/stk/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254143388,"owners_count":22021720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-30T22:01:08.541Z","updated_at":"2025-05-14T13:00:15.639Z","avatar_url":"https://github.com/thestk.png","language":"C++","readme":"# The Synthesis ToolKit in C++ (STK)\nBy Perry R. Cook and Gary P. Scavone, 1995--2023.\n\nThis distribution of the Synthesis ToolKit in C++ (STK) contains the following:\n\n* [`include`](include/):  STK class header files\n* [`src`](src/): STK class source files\n* [`rawwaves`](rawwaves): STK audio files (1-channel, 16-bit, big-endian)\n* [`doc`](doc): STK documentation\n* [`projects`](projects): example STK projects and programs\n\nPlease read the [Legal and Ethical notes](#legal-and-ethical) near the bottom of this document and the [License](LICENSE).\n\nFor compiling and installing STK, see the [INSTALL.md](INSTALL.md) file in this directory.\n\n## Contents\n\n* [Overview](#overview)\n* [System Requirements](#system-requirements)\n* [What's New (and not so new)](#whats-new-and-not-so-new)\n* [Disclaimer](#disclaimer)\n* [Legal and Ethical](#legal-and-ethical)\n* [Further Reading](#further-reading)\n* [Perry's Notes From the Original Distribution](#perrys-notes-from-the-original-distribution)\n\n# OVERVIEW\n\nThe Synthesis ToolKit in C++ (STK) is a set of open source audio\nsignal processing and algorithmic synthesis classes written in the C++\nprogramming language.  STK was designed to facilitate rapid\ndevelopment of music synthesis and audio processing software, with an\nemphasis on cross-platform functionality, realtime control, ease of\nuse, and educational example code.  The Synthesis ToolKit is extremely\nportable (most classes are platform-independent C++ code), and it's\ncompletely user-extensible (all source included, no unusual libraries,\nand no hidden drivers).  We like to think that this increases the\nchances that our programs will still work in another 5-10 years.  STK\ncurrently runs with \"realtime\" support (audio and MIDI) on Linux,\nMacintosh OS X, and Windows computer platforms.  Generic, non-realtime\nsupport has been tested under NeXTStep, Sun, and other platforms and\nshould work with any standard C++ compiler.\n\nThe only classes of the Synthesis ToolKit that are platform-dependent\nconcern sockets, threads, mutexes, and real-time audio and MIDI input\nand output.  The interface for MIDI input and the simple Tcl/Tk\ngraphical user interfaces (GUIs) provided is the same, so it's easy to\nexperiment in real time using either the GUIs or MIDI.  The Synthesis\nToolKit can generate simultaneous SND (AU), WAV, AIFF, and MAT-file\noutput soundfile formats (as well as realtime sound output), so you\ncan view your results using one of a large variety of sound/signal\nanalysis tools already available (e.g. Snd, Cool Edit, Matlab).\n\nThe Synthesis Toolkit is not one particular program.  Rather, it is a\nset of C++ classes that you can use to create your own programs.  A\nfew example applications are provided to demonstrate some of the ways\nto use the classes.  If you have specific needs, you will probably\nhave to either modify the example programs or write a new program\naltogether. Further, the example programs don't have a fancy GUI\nwrapper. If you feel the need to have a \"drag and drop\" graphical\npatching GUI, you probably don't want to use the ToolKit. Spending\nhundreds of hours making platform-dependent graphics code would go\nagainst one of the fundamental design goals of the ToolKit - platform\nindependence.\n\nFor those instances where a simple GUI with sliders and buttons is\nhelpful, we use Tcl/Tk (https://www.tcl.tk/) which is freely\ndistributed for all the supported ToolKit platforms. A number of\nTcl/Tk GUI scripts are distributed with the ToolKit release.  For\ncontrol, the Synthesis Toolkit uses raw MIDI (on supported platforms),\nand SKINI (Synthesis ToolKit Instrument Network Interface, a MIDI-like\ntext message synthesis control format).\n\n\n# SYSTEM REQUIREMENTS\n\nSee the individual README's (e.g. README-linux) in the /doc directory\nfor platform specific information and system requirements.  In\ngeneral, you will use the configure script to create Makefiles on unix\nplatforms (and MinGW) or the VS2017 workspace files to compile the\nexample programs.  To use the Tcl/Tk GUIs, you will need Tcl/Tk\nversion 8.0 or higher.\n\n\n# WHAT'S NEW (AND NOT SO NEW)\n\nDespite being available in one form or another since 1996, we still\nconsider STK to be alpha software.  We attempt to maintain backward\ncompatability but changes are sometimes made in an effort to improve\nthe overall design or performance of the software.  Please read the\n\"Release Notes\" in the /doc directory to see what has changed since\nthe last release.\n\nA new StkFrames class has been created to facilitate the handling and\npassing of multichannel, vectorized audio data.  All STK classes have\nbeen updated to include tick() functions that accept StkFrames\narguments.\n\nThe control message handling scheme has been simplified greatly\nthrough the use of the Messager class.  It is now possible to have\naccess to simultaneous piped, socketed, and/or MIDI input control\nmessages.  In most cases, this should eliminate the use of the\nMd2Skini program.\n\nRealtime audio input capabilities were added to STK with release 3.0,\nthough the behavior of such is very hardware dependent.  Under Linux\nand Macintosh OS-X, audio input and output are possible with very low\nlatency.  Using the Windows DirectSound API, minimum dependable output\nsound latency seems to be around 20 milliseconds or so, while input\nsound latency is generally higher.  Performance with the ASIO audio\nAPI on Windows provides much better performance.\n\nAs mentioned above, it is possible to record the audio ouput of an STK\nprogram to .snd, .wav, .raw, .aif, and .mat (Matlab MAT-file) output\nfile types.  Though somewhat obsolete, the program Md2Skini can be\nused to write SKINI scorefiles from realtime MIDI input.  Finally, STK\nshould compile with non-realtime functionality on any platform with a\ngeneric C++ compiler.\n\nFor those who wish to make a library from the core STK classes, the\nconfigure script generates a Makefile in the src directory that will\naccomplish that.\n\n\n# DISCLAIMER\n\nYou probably already guessed this, but just to be sure, we don't\nguarantee anything works.  :-) It's free ... what do you expect?  If\nyou find a bug, please let us know and we'll try to correct it.  You\ncan also make suggestions, but again, no guarantees.  Send email to\nthe mail list.\n\n\n# LEGAL AND ETHICAL\n\nThis software was designed and created to be made publicly available\nfor free, primarily for academic purposes, so if you use it, pass it\non with this documentation, and for free.\n\nIf you make a million dollars with it, it would be nice if you would\nshare. If you make compositions with it, put us in the program notes.\n\nSome of the concepts are covered by various patents, some known to us\nand likely others which are unknown.  Many of the ones known to us are\nadministered by the Stanford Office of Technology and Licensing.\n\nThe good news is that large hunks of the techniques used here are\npublic domain.  To avoid subtle legal issues, we'll not state what's\nfreely useable here, but we'll try to note within the various classes\nwhere certain things are likely to be protected by patents.\n\n\n# FURTHER READING\n\nFor complete documentation on this ToolKit, the classes, etc., see the\ndoc directory of the distribution or surf to\nhttp://ccrma.stanford.edu/software/stk/.  Also check the platform\nspecific README's for specific system requirements.\n\n\n# PERRY'S NOTES FROM THE ORIGINAL DISTRIBUTION\n\nThis whole world was created with no particular hardware in mind.\nThese examples are intended to be tutorial in nature, as a platform\nfor the continuation of my research, and as a possible starting point\nfor a software synthesis system.  The basic motivation was to create\nthe necessary unit generators to do the synthesis, processing, and\ncontrol that I want to do and teach about.  Little thought for\noptimization was given and therefore improvements, especially speed\nenhancements, should be possible with these classes.  It was written\nwith some basic concepts in mind about how to let compilers optimize.\n\nYour question at this point might be, \"But Perry, with CMix, CMusic,\nCSound, CShells, CMonkeys, etc. already cluttering the landscape, why\na new set of stupid C functions for music synthesis and processing?\"\nThe answers lie below.\n\n1) I needed to port many of the things I've done into something which is generic enough to port further to different machines.\n\n2) I really plan to document this stuff, so that you don't have to be me to figure out what's going on. (I'll probably be sorry I said this in a couple of years, when even I can't figure out what I was thinking.)\n\n3) The classic difficulties most people have in trying to implement physical models are:\n\n    A) They have trouble understanding the papers, and/or in turning the theory into practice.\n\n    B) The Physical Model instruments are a pain to get to oscillate, and coming up with stable and meaningful parameter values is required to get the models to work at all.\n\nThis set of C++ unit generators and instruments might help to diminish the scores of emails I get asking what to do with those block diagrams I put in my papers.\n\n4) I wanted to try some new stuff with modal synthesis, and implement some classic FM patches as well.\n\n5) I wanted to reimplement, and newly implement more of the intelligent and physical performer models I've talked about in some of my papers. But I wanted to do it in a portable way, and in such a way that I can hook up modules quickly.  I also wanted to make these instruments connectable to such player objects, so folks like Brad Garton who really think a lot about the players can connect them to my instruments, a lot about which I think.\n\n6) More rationalizations to follow . . .\n\n","funding_links":[],"categories":["TODO scan for Android support in followings","C++","C/C++","Multimedia"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthestk%2Fstk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthestk%2Fstk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthestk%2Fstk/lists"}