User:Markvandenheuvel/specialissue10: Difference between revisions

From XPUB & Lens-Based wiki
Line 214: Line 214:
-----
-----
===Pitch control===
===Pitch control===
 
<gallery widths=250px heights=200px perrow=3 caption="sunflowers are groovy">
[[File:20191119_153708.jpg|Adding pitch control|300px|]] [[File:20191215 144305.jpg|300px|Tapeloop gate-trigger]] [[File:20200220 171912.jpg|300px]]
File:20191119_153708.jpg|Adding pitch control
File:20191215 144305.jpg|Tapeloop gate-trigger
File:20200220 171912.jpg|300px





Revision as of 18:05, 22 February 2020

SPECIAL ISSUE #10: LFP

Materialising the Blackbox

Full program and description: http://pzwiki.wdka.nl/mw-mediadesign/index.php?title=Category:LFP



Meergranen with volume potmeter

Introduction

  • modular synthesis: difference between analog & digital modules
  • possibilities to patch modules
  • the Eurorack format
  • how to use modular synth as an interface

Constructing the 'Meergranen' 8-bit sample module:

  • Walk through the components used
  • Soldering & testing
  • Flashing different presets onto the Arduino Uno
  • laser cutting a frontpanel

ideas & thoughts

Possibilities of the project:

  • synthesizer module as an interface: the cover and connectivitiy to the other modules (interrelationality)
  • possibilities and limitations of both software and hardware
  • connecting modules augments the possibilites > modularity = Great affordance

links: Basic course in modular synthesizers

Workshop with Olli Aarni at the Player

date: 23 t/m 25-09-2019
pad: https://pad.xpub.nl/p/olliworkshop

Workshop day 1

Listening, discussing sound in relation to linguistics and ways to describe it. "Cognitive linguistics" in relation to sound production. Language as an interface, a tool.

RATELKLONK (also known as a 'klonkie') is a made up word to describe the sound that is produced when a bike lock is chained to a metal object (fence, lamp post, etc)


Workshop day 2

Composing a collection of words (terms, verbs etc.) to talk about sound. What is the difference between the 'official' terminology and subjective methods to describe sound?
Sound categorising exercise

My categories were based on a narrative: A group of people (or entities), a small society performing phycical work or social tasks.

  • Cat#1: They did this before. Nothing new… Very little excitement to execute. It's like a routine for them.
  • Cat#2: They did it before but it still sometimes excites them unexpectedly. Not too hard! But be aware for unforseen things that definitely are happening.
  • Cat#3: These things will always be exciting and can't be done on auto-pilot. Be aware for unexpected things that may be happening.

Somewhat common categories:

  • Room + Speech
  • Rhythm + Rhythms + Revolving
  • Water + Melting
  • Surroundings + Environment + Pads and atmos + wood + Trickling
  • People + Narrative speculation + Speech

Workshop day 3

Creating sounds for a category of choice with brought objects: Experimenting, Performing, recording.

Sound for speech / dialoque:

  • pingpong ball in metal cup > let it bounce on the table while in the cup
  • change the cut-off by opening and closing
  • try to imitate speech/converstation
  • create background noise > roll ball over wooden table while in the cup

Speech-instrument.jpg

Sound for low-frequency kickdrum:

  • tune string by stretching > playback at half speed?

Final thoughts

What do I want to do with it? How can I create meaningful content "beyond the bleep bleep machine" and how to avoid that the module rules me?
Why do we use a module?? What does it mean?? How is it related to INTERFACE?

In relation to linguistics

  • direction of sound (m inwards, s outwards)
  • letters that can or can't control tonality (M vs S)
  • Meaning in individual letters and structure of language

Ideas & references for self-directed research

  • Tokyo station names converted to sound: physical place in sound in case a commuter is not able to read the station names
  • The concept of invisible people (components) working for you inside a black box. What are 'they' doing for you? How to create awareness (or not?)
  • digital speech synthesis, making kind of working noises (that appear in the workplace)
  • laquer cut technique > field recordings cut directly into vinyl. This was also used as a communication tool; audio postcard (original or reproduction?)
  • transfering data trough sounds (transferred over radio)



resources

https://git.xpub.nl/XPUB/special-issue-x
https://github.com/Eldjotnar/pianotalk

watchlist

INTERFACE: Gordon Monahan - Speaker Swinging
Pendulum Music by Steve Reich

links

Convert .wav to midi
Downloading games from Radio
Speech-to-song illusion

Field trip to Dutch Modular Fest

Modular Rack


Interface related links

General definition of Interface: https://www.lexico.com/en/definition/interface

Analog Reel-2-Reel Tape loop interface: https://www.dutchmodularfest.com/sebastian-scholz

Sebastian Scholz, Reel2Reel

music related (analog vd digital)

Protracker: Amiga 8-bit PCM tracker: https://www.youtube.com/watch?v=IdbgeFAus0k

1-bit music: http://www.irrlichtproject.de/houston/index.html


Arduino sessions with Dennis de Bel

  • Possibilities and limitations of Arduino
  • Introduction to Arduino coding (5V signal as a control voltage)
  • converting custom samples by using script
  • patching: modulation and triggering by using audio from another module


links:
Basic Arduino instructions: http://pzwiki.wdka.nl/mediadesign/Arduino101
Trigger Module by using a control voltage: http://pzwiki.wdka.nl/mediadesign/Arduino101-LFP
Basic control structures (For / while /if): http://pzwiki.wdka.nl/mediadesign/Arduino101#Basic_Control_Structures:_If

> codes to test: Meergranen Module V2 Zip

Self-Directed research

Speech-to-midi experiments
I recorded some speech samples, converted them to midi notes and choose a sound that somehow is close to a human voice.


Count.png
File:MVDH speech-to-midi-counting.mp3

Introduction.png
File:MVDH speech-to-midi test.mp3


Notes on Interface

What are external ways to control the module? How can you still effect it ?

A site specific module? Triggered or modulated by raindrops falling, light movement, External sound?

idea: a granular synthesis music box with manual spinning wheel ? or an Arduino chiptune?
a conversation between 2 modules

PADS

https://pad.xpub.nl/p/olliworkshop

https://pad.xpub.nl/p/xpub1temp

Experiments

INTERFACE


|=========|
| ooo *** |  <— module's interface
|=========|
|         |
|_________|
|•  ___  •|
|  o_=_o  |  <— cassette tape
|__/___\__|     interface
|o|<<|>|[]|
|=========|

  FLAKES


Pitch control

LFP detail 02.jpg
LFP bird 12.jpg
LFP deplayer 12.jpg
LFP detail 03.jpg
20191022 214700.jpg
20191205 164856.jpg

Flakes: code


#include <stdint.h>
#include <avr/interrupt.h>
#include <avr/io.h>
#include <avr/pgmspace.h>

#include "sample.h"

#define LED_PIN     13
#define SPEAKER_PIN 11 

#define KNOB_1  (0)
#define KNOB_2  (1)  
#define KNOB_3  (2)   
#define INPUT_3 (3)   

volatile uint16_t sample;
volatile uint16_t loop_start;
volatile uint16_t loop_length;
volatile uint16_t index_bounds;
volatile uint16_t loop_overflow;

volatile boolean gate;
volatile boolean gate_prev;

byte lastSample;

void startPlayback()
{
    pinMode(SPEAKER_PIN, OUTPUT);

    // Set up Timer 2 to do pulse width modulation on the speaker pin.
    // Use internal clock (datasheet p.160)
    ASSR &= ~(_BV(EXCLK) | _BV(AS2));

    // Set fast PWM mode  (p.157)
    TCCR2A |= _BV(WGM21) | _BV(WGM20);
    TCCR2B &= ~_BV(WGM22);

    // Do non-inverting PWM on pin OC2A (p.155)
    // On the Arduino this is pin 11.
    TCCR2A = (TCCR2A | _BV(COM2A1)) & ~_BV(COM2A0);
    TCCR2A &= ~(_BV(COM2B1) | _BV(COM2B0));
    // No prescaler (p.158)
    TCCR2B = (TCCR2B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);

    // Set initial pulse width to the first sample.
    OCR2A = pgm_read_byte(&sound_data[0]);

    // Set up Timer 1 to send a sample every interrupt.
    cli();

    // Set CTC mode (Clear Timer on Compare Match) (p.133)
    // Have to set OCR1A *after*, otherwise it gets reset to 0!
    TCCR1B = (TCCR1B & ~_BV(WGM13)) | _BV(WGM12);
    TCCR1A = TCCR1A & ~(_BV(WGM11) | _BV(WGM10));

    // No prescaler (p.134)
    TCCR1B = (TCCR1B & ~(_BV(CS12) | _BV(CS11))) | _BV(CS10);

    // Set the compare register (OCR1A).
    // OCR1A is a 16-bit register, so we have to do this with
    // interrupts disabled to be safe.
    OCR1A = F_CPU / SAMPLE_RATE; // 16e6 / 8000 = 2000

    // Enable interrupt when TCNT1 == OCR1A (p.136)
    TIMSK1 |= _BV(OCIE1A);

    lastSample = pgm_read_byte(&sound_data[sound_length - 1]);
    sample = 0;
    sei();
}

void stopPlayback()
{
    TIMSK1 &= ~_BV(OCIE1A); // Disable playback per-sample interrupt.
    TCCR1B &= ~_BV(CS10);   // Disable the per-sample timer completely.
    TCCR2B &= ~_BV(CS10);   // Disable the PWM timer.
    digitalWrite(SPEAKER_PIN, LOW);
}

void setup()
{
    Serial.begin(9600);
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(LED_PIN, HIGH);

    startPlayback();

    loop_start  = 0; 
    loop_length = sound_length;
    gate = false;
    gate_prev = false;
}

// This is called at 8000 Hz to load the next sample.
ISR(TIMER1_COMPA_vect)
{
    if(sample >= index_bounds)
    {
        sample = loop_start;
    }
    else if((sample < loop_start) &&
            (sample >= loop_overflow))
    {
        sample = loop_start;
    }
    else if((gate == true) &&
            (gate_prev == false))
    {
        sample = loop_start;
    }
    else
    {
        OCR2A = pgm_read_byte(&sound_data[sample % sound_length]);
    }
    gate_prev = gate;
    sample++;

}

void loop()
{
    loop_start = analogRead(KNOB_1) / 1024.0 * sound_length;
    loop_length = (analogRead(KNOB_2) + 1) / 1024.0 * sound_length;
    OCR1A = (512.0 / (analogRead(KNOB_3) + 1)) * (F_CPU / SAMPLE_RATE);
    gate = analogRead(3) >> 9;  // 10 bits in. gate < 512 == off, gate >= 512 == on

//  can be up to 2x sound length. the more you know.
    index_bounds = loop_start + loop_length;
    Serial.println(loop_length);
//  this will set the overflow length. take the loop overflow into account when checking the loop boundaries
    if(index_bounds > sound_length)
    {
        loop_overflow = index_bounds - sound_length;
    }
    else
    {
        loop_overflow = 0;
    }
}

User:Markvandenheuvel/process