XML file format (but with 99% of the action of interest in a domain-specific language on the
CsInstruments
and CsScore
elements) that can be played and the reference implementation. Offers complex effects out-of-box apparently.Allows you to easily define instruments with seemingly arbitrary mathematical functions, and then use them to play notes at given time intervals.
The instrument functions can be parametrized, and each note played can have different parameters.
The instrument definition actually defines a block diagram graph, much like a hardware synthesizer would.
Csound is so not-bloated that it contains an UI system. And it includes an interactive virtual MIDI keyboard that interacts with parameter knobs: www.csounds.com/manual/html/MidiTop.html
But hey, it's fun. And like any other good domain-specific language, debugging it is barbaric of course.
If only it had been written in Python... the array manipulation boilerplate would be likely perfect for NumPy, and this would have been exactly what Ciro Santilli wanted!
CSound states that one of its design goals is backward compatibility, and it shows. Some of the stuff is utterly arcane, e.g. you have to remember what
GEN10
, GEN11
, etc. mean instead of having named enums.It just worked on Ubuntu 20.04 no questions asked:which runs this file: github.com/csound/csound/blob/92409ecce053d707360a5794f5f4f6bf5ebf5d24/examples/xanadu.csd and this plays a relly cool sound demo:
sudo apt install csound
git clone https://github.com/csound/csound
cd csound
git checkout 92409ecce053d707360a5794f5f4f6bf5ebf5d24
csound examples/xanadu.csd
Save to file instead of playing:or direct ogg output:or pipe to stdout to FFmpeg TODO: stackoverflow.com/questions/64970503/how-to-pipe-csound-output-to-ffmpeg-for-conversion-without-an-intermediate-file
csound -o xanadu.wav xanadu.csd
csound --ogg -o xanadu.ogg xanadu.csd
TODO find the most amazing set of songs made with it on GitHub? Some examples:
- www.csounds.com/toots/index.html has a good 101 on instrument design
- Csound FLOSS manual
- iainmccurdy.org/csound.html about 100 CC BY-SA examples. Each is a minimal study showing a specific technique, not a full composition, some seem advanced. Dude's a beast.
- github.com/csound/csound/tree/f2e70825fb543a6b15011c6984371f61ab2a00dd/tests/soak in-tree minimal examples
- github.com/csound/manual/tree/4049b286493d972ff7248b5596e47e7ae97a0cf9/examples contains the examples for the manual which is rendered at: It's insane, but it's fun! Ah those newbs who separate manuals from main tree.
- linuxsynths.com/CsoundPatchesDemos/csound.html on LinuxSynths
- github.com/csound/examples/tree/ae578159328178142c1055c7f78e28b42eb29774/csd as a few dozen examples
- freaknet.org/martin/audio/csound/ 10 pieces with source
Documentation-wise, it's a bit lacking. The only dude who can explain it really well, Dr Richard Boulanger, made the "The Csound Book" closed source, so, congrats, this will forever hurt the popularity of Csound.
Examples:
- csound/sine.csd
- csound/amplitude_frequency.csd
- csound/linen.csd: simple attack/release envelope, documented at: www.csounds.com/manual/html/linen.html
- csound/chorus.csd: chorus effect
- csound/bend.csd: bend using
linseg
- csound/vibrato.csd
- csound/crossfade_generators.csd
- csound/table.csd
- csound/virtual_keyboard.csd
This section is about telecommunication systems that are based on top of telephone lines.
Telephone lines were ubiquitous from early on, and many technologies used them to send data, including much after regular phone calls became obsolete with VoIP.
These market forces tended to eventually crush non-telephone-based systems such as telex. Maybe in that case it was just that the name sounded like a thing of the 50's. But still. Dead.
Fiscal paradises must be invaded and destroyed.
Notably, given the domain name, it is clear that he likes formalization of mathematics-stuff, like Ciro Santilli.
At first glance, looks a bit dry though, not many examples.
As of 2019, the Standard Model and general relativity are incompatible. Once those are unified, we will have one equation to describe the entirety of physics.
There are also however also unsolved problems in electroweak interaction + strong interaction, which if achieved is referred to as a Grand Unified Theory. Reaching a GUT is considered a sensible intermediate step before TOE.
The current state of Physics has been the result of several previous unifications as shown at: en.wikipedia.org/wiki/Theory_of_everything#Conventional_sequence_of_theories so it is expected that this last missing unification is likely to happen one day, potentially conditional on humanity having enough energy to observe new phenomena.
Waste of time sub-sites that should instead be merged into Stack Overflow as different tags.
Nowhere is this waste more visible than at: cs50.stackexchange.com/. A website just for some specific course that is completely covered by other sites of the network? What a humongous waste!!!
Email verification and reCAPTCHA signup protection by Ciro Santilli 35 Updated 2025-01-06 +Created 1970-01-01
Added this basic but fundamental protection layer to the website.
The email setup will of course be reused when notifications are eventually implemented.
Currently using SendGrid as the email provider. Very easy to setup, and has a free plan.
Adding reCAPTCHA immediately after email is a must otherwise an attacker could send infinitely many emails to random addresses, which would lead to the domain being marked as spam. I was pleasantly surprised about how easy the integration ended up being.
Made the website navbar and article lists more mobile friendly. Main motivation: improvised demos to people I meet IRL!
After breaking production and sweating for a bit hotfixing (not that anyone uses the website yet), I decided to be smart and created a staging server: ourbigbook-staging.herokuapp.com. Now I can blow that server up as I wish without afecting users. Documented at: cirosantilli.com/ourbigbook/staging-deployment
The table of contents shows across different files via
\Include
by Ciro Santilli 35 Updated 2025-01-06 +Created 1970-01-01E.g.:
README.cironot-readme.cirothe table of contents for
= My website
== h2
\Include[not-readme]
= Not readme
== Not readme h2
index.html
also contains the headers for not-readme.ciro
producing:- My website
- h2
- Not readme
- Not readme h2
- Not readme
- h2
This feature means that you can split large input files if rendering starts to slow you down, and things will still render exactly the same, with the larger table of contents.
This will be especially important for the website because initially I want users to be able to edit one header at a time, and join all headers with
\Include
. But I still want the ToC to show those children.This was a bit hard because it required doing RECURSIVE SQL queries, something I hadn't done before: stackoverflow.com/questions/192220/what-is-the-most-efficient-elegant-way-to-parse-a-flat-table-into-a-tree/192462#192462 + of course the usual refactor a bunch of stuff and fix tests until you go mad.
Unlisted articles are being shown, click here to show only listed articles.