Custom Samples

From TidalCycles userbase
Jump to: navigation, search

Adding and using your own custom samples in TidalCycles is relatively easy. You don't actually add samples into TidalCycles, but instead add them into SuperCollider and the SuperDirt quark. To do this, you will need to customize your SuperDirt startup code.

Custom SuperDirt Startup

When you open SuperCollider, instead of the normal SuperDirt.start code, you will need to write a longer script that tells SuperDirt where to find your samples. The startup script will look like this:

(
s.waitForBoot {
	~dirt = SuperDirt(2, s); // two output channels
	~dirt.loadSoundFiles("/Users/myUserName/Dirt/samples/*"); // specify sample folder to load
	s.sync; // wait for supercollider to finish booting up
	~dirt.start(57120, [0, 0]); // start superdirt, listening on port 57120, create two busses each sending audio to channel 0
};
);

To run the above code, place the cursor anywhere inside that code block, then press Ctrl+Enter (or Command+Enter on MacOS) to evaluate the whole block.

The above code will boot the SuperCollider server, then start up SuperDirt with some samples located at /Users/myUserName/Dirt/samples.

You can reference a longer example startup script located in the SuperDirt code repository: https://github.com/musikinformatik/SuperDirt/blob/develop/superdirt_startup.scd

Windows Paths

If you are running Windows, you will need to escape the backslash characters in Windows paths:

~dirt.loadSoundFiles("c:\\Users\\myUserName\\Dirt\\samples\\*")

Sample Folder Structure

In the above example, we have imported a folder at the path /Users/myUserName/Dirt/samples. In order for SuperDirt to recognize the sound names that Tidal sends, the /Users/myUserName/Dirt/samples folder will need to have sub-folders for each sound name, and each sound name folder will need to have sample files:

Users/
|-- myUserName/
    |-- Dirt/
        |-- samples/
            |-- myBass/
            |   |-- bass1.wav
            |   |-- bass2.wav
            |   |-- bass3.wav
            |-- hits/
            |   |-- hit1.wav
            |   |-- hit2.wav
            |   |-- hit3.wav
            |-- field/
            |   |-- bridge.wav
            |   |-- mountains1.wav
            |   |-- mountains2.wav
            |   |-- plains.wav
            |   |-- river.wav

Using the Custom Samples in Tidal Code

Given the folder structure above, you can now use the myBass, hits, and field sounds in your Tidal patterns:

d1 $ s "mybass hits*4" # n (slow 2 $ run 3)
d2 $ n "<0 2 1>" # s "field" # cut 1

Specifying Multiple Folders

If you have samples located in many folders, you can import them all:

(
s.waitForBoot {
	~dirt = SuperDirt(2, s); // two output channels

        // load samples from multiple folders:
	~dirt.loadSoundFiles("/Users/myUserName/Dirt/samples/*"); 
	~dirt.loadSoundFiles("/Users/myUserName/sounds/*"); 
	~dirt.loadSoundFiles("/Users/myUserName/recordings/chaska-sessions/*");
	~dirt.loadSoundFiles("/Users/myUserName/recordings/super-duper-experiments/*"); 

	s.sync; // wait for supercollider to finish booting up
	~dirt.start(57120, [0, 0]); // start superdirt, listening on port 57120, create two busses each sending audio to channel 0
};
);