{ "cells": [ { "cell_type": "markdown", "id": "7775ea91-20e8-4bcf-88ec-d991ec47fd27", "metadata": {}, "source": [ "# Roving oddball\n", "\n", "Here we will follow the methods section from [Canales-Johnson et al. (2021)](https://doi.org/10.1523/JNEUROSCI.0367-21.2021). We chose this because it's recent research, because it was one of the first hits on Scopus, and because it's open access. We will go over this section bit by bit and recreate the stimuli.\n", "\n", "Here's the relevant section:\n", "\n", "> \"We adopted a roving oddball paradigm (Cowan et al., 1993; Haenschel et al., 2005; Garrido et al., 2008). The trains of 3, 5, or 11 repetitive single tones of 20 different frequencies (250–6727 Hz with intervals of one-quarter octave) were pseudorandomly presented. Tones were identical within each tone train but differed between tone trains (Fig. 1A). Because tone trains followed on from one another continuously, the first tone of a train was considered to be an unexpected deviant tone, because it was of a different frequency than that of the preceding train. The final tone was considered to be an expected standard tone because it was preceded by several repetitions of this same tone. To avoid analytical artifacts stemming from differences in the number of standard and deviant stimuli, we considered only the last tone of a train as standard. There were 240 changes from standard to deviant tones in a single recording session. Pure sinusoidal tones lasted 64 ms (7 ms rise/fall), and stimulus onset asynchrony was 503 ms. Stimulus presentation was controlled by MATLAB (MathWorks) using the Psychophysics Toolbox extensions (Brainard, 1997; Pelli, 1997; Kleiner et al., 2007). Tones were presented through two audio speakers (Fostex) with an average intensity of 60 dB SPL around the ear of the animal.\"" ] }, { "cell_type": "raw", "id": "44324624", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Imports and random number generator\n", "-----------------------------------\n", "Before we start, let's import the necessary classes from *thebeat* and *NumPy*, and make a :py:class:`numpy.random.Generator` object with a seed. If you are not familiar with *NumPy* random generators and they confuse you, please refer to the `NumPy manual `_.\n", "\n", "We use a chosen `seed `_ so you we will get the same output as we." ] }, { "cell_type": "code", "execution_count": 1, "id": "58808a86", "metadata": {}, "outputs": [], "source": [ "from thebeat import Sequence, SoundStimulus, SoundSequence\n", "import numpy as np\n", "\n", "rng = np.random.default_rng(seed=123)" ] }, { "cell_type": "code", "execution_count": 2, "id": "e8efed48", "metadata": { "nbsphinx": "hidden" }, "outputs": [], "source": [ "# We suppress warnings, but let's hide that to avoid confusion\n", "import warnings\n", "warnings.filterwarnings('ignore')\n", "%matplotlib inline" ] }, { "cell_type": "raw", "id": "5bf6281b", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Summary\n", "-------\n", "\n", " \"The trains of 3, 5, or 11 repetitive single tones of 20 different frequencies (250–6727 Hz with intervals of one-quarter octave) were pseudorandomly presented. Tones were identical within each tone train but differed between tone trains (Fig. 1A). [. . .] Pure sinusoidal tones lasted 64 ms (7 ms rise/fall), and stimulus onset asynchrony was 503 ms.\"\n", "\n", " \n", "So, we create 20 stimuli with the given frequencies, and make trains with them that are either 3, 5, or 11 tones long.\n", "\n", "*********" ] }, { "cell_type": "raw", "id": "bfcbf8db", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Creating the Sequences\n", "----------------------\n", "Most of the time, it's conceptually the easiest to start with the :py:class:`~thebeat.core.Sequence` object(s). Here, there will be three (with 3, 5, and 11 events). The sequences are isochronous and the inter-onset interval is 503 milliseconds.\n", "\n", "Importantly, we will want to be able to join the sequences together at the end so we get one long train of sounds. Normally, a sequence of 3 events will have 2 inter-onset intervals (IOIs). Why that is we'll quickly visualize by plotting a simple sequence:" ] }, { "cell_type": "code", "execution_count": 3, "id": "4c1f55dc", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAC+CAYAAADa6ROSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAOgElEQVR4nO3df3TO9f/H8cemyfFtnEKn3/nIudaZaz9NszWGJB3ji8TRSaRa0o9TVqEfRLTikI46zqpTOQ6pQ79wOPiKOqGoba02Z5yllJRNzJxoP57fP5w9v13x/fSZLmZ2v52zc1zv98vb6/Xi2t0ub9cizMwEAICkyMaeAADg7EEUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAHfeqf7EgTkfhmUCb0zqE5brnA0iIyN00UX/pQMHjqiujv8oXu9s2pexz28Iy3X+6Z/bs2lPzibsy4kiIyM05rn/Ccu1Vsz577//9cLyK0HS8d+8iIgIRUZGNPZUzirsy4nYk5NjX050pveCKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABwRAEA4CLMzBp7EgCAswNfKQAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAA3ClFYfHixerTp4/i4uJ066236uuvvw73vM4aeXl5uuWWW5SUlKS0tDSNHz9eZWVlIWOOHTumadOmKTU1VUlJSXrwwQdVXl4eMmbv3r3Kzs5WQkKC0tLS9MILL6impuZMLuW0efXVVxUTE6OZM2f6sea6J7/88oseffRRpaamKj4+XgMHDlRRUZGfNzO99NJLysjIUHx8vMaMGaPdu3eHXOPgwYPKyclRcnKyUlJS9MQTT+jIkSNneCXhU1tbq3nz5qlPnz6Kj49X37599corr+jPb6Zwru/Ltm3bNG7cOGVkZCgmJkbr168POR+u9e/YsUO33Xab4uLilJmZqddee63hk7UGWrVqlXXp0sWWLVtmO3futKeeespSUlKsvLy8oZdqEsaOHWvLly+30tJSKykpsXvuucd69eplR44c8TFTpkyxzMxM27x5sxUVFdnw4cNtxIgRfr6mpsaysrJszJgxVlxcbBs3brTU1FSbM2dOYywprAoLC6137942cOBAmzFjhh9vjnty8OBB6927t02aNMkKCwvthx9+sE8//dS+//57H5OXl2ddu3a1devWWUlJiY0bN8769OljR48e9TF33XWXDRo0yAoKCmzbtm1244032oQJExpjSWGxYMECu+666+zjjz+2PXv22OrVqy0xMdEWLlzoY871fdm4caPNnTvX1q5da4FAwNatWxdyPhzrP3z4sKWnp1tOTo6VlpbaypUrLT4+3pYuXdqguTY4CsOGDbNp06b549raWsvIyLC8vLyGXqpJqqiosEAgYF988YWZmVVWVlqXLl1s9erVPmbXrl0WCAQsPz/fzI7/gbj22mtt//79PmbJkiWWnJxsx44dO6PzD6eqqirr16+fffbZZ3b77bd7FJrrnsyePdtGjhz5/56vq6uz66+/3l5//XU/VllZacFg0FauXGlm/7dPX3/9tY/ZtGmTxcTE2L59+07f5E+j7Oxsmzx5csixBx54wHJycsys+e3LX6MQrvUvXrzYunXrFvL8mT17tt10000Nml+DXj76448/9O233yo9Pd2PRUZGKj09Xfn5+Q3/MqUJOnz4sCSpbdu2kqRvvvlG1dXVIXtyzTXX6LLLLlNBQYEkqaCgQIFAQO3bt/cxGRkZqqqq0q5du87c5MNs+vTpyszMDFm71Hz3ZMOGDQoGg3rooYeUlpamwYMH69133/XzP/74o/bv3x+yL9HR0UpISPDnT35+vtq0aaO4uDgfk56ersjIyCb7Mm1SUpK2bt2q7777TtLxlzi+/PJL9ezZU1Lz3Zd64Vp/QUGBUlJS1LJlSx+TkZGh7777TocOHfqP53NeQyb/22+/qba2Vu3atQs53q5duxNeZz8X1dXV6bnnnlNycrICgYAkqby8XFFRUWrTpk3I2Hbt2mn//v0+5s+f/CT54/oxTc2qVatUXFysZcuWnXCuue7Jnj179Pbbb+vOO+/UuHHjVFRUpBkzZigqKkpDhgzxdZ3s+VP/7y3l5eW66KKLQs6fd955atu2bZPdl+zsbFVVVenmm29WixYtVFtbq0ceeUSDBg2SpGa7L/XCtf7y8nJdccUVIWPqn1Pl5eX+F9m/06AoNHfTpk3Tzp07tWTJksaeSqP6+eefNXPmTL3xxhs6//zzG3s6Zw0zUzAY1IQJEyRJsbGx2rlzp5YuXaohQ4Y08uwaz+rVq7VixQrNmTNHnTt3VklJiXJzc3XxxRc36305WzXo5aMLL7xQLVq0UEVFRcjxioqKE/7Wd66ZPn26Nm7cqIULF+qSSy7x4+3bt1d1dbUqKytDxldUVKhDhw4+5q933tQ/rh/TlHz77beqqKjQ0KFDFRsbq9jYWH3xxRdatGiRYmNjm+WeSMfnfc0114Qc69Spk/bu3evnJf3b50/79u114MCBkPM1NTU6dOhQk92XWbNmKTs7WwMGDFBMTIwGDx6s0aNHKy8vT1Lz3Zd64Vr/v3tONeTzc4Oi0LJlS3Xp0kVbtmzxY3V1ddqyZYuSkpIacqkmw8w0ffp0rVu3TgsXLtSVV14Zcj4YDCoqKipkT8rKyrR3714lJiZKkhITE1VaWhrym75582ZdcMEF6ty58xlZRzh1795dK1as0AcffOAfwWBQAwcO9B83tz2RpOTkZH/dvN7u3bt1+eWXS5KuuOIKdejQIWRfqqqqVFhY6M+fpKQkVVZW6ptvvvExW7duVV1dneLj48/AKsLv6NGjioiICDnWokULvyW1ue5LvXCtPzExUdu3b1d1dbWP2bx5s/71r3/9xy8dSTq1W1KDwaC99957tmvXLnv66actJSUl5C6Sc8nUqVOta9eu9vnnn9uvv/7qH7///ruPmTJlivXq1cu2bNliRUVFNmLEiJPefjl27FgrKSmxTz75xLp3796kb7/8qz/ffWTWPPeksLDQYmNjbcGCBbZ792776KOPLCEhwT788EMfk5eXZykpKbZ+/XrbsWOH3XfffSe99XDw4MFWWFho27dvt379+jWZWy9PZuLEidajRw+/JXXt2rWWmppqs2bN8jHn+r5UVVVZcXGxFRcXWyAQsDfffNOKi4vtp59+MrPwrL+ystLS09Ptscces9LSUlu1apUlJCSc/ltSzcwWLVpkvXr1si5dutiwYcOsoKDgVC7TJAQCgZN+LF++3MccPXrUnnnmGevWrZslJCTY/fffb7/++mvIdX788Ue7++67LT4+3lJTU+3555+36urqM72c0+avUWiue7JhwwbLysqyYDBo/fv3t3feeSfkfF1dnc2bN8/S09MtGAza6NGjraysLGTMb7/9ZhMmTLDExERLTk62SZMmWVVV1ZlcRlgdPnzYZsyYYb169bK4uDi74YYbbO7cuSG3Tp7r+7J169aTfh6ZOHGimYVv/SUlJTZy5EgLBoPWo0ePU/qvAnyPZgCA472PAACOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAMe7pOKcEBMT87djcnNz9f7776t169b+ZmwAQvE/mnFOqP/mPfVGjBihUaNGKSsry49dddVVOnDggCIjI9WpU6czPEOgaeArBZwT6t999c8uvfTSE47/9RuVAAjFvymgWRk1apTuvfdefzx//nwlJSWpuLhYI0aMUHx8vIYMGaLi4mIdO3ZMU6dOVbdu3dSzZ0+99dZbJ1wvPz9fd9xxhxITE9W1a1fl5OSc8L74QFNCFNDsVVdXa+LEiRo+fLjmz5+vmpoaPfDAA3ryySfVqlUrzZs3T3379lVubq6++uor/3n5+fkaNWqUoqOj9eKLL+rZZ59VUVGRxo8f34irAf4ZXj5Cs1ddXa1HH31UmZmZko5/46hx48YpISFBkydPlnT8GwutWbNGa9asUXJysiRpzpw5CgaDevnll/2byAQCAWVlZWnTpk1+PaAp4SsFNHuRkZFKS0vzxx07dpQkpaen+7EWLVroqquu0r59+yRJv//+u7766iv1799ftbW1qqmpUU1NjTp27KhLL71URUVFZ3QNQLjwlQKavVatWqlly5b+OCoqSpIUHR0dMi4qKkrHjh2TJFVWVqq2tla5ubnKzc094Zo///zzaZwxcPoQBeAUREdHKyIiQvfee6/69u17wvkLL7ywEWYF/HNEATgFrVu3VmJiosrKyhQXF9fY0wHChigAp+jxxx/X6NGj9fDDD2vAgAFq06aN9u3bp82bN2vo0KFKTU1t7CkCDUYUgFOUnJysJUuWaP78+Zo8ebKqq6t1ySWXqHv37rr66qsbe3rAKeFtLgAAjltSAQCOKAAAHFEAADiiAABwRAEA4IgCAMARBQCAIwoAAEcUAACOKAAAHFEAADiiAABw/wulraSxnuLxRwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq = Sequence.generate_isochronous(n_events=3, ioi=500)\n", "seq.plot_sequence(figsize=(4, 2));" ] }, { "cell_type": "markdown", "id": "1eb15a90", "metadata": {}, "source": [ "As you can see, the IOIs are the intervals *between* the events, meaning that for *n* events we have *n-1* IOIs.\n", "\n", "If we were to join sequences like these together, the final sound of a sequence and the first sound of the next sequence would coincide. To fix this, we can use the ``end_with_interval=True`` flag.\n", "\n", "So let's create the sequences:" ] }, { "cell_type": "code", "execution_count": 4, "id": "93b6f578", "metadata": {}, "outputs": [], "source": [ "seq_3 = Sequence.generate_isochronous(n_events=3, ioi=503, end_with_interval=True)\n", "seq_5 = Sequence.generate_isochronous(n_events=5, ioi=503, end_with_interval=True)\n", "seq_11 = Sequence.generate_isochronous(n_events=11, ioi=503, end_with_interval=True)\n", "# And add them to a list we'll call sequences\n", "sequences = [seq_3, seq_5, seq_11]" ] }, { "cell_type": "markdown", "id": "531a05a3", "metadata": {}, "source": [ "Now, these sequences look like this, and can thus be joined together later:" ] }, { "cell_type": "code", "execution_count": 5, "id": "059a43a0", "metadata": {}, "outputs": [ { "data": { "image/png": "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kGD79+9vv+HNbMaMGTZ37lx32S233GL5+fldYv5jvym11bxPPfWUDRw40N2GFi1aZL/61a/adf7jKS0ttVAoZJ988knUzf9de9i/f78NGTLEKisrbcSIES4M0baHFj2V9M033+jdd99VVlZWcFlsbKyysrJUXFzc5o9m/leHDh2SJJ166qmSpB07digSibj5L7roIp199tkqKSmRJJWUlCgUCqlPnz7BmuzsbNXW1mrXrl0dMveCBQs0bNgwN2dXmX/Tpk0Kh8O67bbbNHjwYI0bN05PP/10cPzjjz/WgQMH3B7i4+OVkpIS3IaKi4vVq1cvJSUlBWuysrIUGxvb7k9bpqWladu2bfrggw8kffvQ/d///reGDh3aJeY/VlvNW1JSooyMDPXo0SNYk52drQ8++EBfffVVB+3mW7W1tYqJiVGvXr26zPyNjY268847NX36dF188cXNjkfbHrq3ZPEXX3yhhoYG9e7d213eu3fvZs/ld7bGxkb94Q9/UHp6ukKhkCSpqqpKcXFxwQ2qSe/evXXgwIFgzdHfVCUF7zetaU9FRUUqLy/XM8880+xYV5h/7969+vvf/65rr71WeXl5Kisr08KFCxUXF6fx48cHMxzvNtT0u5Kqqiqdfvrp7nj37t116qmntvseZsyYodraWv36179Wt27d1NDQoN/97ncaO3asJEX9/Mdqq3mrqqp07rnnujVNt6uqqqrgh6/2VldXpz/+8Y8aPXq0TjnllODzR/v8jz/+uLp3765rrrnmuMejbQ8tCkNXMn/+fO3cuVOrV6/u7FF+sE8//VQPPvigli9frpNOOqmzx2kVM1M4HNbMmTMlSYmJidq5c6fWrFmj8ePHd/J032/dunV68cUXtXjxYvXr108VFRUqKCjQGWec0SXm/zGLRCK6/fbbZWaaP39+Z4/zg+3YsUNPPPGEnnvuOcXExHT2OD9Ii55KOu2009StWzdVV1e7y6urq5v9lNqZFixYoM2bN2vVqlU688wzg8v79OmjSCSimpoat766ulp9+/YN1hx7lk/T+01r2su7776r6upqXX755UpMTFRiYqLefPNNPfnkk0pMTIz6+Zs+x0UXXeQuu/DCC7Vv3z43w3fdhvr06aODBw+64/X19frqq6/afQ+PPPKIZsyYodGjRyshIUHjxo3TlClTVFhY2CXmP1Zbzftdt6uO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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "seq_3.plot_sequence(figsize=(4, 2));" ] }, { "cell_type": "raw", "id": "6390d59d", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Creating the stimuli\n", "--------------------\n", "Next, we'll create the :py:class:`~thebeat.core.SoundStimulus` objects, which will contain the sounds. " ] }, { "cell_type": "code", "execution_count": 6, "id": "0ffd6992", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 250. 590.89473684 931.78947368 1272.68421053 1613.57894737\n", " 1954.47368421 2295.36842105 2636.26315789 2977.15789474 3318.05263158\n", " 3658.94736842 3999.84210526 4340.73684211 4681.63157895 5022.52631579\n", " 5363.42105263 5704.31578947 6045.21052632 6386.10526316 6727. ]\n" ] } ], "source": [ "# Make an array that contains the 20 frequencies we'll use. We'll use numpy.linspace for that.\n", "freqs = np.linspace(start=250, stop=6727, num=20)\n", "print(freqs)" ] }, { "cell_type": "code", "execution_count": 7, "id": "16abdfd9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0), SoundStimulus(duration_ms=64.0)]\n" ] } ], "source": [ "# Loop over those frequencies, and create a list with generated SoundStimulus sound objects\n", "stimuli = []\n", "for freq in freqs:\n", " stim = SoundStimulus.generate(freq=freq, duration_ms=64, onramp_ms=7, offramp_ms=7)\n", " stimuli.append(stim)\n", "\n", "# We now have a list of Stimulus objects. Remember that they all have different frequencies\n", "print(stimuli)" ] }, { "cell_type": "raw", "id": "c781a6ce", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Creating the SoundSequences\n", "---------------------------\n", "We will now create :py:class:`~thebeat.core.SoundSequence` objects, which will basically be the trials.\n", "\n", "So, following the method section we need to combine the 20 stimuli we created above with the 3 different sequences, i.e. 60 combinations. That's easily done using a nested for-loop:" ] }, { "cell_type": "code", "execution_count": 8, "id": "7a740544", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "We have 60 trials\n" ] }, { "data": { "image/png": "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KgYNGqR169YFoxY0EudUAHXL6pts27JdXP8JqFPqrwgVQDho8PCnyy67TDk5OTp69KgGDBhwzBO1e/ToYUlxqB8yBVC3ti2b2bZstk8AQCRocKi48cYbJUkvvviiXnzxxYDxwoZhyOVyKT8/37oKcVyM2QaOw8ZNhO0TABAJGhwqFi1aVOf9u3btanQxABBurh7ya7tLAAAg6BocKv7f//t/NaYVFxfrnXfe0VtvvaUNGzZo5MiRlhQHAE53Rpcku0sAUIuWzaOPPxOAemlwqPhJeXm53n33Xb399tv69NNP5fV61a1bN917771W1gcAABAUzaI9dpcAhI0GhQqv16uPP/5Yb731lt5//30dPXpUCQkJ8nq9mjlzpi688MJg1QkAzsQpFUCTxSlPgHXqFSrWrl2rt99+W6tWrVJJSYnatGmj3/zmN7r44ov161//Wv369VNiYmKwawUAAADQBNUrVFx99dVyuVzq16+frr/+ep111lmKivrxoYcOHQpqgQDgZHwRCgCIBPUKFV26dNHWrVv1+eefy+PxqKSkRFlZWfyqNgBH4AfoAAAIrnqFijfffFPffPON3nzzTa1YsUL33HOPYmNjNWjQIJ177rlchx0AasHbIwAgEtT7RO3OnTtr3LhxGjdunP8ci7/97W/629/+JpfL5f/9ijPPPDNoxQJAYxgy7C4BQBNE6Aes06hLyp5xxhk644wzNHnyZH3yySd6++239d5772n16tU6+eST9d5771ldJwA4FJ9agKaKoZGAdRr9OxWS5PF4NGjQIA0aNEhHjx7V6tWr9fbbb1tVGwA4Ht+EAgAigalQ8XOxsbG66KKLdNFFF1n1lAAAAMFD6Acs47a7AAAAAADORqgAEP44TxsAgKAiVABAEHFOBdB0cUl8wDqECgAIIq4uAzRdbJ2AdQgVABBMfGoBAEQAQgWAsMcpFQAABBehAgCCiAMVQNPFKRWAdQgVABBEnAgKAIgElv34XSgcOHBAU6dO1QcffCC3262hQ4fqD3/4g1q0aFHr/M8884w++eQT7d27V+3atVNWVpbGjh2rVq1a+edLSUmp8dgnn3xSw4cPD9q6AAAAexH6Aes4KlRMmDBBBQUFWrBggaqqqnTfffdpypQpmjlz5jHn379/v/bv369Jkyapc+fO+v777/Xggw9q//79mjVrVsC806dPV2Zm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yhTjnHPOMXJzc42NGzcaV1xxhXHFFVf476+urjYuuugi44YbbjDy8/ONjz76yOjfv78xc+ZMO1bJcX5+9SfDoN9W27Bhg9G9e3djzpw5xrfffmu8+eabRnp6uvHXv/7VP88LL7xg9O3b11i9erXx1VdfGbfddpsxePBg4+jRo/55srOzjUsuucTYsGGD8cUXXxhDhw41xo0bZ8cqNWmTJk0yMjMzjQ8++MDYtWuX8fe//93o16+f8fjjj/vnod/mlJWVGVu2bDG2bNlidOnSxViwYIGxZcsW/9WGrOhvaWmpkZGRYfz+9783tm7daqxYscJIT083li5dGvL1tVtd/a6srDRuvfVW4+yzzzby8/MD9qM/v6oQ/W6Y473Gf+mXV38yjMjpOaHCAosXLzbOOecco0ePHsZll11mrF+/3u6SHKlLly7H/LN8+XL/PEePHjUefPBB48wzzzTS09ONO+64w9i/f3/A8+zevdu48cYbjbS0NKNfv37Go48+alRVVYV6dRzpl6GCflvv/fffNy666CIjNTXVGDZsmPHKK68E3O/z+YynnnrKyMjIMFJTU41rr73W2L59e8A8JSUlxrhx44xevXoZffr0Me655x6jrKwslKvhCIcOHTIefvhh45xzzjF69uxpnHfeecaTTz4Z8AGLfpuzZs2aY75vT5o0yTAM6/qbn59vXHXVVUZqaqqRmZkZsZdtr6vfu3btqnU/umbNGv9z0O+GOd5r/JeOFSoipecuw/jZT4sCAAAAQANxTgUAAAAAUwgVAAAAAEwhVAAAAAAwhVABAAAAwBRCBQAAAABTCBUAAAAATCFUAAAAADCFUAEAAADAFEIFAAAAAFOi7C4AANB0paSkHHee6dOn6/XXX9cJJ5ygF154IQRV1W3JkiV67bXXtHz58qAva86cOfrss8+0YMGCoC8LAJoyl2EYht1FAACapvXr1wfcvuKKK3TNNdfooosu8k875ZRTVFxcLLfbrV/96lchrjBQeXm5hgwZovvvv1/nn39+0JdXWlqqc889V88++6z69+8f9OUBQFPFkQoAQK169epVY9pJJ51UY3q7du1CU9BxrFy5UlVVVTrvvPNCsry4uDgNHTpUixYtIlQAiGicUwEAMO2aa67RLbfc4r/9zDPPqHfv3tqyZYuuuOIKpaWlacSIEdqyZYsqKir0wAMP6Mwzz9TZZ5+tP/3pTzWeb926dRozZox69eqlM844Q+PHj1dRUdFx63jjjTd03nnnKSrqv9+Zvfbaa0pJSdHGjRt1ww03KD09Xeeff74+/fRT+Xw+/fGPf1RGRoYyMjI0c+ZM+Xw+/2P37dunsWPHKiMjQz179tTgwYM1bdq0gGUOGzZM//jHP1RcXNyIzgFAeCBUAACCoqqqSpMmTdKoUaP0zDPPqLq6Wnfeeaf+8Ic/KDY2Vk899ZSysrI0ffp0ffnll/7HrVu3Ttdcc41atWqlP/7xj5o6dao2btyo22+/vc7lHT16VOvWrVOfPn2Oef+kSZN0zjnnaPbs2UpKStKdd96pRx55RPv27dNjjz2m3/3ud3rxxRe1YsUK/2MmTpyor7/+WpMnT9a8efN01113BYQOSerdu7e8Xq8+++wzE90CAGdj+BMAICiqqqo0YcIEDRo0SJLk8/l06623Kj09Xffee68kqX///lq1apVWrVrlDwMzZ85UamqqZs+eLZfLJUnq0qWLLrroIv3jH//wP98v5efnq6qqqtaTy0ePHq3f/e53kqT27dvr4osv1qZNm/TKK69IkjIzM/X+++9r1apVuvjiiyVJGzdu1Lhx43ThhRf6n+eSSy4JeN64uDidfPLJ2rBhg4YNG9aYVgGA43GkAgAQFG63WwMGDPDfPu200yRJGRkZ/mkej0ennHKK9u3bJ+nHE62//PJLDRs2TF6vV9XV1aqurtZpp52mk046SRs3bqx1eQUFBZJqP7/jrLPOqlHLL8+DOP3007V3717/7e7du+ull17Syy+/rJ07d9a67DZt2viXDwCRiFABAAiK2NhYxcTE+G9HR0dLklq1ahUwX3R0tCoqKiT9eDUlr9er6dOnq0ePHgF/9uzZE/CB/5d+eo6fL/Pnfr7cn+aJi4urUUtlZaX/9h//+Ef1799fTz31lIYOHaphw4bp73//e43njomJ8S8fACIRw58AAE1Gq1at5HK5dMsttygrK6vG/W3btq31sa1bt5b0YzBJTEy0pJ6kpCRNnz5dPp9PmzZt0pw5c/S///u/WrVqlTp27Oif79ChQ/r1r39tyTIBwIkIFQCAJuOEE05Qr169tH37dvXs2bNBjz399NMlSbt371anTp0srcvtdistLU1333233n//fe3cudMfKnw+n/bs2aORI0daukwAcBJCBQCgSZk4caKuvfZa3X333Ro+fLji4uK0b98+ffrpp7r00kvVr1+/Yz6uY8eOSkxM1ObNm2s9mbshDh06pOzsbP32t7/V6aefrqqqKi1evFhxcXHq3r27f74dO3boyJEj6tu3r+llAoBTESoAAE1Knz599PLLL+uZZ57Rvffeq6qqKp144onq37+/Tj311DofO2zYMH300UfHvfxsfTRr1kxdunTR4sWLtXfvXsXGxio1NVXz588POBn8o48+UocOHRp8ZAUAwonLMAzD7iIAALDCV199pREjRmj16tXq0KFDSJY5cuRInXvuubrzzjtDsjwAaIq4+hMAIGx07dpVgwcP1qJFi0KyvM8//1y7du3SmDFjQrI8AGiqCBUAgLDy+9//XklJSSFZVllZmR577LEal6YFgEjD8CcAAAAApnCkAgAAAIAphAoAAAAAphAqAAAAAJhCqAAAAABgCqECAAAAgCmECgAAAACmECoAAAAAmEKoAAAAAGDK/wf9uX0VldBpBwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "trials = []\n", "\n", "for seq in sequences:\n", " for stim in stimuli:\n", " trial = SoundSequence(stim, seq)\n", " trials.append(trial)\n", "\n", "# Confirm there's 60:\n", "print(f\"We have {len(trials)} trials\")\n", "\n", "# Let's plot one of the trials to see what they look like:\n", "trials[2].plot_waveform();" ] }, { "cell_type": "raw", "id": "ef3322b1", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Creating the trains\n", "-------------------\n", "Finally, we shuffle all combinations and join them using the plus operator to form one (very) long train of trials. For this example, we are not going to create a train using all trials; that would be a bit too long to plot or save etc. So we here only join the first 10 trials." ] }, { "cell_type": "code", "execution_count": 9, "id": "d1878122", "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAC+CAYAAADk47wAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/av/WaAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAgNUlEQVR4nO3deVSV1f7H8Q8gpCiSY46oaR67CgpqCKhcUVQUK3HANLoVOaTmWCppTrVCTdQEUzNzHtIQboPQjbrazczsiulVMc0RrVTU5CdeRDm/P1ye24lZ4Dlg79darMV5zt77+Z7HZ+2lH/ezj53ZbDYLAAAAAAAAMJC9rQsAAAAAAADAnw+hFAAAAAAAAAxHKAUAAAAAAADDEUoBAAAAAADAcIRSAAAAAAAAMByhFAAAAAAAAAxHKAUAAAAAAADDEUoBAAAAAADAcIRSAAAAAAAAMByhFAAAf0Lbtm2TyWRSamqqTc5vMpkUHR1tk3OXBltfz/tNQECApkyZYusyAABAKSOUAgCgHDp69KjGjBmjLl26yN3dXZ06ddJzzz2ndevWWbVbtmyZkpKSbFRl2cK1KFm//vqroqOjdeTIEVuXYlEWawIAAHkjlAIAoJzZt2+f+vXrp5SUFA0YMEDTp0/XgAEDZG9vr7Vr11q1Xb58ea5BzBNPPKEDBw6ofv36RpVtc3ldi5LwZ7yeFy5cUExMTJkKgMpiTQAAIG8VbF0AAAAommXLlsnFxUUffvihqlatavVeWlpaocZwcHCQg4NDaZR3X8jIyJCzs3Oh23M9AQAAio6VUgAAlDNnzpxRs2bNcgRSklSjRg3L7yaTSRkZGYqLi5PJZJLJZLLs05PbHkgBAQEaPny49uzZo5CQEHl4eKhPnz7as2ePJOkf//iH+vTpI3d3d4WEhOjw4cNW5w4LC1NYWFiOmqZMmaKAgIB8P1NebaKjo2UymayO7dq1S0899ZTatWsnT09P9ejRQwsWLMh3/Pyuxd1zHD9+XBMnTlT79u01ePBgSVJKSoqmTJmirl27yt3dXX5+foqIiNCVK1esxs/ven7//ffq37+/3N3d1bVrV8XHx+db613Z2dlavXq1evfuLXd3d/n6+mr69On67bffLG2GDx+url275to/NDRUISEhVsf+/ve/W/5sH3vsMY0fP14///yzVZuwsDAFBwfr+PHjCgsLU+vWrdWpUyetWLHC0mbPnj3q37+/JCkiIsJyTbdt25bn57l7nX/66SeNHTtWXl5e8vb21htvvKHMzMwCr8fZs2c1ZswYPfbYY2rdurUGDhyoHTt2FKsmAABgW6yUAgCgnKlfv76Sk5P1448/qnnz5nm2mzdvnqZNmyYPDw8NHDhQkuTm5pbv2KdPn9bEiRM1aNAgPf7443r//fc1YsQIzZo1SwsXLtRTTz0lSXr33Xc1btw4JSYmyt7euP/jOnbsmIYPHy6TyaQxY8bIyclJp0+f1r59+/LtV5hrMXbsWDVq1Ejjx4+X2WyWJH3zzTc6e/asQkJCVKtWLR07dkxbtmzR8ePHtWXLFtnZ2eV73tOnT2vs2LHq37+/+vbtq9jYWE2ZMkUtW7bUI488km/f6dOnKy4uTiEhIQoLC1Nqaqo2bNigw4cPa9OmTXJ0dFRQUJAmT56sAwcOyMPDw9L33Llz2r9/vyZNmmQ5tnTpUr399tsKCgpS//79dfnyZa1fv15DhgxRfHy8Vcj522+/6YUXXlBgYKCCgoL02Wefaf78+WrevLn8/f3VtGlTjRkzRosXL1ZoaKjatm0rSfLy8sr3M0nSuHHjVL9+fU2cOFH79+/XunXrdO3aNc2bNy/PPpcuXdKgQYN048YNhYWFqVq1aoqLi9OLL76oxYsXKzAwsFg1AQAA2yCUAgCgnHn++ec1dOhQPfnkk/Lw8FDbtm3l4+Mjb29vOTo6Wto98cQTmjlzpho2bKgnnniiUGOfPHlSmzdvlqenpySpWbNmCg8P12uvvaaEhATVq1dPkuTq6qrp06dr79698vb2LvkPmYddu3YpKytLK1asUPXq1QvdrzDXokWLFoqKirI6NnjwYD3//PNWx9q0aaMJEybo3//+t9q1a5fveU+ePKkNGzZY2gUFBcnf31/btm3T5MmT8+z3/fffa+vWrZo/f7769OljOe7t7a0XXnhBiYmJ6tOnj7p16yYnJyclJCRYhVIJCQmys7NTUFCQpDshVXR0tMaNG6cRI0ZY2nXv3l19+/bVxo0brY5fuHBBc+fO1ZNPPilJ6t+/vwICAhQbGyt/f3/VrFlTnTt31uLFi9WmTZtC31+S1KBBAy1dulSSNGTIEFWpUkUbN27U888/rxYtWuTa591339WlS5esruWAAQP0+OOPKzIyUl27di1WTQAAwDZ4fA8AgHLGz89PmzdvVkBAgFJSUvTee+8pPDxcnTt31hdffFGssZs1a2YJpCSpdevWkqQOHTpYAqnfHz979myxzldUd1fzfPHFF8rOzi7RsQcNGpTjWMWKFS2/Z2Zm6vLly5bPfujQoQLHbNasmVVwVb16dTVp0qTA65aYmCgXFxf5+fnp8uXLlp+WLVvK2dnZ8khllSpV1LlzZyUkJFhWd0nS9u3b1aZNG8uf2eeff67s7GwFBQVZjVezZk01atTIMt5dzs7OVqGOk5OT3N3dS+TPe8iQIVavn376aUnSV199lWefnTt3ysPDw+paVq5cWaGhoTp37pyOHz9e7LoAAIDxWCkFAEA55OHhoZiYGN28eVMpKSlKSkrS6tWrNXbsWMXHx6tZs2b3NG7dunWtXru4uEiS6tSpY3W8SpUqkqRr167d03nuVa9evbR161ZNmzZNUVFR8vHxUWBgoHr27FnsxwgbNGiQ49jVq1cVExOj7du359hEPj09vcAx/3g9pTurzH6/L1RuTp8+rfT0dPn4+OT6/u9r6dWrl5KSkpScnCwvLy+dOXNGhw4d0quvvmppc+rUKZnNZnXv3j3X8SpUsP4rYZ06dXI8mujq6qqjR4/mW3dhNGrUyOq1m5ub7O3trfbj+qPz589bwsDfe/jhhy3v5/coKwAAKJsIpQAAKMecnJzk4eEhDw8PNW7cWBEREUpMTNTo0aPvaby8vkEur+O/X52Tl9u3bxfYJq+9mf7Yt2LFitqwYYP27NmjHTt26F//+pe2b9+uDz74QO+//36xvgHvgQceyHFs3LhxSk5OVnh4uB599FE5OzsrOztbL7zwQqE++73Wk52drRo1amj+/Pm5vv/7Rxe7dOmiSpUqKSEhQV5eXkpISJC9vb169uxpNZ6dnZ1WrFiRa01//KZBI79JsKB9uQAAwP2LUAoAgPtEq1atJN3ZD8gWXF1dc3286/z58wX2rVq1aq6rrnLra29vLx8fH/n4+CgiIkLLli3TwoULtWfPHvn6+t5b8bn47bfftHv3br300ktWId+pU6dK7Bx5cXNz0+7du+Xl5WX1CGFunJ2d9de//lWJiYmKiIjQ9u3b1a5dOz300ENW45nNZjVo0EBNmjQpkRrvNUw6ffq0GjZsaPU6Ozs715Vqd9WrV08nT57McfzEiROW94tTEwAAsA32lAIAoJz59ttvc12ls3PnTkn/e6RJuhNYGPWIXcOGDXXixAldvnzZciwlJaXAb8aT7oQm6enpSklJsRy7cOGCPv/8c6t2V69ezdH30UcflSTdvHkz33MU9VrktVpozZo1hR7jXgUFBen27dt65513crx369atHJ+jV69eunDhgrZu3aqUlBTLBud3de/eXQ4ODoqJiclx75jNZl25cqXINVaqVElS0R/h3LBhg9Xr9evXS5I6d+6cZx9/f38dOHBAycnJlmMZGRnasmWL6tevb3lc9V5rAgAAtsFKKQAAypk33nhDN27cUGBgoB5++GFlZWVp3759SkhIUP369RUSEmJp27JlS+3evVurVq1S7dq11aBBg1z35ikJ/fv31+rVqxUeHq7+/fsrLS1NmzdvVrNmzXT9+vV8+/bq1Uvz58/X6NGjFRYWpv/+97/atGmTmjRpYrWh+JIlS/T999/L399f9evXV1pamjZu3Kg6deqobdu2+Z6jqNeiSpUqat++vd577z1lZWXpoYce0q5du/Ld+6ikPPbYYwoNDdXy5ct15MgR+fn5ydHRUadOnVJiYqKmTp1q9Xiev7+/KleurLlz58rBwUE9evSwGs/NzU3jxo1TVFSUzp07p27duqly5cpKTU1VUlKSBg4cqPDw8CLV6ObmpqpVq2rz5s2qXLmynJ2d5eHhYbUKKjepqakaMWKEOnXqpP379+ujjz5ScHBwnt+8J0nDhg3Tp59+qqFDhyosLEyurq6Kj49XamqqoqOjLfuJ3WtNAADANlgpBQBAOTNp0iR5e3tr586dioyMVGRkpA4ePKjBgwdr69atlm+ok6QpU6aoZcuWWrRokSZMmKBNmzaVWl1NmzbV3LlzlZ6ersjISH355ZeaN2+eWrZsWWDfatWqKSYmRpUqVdJbb72luLg4TZgwQV26dLFqFxAQoLp16yo2NlazZs3Shg0b1L59e61Zs8ayKXte7uVaREVFqWPHjtq4caMWLFigChUqaMWKFQX2KwmzZ8/W66+/rrS0NC1cuFBRUVH69ttv9fjjj8vLy8uq7QMPPKCAgABdv35d3t7eqlGjRo7xhg0bZglwlixZonnz5unLL7+Un5+fAgICilyfo6Oj5syZIwcHB82cOVMTJkzQ3r17C+y3aNEiOTk5KSoqSjt37tTTTz+tN998M98+NWvW1ObNm+Xr66v169drwYIF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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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Aa+//rrZ+x588EHExcUhPj7e9o1AREREZAV2ShERERE5WW5uLkaPHo3+/ftj+vTpyMvLw7Bhw/D222/Dz88PH3/8Mbp06YLY2Fjs27fP9L79+/dj0KBBCA4OxkcffYSJEyfi8OHDGDp0aLGfl5WVhf3796NZs2Zmy2NjY7F161aMGDECs2fPxqhRo+Dr62v2mtq1ayM0NBQ7duxw3AYgIiIi0sDb94iIiIicLDc3F2+88QY6dOgAAMjPz8eLL76Ixo0bY+zYsQCAe++9F+vXr8f69etNnUlTp05Fw4YNMWPGDHh4eAAA6tati169emHbtm2m9RUWFxeH3Nxci8nZDx8+jF69eqF3796mZT179rR4f3R0NA4ePGj/H05ERERUDI6UIiIiInIyT09PtG7d2vRzjRo1AABt2rQxLfPy8kK1atVw5coVALcmKt+3bx+6d+8Og8GAvLw85OXloUaNGqhUqRIOHz5c5Oddu3YNgOX8VnfffTdWrFiB2bNn48SJE0W+PywszLQOIiIiImfhSCkiIiIiJ/Pz8zO7Tc7HxwcAEBwcbPY6Hx8fZGdnA7g1/5PBYEBsbCxiY2Mt1nn58uUiP69gHYVvzXvnnXcQGhqKOXPm4IMPPkClSpXw/PPP44knnigyBxEREZGzsFOKiIiISKDg4GB4eHjghRdeQJcuXSx+HxYWVuR7Q0NDAdzq2IqMjDRb59tvv423334bx48fx/z58zFhwgTUrVsXLVq0ML0uLS0NZcuWddwfQ0RERKSBnVJEREREAgUEBKBJkyY4ffo0GjVqpOu9NWvWBABcuHABtWvX1nxNdHQ0xo4dix9++AGnTp0y65S6ePEi7r33XtvDExEREVmBnVJEREREQo0aNQpPPfUUXnvtNfTs2RMhISG4cuUKfvvtN/Tp0wetWrXSfF9UVBQiIyNx9OhRs8nQBw4ciK5du+Kuu+6Cl5cXVq5cCR8fH7MOqYyMDJw+fRovv/yy0/8+IiIiKt3YKUVEREQkVLNmzbBo0SJMnz4dY8eORW5uLipWrIh7770X1atXL/a93bt3xy+//IKhQ4earW/lypW4cOECPD09UbduXXzxxRdmo6l+/fVX+Pn54b777nPa30VEREQEAB5Go9GoOgQREREROVZ8fDx69+6NzZs3o0qVKla/79VXX0VgYKDm5OpEREREjuSpOgAREREROV69evXQqVMnzJ8/3+r3nD9/Htu2bcNLL73kxGREREREt7BTioiIiOgO9eabb6J8+fJWv/7q1at47733UK1aNSemIiIiIrqFt+8REREREREREZHLcaQUERERERERERG5HDuliIiIiIiIiIjI5dgpRURERERERERELsdOKSIiIiIiIiIicjl2ShERERERERERkcuxU4qIiIiIiIiIiFyOnVJERERERERERORy7JQiIiIiIiIiIiKX+3/EagZOzoMNVwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Shuffle the trials (we created the rng object all the way at the beginning of this tutorial)\n", "rng.shuffle(trials)\n", "\n", "# Initialize the train by getting the first Sequence\n", "train = trials[0]\n", "\n", "# Then we add to that train the next 9\n", "for i in range(1,10):\n", " train = train + trials[i]\n", "\n", "# Let's see what it looks like\n", "train.plot_sequence(title=\"Stimulus train event plot\", figsize=(12, 2));\n", "train.plot_waveform(title=\"Stimulus train waveform\", figsize=(12, 2));\n", "\n", "# If you want, you can save the wav or play it (both of which we'll not do here)\n", "\n", "#train.write_wav('train.wav')\n", "#train.play()" ] }, { "cell_type": "code", "execution_count": 10, "id": "c4a0eae2", "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# You can listen to the sound here. You can ignore this code, it's only for this website.\n", "# In your Python editor you would simply use train.play()\n", "from IPython.display import Audio\n", "Audio(data=train.samples, rate=train.fs)" ] }, { "cell_type": "markdown", "id": "ed1f981d", "metadata": {}, "source": [ "## Code summary" ] }, { "cell_type": "code", "execution_count": 11, "id": "6209a728", "metadata": {}, "outputs": [], "source": [ "from thebeat.core import Sequence, SoundStimulus, SoundSequence\n", "import numpy as np\n", "\n", "rng = np.random.default_rng(seed=123)\n", "\n", "seq_3 = Sequence.generate_isochronous(n_events=3, ioi=503, end_with_interval=True)\n", "seq_5 = Sequence.generate_isochronous(n_events=5, ioi=503, end_with_interval=True)\n", "seq_11 = Sequence.generate_isochronous(n_events=11, ioi=503, end_with_interval=True)\n", "sequences = [seq_3, seq_5, seq_11]\n", "\n", "freqs = np.linspace(start=250, stop=6727, num=20)\n", "\n", "trials = []\n", "\n", "for seq in sequences:\n", " for stim in stimuli:\n", " trial = SoundSequence(stim, seq)\n", " trials.append(trial)\n", "\n", "rng.shuffle(trials)\n", "\n", "train = trials[0]\n", "for i in range(1, 60):\n", " train = train + trials[i]\n", "\n", "#train.write_wav('train.wav')\n", "#train.play()" ] } ], "metadata": { "celltoolbar": "Metagegevens bewerken", "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }