New Projects and Progress

Since last time, I've been working on couple of new projects. They are all in progress but here is a sneak peek at one of them; hopefully will get it done soon.

I also started building my own DIY stringed e-instrument, which will hopefully be playable in the end. Maybe I will consider making a demo and uploading it to YouTube, who knows. Highly influential videos of cigar box guitars got me going. More coming soon.



A Guide for Creating Basic Geometric Illustrations

Processing Icon

Hey all,

Apart from sound design & field recording for a short movie project, I've taken part in another exhibition at a local bar (called Arkaoda) in Kadikoy, Istanbul. Lately I've been lurking around and wanted to create something graphical for myself. It is pretty basic, but it looks nice and it forms a good basis for further development ideas.

In this project, I wanted to create some colorful geometric graphics with Processing platform. I didn't have anything in my mind in particular, so in the end the project had the feature to change the visuals at each mouse click. Think of this as a little push if you want to start with a new project but can't do it. Just play with the code, add stuff, delete stuff, change stuff... Use the empty draw function for example.

The code is here:

/* A pretty basic code for creating randomly generated triangles with random colors.
*  Deniz Saglam, 2013

float alpha = 0.0;
int triangle_count = 40;

void setup()
size(600, 480); //size of canvas, initially 600 x 480. play around with this to see the difference.
background(200); //canvas background
color c = color (0, 0, 0);
for (int iter = 0; iter < triangle_count; iter++) {
alpha = random(100.0, 255.0);
c = color(random(255.0), random(255.0), random(255.0)); //a random color is generated for filling the triangles at each iteration
fill(c, alpha); //triangles are actually filled with the previously generated color, and have an alpha (transparency) value

//this next line can be edited for different visuals.
triangle(random(height), random(height), random(height + height * 0.24), random(height) + random(height + height * 0.24), random(width), random(width + width * 0.133)); //create a new triangle at each iteration

void draw() {

void mouseClicked() {
print("Mouse is clicked. \n");
color c4 = color(random(50.0, 155.0), random(50.0, 155.0), random(50.0, 155.0)); //create new color for background
background(c4); //new random background is colored
color c = color (0, 0, 0);
for (int iter = 0; iter < triangle_count; iter++) {
c = color(random(255.0), random(255.0), random(255.0));
fill(c, random(100.0, 255.0)); // fill the triangles

//this next line can be edited for different visuals.
triangle(random(height), random(height), random(height + height * 0.24), random(height) + random(height + height * 0.24), random(width), random(width + width * 0.133));



openFrameworks Installation Tutorial


Hey all,

I wanted to give openFrameworks a try after reaching to Processing environment's limits at certain points. I decided that I want to be able to be familiar with another environment where I can build apps that are faster. This C++ framework seems to be a good solution for my problem.

Now, if you want to get started with openFrameworks, this tutorial is definitely for you. I probably spent way more time than the average just to run the first example. Not because it's hard, but a slight distraction causes you to go over the steps from the beginning. So, hope this helps.

1) Assuming you haven't done anything by now, go to , click on "Download the binary release" and choose the right environment for you. I have Windows 8, so in this case I had to download "codeblocks-12.11mingw-setup.exe". After downloading it, simply run the installer and next it all the way to the end.

2) Now you will download openFrameworks. Visit and download openFrameworks for Code::Blocks in Windows. Then unzip the downloaded file and extract it to your Desktop. This folder will contain all the necessary stuff for openFrameworks. Simply create a directory at a handy place (I use C:\openFrameworks). Then, copy and paste all the files from the folder at your desktop into this newly created handy folder. We're almost there.

3) Now visit and follow the instructions.

4) You should have everything settled by now if you've followed the instructions carefully. Now you can go to in order to read the first steps tutorial. I have one more thing to mention: If you want to run an example as it is done in this last link, please don't forget to open the workspace file instead of the project file. Otherwise you will get errors since some parts will be missing. This means, open Code::Blocks, click on File-> Import Project -> Dev-C++project.. and then go to the right directory of the example folder (i.e. C:\OpenFrameworks\examples\graphics\graphicsExample) and select All files instead of the Bloodshed Dev-C++, and then select graphics example workspace file. Run the code and you're good to go.

I hope this helps, since I wouldn't want anyone else to spend meaningless time as I did in the beginning. Also, I want to thank Andrew McWilliams for his post, this tutorial bases mostly on his introduction except a few details.


‘Project Genesis’ @ Ars Electronica Center


It was very fortunate of me to be able to take part in this exhibition, which is about how synthetical biology, which also focuses on the virtual life that is created in laboratory environment, can affect our future lives.

Our project is about saving digital data into DNA, which enables all of us to save our data for thousands of years, whereas the lifespan of a common harddisk drive is only couple of years. Also this allows us to carry our data at all times, since large stacks of information can be stored in a tablespoon full of DNA. Although the current drawback is cost, it is known that the first transistors were impractically expensive and this might point out that at a certain point in future, we might be able to use DNA as a new medium to save our data. All this process bases on the algorithm of George Church, a molecular biology professor at Harvard Medical School.

My part in this exhibition was to code this algorithm with a GUI in Processing environment and to create a bundle experience for visitors, to type in whatever they like and to print this data out in binary and DNA strings, printed onto a paper.

If you happen to visit the exhibition, please do consider to contribute to our DNA wall, which consists of strings of information that is printed by previous visitors, who sticked their information onto this wall. Collaborative memory!

Now it's time to chill and lean back for a while...


ReHearSal featured on ID-Mag


It's always enjoyable to see your work getting featured somewhere. My friends and I worked on this project for couple of months and I'm glad to see it is appreciated.

The link on ID-Mag's website can be directly reached from here.


An Online Tutorial For Creating Interactive Artworks


Hey all,

It has been a busy couple of months and my two friends and I managed to exhibit an interactive work that we named Rehearsal. For detailed information and a handsome video, do check here.

This will be a tutorial for creating an interactive project with Pure Data and Ableton Live on Windows.

In couple of sentences, our project gathers user input from Kinect sensors, processes the data in vvvv and sends floats/integers to Pure Data (Pd), Pd receives the data and maps it to MIDI notes, sends the MIDI notes over LoopBe1 Midi to Ableton Live and lastly, Ableton Live plays them out loud. At the last step I also used a synthesizer VST plug-in to create an appealing sound. Seems intimidating when you read it like that, but trust me once you know what to do it isn't that hard.

The exhibition consisted of four computers with four individual Kinect sensors and each four computer ran vvvv, Pd, Ableton Live and synthesizer VST plug-in. A fast computer would be nice, all these stuff require effort for the processor to deal with. We had four fast computers, but you can run vvvv and the rest of the software on different computers, since the connection between vvvv and Pd is done with TCP.

I was responsible for the sound design part, so I worked with Pure Data, Ableton Live and the synthesizers.

Don't mind the fancy topic, I was just trying to catch your attention. Although I can tell you that if you are into interactive works, you will definetely benefit from this tutorial. I will also provide my Pure Data patches to make everything easier for you. Please note that Pd is a free and open source software and LoopBe1 is also free, however Ableton Live is a product that you would need to buy (it has a one-month trial period though).

First, if you haven't already installed Pure Data to your computer, you should download it. It is a must if you are interested in DIY sounds, computer generated (algorithmic) music, computer aided live shows and most definetely, interactive projects. I recommend the extended version, since it has lots of additional libraries in it. Also Dr. Rafael Hernandez's Pd tutorials are great to get started with. Don't feel like these videos are the ultimate guides to learn Pd though. After a couple of videos, I figured that Pd help files that come along with Pd and googling stuff is the best option to get your way around. Also you can ask me anything about Pd, I will do my best to reply you quickly. I know what it feels like getting stuck at a point and never finding a solution to your problem.

So anyway, you should have installed Pd-extended by now. You are ready to roll. Click on the Pd file I have provided with this post and let's investigate it step by step. Download and open "Interactive MIDI.pd". Two windows will show up; Pd-extended is the main window of Pure Data and Interactive MIDI.pd is the file you opened with Pure Data. Pure Data is a node based, visual programming language. You will see bunch of blocks connected to each other with lines. Kind of like a block diagram. The structure is easy to understand: the hierarchy goes up to down. The output of the first block is connected to the next block's input (At this point let's assume this totally correct. I will show other stuff as we move on).

You see netreceive 9922 is the first block we have. Netreceive opens the port 9922 on your computer and listens to the incoming messages from that port. Right click on it and go to Help to read more about it. This Interactive MIDI.pd file was meant to listen to the incoming messages from port 9922, to which the Kinect data was sent. I was getting seven floats, which were the x and y axis coordinates on a canvas. When you went in front of Kinect and waved your hand from left to right, one of the floats I was getting would change, say, from 0 to 8. Now I received seven of these floats in a packet, so I used unpack function as the second node. The third set of blocks are just numbers, to visualize the floats that I get. Next, we have select function. This redirects the received float at an instance to the related output. It receives seven floats and repeats this process for each input.

Next we have buttons, or 'bang's as they are called in Pure Data. This is again used for visualization purposes. When you receive a series of floats simultaneously, it is harder to see what's going on without a button. Think of them as LEDs in a circuit, which show the path taken by a signal at an instance.

Now, this part looks a bit crowded but it's very simple to understand what is done here. Until here, I receive some coordinates from Kinect sensor as floats, and I have changing signals as someone interacts with the sensor. What I want to do is to map these signals to some beautiful audio output. Heck, I just want to produce some cool sound. So, what do I do?

I had the idea to choose a musical scale and get the notes out of this scale, connect them to the signals I receive and whenever the signal changes, it will play a note in that scale. No matter what signal I get, the played note will be in a specific scale and it will be a consonant note. So, what's with the numbers in the blocks, right? They are the frequencies of each note in that scale. For example, if I want to use F3, I type 174.61 in - or simply 174. I just googled for the list of these frequencies and found this table. Use it! It is wonderful, and you are totally free to select whatever note/scale you want. You can also create a dissonant structure and use notes that are off the scale. Or you can use totally random notes - just go ahead and try it out.

All these frequencies are connected to another number block, which changes whenever a signal is transmitted to it. If the signal comes from 131 at time t, it becomes 131 until the next signal comes from another block. Then it takes the number of that block and it goes on like this. Then it passes its value to ftom function, which is the abbreviation of frequency-to-midi. Pretty straight-forward, this converts the frequency we get to a MIDI note, a note that you could play on a keyboard. You can see this MIDI note in the next block.

The rest is MIDI connection. Makenote block takes 'pitch', 'velocity' and 'duration' as input and gives 'pitch' and 'velocity' as output. The pitch is what we get from the ftom block. You can manually change the other values though. Makenote is connected to noteout block, which transmits the MIDI notes. So as you see, we don't use Pd to create the sound. We could do that, but using a DAW (Ableton Live in thix example) and a synthesizer is a much more elegant way to produce the sound. So, I chose to transmit the MIDI notes to the synthesizer in Ableton Live.

Do not forget to go to the main Pd-extended window and click on DSP button, which stands for Digital Signal Processing. As long as this block is unticked, Pd will do the computation but will not produce any sound. This is where LoopBe1 comes into play.

LoopBe1 is an internal MIDI port for Windows OS, which virtually connects the input and output of different software. So when you want to take the output of Pd and connect it to the input of Ableton Live, you need it. For Mac, you have other options such as Jack OS X. There is LiveOSC, a widely used interface for connecting MIDI, but for me LoopBe1 was the easiest and the most user-friendly tool I could find.

Don't forget, these tutorial patches are made for the incoming data on port 9922, but you can always change it. Try deleting the netreceive 9922 block and inserting a randomizer: Create a bang, connect it to a 'metro 500' object and connect 'metro 500' to 'random 20' object. Then, connect the 'random 20' object to 'unpack f f f f f f f'. When you click on the bang with the proper mouse icon, you will see your patch working. Also check the ftom output, it changes as the signals come through right? These are the different notes played by your computer. Good work there!

It has been a long tutorial but I tried to explain the methodolgy in mapping sound according to the data input. Next time, I will show how to do things on the DAW side.

If you could really read all this post up until here and do everything properly, you really have a good patience. This was my first tutorial post and I apologize for the poor explanation. Feel free to ask me anything regarding this tutorial and I will try to answer your question.

Until next time!



Mock-Up0003 lo-fi

This is a new project that I work on together with my dear friend Ece Budak, a great sculptress.

The work is not finished yet, however you can see the wonderful sketch of the idea on the side. Credits go to Ece for the wonderful sketch.

The idea is to create an installation that consists of different bases such as electronics, algorithmic sounds and sculpting. I'm looking forward to share more details about this project in the following weeks. Maybe even with a surprise.


Sparks 2013


Some of my works are being exhibited in Sparks 2013, a student exhibition taking place in Sabancı University Fine Arts Faculty (FASS).

You can check out my works also online by clicking here, here and here. There are some explanations, which will inform you about what I had in my mind as I made those recordings.

Hope you enjoy.

PS: Click here for the large version of the exhibition poster.


New Recording

Reincore on Soundation

Okay, now this has been fun. As I mentioned earlier, I'm taking this Digital Sound Design course on Coursera, and it's been such a nice experience. As a part of that course, I made a new recording which I named "Bandwidth", mainly because my internet bandwidth was reduced to 512kbps because (apparently) I've exceeded my quota. It was interesting to work on such a slow speed online, but anyway.

Give it a listen, I hope you'll enjoy it.


Recent News

I am embarrassed to confess that I did not have an online portfolio until now.Now that I had some free time in my semester break, I managed to finish and polish it. Now you can jump to my brand new online portfolio. Thank you, Indexhibit.