<commit_before><!---

To maintain this document use the following markdown:

# First level heading
## Second level heading
### Third level heading

- First level bullet point
 - Second level bullet point
  - Third level bullet point
  
`inline code`

```
preformatted text
etc.
```

[hyperlink](url for the hyperlink)

Any valid HTML can also be used.

--->
# CSOUND VERSION 6.08 RELEASE NOTES

As usual there are a number of opcode fixes and improvements, but the
major changes are in the language structures.  First the score language
has all-new treatment of macros and preprocessing, bringing it in line
with those of the orchestra.  The parsing of the orchestra has had a
number of fixes as outlined below.

A major, and not totally compatible change as been made in reading
and writing array elements.  The rate of the index determines the
time of processing.  This simplifies much code and is explicable; the earlier ad hoc code had many anomalies.

Also as usual there are a number of new opcodes and internal fixes
to memory leaks and more robust code.
  
-- The Developers

## USER-LEVEL CHANGES

### New opcodes

- dct -- Discrete Cosine Transform of a sample array (type-II DCT)

- getftargs -- copy arguments of a gen to an S-variable

- mfb -- implements a mel-frequency filterbank for an array of input
  magnitudes 

### New Gen and Macros

- quadbezier -- generating Bezier curves in a table

### Orchestra

- The character ¬ is now correctly treated as a variant of ~ for bitwise not

- Lexing bug which could corrupt strings fixed

- Ensure no newlines in string-lexing

- Small improvement in reported line numbers

- Better checking of macro syntax

- Improved parsing of setting of labels

- Added error handling for unmatched brackets for UDO arg specification

- Check that `#included` file is not a directory

- Deeply nested macro calls better policed

- For years Csound has fixed the pitch of A4 at 440Hz.  Now this can be set in the header using the new r-variable A4, and also read with that variable

- Floating point values can use e or E for exponent

- Array access semantics have been clarified:

	- i[i]  => reading at i-time and perf-time, writing at i-time
    only.
	- i[k] =>  reading at perf-time, writing yields a runtime error
	- k[i], k[k] =>  reading at perf-time, writing at perf-time
	- a[i], a[k] => reading at perf-time, writing at perf-time
    - other (S[], f[]) => reading and writing according to index type (i,k).
   
In particular, i(k[i]) will, as before, not work, but the new operator
i(k[],i) is provided to cover this case.

### Score

- New code to handle macros and other preprocessor commands. Brings it
  into line with orchestra code<commit_msg>release notes<commit_after><!---

To maintain this document use the following markdown:

# First level heading
## Second level heading
### Third level heading

- First level bullet point
 - Second level bullet point
  - Third level bullet point
  
`inline code`

```
preformatted text
etc.
```

[hyperlink](url for the hyperlink)

Any valid HTML can also be used.

--->
# CSOUND VERSION 6.08 RELEASE NOTES

As usual there are a number of opcode fixes and improvements, but the
major changes are in the language structures.  First the score language
has all-new treatment of macros and preprocessing, bringing it in line
with those of the orchestra.  The parsing of the orchestra has had a
number of fixes as outlined below.

A major, and not totally compatible change as been made in reading
and writing array elements.  The rate of the index determines the
time of processing.  This simplifies much code and is explicable; the earlier ad hoc code had many anomalies.

Also as usual there are a number of new opcodes and internal fixes
to memory leaks and more robust code.
  
-- The Developers

## USER-LEVEL CHANGES

### New opcodes

- dct -- Discrete Cosine Transform of a sample array (type-II DCT)

- getftargs -- copy arguments of a gen to an S-variable

- mfb -- implements a mel-frequency filterbank for an array of input
  magnitudes 

### New Gen and Macros

- quadbezier -- generating Bezier curves in a table

### Orchestra

- The character ¬ is now correctly treated as a variant of ~ for bitwise not

- Lexing bug which could corrupt strings fixed

- Ensure no newlines in string-lexing

- Small improvement in reported line numbers

- Better checking of macro syntax

- Improved parsing of setting of labels

- Added error handling for unmatched brackets for UDO arg specification

- Check that `#included` file is not a directory

- Deeply nested macro calls better policed

- For years Csound has fixed the pitch of A4 at 440Hz.  Now this can be set in the header using the new r-variable A4, and also read with that variable

- Floating point values can use e or E for exponent

- Array access semantics have been clarified:

	- i[i]  => reading at i-time and perf-time, writing at i-time
    only.
	- i[k] =>  reading at perf-time, writing yields a runtime error
	- k[i], k[k] =>  reading at perf-time, writing at perf-time
	- a[i], a[k] => reading at perf-time, writing at perf-time
    - other (S[], f[]) => reading and writing according to index type (i,k).
   
In particular, i(k[i]) will continue not to work, as before, but the new operator
i(k[],i) is provided to cover this case.

### Score

- New code to handle macros and other preprocessor commands. Brings it
  into line with orchestra code
{'fraction_non_alphanumeric': 0.06426072546492359, 'fraction_numerical': 0.002946050451113975, 'mean_word_length': 3.526666666666667, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2825650', 'n_tokens_mistral': 1545, 'n_tokens_neox': 1482, 'n_words': 820}