<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
  <title>Linux Format forums</title>
  <link>http://www.linuxformat.com/forums/index.php</link>
  <description>Help, discussion, magazine feedback and more</description>
  <language>english</language>
  <copyright>(c) Copyright Sat May 18, 2013 7:25 pm by Linux Format forums</copyright>
  <managingEditor>webmaster@linuxformat.com</managingEditor>
  <webMaster>webmaster@linuxformat.com</webMaster>
  <pubDate>Sat May 18, 2013 7:25 pm</pubDate>
  <lastBuildDate>Sat May 18, 2013 7:25 pm</lastBuildDate>
  <docs>http://backend.userland.com/rss</docs>
  <generator>phpBB2 RSS Syndication Mod by Lucas</generator>
  <ttl>1</ttl>

  <image>
    <title>Linux Format forums</title>
    <url></url>
    <link>http://www.linuxformat.com/forums/</link>
    <description>Help, discussion, magazine feedback and more</description>
  </image>

                                      <item>
                                        <title>A Python Metronome For Beginner Musicians...</title>
                                        <link>http://www.linuxformat.com/forums/viewtopic.php?p=105979#105979</link>
                                        <description>&lt;br /&gt;
                                      Author: &lt;a href='http://www.linuxformat.com/forums/profile.php?mode=viewprofile&amp;u=58561'&gt;Bazza&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
                                      Posted: Fri May 18, 2012 11:33 pm&lt;br /&gt;&lt;br /&gt;
                                      &lt;br /&gt;&lt;br /&gt;
                                      Hi guys, not been around for a while but here is another freebie...&lt;br /&gt;
&lt;br /&gt;
A simple metronome for beginner musicians to practice with.&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;table width=&quot;90%&quot; cellspacing=&quot;1&quot; cellpadding=&quot;3&quot; border=&quot;0&quot; align=&quot;center&quot;&gt;&lt;tr&gt; 	  &lt;td&gt;&lt;span class=&quot;genmed&quot;&gt;&lt;b&gt;Code:&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;	&lt;/tr&gt;	&lt;tr&gt;	  &lt;td class=&quot;code&quot;&gt;# Metronome3x.py&lt;br /&gt;
#&lt;br /&gt;
# DEMO simple metronome that exploits a minor flaw in the /dev/audio and /dev/dsp devices inside Linux.&lt;br /&gt;
# It can tick at around 30 to 400 beats per minute. This minimal code can be improved upon to give&lt;br /&gt;
# greater accuracy, range and appearance on screen if required.&lt;br /&gt;
#&lt;br /&gt;
# Original copyright, &amp;#40;C&amp;#41;2007-2012, B.Walker, G0LCU. Now issued as Public Domain and you may do with&lt;br /&gt;
# it as you please.&lt;br /&gt;
#&lt;br /&gt;
# There is a small flaw that uses the Ctrl-C part of the code. I'll let the big guns tell you users&lt;br /&gt;
# that can't find it what it is. It is not a bug as such, but it is a flaw.&lt;br /&gt;
#&lt;br /&gt;
# Tested on an HP Notebook with Debian 6.0.0 and Python 3.1.3 and an Acer Aspire One Netbook with&lt;br /&gt;
# PCLinuxOS 2009 and Python 3.2.1.&lt;br /&gt;
# To run just type&amp;#58;-&lt;br /&gt;
#&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; exec&amp;#40;open&amp;#40;&amp;quot;/absolute/path/to/Metronome3x.py&amp;quot;&amp;#41;.read&amp;#40;&amp;#41;&amp;#41;&amp;lt;RETURN/ENTER&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# And away you go...&lt;br /&gt;
#&lt;br /&gt;
# $VER&amp;#58; Metronome3x.py_Version_0.00.10_&amp;#40;C&amp;#41;2007-2012_B.Walker_G0LCU.&lt;br /&gt;
#&lt;br /&gt;
# Enjoy finding simple solutions to often very difficult problems...&lt;br /&gt;
&lt;br /&gt;
# The only import&amp;#40;s&amp;#41; for this DEMO...&lt;br /&gt;
import time&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def main&amp;#40;&amp;#41;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while 1&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# the _variable_ listing...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# &amp;quot;n&amp;quot; is throw away integer number and purposely reused.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# &amp;quot;beatstring&amp;quot; is the inputted string and is also reused.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# &amp;quot;beat&amp;quot; is the floating point number from about 0.x to 1.x generated from the inputted data.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;#&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# The standard Linux clear screen cmmand.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;n=os.system&amp;#40;&amp;quot;clear&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Set up a basic user screen/window.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;\nPython 3.x.x simple metronome for the Linux platform.\n&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;&amp;#40;C&amp;#41;2007-2012, B.Walker, G0LCU. Issued as Public Domain.\n&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;beatstring=input&amp;#40;&amp;quot;Enter any whole number from 30 to 400 &amp;#40;bpm&amp;#41;, &amp;#40;QUIT or EXIT to Quit&amp;#41;&amp;#58;- &amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Allow a means of quitting the DEMO.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if beatstring==&amp;quot;QUIT&amp;quot; or beatstring==&amp;quot;EXIT&amp;quot;&amp;#58; break&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Don't allow any errors...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if len&amp;#40;beatstring&amp;#41;&amp;gt;=4&amp;#58; beatstring=&amp;quot;100&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if len&amp;#40;beatstring&amp;#41;&amp;lt;=1&amp;#58; beatstring=&amp;quot;100&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;n=0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while n&amp;lt;=&amp;#40;len&amp;#40;beatstring&amp;#41;-1&amp;#41;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if beatstring&amp;#91;n&amp;#93;&amp;gt;=chr&amp;#40;48&amp;#41; and beatstring&amp;#91;n&amp;#93;&amp;lt;=chr&amp;#40;57&amp;#41;&amp;#58; n=n+1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;else&amp;#58; beatstring=&amp;quot;100&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;n=int&amp;#40;beatstring&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if n&amp;lt;=30&amp;#58; n=30&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if n&amp;gt;=400&amp;#58; n=400&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Convert this integer &amp;quot;n&amp;quot; back to the &amp;quot;beatstring&amp;quot; string...&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;beatstring=str&amp;#40;n&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Now convert to the floating point value for the time.sleep&amp;#40;&amp;#41; function.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;beat=&amp;#40;&amp;#40;60/n&amp;#41;-0.125&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;\nApproximate beats per minute = &amp;quot;+beatstring+&amp;quot;...\n&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print&amp;#40;&amp;quot;Press Ctrl-C to enter another speed...&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while 1&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Write directly to the /dev/dsp device.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;try&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audio=open&amp;#40;&amp;quot;/dev/dsp&amp;quot;, &amp;quot;wb&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audio.write&amp;#40;b&amp;quot;\x00\xFF&amp;quot;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audio.close&amp;#40;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;time.sleep&amp;#40;beat&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# There is a flaw here, I'll let you big guns find it... ;o&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Note it is NOT really a bug!&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;except KeyboardInterrupt&amp;#58; break&lt;br /&gt;
main&amp;#40;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
# End of the Metronome3x.py code.&lt;br /&gt;
# Enjoy finding simple solutions to often very difficult problems...&lt;/td&gt;	&lt;/tr&gt;&lt;/table&gt;&lt;span class=&quot;postbody&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
Have fun...</description>
                                        <comments>http://www.linuxformat.com/forums/viewtopic.php?p=105979#105979</comments>
                                        <author>Bazza</author>
                                        <pubDate>Fri May 18, 2012 11:33 pm</pubDate>
                                        <guid isPermaLink="true">http://www.linuxformat.com/forums/viewtopic.php?p=105979#105979</guid>
                                      </item></channel></rss>