<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
<channel>
  <title>Linux Format forums</title>
  <link>http://linuxformat.com/forums/index.php</link>
  <description>Help, discussion, magazine feedback and more</description>
  <language>english</language>
  <copyright>(c) Copyright Sat May 18, 2013 1:16 pm by Linux Format forums</copyright>
  <managingEditor>webmaster@linuxformat.com</managingEditor>
  <webMaster>webmaster@linuxformat.com</webMaster>
  <pubDate>Sat May 18, 2013 1:16 pm</pubDate>
  <lastBuildDate>Sat May 18, 2013 1:16 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://linuxformat.com/forums/</link>
    <description>Help, discussion, magazine feedback and more</description>
  </image>

                                      <item>
                                        <title>A standard Python 2.6+ LF Audio Oscilloscope.</title>
                                        <link>http://linuxformat.com/forums/viewtopic.php?p=98327#98327</link>
                                        <description>&lt;br /&gt;
                                      Author: &lt;a href='http://linuxformat.com/forums/profile.php?mode=viewprofile&amp;u=58561'&gt;Bazza&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
                                      Posted: Wed Apr 06, 2011 10:41 pm&lt;br /&gt;&lt;br /&gt;
                                      &lt;br /&gt;&lt;br /&gt;
                                      Hi all...&lt;br /&gt;
&lt;br /&gt;
I think this may well be a first for both Python and LXF.&lt;br /&gt;
&lt;br /&gt;
I am building a kids level seismometer and wanted to use standard Python&lt;br /&gt;
inside Linux.&lt;br /&gt;
&lt;br /&gt;
This DEMO code was my starter idea and looks as though using standard&lt;br /&gt;
ASCII only might just work a real treat.&lt;br /&gt;
&lt;br /&gt;
I've issued it to LXF under the MIT licence for future reasons.&lt;br /&gt;
&lt;br /&gt;
It doesn't look much on screen except that the waveform(s) shown is/are a&lt;br /&gt;
crude electrical representation of your voice. ;o)&lt;br /&gt;
&lt;br /&gt;
It is possible to link the earphone socket on this notebook to the mic&lt;br /&gt;
input and start the Audio Function Generator, elsewhere in this forum,&lt;br /&gt;
in a separate Python terminal and see those waveforms inside the&lt;br /&gt;
AudioScope.py`s own Python terminal.&lt;br /&gt;
&lt;br /&gt;
Enjoy finding simple solutions to often very difficult problems.&lt;br /&gt;
&lt;br /&gt;
Be aware of wordwrapping, etc...&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;#!/usr/bin/python&lt;br /&gt;
#&lt;br /&gt;
# AudioScope.py&lt;br /&gt;
#&lt;br /&gt;
# DEMO LF Audio Oscilloscope using /dev/dsp inside Linux.&lt;br /&gt;
# Original copyright, &amp;#40;C&amp;#41;2011, B.Walker, G0LCU.&lt;br /&gt;
# Issued to LXF under the MIT licence.&lt;br /&gt;
#&lt;br /&gt;
# The timebase runs vertically and the waveform amplitude horizontally.&lt;br /&gt;
# It grabs a sample for about 1 second and displays the results AFTER&lt;br /&gt;
# the sample; technically a basic LF Storage Audio Oscilloscope.&lt;br /&gt;
# &lt;br /&gt;
# The display only uses standard ASCII characters.&lt;br /&gt;
#&lt;br /&gt;
# To run just type from the prompt &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;...&lt;br /&gt;
# &amp;gt;&amp;gt;&amp;gt; execfile&amp;#40;&amp;quot;/full/path/to/AudioScope.py&amp;quot;&amp;#41;&amp;lt;RETURN/ENTER&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Tested on Python 2.6.x only but should work on other versions of 2.x.x.&lt;br /&gt;
# Ensure /dev/dsp exists; if not install oss-compat from your distro`s&lt;br /&gt;
# repository. Also ensure the sound card is not already in use.&lt;br /&gt;
#&lt;br /&gt;
# Enjoy finding simple solutions to often very difficult problems... ;o&amp;#41;&lt;br /&gt;
#&lt;br /&gt;
# If you are just trying this out and have an internal mic, just talk&lt;br /&gt;
# loudly into the microphone and see your vocal wavefrom on screen...&lt;br /&gt;
# Needless to say using the external microphone input as an input this&lt;br /&gt;
# becomes a single channel uncalibrated LF Audio Oscilloscope.&lt;br /&gt;
#&lt;br /&gt;
# Press Ctrl-C to STOP.&lt;br /&gt;
&lt;br /&gt;
# Import any necessary modules.&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
# Do a basic screen clear. &lt;br /&gt;
os.system&amp;#40;&amp;quot;clear&amp;quot;&amp;#41;&lt;br /&gt;
# Turn the cursor off to look prettier... ;o&amp;#41;&lt;br /&gt;
os.system&amp;#40;&amp;quot;setterm -cursor off&amp;quot;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
def main&amp;#40;&amp;#41;&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Set special variables global.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global audioscope&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global chardisplay&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global offset&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global timebase&lt;br /&gt;
&amp;nbsp; &amp;nbsp;global record&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Known variables.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;audioscope = 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;chardisplay = &amp;quot;&amp;#40;C&amp;#41;2011, B.Walker, G0LCU.&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;offset = 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;timebase = 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;record = &amp;quot;Initial issue to LXF under the MIT licence&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Throw away local variables.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;n = 0&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;while 1&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Sample the microphone/external_microphone_input for approximately 1 second.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audio = file&amp;#40;'/dev/dsp', 'rb'&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;record = audio.read&amp;#40;8192&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audio.close&amp;#40;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# This value points to a character in the 8192 byte string.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# &amp;quot;offset&amp;quot; can be any value from 0 to 191.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;offset = 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Start the loop from character at position 0.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while offset &amp;lt;= 8191&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Convert the character to a decimal number.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audioscope = ord&amp;#40;record&amp;#91;offset&amp;#93;&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Now convert to 6 bit depth to fit one terminal line.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audioscope = int&amp;#40;audioscope/4&amp;#41;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# This should never occur but don`t allow an error.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if audioscope &amp;gt;= 63&amp;#58; audioscope = 63&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if audioscope &amp;lt;= 0&amp;#58; audioscope = 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Invert to correct the trace shown.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;audioscope = 63 - audioscope&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Loop count to get the correct position to print the plot.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;n = 0&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Set the trace position for each line and......&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;chardisplay = &amp;quot;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;while n &amp;lt;= audioscope&amp;#58;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# ......add the required spaces until completed then......&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;chardisplay = chardisplay + &amp;quot; &amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;n = n + 1&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# ......print the plot point using *.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;print chardisplay + &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# Point to the next character to character in the 8192 string.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;# &amp;quot;timebase&amp;quot; can be any value from 1 to 360.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;offset = offset + timebase&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;# Assuming a Ctrl-C arrives here enable the cursor again.&lt;br /&gt;
&amp;nbsp; &amp;nbsp;os.system&amp;#40;&amp;quot;setterm -cursor off&amp;quot;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
main&amp;#40;&amp;#41;&lt;br /&gt;
&lt;br /&gt;
# End of DEMO.&lt;br /&gt;
# Enjoy finding simple solutions to often very difficult problems.&lt;br /&gt;
&lt;/td&gt;	&lt;/tr&gt;&lt;/table&gt;&lt;span class=&quot;postbody&quot;&gt;</description>
                                        <comments>http://linuxformat.com/forums/viewtopic.php?p=98327#98327</comments>
                                        <author>Bazza</author>
                                        <pubDate>Wed Apr 06, 2011 10:41 pm</pubDate>
                                        <guid isPermaLink="true">http://linuxformat.com/forums/viewtopic.php?p=98327#98327</guid>
                                      </item></channel></rss>