# Csound

Csound é uma linguagem de programação para sons, também conhecido como um compilador de som ou uma linguagem de programação de áudio, ou mais precisamente, um áudio de DSL. É chamado de Csound porque é escrito em C, ao contrário de alguns dos seus antecessores.
É software livre, disponível sob a LGPL.
Csound foi originalmente escrito no MIT por Barry Vercoe (cientista e compositor neozelandês), baseado em seu sistema, conhecido antes como Music 11, que por sua vez seguiu o N-MUSIC iniciado pelo modelo de Max Mathews na Bell Labs. Seu desenvolvimento continuou ao longo dos anos 1990 e 2000, liderado por John ffitch da Universidade de Bath. A primeira versão documentada é a versão 5.01 em 18 de março, 2006. Muitos desenvolvedores têm contribuído para isso, mais notavelmente Istvan Varga, Gabriel Maldonado, Robin Whittle, Richard Karpen, Michael Gogins, Matt Ingalls, Steven Yi, Richard Boulanger e Victor Lazzarini.
Desenvolvido ao longo de muitos anos, tem atualmente cerca de 1700 geradores de unidades, que são as unidades formais básicas em muitas linguagens de programação de música de computadores do estilo MUSIC-N. Eles são chamados, às vezes, de opcodes (particularmente em Csound), embora esta expressão não seja exata e que estes não sejam instruções de nível de máquina. Uma das suas maiores forças é que ele é completamente modular e extensível pelo usuário. Csound está intimamente relacionado com a linguagem subjacente para o áudio estruturado estendido para MPEG-4, SAOL.

## Código Csound

Csound recebe dois arquivos de texto como entrada, especialmente formatados. A orquestra descreve a natureza dos instrumentos e o score (partitura) descreve notas e outros parâmetros ao longo de uma linha do tempo. Csound processa as instruções nesses arquivos e renderiza um arquivo de áudio ou um fluxo de áudio em tempo real (real-time audio stream) como saída.
Os arquivos da orquestra e do score podem ser unificados em um único arquivo estruturado usando tags de linguagem de marcação (um arquivo CSD com a extensão de arquivo .csd). Aqui está um exemplo muito simples de um arquivo de dados Csound unificado que produz um wave contendo um segundo tom sinoidal em uma frequência de 1kHz de taxa de amostragem de 96 kHz:
Como muitas outras linguagens de programação, escrever extensos programas em Csound pode ser facilitado usando uma IDE para edição, previsão, teste e debugging. A única agora oficialmente suportada é a QuteCsound, e tem muitas características, como inserção automática de código, navegador integrado de documentação, widgets integrados para controle de parâmetros gráficos em tempo real, mais um botão para tocar o código.

## Csound 5

A versão 5.01 foi lançada em 18 de março de 2006; 20 anos depois do primeiro lançamento do Csound. Esta última encarnação do software está disponível em forma tanto de binários como código-fonte para Linux, MAC OS X e Windows no site do Sourceforge no projeto do Csound. Foi muito melhorado e expandido em relação à versão original, feito efetivamente dentro de uma biblioteca de software com uma API. Uma variedade de front ends têm sido desenvolvidas para isto. Em adição à básica C API, além de bindings para Python, Java, Lisp, Tcl e C++, entre outros como a [Haskell (linguagem de programação)|Haskell]] que habilita o controle do Csound em um ambiente puramente funcional.
O uso de plugins habilita capacidades adicionais sem modificações para o código do Csound, é possível escrever opcodes escritos pelo usuário como extensões para a linguagem original. Os plugins LADSPA, DSSI, e VST são suportados.
Performance em tempo real através de MIDI foi adicionado em 1990, uma adição mais recente é o suporte de widgets FLTK (componentes de interface gráfica com controles deslizantes, puxadores, etc) para controle de áudio em tempo real, uma integração de uma interface gráfica customizada escrita em Python.

## Csound 6

Csound 6 está em contínuo desenvolvimento desde que suas características foram divulgadas na Conferência Csound realizada em 2011, em Hanover. Csound 6 foi lançado em julho de 2013 e está agora disponível no GitHub. Csound 6 também está disponível para Android. Entre as maiores características novas do Csound 6 incluem:
Um analisador baseado em bison/flex para a linguagem Csound é agora padrão. Ele gera uma árvore de sintaxe abstrata que é acessível através da API Csound. A árvore pode então ser compilada em uma performance em tempo de execução do Csound usando a API. Portanto, após a árvore ter sido compilada, pode ser manipulada pelo código do usuário anets da compilação em uma performance em tempo de execução do Csound. Como alternativa, o usuário pode criar toda a árvore de sintaxe abstrata de uma outra língua e em seguida, compilar a árvore para uma performance de tempo de execução do Csound.
* Há um novo tipo de matriz multi-dimensional interna. As matrizes podem ser passadas para instrumentos e códigos de operação. Aritmética pode ser realizada diretamente sobre matrizes.
* Há um novo tipo de sistema que permite que os tipos definidos pelo usuário possam ser usados na linguagem Csound.
* A orquestra pode ser recompilada a qualquer momento, o mesmo para os instrumentos individuais, durante uma performance em execução. Isso permite o verdadeiro "live coding" em performances do Csound.
* A API Csound foi racionalizada e simplificada.
* Csound pode tirar vantagem de qualquer número de CPUs para processamento simultâneo durante a performance. Isso ocorre sem quaisquer alterações ao código Csound. Isto produz substanciais aumentos de velocidade de processamento no Csound. Por exemplo, uma peça que renderiza em 100 segundos com um núcleo deve processar em cerca de 25 segundos, com 4 núcleos.
* Csound pode compilar orquestras e pontuações diretamente de seqüências de texto, permitindo o uso de Csound em ambientes onde a escrita para o sistema de arquivos não é permitido.
* Eventos de score, tais como notas, pode ser programado para amostras de tempo precisas, mesmo se a síntese é processada em blocos de amostras.
* Todos os códigos de operação (opcodes), que retorna um valor único podem ser utilizados como funções na linguagem da orquestra.
* Formatos de arquivos de análise de áudio podem ser de ordem de bytes independentes.
* Uma única declaração do score pode conter múltiplas cadeias de parâmetros.
* A maioria dos opcodes do oscilador usará uma tabela de função interna do seno, se o número da tabela for omitido.
* Opções de linha de comando podem ser definidas programaticamente usando a API do Csound.
* Numerosas áreas duplicadas de código dentro Csound foram racionalizadas.
* Existe um aplicativo Android que fornece interfaces de usuário gráficas, definidas pelo usuário e composição algorítmica baseada em JavaScript usando HTML5.

## Csound para Performances Ao Vivo

Atualmente, apenas o csound score ou eventos de nota podem ser gerados em tempo real (ao contrário de instrumentos, que são apenas definíveis em tempo de compilação, quando Csound é iniciado pela primeira vez; no Csound 6 essa limitação foi removida). O conjunto de processadores de som é definido e compilado em tempo de carregamento, mas os objetos de processamento individuais podem ser gerados ou destruídos em tempo real, com áudio de entrada processados em tempo real e saída gerada também em tempo real. Eventos de nota podem ser desencadeadas com base em comunicações OSC dentro da instância de um instrumento, gerados pelo MIDI, ou entradas pelo stdin (digitando em um terminal ou o envio de declarações textuais de outro programa). O uso de Csound 5 como uma ferramenta de performance ao vivo pode ser aumentada com uma variedade de softwares de terceiros.
Live Event Sheet com CsoundQt pode ser usado para modificar o score em tempo real. Além disso, interfaces com outras linguagens de programação podem ser usadas para script de Csound. Um artigo detalhando o uso de Csound com Qt ou Pure Data em síntese musical em tempo real foi apresentado na Linux Audio Conference em 2012 O projeto ounk tenta integrar Python com Csound enquanto CsoundAC fornece uma maneira de fazer composição algorítmica a partir de Python usando Csound como backend.
Audivation's de Csound para pacotes ao vivo de vários opcodes em Max/MSP adequados para uso no Ableton Live.
Csound também está disponível para sistemas mobile (iOS e Android).

## Front-ends: IDEs e Ambientes de Composição de Música

* MacCsound é um ambiente de programação integrado de Csound para Macintosh.
* Csound Editor é um ambiente de programação integrado de Csound para Windows.
* WinXoundPro outra IDE para Csound.
* CsoundQt outra GUI front end para CSound [Windows/Mac/*NIX]. Agora está incluída na distribuição do Csound.
* Dex Tracker Dex Tracker é um front end com estilo de tracker para csound incluindo um editor de grade e ferramentas de geração de código, e a possibilidade de salvar seus sons e ritmos favoritos como presets.
* blue Um ambiente de composição de música para Csound.
* Bol Processor Um ambiente de composição de música para Csound e MIDI.
* Automated CSound Orchestra construção de orquestra automatizada de instrumentos individuais em formato csd, converte midi para CSound, e grava em Csound em tempo real (para Windows).
* AlgoScore Um ambiente de composição algorítmica onde se trabalha em uma pontuação gráfica, para Csound e MIDI.
* Cecilia (nas versões 1 a 4) Um frontend de produção para Csound. (Cecilia 5 foi migrado para pyo como backend.)
* Cabbage ambiente de produção para Csound com plugins de áudio multiplataforma.
* Lettuce um frontend/editor para Windows para a versão do Csound5.
* Csound-x for Emacs um Emacs frontend para Csound.

## Um Laptop Por Criança (OLPC)

Csound5 foi escolhido para ser sistema de desenvolvimento de áudio para o projeto OLPC nesta mesma plataforma.