User:Fabien Labeyrie/: Difference between revisions

From XPUB & Lens-Based wiki
(Created page with "Category:prototyping Category:2011_P1.01 __NOTOC__ __NOEDITSECTION__ <div style="width: 600px; font-family:Arial"> ==<span style="color:#0B0080">C64 Music Programming</s...")
 
No edit summary
 
Line 5: Line 5:


<div style="width: 600px; font-family:Arial">
<div style="width: 600px; font-family:Arial">
==<span style="color:#0B0080">C64 Music Programming</span>==
=<span style="color:#0B0080">C64 Music Programming</span>=
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<br />
<br />


== Presentation ==
== <div style="margin-top:30px">Presentation</div> ==
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<hr style="height:5px; margin-top:-15px; background-color:#FFF">


Before shaping the feb14 performance project with Inge, the original idea was to use an old Commodore 64 computer as a member of an Electronic Hip-Hop band.  
Before shaping the feb14 performance project with Inge, the original idea was to use an old Commodore 64 computer as a member of an Electronic Hip-Hop band.  


== The project ==
== <div style="margin-top:30px">The project</div> ==
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<hr style="height:5px; margin-top:-15px; background-color:#FFF">


Line 21: Line 21:
The only way to achieve this is by programming directly in the C64, via the old ''Commodore Basic V2 language''. I found a copy of a very good book entitled "The Commodore 64 Music Book" which help me a with the programming of the first songs.
The only way to achieve this is by programming directly in the C64, via the old ''Commodore Basic V2 language''. I found a copy of a very good book entitled "The Commodore 64 Music Book" which help me a with the programming of the first songs.


Unfortunately, I realized later the ''Datassette'', external tape drive used to store data, was quite unstable. In the end, I wasn't able to record data anymore, making it impossible to build songs in regards to the amount of text necessary to just output a few tones.   
Unfortunately, I realized later the ''Datassette'', external tape drive used to store data, was quite unstable. In the end, I wasn't able to record data anymore, making it impossible to build songs in regards to the amount of text necessary to just output a few tones. The project was then aborted.   
 
<br />


==<div style="margin-top:30px">How does it work ?</div>==
== <div style="margin-top:30px">Gallery</div> ==
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<hr style="height:5px; margin-top:-15px; background-color:#FFF">


=====Technologies involved=====
[http://en.wikipedia.org/wiki/Bash_%28Unix_shell%29 Bash scripting] / [http://www.undef.org.uk/code/midge/ Midge]
<br />
=====Steps=====
<div style="margin-left:-55px; margin-top:10px;">
# &nbsp;&nbsp;&nbsp;&nbsp;We are checking the wifi connexions around.
# &nbsp;&nbsp;&nbsp;&nbsp;After getting the data, the MAC adresses are combined together resulting a series of numbers.
# &nbsp;&nbsp;&nbsp;&nbsp;Those numbers are then converted into music notes, based on a pentatonic scale.
</div>
<br />
<br />


==<div style="margin-top:30px">Source code</div>==
[[image:2011-04-02_21.08.16.jpg | 225px]]
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
 
All of this is launched by a single line in the shell :
<source lang="bash">
sudo iwlist eth1 scan | sed -f convertAdress.sed | bash dispatchNotes.sh
</source>
<br />
<br />


But there is some under cover coding behind that. <br />
[[image:2011-04-02_21.08.00.jpg | 300px]]
We need first to scan the waves around with ''iwlist scan wlan0''.
Here comes the list of connexions around :  
 
<source lang="text">
eth1      Scan completed :
          Cell 01 - Address: 00:23:AB:BF:FB:C0
                    ESSID:"eduroam"
                    Protocol:IEEE 802.11bg
                    Mode:Master
                    Frequency:2.437 GHz (Channel 6)
                    Encryption key:on
                    Bit Rates:6 Mb/s; 9 Mb/s; 11 Mb/s; 12 Mb/s; 18 Mb/s
                              24 Mb/s; 36 Mb/s; 48 Mb/s; 54 Mb/s
                    Quality=76/100  Signal level=-53 dBm 
                    IE: WPA Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (2) : 802.1x Proprietary
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (2) : 802.1x Proprietary
                    Extra: Last beacon: 728ms ago
          Cell 02 - Address: 00:18:F6:F5:97:4F
                    ESSID:"ThomsonAC6D8D"
                    Protocol:IEEE 802.11bg
                    ...
</source>
 
<br/ >
We are then using a ''sed'' script in order to keep the relevant informations only, in other words the numbers from each connexion's address.
[''convertAdress.sed'']  
 
<source lang="bash">
# This will only output the addresses lines
/Address/!d
 
# This will keep the numbers only
s/[^0123456789]//g
 
# Each number is then converted into note
s/00//g
s/0/c /g
s/1/c /g
s/2/e- /g
s/3/e- /g
s/4/f /g
s/5/f /g
s/6/g /g
s/7/g /g
s/8/b- /g
s/9/b- /g
</source>
 
<br />
<br />
Next is to [http://en.wikipedia.org/wiki/Pipeline_%28software%29 pipe] the result in a shell script which already contains the essential Midge language structure to play sound.
[''dispatchNotes.sh'']
<source lang="bash">
# The cat stuff is a trick to make bash avoid this part
cat <<END
@head {
    \$time_sig 3/4
    \$tempo 45
}
@body {
    @channel 1 {
        \$patch 99
        \$octave 4
        \$length 24
\$reverb 100
%repeat 100 {
END
# This part will be interpreted by bash which will look for the notes
iAdd="0"
while read line;
do
if (("$iAdd" == "0" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "1" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "2" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "3" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "4" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "5" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "6" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "7" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "8" )); then
echo $line
iAdd=$[$iAdd + 1]
elif (("$iAdd" == "9" )); then
echo $line
iAdd=$[$iAdd + 1]
else
iAdd="-1"
fi
done 
cat <<END
}
}


}
[[image:2011-04-02_21.05.51.jpg | 300px]]
 
END
</source>
<br />
<br />


==<div style="margin-top:30px">Output</div>==
[[image:2011-04-02_21.04.53.jpg | 300px]]
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
 
[[File:sortieDJ.ogg]]
<br />
<br />


==<div style="margin-top:30px">Work in progress</div>==
[[image:2011-04-02_21.04.02.jpg | 300px]]
<hr style="height:5px; margin-top:-15px; background-color:#FFF">
<br /><br />
 
For now we are only dealing with the ''MAC adresses'', but we could go further by dealing with the ''name'' of the connexions and the ''signal strength''. Those new data would be use to determine the tempo of the music and the instruments. Each person connected would then be taken as a new musical line.


</div>
</div>

Latest revision as of 12:45, 7 April 2011



C64 Music Programming



Presentation


Before shaping the feb14 performance project with Inge, the original idea was to use an old Commodore 64 computer as a member of an Electronic Hip-Hop band.

The project


The C64 is very famous among 8-bit music lovers, because it's internal ship, the SID, which is cheap and yet powerful. Usually the SID is extracted from the computer and used in a more contemporary MIDI controller. I took the initial restraint of not opening the C64 (because it was borrowed) as a starting point the create the music.

The only way to achieve this is by programming directly in the C64, via the old Commodore Basic V2 language. I found a copy of a very good book entitled "The Commodore 64 Music Book" which help me a with the programming of the first songs.

Unfortunately, I realized later the Datassette, external tape drive used to store data, was quite unstable. In the end, I wasn't able to record data anymore, making it impossible to build songs in regards to the amount of text necessary to just output a few tones. The project was then aborted.

Gallery



2011-04-02 21.08.16.jpg

2011-04-02 21.08.00.jpg

2011-04-02 21.05.51.jpg

2011-04-02 21.04.53.jpg

2011-04-02 21.04.02.jpg