# Pacotes de Samples

Nota: esta secção do tutorial cobre tópicos avançados de trabalho com grandes directórios dos teus próprios samples. Isto será o caso se tiveres feito download ou comprado o teu próprio pacote de samples e desejares usa-lo com o Sonic Pi.

Sente-te à vontade para saltar esta secção se estiveres contente com trabalhar com samples pré-incorporados

Quando te encontrares a trabalhar com ficheiros grandes ou ficheiros externos também pode ser espectaculérrimo escrever o caminho completo para disparar um sample individual

Por exemplo, vamos partir do princípio que tens a pasta abaixo na tua máquina:

    /path/to/my/samples/

Quando olhamos para os conteúdos da pasta encontramos os seguintes samples:

- ‘100_A#_melody1.wav’
- `100_A#_melody2.wav`
- `100_A#_melody3.wav`
- `120_A#_melody4.wav`
- `120_Bb_guit1.wav`
- `120_Bb_piano1.wav`

Normalmente de modo a reproduzirmos o sample de piano apenas temo de usar o caminho completo:

    sample "/path/to/my/samples/120_Bb_piano1.wav"

Se quisermos tocar o sample de guitarra podemos usar este caminho, também

    sample "/path/to/my/samples/120_Bb_guit.wav"

Contudo, ambas as evocação do sample exigem que saibamos os nomes dos samples dentro da nossa directoria. E que tal se quisermos apenas ouvir cada um dos samples individualmente de forma rápida?

## A indexar as Bibliotecas de Samples

Se quisermos reproduzir o primeiro sample na directoria apenas precisamos de passar o nome do directório para ‘sample’ e o index a ‘0’ tal como acontece abaixo

    sample "/path/to/my/samples/", 0

Também podemos criar um atalho para a nossa directoria utilizando uma variável:

    samps = "/path/to/my/samples/"
    sample samps, 0

Se agora quisermos reproduzir a segunda amostragem na nossa directoria, apenas é necessário adicionar 1 ao nosso índice:

    samps = "/path/to/my/samples/"
    sample samps, 1

Note-se que não mais é preciso conhecer os nomes das amostragens na directoria - apenas necessitamos de conhecer a própria directoria (ou ter um atalho para ela). Se pedirmos um índice que é maior do que o número de amostragens, simplesmente dará a volta da mesma foram que Rings. Portanto, qualquer que seja o número que for utilizado, é garantido que vamos obter uma das amostragens nessa directoria.

## Como filtrar Pacotes de Amostragens

Geralmente indexar é o suficiente, mas algumas vezes precisamos de mais capacidade para organizar os samples. No entanto, muitos pacotes de samples contém informações úteis nos nomes dos ficheiros. Vamos dar uma olhada nos nomes dos ficheiros de sample no nosso diretório.

- ‘100_A#_melody1.wav’
- `100_A#_melody2.wav`
- `100_A#_melody3.wav`
- `120_A#_melody4.wav`
- `120_Bb_guit1.wav`
- `120_Bb_piano1.wav`

Note que há boas informações nos nomes dos arquivos. Primeiro, BPM (batidas por minuto)

Podemos usar essa convenção de nomenclatura apresentada nos exemplos para ajudar a filtrar o que queremos. Por exemplo, se estamos a trabalhar em 120 BPM, podemos filtrar todos os exemplos que contenham ‘“120’” da seguinte maneira:

    samps = "/path/to/my/samples/"
    sample samps, "120"

Isso tocará o primeiro resultado encontrado. Se quisermos o segundo, basta usar o índice:

    samps = "/path/to/my/samples/"
    sample samps, "120", 1

Podemos usar vários filtros ao mesmo tempo. Se quisermos um exemplo em que o nome do ficheiro contenha tanto “120” como “A#”, podemos usar o seguinte código:

    samps = "/path/to/my/samples/"
    sample samps, "120", "A#"

Finalmente, podemos usar nossas próprias definições para chamar o ‘sample’:

    samps = "/path/to/my/samples/"
    sample samps, "120", "Bb", 1, lpf: 70, amp: 2

## Código

O filtro pre-arg aceita dois tipos de informação: código e filtros. Códigos são informações usadas para criar uma lista de resultados em potencial. Um código pode ter duas formas:

1. “/path/to/samples” - um comando representando um caminho válido para um diretório
2. “/path/to/samples/foo.wav” - um comando representando um caminho válido para um sample

`sample` fn primeiro reunirá todos os códigos e os usará para criar uma grande lista de resultados possíveis. A lista é construída primeiro adicionando todos os caminhos de diretório válidos e depois todos os ficheiros `.flac`, `.aif`, `.aiff`, `.wav`, `.wave` encontrados nos diretórios.

Por exemplo, dê uma olhada no seguinte código:

    samps = "/path/to/my/samples/"
    samps2 = "/path/to/my/samples2/"
    path = "/path/to/my/samples3/foo.wav"
    sample samps, samps2, path, 0

Aqui estamos combinando os samples encontrados em dois diretórios e adicionando um sample específico. Se `"/path/to/my/samples/"` contém 3 samples e `"/path/to/my/samples2/"` contém 12, temos 16 samples possíveis para indexar e filtrar ( 3+ 12 + 1).

Por predefinição, apenas os ficheiros de sample dentro de um diretório são colhidos para a lista de resultados possíveis. Algumas vezes quer pesquisar e filtrar em subdiretórios. Para isso, use a busca recursiva adicionando ‘**’ ao final do diretório raiz.

    samps = "/path/to/nested/samples/**"
    sample samps, 0

Cuidado ao buscar em uma pasta com muitos subdiretórios porque poderá levar muito tempo. Porém, os conteúdos serão guardados para utilização posterior e a demora acontecerá apenas na primeira vez.

Finalmente, note que as fontes precisam de ser definidas inicialmente. Se nenhuma fonte é indicada, os samples de origem serão usados como candidatos na lista padrão de trabalho.

## Filtros

Depois de teres uma lista de candidatos poderás usar os seguintes filtros para reduzir ainda mais a seleção:

- `"foo"` As cadeias filtram ocorrências da sub-cadeia dentro do nome do ficheiro (menos o caminho da directoria e a sua extensão).
- `/fo[oO]/` Usando o padrão de “Expressões Regulares” para filtrar o nome do ficheiro (menos o caminho da directoria e a extensão do ficheiro).
- `:foo` - Keywords filtra os candidatos com base na correspondência directa da palavra chave no nome do ficheiro (menos o caminho da directoria e a extensão do ficheiro).
- `lambda{|a| ... }` - Função PROC com um argumento será tratada como um filtro de candidatos ou uma função geradora. Recebe uma lista de candidatos actuais e devolve uma nova lista de candidatos (uma lista de caminhos para os ficheiros de samples).
- `1` - Números irão selecionar o candidato com esse índice (desdobrando o índice circularmente se necessário).

,Por exemplo. podemos filtrar sobre todos os samples de uma directoria que contêm a cadeia `"foo"`e tocar o sample com a primeira correspondência a meia velocidade:

    sample "/path/to/samples", "foo", rate: 0.5

Consultar a ajuda para `sample` para exemplos mais detalhados de uso. Notar que a ordem dos filtros é honrada.

## Compósitos

Finalmente, poderá ser usadas listas sempre que se colocar uma fonte ou filtro. A lista será “achatada” e o seu conteúdo será tratado como uma fonte regular ou filtro. Assim as seguintes chamadas a `sample` são semanticamente equivalentes:

    sample "/path/to/dir", "100", "C#"
    sample ["/path/to/dir", "100", "C#"]
    sample "/path/to/dir", ["100", "C#"]
    sample ["/path/to/dir", ["100", ["C#"]]]

## Envolvendo

Esta é uma secção avançada para pessoas que necessitam verdadeiro poder para manipular e usar pacotes de samples. Se muito desta secção não fizer sentido não se preocupe. É provável que não necessite de nenhuma da sua funcionalidade por agora. No entanto, saberá quando necessitar e poderá regressar e reler a secção quando começar a trabalhar com grandes directorias de samples.