Skip to content

Commit ffcf49d

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents 355b17e + 8ea503c commit ffcf49d

File tree

1 file changed

+57
-52
lines changed

1 file changed

+57
-52
lines changed

README.md

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
[![Ubuntu-x64](https://github.com/newdigate/teensy-variable-playback/workflows/Ubuntu-x64/badge.svg)](https://github.com/newdigate/teensy-variable-playback/actions)
55
[![MIT license](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
66
[![CMake](https://img.shields.io/badge/project-CMake-brightgreen.svg?label=built%20with&colorA=555555&colorB=8a8fff&logo=)](CMakelists.txt)
7-
[![made-for-VSCode](https://img.shields.io/badge/Made%20for-VSCode-1f425f.svg)](https://code.visualstudio.com/)
87
[![Contributors](https://img.shields.io/github/contributors/newdigate/teensy-variable-playback)](https://github.com/newdigate/teensy-variable-playback/graphs/contributors)
98
[![Commits](https://img.shields.io/github/commit-activity/m/newdigate/teensy-variable-playback)](https://github.com/newdigate/teensy-variable-playback/graphs/contributors)
109
![s](https://img.shields.io/badge/dynamic/json?color=%23e85b46&label=Patreon&query=data.attributes.patron_count&suffix=%20patrons&url=https%3A%2F%2Fwww.patreon.com%2Fapi%2Fcampaigns%2F4105381)
@@ -15,60 +14,12 @@ Play 16-bit PCM RAW or WAV audio samples at variable playback rates on Teensy
1514
* for best performance, use SDXC UHS 30MB/sec Application Performance Class 2 (A2) class micro SD-card.
1615
* [SD classes on wikipedia](https://en.wikipedia.org/wiki/SD_card#cite_ref-93)
1716

18-
## updates
19-
* 2025-02-20: build for teensy/linux without needing to install dependencies, using CMake FetchContent to pull project-relative dependencies
20-
* 2025-02-02: v1.1.0
21-
* wide-ranging changes to allow more robust playback of multiple files
22-
* buffers in heap or PSRAM, re-loaded by EventResponder rather than in interrupt
23-
* mechanism to prevent attempted simultaneous filesystem accesses from playback and user code
24-
* examples added: PlayPiano and FileAccess
25-
* start playback at arbitrary point in file (`play_start::play_start_arbitrary`)
26-
27-
* 26/02/2022: v1.0.16:
28-
* add option for starting sample at beginning or at loop start
29-
``` c
30-
typedef enum play_start {
31-
play_start_sample,
32-
play_start_loop,
33-
};
34-
35-
wave.setPlayStart(play_start::play_start_loop);
36-
```
37-
* 26/02/2022: v1.0.15:
38-
* added support for dual playback head for seamless looping
39-
* enable dual playback using linear crossfading
40-
* set crossfade duration in number of samples
41-
``` c
42-
AudioPlaySdResmp wave;
43-
wave.setUseDualPlaybackHead(true);
44-
wave.setCrossfadeDurationInSamples(1000);
45-
wave.playRaw((int16_t*)kick_raw, kick_raw_len / 2, numberOfChannels);
46-
wave.setLoopStart(0);
47-
wave.setLoopFinish(3000);
48-
```
49-
* 16/06/2022: v1.0.14:
50-
* refactored code to generic classes
51-
* improve memory leaks
52-
* remove calls to StartUsingSPI(), StopUsingSPI(), __disable_irq(), __enable_irq()
53-
* integrated with SerialFlash and LittleFS
54-
* 25/09/2021: v1.0.13: positionMillis() implemented for AudioPlaySdResmp
55-
* 25/08/2021: v1.0.12: Skip over RIFF tags in .wav header
56-
* 12/08/2021: v1.0.11: When playing a mono sample, transmit on both channels (credit to @atoktoto)
57-
* 28/07/2021: v1.0.10: Fix issues when starting playback in reverse
58-
* 23/07/2021: v1.0.9: Fix issue which crashes teensy when playing multiple files from SD card using array of filenames
59-
* 21/07/2021: v1.0.8: **Breaking changes**
60-
* ```AudioPlaySdRawResmp``` and ```AudioPlaySdWaveResmp``` merged into a single class ```AudioPlaySdResmp```
61-
* ```play(...)``` method changed to ```playRaw(...)``` and ```playWav(...)```, specify number of channels in parameters of playRaw
62-
* 13/07/2021: v1.0.7: added multi-channel resampling
63-
* 07/07/2021: v1.0.6: changed to using optimised floating point interpolation, sounds much better
64-
* 30/06/2021: v1.0.5: Optimised quadratic interpolation to use fixed pipeline of 4 samples and use integers instead of floating point
65-
* 25/06/2021: Quadratic interpolation is now working, but is disabled by default
66-
6717
## contents
6818
* [code structure](#code-structure)
6919
* [requirements](#requirements)
7020
* [usage](#usage)
7121
* [example usage](#example-usage)
22+
* [updates](#updates)
7223

7324
## code structure
7425
| folder | target | description |
@@ -96,8 +47,8 @@ Play 16-bit PCM RAW or WAV audio samples at variable playback rates on Teensy
9647
<details>
9748
<summary>build for teensy with cmake and gcc-arm-none-eabi</summary>
9849
* required software
99-
```cmake``` [gcc-arm-none-eabi](https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1)
100-
* remember to update ```COMPILERPATH``` in ```cmake\toolchains\teensy41.cmake``` to ```gcc-arm-none-eabi\bin``` folder
50+
`cmake` [gcc-arm-none-eabi](https://developer.arm.com/-/media/Files/downloads/gnu-rm/9-2019q4/RC2.1)
51+
* remember to update `COMPILERPATH` in `cmake\toolchains\teensy41.cmake` to `gcc-arm-none-eabi\bin` folder
10152

10253
<details>
10354
<summary>dependencies (click to expand image) </summary>
@@ -278,5 +229,59 @@ void loop() {
278229
279230
</details>
280231
232+
## updates
233+
234+
<details>
235+
<summary>updates</summary>
236+
237+
* 2025-02-20: build for teensy/linux without needing to install dependencies, using CMake FetchContent to pull project-relative dependencies
238+
* 2025-02-02: v1.1.0
239+
* wide-ranging changes to allow more robust playback of multiple files
240+
* buffers in heap or PSRAM, re-loaded by EventResponder rather than in interrupt
241+
* mechanism to prevent attempted simultaneous filesystem accesses from playback and user code
242+
* examples added: PlayPiano and FileAccess
243+
* start playback at arbitrary point in file (`play_start::play_start_arbitrary`)
244+
245+
* 26/02/2022: v1.0.16:
246+
* add option for starting sample at beginning or at loop start
247+
``` c
248+
typedef enum play_start {
249+
play_start_sample,
250+
play_start_loop,
251+
};
252+
253+
wave.setPlayStart(play_start::play_start_loop);
254+
```
255+
* 26/02/2022: v1.0.15:
256+
* added support for dual playback head for seamless looping
257+
* enable dual playback using linear crossfading
258+
* set crossfade duration in number of samples
259+
``` c
260+
AudioPlaySdResmp wave;
261+
wave.setUseDualPlaybackHead(true);
262+
wave.setCrossfadeDurationInSamples(1000);
263+
wave.playRaw((int16_t*)kick_raw, kick_raw_len / 2, numberOfChannels);
264+
wave.setLoopStart(0);
265+
wave.setLoopFinish(3000);
266+
```
267+
* 16/06/2022: v1.0.14:
268+
* refactored code to generic classes
269+
* improve memory leaks
270+
* remove calls to StartUsingSPI(), StopUsingSPI(), __disable_irq(), __enable_irq()
271+
* integrated with SerialFlash and LittleFS
272+
* 25/09/2021: v1.0.13: positionMillis() implemented for AudioPlaySdResmp
273+
* 25/08/2021: v1.0.12: Skip over RIFF tags in .wav header
274+
* 12/08/2021: v1.0.11: When playing a mono sample, transmit on both channels (credit to @atoktoto)
275+
* 28/07/2021: v1.0.10: Fix issues when starting playback in reverse
276+
* 23/07/2021: v1.0.9: Fix issue which crashes teensy when playing multiple files from SD card using array of filenames
277+
* 21/07/2021: v1.0.8: **Breaking changes**
278+
* ```AudioPlaySdRawResmp``` and ```AudioPlaySdWaveResmp``` merged into a single class ```AudioPlaySdResmp```
279+
* ```play(...)``` method changed to ```playRaw(...)``` and ```playWav(...)```, specify number of channels in parameters of playRaw
280+
* 13/07/2021: v1.0.7: added multi-channel resampling
281+
* 07/07/2021: v1.0.6: changed to using optimised floating point interpolation, sounds much better
282+
* 30/06/2021: v1.0.5: Optimised quadratic interpolation to use fixed pipeline of 4 samples and use integers instead of floating point
283+
* 25/06/2021: Quadratic interpolation is now working, but is disabled by default
284+
</details>
285+
281286
# credits
282287
* convert boost test report to junit xml format: [Stuart Lange](https://stackoverflow.com/a/2975928/4634140)

0 commit comments

Comments
 (0)