<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Skrasoft Dev Blog</title>
	<atom:link href="http://skrasoft.com/blog/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://skrasoft.com/blog</link>
	<description>Interactive Hardware/Software Music Projects</description>
	<lastBuildDate>Thu, 12 Apr 2012 04:33:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Hax0rr3d, apparently</title>
		<link>http://skrasoft.com/blog/?p=390</link>
		<comments>http://skrasoft.com/blog/?p=390#comments</comments>
		<pubDate>Sun, 01 Apr 2012 19:42:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=390</guid>
		<description><![CDATA[Someone is in my base, injecting all my SQL. This site was hacked at some point in the last couple weeks. I was alerted this morning when I tried to moderate spam comments. My browser pleaded that I turn back, for the site had become a wretched hive of scum and villainy. I am disabling [...]]]></description>
			<content:encoded><![CDATA[<p>Someone is in my base, injecting all my SQL. </p>
<p>This site was hacked at some point in the last couple weeks. I was alerted this morning when I tried to moderate spam comments. My browser pleaded that I turn back, for the site had become a wretched hive of scum and villainy. I am disabling blog comments to be safe so that there is no future risk of malicious code getting in through a comment. </p>
<p>HostGator was great about cleaning up the malware on the site. </p>
<p>If you have visited any part of skrasoft.com in the past couple weeks, please do a malware scan on your computer. I have no idea what the site was trying to install. I recommend Malwarebytes for scanning, but I may not give the best advice since I also get hacked.</p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=390</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Early Tests of Max/MSP Controlling 2A03 (NES CPU) Audio</title>
		<link>http://skrasoft.com/blog/?p=342</link>
		<comments>http://skrasoft.com/blog/?p=342#comments</comments>
		<pubDate>Mon, 12 Dec 2011 05:23:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[2A03 (Nintendo NES)]]></category>
		<category><![CDATA[Experimental]]></category>
		<category><![CDATA[FPGA]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=342</guid>
		<description><![CDATA[My last post mentioned that I had an interface working for controlling the 2A03 at a reasonably fast rate. Last week I wrote a serial data receiver (UART in this case) into the 2A03 control logic so I could send the 2A03 commands from Max/MSP. I technically could&#8217;ve used MIDI, but at 31,250 bps it [...]]]></description>
			<content:encoded><![CDATA[<p>My last post mentioned that I had an interface working for controlling the 2A03 at a reasonably fast rate. Last week I wrote a serial data receiver (UART in this case) into the 2A03 control logic so I could send the 2A03 commands from Max/MSP. I technically could&#8217;ve used MIDI, but at 31,250 bps it is far too slow for all the data I want to send as quickly as I want to send it. I opted for 1,000,000 bps with the option to speed it up further later.</p>
<p>The chain looks like this:<br />
Max/MSP -> FTDI USB-to-UART cable -> FPGA development board -> 2A03 adapter</p>
<p>It works just as well as I hoped. I basically have real-time control over all the NES audio registers from Max/MSP. Here&#8217;s a screenshot of the big ol&#8217; mess in Max:</p>
<p><a href="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/max_screenshot.png"><img src="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/max_screenshot.png" alt="" /></a></p>
<p>It serves as a quick idea prototyping/test platform for the NES synth module, so it changes too frequently to bother making it tidy. </p>
<p>This post is boring without audio, so how about a few test recordings? These are all straight from an NES CPU into the preamps on my sound card. </p>
<p><a href="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/01_triangle_fm_test.wav">Click here for clip 1 &#8211; triangle wave FM</a></p>
<p>The pitch of the triangle wave is modulated by a sine wave in Max/MSP. There is a lot of jitter in the timing not only because of the serial transmission, but also because I have to convert the sine from an audio thread in Max to control data to use with the &#8220;serial&#8221; object. Control data timing is not designed for audio. It worked decently given the circumstances. </p>
<p><a href="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/02_pulse_delay_test.wav">Click here for clip 2 &#8211; pulse wave delay</a></p>
<p>One of my favorite Nintendo sounds is two pulse waves configured as an echo effect. I am just playing with a few settings (delay time, second wave volume and duty cycle). The percussive nature of the voices comes from an envelope with an attack time of zero and a short decay to silence. The envelope and all other data is being completely handled by Max and dumped out over USB. The pops in the audio are from a known control issue. They will get better and go away as I tweak the control logic. </p>
<p><a href="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/03_noise_test.wav">Click here for clip 3 &#8211; noise bursts</a></p>
<p>I couldn&#8217;t post audio tests without including the noise channel. This is a steady stream of short bursts (zero attack time and fast release time) with pitch and timbre being adjusted by hand then linked to the amplitude envelope in fun ways. </p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=342</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/01_triangle_fm_test.wav" length="4090380" type="audio/wav" />
<enclosure url="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/02_pulse_delay_test.wav" length="3829444" type="audio/wav" />
<enclosure url="http://www.skrasoft.com/blog/blogfiles/2A03/2A03_audio_2011-12-11/03_noise_test.wav" length="4900044" type="audio/wav" />
		</item>
		<item>
		<title>Sweep of the Day</title>
		<link>http://skrasoft.com/blog/?p=329</link>
		<comments>http://skrasoft.com/blog/?p=329#comments</comments>
		<pubDate>Sun, 20 Nov 2011 18:43:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[2A03 (Nintendo NES)]]></category>
		<category><![CDATA[Modular Synths]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=329</guid>
		<description><![CDATA[The NES synth module pushes onward! The sound clip below is the first audio of the triangle channel successfully controlled by the newest scheme. This method gives a register update rate of the audio hardware around 200 kHz with very low timing jitter. Click here for sweep. 200 kHz probably sounds like overkill, but realize [...]]]></description>
			<content:encoded><![CDATA[<p>The NES synth module pushes onward! The sound clip below is the first audio of the triangle channel successfully controlled by the newest scheme. This method gives a register update rate of the audio hardware around 200 kHz with very low timing jitter. </p>
<p><a href="http://skrasoft.com/blog/blogfiles/2A03/sweepotheday.wav">Click here for sweep.</a></p>
<p>200 kHz probably sounds like overkill, but realize that has to be distributed across all the registers to update. For example, the pitch of one pulse wave uses two registers. If I did nothing but update the pitch of one pulse wave, the system would update at a maximum of 100 kHz ( = 200 kHz / 2 registers). Between noise, pulse, and triangle pitch there are seven registers. On top of that there are three volume registers and one on/off flag.</p>
<p>200 kHz / (7 + 3 + 1) = ~18 kHz, which does not sound quite so fast anymore.</p>
<p><img src="http://skrasoft.com/blog/blogfiles/2A03/devboard2.jpg" alt="Newest 2A03 Dev Board" /></p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=329</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://skrasoft.com/blog/blogfiles/2A03/sweepotheday.wav" length="637998" type="audio/wav" />
		</item>
		<item>
		<title>Processing.js Test 5</title>
		<link>http://skrasoft.com/blog/?p=325</link>
		<comments>http://skrasoft.com/blog/?p=325#comments</comments>
		<pubDate>Sat, 08 Oct 2011 22:21:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=325</guid>
		<description><![CDATA[Each of the sliders below controls one component (red, green, or blue) of the fill color across all the sliders. Click and drag. Each slider is an &#8220;object&#8221; in the code so that I can create the coordinates once and let each slider mostly manage itself after that. The draw() and mouse functions end up [...]]]></description>
			<content:encoded><![CDATA[<p>Each of the sliders below controls one component (red, green, or blue) of the fill color across all the sliders. Click and drag. </p>
<p><script type="application/processing">
//Info: http://processingjs.org/reference
int num_sliders = 3;
int i;
float red = 127;
float green = 127;
float blue = 127;
Slider[] sliders;

void setup() {  // this is run once.   
    // set the background color
    background(255);
    // canvas size (Integers only, please.)
    size(400, 400); 
    smooth();			// smooth edges
    frameRate(30);    	// limit the number of frames per second
    
	strokeJoin(ROUND);
	
	sliders = new Slider[num_sliders];
	sliders[0] = new Slider(width*(1.0/7.0), height*(1.0/8.0), width*(2.0/7.0), height*(7.0/8.0), 0, 255, red);
	sliders[1] = new Slider(width*(3.0/7.0), height*(1.0/8.0), width*(4.0/7.0), height*(7.0/8.0), 0, 255, green);
	sliders[2] = new Slider(width*(5.0/7.0), height*(1.0/8.0), width*(6.0/7.0), height*(7.0/8.0), 0, 255, blue);
} 

void draw() {  // this is run repeatedly.  
	//Clear screen to white
	fill(255, 255);
	rect(0, 0, width, height);	
	
	red = sliders[0].current_val;
	green = sliders[1].current_val;
	blue = sliders[2].current_val;
	
	for(i=0; i<3; i++){	
		sliders[i].display();
	}	
}

void mousePressed() {
	for(i=0; i<3; i++){	
		if (sliders[i].detectMouseInside()) sliders[i].moveToMouse();
	}
}

void mouseDragged() {
	for(i=0; i<3; i++){	
		if (sliders[i].detectMouseInside()) sliders[i].moveToMouse();
	}
}

class Slider {
	int is_selected;
	float x1, y1, x2, y2;				
	float min_output_val;
	float max_output_val;
	float output_range;
	float current_val;
	float current_fill_height;
	float s_height;
	float s_width;
	
	void display() {
		//Draw inner box
		stroke(red, green, blue, 255);
		fill(red, green, blue, 255);
		rect(x1, y2 - current_fill_height, s_width, current_fill_height);
	
		//Draw outer rectangle
		strokeWeight(2);
		stroke(0, 0, 0, 255);
		noFill();
		rect(x1, y1, s_width, s_height);
	}
	
	boolean detectInside(float in_x, float in_y) {
		return((in_x>x1) & (in_x<x2) & (in_y>y1) & (in_y<y2));
	}
	
	boolean detectMouseInside() {
		return detectInside(mouseX, mouseY);
	}
	
	float outvalToFillHeight(float outval) {
		float scale_and_offset = (outval - min_output_val) / output_range;
		return(scale_and_offset * s_height);
	}
	
	void updateFillHeight() {
		current_fill_height = outvalToFillHeight(current_val);
	}
	
	float fillHeightToOutval(float height_val) {
		return(min_output_val + height_val * output_range / s_height); 
	}
	
	void moveToMouse() {
		current_fill_height = y2 - mouseY;
		current_val = fillHeightToOutval(current_fill_height);
	}
	
	Slider(float in_x1, float in_y1, float in_x2, float in_y2, float min_val_set, float max_val_set, float current_val_set) {
		//Do some rearranging to make sure x1 is left side and y1 is bottom (lower value, actually "top" in Processing world)
		x1 = min(in_x1, in_x2);
		x2 = max(in_x1, in_x2);
		y1 = min(in_y1, in_y2);
		y2 = max(in_y1, in_y2);
		
		s_height = y2 - y1;
		s_width = x2 - x1;
		
		is_selected = 0;
		
		min_output_val = min_val_set;
		max_output_val = max_val_set;
		output_range = max_output_val - min_output_val;
		current_val = current_val_set;
		current_fill_height = outvalToFillHeight(current_val);
	}
}

</script></p>
<p>Each slider is an &#8220;object&#8221; in the code so that I can create the coordinates once and let each slider mostly manage itself after that. The draw() and mouse functions end up being very simple. </p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=325</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing.js Test 4</title>
		<link>http://skrasoft.com/blog/?p=317</link>
		<comments>http://skrasoft.com/blog/?p=317#comments</comments>
		<pubDate>Sat, 08 Oct 2011 06:25:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=317</guid>
		<description><![CDATA[This is a quick and dirty attempt to show my interpretation of a sine wave moving through air. The dots represent air molecules as they migrate away from high pressure toward low pressure. None of the dots actually move across the screen, they merely rock back and forth.]]></description>
			<content:encoded><![CDATA[<p>This is a quick and dirty attempt to show my interpretation of a sine wave moving through air. The dots represent air molecules as they migrate away from high pressure toward low pressure. None of the dots actually move across the screen, they merely rock back and forth. </p>
<p><script type="application/processing">
//Info: http://processingjs.org/reference
int num_dots = 1200;
float dot_width = 2.0;
float base_theta = 0;
float this_width = 1;
float phase = 0;
float num_cycles = 3;
float phase_cycles = 0.5;
float phase_inc = 0.07;
int i;
Dot[] dots;

void setup() {  // this is run once.   
    // set the background color
    background(255);
    // canvas size (Integers only, please.)
    size(400, 400); 
      
    // smooth edges
    smooth();
    // limit the number of frames per second
    frameRate(30);    
    
	strokeJoin(ROUND);
	
	dots = new Dot[num_dots];
	for(i=0; i<num_dots; i++) {
		dots[i] = new Dot();
	}
} 

void draw() {  // this is run repeatedly.  
	//Clear screen to white
	fill(255, 255);
	rect(0, 0, width, height);

    // set the color to black
    stroke(0, 0, 0, 255);
	// set the width of the line. 
    strokeWeight(2);
	//Set fill to black
	fill(0, 255);
	//Draw half the dots - the "back" half. 
	for(i=0; i<floor(num_dots/2); i++){	
		dots[i].warp_x = remap(phase, dots[i].xpos);
		dots[i].display_warp();
	}	
	
	//Draw sine wave on screen for reference. Put it "halfway" deep by drawing it between the two sets of dots.
	stroke(0, 0, 255, 255);
	// set the width of the line. 
    strokeWeight(10);
	noFill();
	float this_sine_calc;
	float this_amp_calc;
	beginShape();
	for(i=0; i<=(width-1); i++){
		this_sine_calc = (height/8)*sin(phase + num_cycles*TWO_PI*i/width);
		this_amp_calc = 1.0;
		vertex(i, (3*height/4) + this_sine_calc*this_amp_calc);
	}
	endShape();	
	
	// set the color to black
    stroke(0, 0, 0, 255);
	// set the width of the line. 
    strokeWeight(2);
	//Set fill to black
	fill(0, 255);
	//Draw the other half of the dots - the "front" half
	for(i=floor(num_dots/2); i<num_dots; i++){	
		dots[i].warp_x = remap(phase, dots[i].xpos);
		dots[i].display_warp();
	}	
	
	phase = phase - phase_inc;
}

float remap(float phase_off, float in_x) {
	float base_part = in_x;
	float offset_part = -cos(phase + num_cycles*TWO_PI*in_x/width);	
	return (base_part + (width/30)*offset_part);
}

class Dot {
	float xpos;
	float ypos;
	
	float warp_x;
	float warp_y;	
	
	void new_rand() {
		xpos = random(-100, width+100);
		ypos = random(0, height);
	}
	
	void display() {
		ellipse(xpos, ypos, dot_width, dot_width);
	}
	
	void display_warp() {
		ellipse(warp_x, ypos, dot_width, dot_width);
	}
	
	Dot() {
		new_rand();
	}
}


</script></p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=317</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing.js Test 3</title>
		<link>http://skrasoft.com/blog/?p=307</link>
		<comments>http://skrasoft.com/blog/?p=307#comments</comments>
		<pubDate>Sat, 25 Jun 2011 18:36:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=307</guid>
		<description><![CDATA[Animated sine wave rotated in two dimensions using OpenGL. Edit: Code works in sketchpad, but not in the blog. Frowny face. Click here for a dedicated website version. Processing.js uses WebGL for 3D, which is not supported by Internet Explorer. Try Chrome.]]></description>
			<content:encoded><![CDATA[<p>Animated sine wave rotated in two dimensions using OpenGL. </p>
<p>Edit: Code works in sketchpad, but not in the blog. Frowny face.</p>
<p><a href="http://www.skrasoft.com/ptest/sine.html">Click here for a dedicated website version. Processing.js uses WebGL for 3D, which is not supported by Internet Explorer. Try Chrome.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=307</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing.js Test 2</title>
		<link>http://skrasoft.com/blog/?p=301</link>
		<comments>http://skrasoft.com/blog/?p=301#comments</comments>
		<pubDate>Wed, 22 Jun 2011 03:16:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=301</guid>
		<description><![CDATA[&#8230;just a few circles and sine waves.]]></description>
			<content:encoded><![CDATA[<p>&#8230;just a few circles and sine waves.</p>
<p><script type="application/processing">
//Info: http://processingjs.org/reference
int i = 0; 
int j = 0;
int num_rows = 20;
int num_cols = 20;
float base_theta = 0;
float this_width = 1;

void setup() {  // this is run once.   
    // set the background color
    background(255);
    // canvas size (Integers only, please.)
    size(400, 400); 
      
    // smooth edges
    smooth();
    // limit the number of frames per second
    frameRate(30);    
    // set the width of the line. 
    strokeWeight(1);
	
} 

void draw() {  // this is run repeatedly.  

	//Clear screen to white
	fill(255, 255);
	rect(0, 0, width, height);

    // set the color to black
    stroke(0, 0, 0, 255);

	//Set fill to black
	fill(0, 255);
	
	for(i=0; i<num_rows; i++){
		for(j=0; j<num_cols; j++){
			this_width = sin(TWO_PI*(j/20.0) - (i/7.0) + base_theta);
			this_width *= 6.0;
			this_width += 7.0;
			make_circle((j+0.5)*20.0, (i+0.5)*20.0, this_width);
		}
	}
	
	base_theta = base_theta + 0.1;
	
}

void make_square(float x, float y, float width) {
	rect(x - (width/2.0), y - (width/2.0), width, width);
}

void make_circle(x, y, width) {
	ellipse(x, y, width, width)
}


</script></p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=301</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Processing.js Test</title>
		<link>http://skrasoft.com/blog/?p=276</link>
		<comments>http://skrasoft.com/blog/?p=276#comments</comments>
		<pubDate>Sun, 19 Jun 2011 05:44:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Experimental]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=276</guid>
		<description><![CDATA[DO NOT QUESTION THE ARCS.]]></description>
			<content:encoded><![CDATA[<p>DO NOT QUESTION THE ARCS.</p>
<p><script type="application/processing">
float angle1 = 0.0;    // Angle for outer-most circle
float angle1_step = 0.1;
float width1 = PI/1.5;

float angle2 = 0.0;
float angle2_step = -0.05;
float width2 = PI/1.1;

float angle3 = 0.0;
float angle3_step = 0.25;
float width3 = PI/1.3;

void setup() 
{
  size(400, 400);
  noStroke();
  smooth();
  frameRate(30);
}

void draw() 
{

  
  //arc(x, y, width, height, start, stop)
  
  //clear screen
  fill(0, 255);
  rect(0, 0, width, height);
  
  //Draw outer-most circle
  fill(255, 0, 0, 255);
  arc(width/2, height/2, width, height, angle1, width1+angle1);
  
  //Clear area for next arc
  fill(0, 255);
  ellipse(width/2, height/2, width*7/9, height*7/9);
  
  //Draw next arc
  fill(0, 255, 0, 255);
  arc(width/2, height/2, width*7/9, height*7/9, angle2, width2+angle2);
  
  //Clear area for next arc
  fill(0, 255);
  ellipse(width/2, height/2, width*5/9, height*5/9);
  
  //Draw next arc
  fill(0, 0, 255, 255);
  arc(width/2, height/2, width*5/9, height*5/9, angle3, width3+angle3);
  
  //Clear inner most circle area
  fill(0, 255);
  ellipse(width/2, height/2, width/3, height/3);
  
  angle1 += angle1_step;
  angle1 = angle1 % TWO_PI;
  
  angle2 += angle2_step;
  angle2 = angle2 % TWO_PI;
  
  angle3 += angle3_step;
  angle3 = angle3 % TWO_PI;
}

</script></p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=276</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>POKEY.synth Manual Version 1.0</title>
		<link>http://skrasoft.com/blog/?p=272</link>
		<comments>http://skrasoft.com/blog/?p=272#comments</comments>
		<pubDate>Tue, 08 Mar 2011 06:49:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Modular Synths]]></category>
		<category><![CDATA[POKEY (Atari)]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=272</guid>
		<description><![CDATA[Click here for the manual. I wanted to get a manual of some sort uploaded before shipping the rest of the first batch of modules. I will be stepping through the names on waiting list soon to see who is still interested and ready to buy a tested module. If anyone is curious, going Gnuplot [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.skrasoft.com/blog/blogfiles/pokey/POKEYsynth%20Manual.pdf">Click here for the manual. </a></p>
<p>I wanted to get a manual of some sort uploaded before shipping the rest of the first batch of modules. I will be stepping through the names on waiting list soon to see who is still interested and ready to buy a tested module.</p>
<p>If anyone is curious, going Gnuplot -&gt; Inkscape -&gt; PDF had graphical problems, so I had to go Gnuplot -&gt; Inkscape -&gt; PNG -&gt; PDF. That is why the file is huge and the text is unsearchable. The graphics look best in Google Chrome, and worst in Adobe Acrobat&#8230; go figure. I am trying to find a better method of making PDFs for the future.</p>
<div class="wp-caption aligncenter" style="width: 410px"><a href="http://www.skrasoft.com/blog/blogfiles/pokey/highpassplot.PNG"><img src="http://www.skrasoft.com/blog/blogfiles/pokey/highpassplot.PNG" alt="The Magic Octave Effect" width="400" height="162" /></a><p class="wp-caption-text">The Magic Octave Effect</p></div>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=272</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pokey Status Update #78234</title>
		<link>http://skrasoft.com/blog/?p=268</link>
		<comments>http://skrasoft.com/blog/?p=268#comments</comments>
		<pubDate>Mon, 17 Jan 2011 05:29:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Modular Synths]]></category>
		<category><![CDATA[POKEY (Atari)]]></category>

		<guid isPermaLink="false">http://skrasoft.com/blog/?p=268</guid>
		<description><![CDATA[It has been difficult to contact me lately via e-mail, so I would like this post to help respond to many of the questions I receive. I am in the process of testing built modules and writing the manual. What does it do? Short answer: Pokey.synth takes an old Atari computer soundchip and adds voltage [...]]]></description>
			<content:encoded><![CDATA[<p>It has been difficult to contact me lately via e-mail, so I would like this post to help respond to many of the questions I receive. I am in the process of testing built modules and writing the manual.</p>
<p><strong>What does it do?</strong></p>
<p><strong>Short answer: Pokey.synth takes an old Atari computer soundchip and adds voltage control to the sounds.</strong></p>
<p>The POKEY chip was used in 8-bit Atari computers, some arcades, and some Atari 7800 games. It is like an Atari 2600 soundchip on steroids, with better pitch control and more channels. Pokey.synth uses a POKEY chip to make a 2-voice synthesizer with separate voltage controllable pitch, volume, and distortion waveform for each voice. There is also an audio input for simple bit-crushing-style effects. Detailed information will be available in the manual coming shortly.</p>
<p><strong>How much is a module?</strong></p>
<p><strong>Short answer: $400 + shipping</strong></p>
<p>Each module includes a tested and working Atari POKEY chip. It turns out that authenticity is a little expensive.</p>
<p><strong>How much is a kit?</strong></p>
<p><strong>Short answer: kits are not available</strong></p>
<p>It would cost more for me to kit the SMT components than it does to pay for factory assembly. My preference is to put time into service and new designs instead of making kits. I feel that is more beneficial to everyone in the long run.</p>
<p><strong>Did you get my e-mail/pm?</strong></p>
<p><strong>Short answer: Most likely yes</strong></p>
<p>After my blog post in mid-December, the first 25 spots on the waiting list filled up. I received a slew of requests via e-mails to this blog, e-mails to Analog Bytes, Muffwiggler PMs, and telepathic projections. I really appreciate all the enthusiasm, but I also want to be fair and add people to the waiting list in the order they contacted me. I apologize for the back-log. It takes time to decode the order of messages coming in the different formats, so I chose to sacrifice communication to finish the product.  My focus is on getting modules tested and packed, after which I will get back to correspondence. I also plan to create a mailing list for information, updates, and future waiting lists.</p>
<p><strong>Can you ship to Japan/Greece/[insert non-US country here]?</strong></p>
<p><strong>Short answer: no, I cannot at this time. </strong></p>
<p>I know a little about US laws but am still learning about the laws of other countries. For example, in many countries it is not legal to sell electronics that contain lead (unless they meet special exemptions). Here in the US, we are incredibly pro-lead. It is commonly found in children&#8217;s toys, from which it is extracted and concentrated into a purer form for recreational use*. Wealthy Americans often have gold jewelry lead-plated, because otherwise they risk looking cheap*. Using lead in electronics is a perfectly reasonable thing to do by US standards. Coincidentally, the solder in this first round of Pokey modules contains lead.</p>
<p><strong>Why is the module not RoHS-compliant?</strong></p>
<p><strong>Short answer: it was too expensive for this first run. Later runs will be RoHS compliant. </strong></p>
<p>Selling to many countries in Europe requires meeting a set of material restrictions (known as the Reduction of Hazardous Substances Directive).  Meeting the requirements means that solder used cannot contain lead. Sadly, the RoHS alternatives to leaded solder require a higher temperature to melt. That leads to two problems. First, the higher temperatures require a more expensive process than leaded soldering. Second, more expensive printed circuit board material is required to withstand the increase in temperature during soldering. SMT components are baked on, not soldered by hand, so the PCBs are put into an oven. PCBs expand as they are heated, so a specialized material is required in order to avoid over-expansion at higher temperatures. Otherwise, circuit board connections can become damaged during SMT assembly.</p>
<p>Here is a picture of modules that passed initial testing, but are awaiting final testing and knobs:</p>
<div class="wp-caption aligncenter" style="width: 410px"><img title="Assembleds" src="http://www.skrasoft.com/blog/blogfiles/pokey/PokeyAssembly.jpg" alt="So... close..." width="400" height="300" /><p class="wp-caption-text">So... close...</p></div>
<p>*: This is not actually true</p>
]]></content:encoded>
			<wfw:commentRss>http://skrasoft.com/blog/?feed=rss2&#038;p=268</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

