1 bit audio and the arduino
play

1-bit Audio and the Arduino David J. Zielinski Overview 1. - PowerPoint PPT Presentation

1-bit Audio and the Arduino David J. Zielinski Overview 1. Terminology of Sound 2. Atari 2600 a. clock division frequencies b. linear feedback shift registers 3. Arduino Uno a. Specifications b. Audio Generation Methods c. Code Examples


  1. 1-bit Audio and the Arduino David J. Zielinski

  2. Overview 1. Terminology of Sound 2. Atari 2600 a. clock division frequencies b. linear feedback shift registers 3. Arduino Uno a. Specifications b. Audio Generation Methods c. Code Examples and Demos d. Arduino Due e. Future Work

  3. sound waves are oscillations in air pressure. The amplitude (viewed on y axis) is proportional to the change in pressure 1 = Peak amplitude 2 = Peak-to-peak amp 3 = RMS amplitude 4 = Wave period

  4. loudness is the perceptual sense of amplitude. quiet vs loud frequency is the number of repeating events per unit time. pitch is the perceptual sense of frequency.

  5. bit depth is seen as quantization on the y axis

  6. Atari 2600 Retail availability 1977 Introductory price 199 USD Units sold 30 million CPU MOS 6507 @ 1.19 MHz Memory 128 bytes RAM, 4 kB ROM

  7. ● MOS 6532 (RIOT) Ram-I/O-Timer ● MOS 6507. Smaller/Cheaper version of the 6502 (used in Apple, Atari, Commodore) ● Television Interface Adaptor (TIA)

  8. Atari TIA Chip ● non-frame buffer design! ● reading input controllers ● sound effects ○ 2 independent noise generators ○ 5-bit frequency divider ○ 4-bit audio control (sets Jay Glenn Miner (May 31, 1932 – waveform) June 20, 1994) was a famous American integrated circuit designer, ○ 4-bit volume control known primarily for his work in multimedia chips and as the "father of the Amiga". Lead developer of the TIA chip.

  9. String/Tube Resonance Pitch Perception 100 hz - root 200 hz - octave 300 hz - 5th 400 hz - octave 500 hz - Major 3rd 600 hz - minor 3rd octave: 200/100 2 2 5th: 300/200 3/2 1.5 4th: 400/300 4/3 1.33_ Maj3: 500/400 5/4 1.25 min3: 600/500 6/5 1.2 6th: 500/300 5/3 1.66_

  10. blue = equal temperament red = just intonation freq ratio C C# D D# E F F# G G# A A# B C pitch

  11. one reason classic video games sound distinctive is the utilization of the clock division technique which results in a scale based on the undertone series.

  12. blue = just intonation red = harmonic undertone cents Pitch

  13. Hermann Ludwig Ferdinand von Helmholtz Gioseffo Zarlino (1517-1590) was an (1821 – 1894) was a German physician and Italian music theorist and composer of the physicist who made significant contributions to Renaissance. several widely varied areas of modern science. First proposed the idea of the Argued that sympathetic resonance is undertone series. at least as active in under partials as in over partials

  14. Harmonic Undertone Demo http://jackaudio.org/

  15. 4 bit poly, 5 bit poly, 9 bit poly

  16. XOR (exclusive or) A B Output 0 0 0 0 1 1 1 0 1 1 1 0

  17. Linear Feedback Shift Register Poly4: Taps at 2 and 3 1 0 0 1 output: 1 Now 1 1 0 0 Future

  18. Demo of LFSR Poly4: taps at 2,3 Poly5: taps at 2,4 Poly9: taps at 4,8

  19. Arduino Uno Flash / Program Memory 32 KB SRAM / Variable Memory 2 KB Clock Speed 16 MHz $30 5v

  20. Why arduino? ● low cost. leave installed for installation. ● input: knobs, switches, pressure sensors, accelerometers, ultrasonic distance, temperature, capacitive sensing. ● output: usb, control motors, lights, and audio ● making things is more fun then buying things ● open source hardware/software ● manufactured in Italy ● subset of C++

  21. Where can you get it (and components)? In Person: Radio Shack [northgate mall] Hobbyist: sparkfun.com adafruit.com Pro: digikey.com newark.com

  22. Methods of Running ● With a computer. Use arduino to read input, then send via serial message (via USB cable) to computer for further action. ● Stand alone. Arduino reads input and does any processing on board.

  23. Methods to Generate Audio Type Pro Con tone function call ● part of standard libraries. ● monophonic (1 pitch at a ● pitch is accurate. time). ● square wave only. add on shield ● actual audio output (24bit, 44k). ● arduino uno processor is too slow. ● shield costs $$ pin toggle in main ● generate arbitrary 1-bit waveforms. ● 1-bit waveforms loop ● polyphonic (multiple pitches). ● pitch not accurate ● simple programming ● highest pitch limited by amount of processing pin toggle in ● generate arbitrary 1-bit waveforms. ● 1-bit waveforms interrupt ● polyphonic (multiple pitches). ● complicated programming ● pitch is accurate ● need buffer = latency

  24. Things you will need:

  25. How does electricity work?

  26. How to convert 5v to 0.45v ? Solution: voltage divider

  27. What does this look like?

  28. Pitch Linear void loop() { int v = analogRead(A0); int v_half=v/2; if(current_sample<v_half) digitalWrite(2,HIGH); else digitalWrite(2,LOW); current_sample=(current_sample+1)%v; }

  29. Pitch Exp void loop() { int v = analogRead(A0); int vp=int(pow(v,2.0)/5000.0); int v_half=vp/2; if(current_sample<v_half) digitalWrite(2,HIGH); else digitalWrite(2,LOW); current_sample=(current_sample+1)%vp; }

  30. samples input value

  31. Noise void loop() { int v = analogRead(A0); int vp=int(pow(v,2.0)/5000.0); if(current_sample==0) { int val=random(2); if(val==1) digitalWrite(2,HIGH); else digitalWrite(2,LOW); } current_sample=(current_sample+1)%vp; }

  32. Dual Pitch void loop() { int v = analogRead(A0); int v2 = analogRead(A1); s1.set_freq(v); s1.tick(); s2.set_freq(v2); s2.tick(); }

  33. AND aka Ring Mod void loop(){ int v = analogRead(A0); int v2 = analogRead(A1); A B Output s1.set_freq(v); 0 0 0 s2.set_freq(v2); 0 1 0 int d=s1.get_val(); 1 0 0 int d2=s2.get_val(); 1 1 1 byte f=d&d2; digitalWrite(2,f); }

  34. XOR aka Korg MS-20 Ring Mod void loop(){ int v = analogRead(A0); int v2 = analogRead(A1); A B Output s1.set_freq(v); 0 0 0 s2.set_freq(v2); 0 1 1 int d=s1.get_val(); 1 0 1 int d2=s2.get_val(); 1 1 0 byte f=d^d2; digitalWrite(2,f); }

  35. Program Material byte val=pgm_read_byte_near(pos); if(val>128) digitalWrite(2,HIGH); else digitalWrite(2,LOW); pos++; if(pos>pos_end) pos=start_pos;

  36. Decimation Delay byte val=delay_array[d_pos]; int prob=random(0,1024); dv=(val>0 && prob<decay) || pbyte; delay_array[d_pos]=dv; d_pos=(d_pos+1)%dtime; digitalWrite(3,val); digitalWrite(2,pbyte);

  37. Looper if (sensorVal>0) { pbyte=pitch_sample<phalf; triggered=true; } pitch_sample=(pitch_sample+1)%pmax; byte val=delay_array[d_pos]; if(triggered) delay_array[d_pos]=pbyte; else delay_array[d_pos]=val; d_pos=(d_pos+1)%dtime; digitalWrite(2,pbyte); digitalWrite(3,val);

  38. Arpeggiation byte notes[6]={1,2,4,8,4,2}; int vpn=sensor_val*notes[current_note]; int v_half=vpn/2; digitalWrite(2,current_sample<v_half); current_sample=(current_sample+1)%vpn; note_sample++; if(note_sample>samples_per_note){ note_sample=0; current_note=(current_note+1)%6; }

  39. Arduino Due Due Uno Clock Speed 84 Mhz 16 Mhz SRAM (Variables) 96 KB 2 KB Flash (Program) 512 KB 32 KB Voltage 3.3v 5v Analog Input 12 [12 bit] 6 [10 bit] Analog Output (D/A) 2 0 Digital Pins 54 14 Price $50 $30

  40. Guitar Effect Pedal

  41. Active Paintings

  42. Skull Drum and Leg- Tar

  43. P10 Project 100, 1k, 10k, ... channel installation

  44. Thank You!

  45. Wet Ink Ensemble @ Casbah 8pm featuring Kenneth Stewart's "Make It Opaque"

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend