[{"data":1,"prerenderedAt":1221},["ShallowReactive",2],{"i-lucide:menu":3,"i-lucide:arrow-up-right":8,"i-lucide:moon":10,"i-lucide:sun":12,"i-lucide:rss":14,"i-simple-icons:github":16,"i-simple-icons:linkedin":18,"post-\u002F2013\u002Fpi-hacking-2-noise-level-monitor":21,"surround-\u002F2013\u002Fpi-hacking-2-noise-level-monitor":73,"i-lucide:arrow-left":82,"i-lucide:arrow-right":84,"gist-4647548":86},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,24,false,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 5h16M4 12h16M4 19h16\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":9},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M7 7h10v10M7 17L17 7\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":11},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":13},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Ccircle cx=\"12\" cy=\"12\" r=\"4\"\u002F>\u003Cpath d=\"M12 2v2m0 16v2M4.93 4.93l1.41 1.41m11.32 11.32l1.41 1.41M2 12h2m16 0h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":15},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M4 11a9 9 0 0 1 9 9M4 4a16 16 0 0 1 16 16\"\u002F>\u003Ccircle cx=\"5\" cy=\"19\" r=\"1\"\u002F>\u003C\u002Fg>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":17},"\u003Cpath fill=\"currentColor\" d=\"M12 .297c-6.63 0-12 5.373-12 12c0 5.303 3.438 9.8 8.205 11.385c.6.113.82-.258.82-.577c0-.285-.01-1.04-.015-2.04c-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729c1.205.084 1.838 1.236 1.838 1.236c1.07 1.835 2.809 1.305 3.495.998c.108-.776.417-1.305.76-1.605c-2.665-.3-5.466-1.332-5.466-5.93c0-1.31.465-2.38 1.235-3.22c-.135-.303-.54-1.523.105-3.176c0 0 1.005-.322 3.3 1.23c.96-.267 1.98-.399 3-.405c1.02.006 2.04.138 3 .405c2.28-1.552 3.285-1.23 3.285-1.23c.645 1.653.24 2.873.12 3.176c.765.84 1.23 1.91 1.23 3.22c0 4.61-2.805 5.625-5.475 5.92c.42.36.81 1.096.81 2.22c0 1.606-.015 2.896-.015 3.286c0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":19,"hidden":20},"\u003Cpath fill=\"currentColor\" d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037c-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85c3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.06 2.06 0 0 1-2.063-2.065a2.064 2.064 0 1 1 2.063 2.065m1.782 13.019H3.555V9h3.564zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0z\"\u002F>",true,{"id":22,"title":23,"body":24,"category":54,"comments":55,"date":56,"description":57,"excerpt":55,"extension":58,"image":55,"meta":59,"navigation":20,"path":60,"readingTime":61,"seo":62,"stem":63,"subtitle":64,"tags":65,"wordCount":71,"__hash__":72},"posts\u002F2013\u002Fpi-hacking-2-noise-level-monitor.md","Pi Hacking #2",{"type":25,"value":26,"toc":50},"minimark",[27,37,40,43,46],[28,29,30,31,36],"p",{},"My second Pi hacking project: a noise monitor. The setup uses a ",[32,33,35],"a",{"href":34},"http:\u002F\u002Flearn.adafruit.com\u002Fadafruit-led-backpack\u002F0-dot-56-seven-segment-backpack","7-segment, 4-digit LED backpack from Adafruit",", a red LED, USB mic and some clever\u002Fsimple Python code.",[28,38,39],{},"Ambient noise is measured from the USB mic via a python ALSA interface. The measured level is displayed on the LED screen (up to 4 digits). Measurement is done in 0.01 second intervals, but the display only changes when a set threshold and time is exceeded. When the noise exceeds a set point, the red LED lights to indicate a noisy environment.",[28,41,42],{},"Setting up the 4-digit display was amazingly simple. Seriously. One only has to buy and soldier the backpack (leaving the heavy work to Adafruit), connect it to the Pi and call set_digit() from python to change the display state. Amazing.",[28,44,45],{},"It truly is. The Pi and ready-made components and tutorials enabled me to go from zero to this in just under a day of continuous learning.",[47,48],"gist",{"id":49},"4647548",{"title":51,"searchDepth":52,"depth":52,"links":53},"",2,[],"Hardware",null,"2013-01-30","My second Pi hacking project: a noise monitor. The setup uses a 7-segment, 4-digit LED backpack from Adafruit, a red LED, USB mic and some clever\u002Fsimple Python code.","md",{},"\u002F2013\u002Fpi-hacking-2-noise-level-monitor","less than 1 minute",{"title":23,"description":57},"2013\u002Fpi-hacking-2-noise-level-monitor","Noise Level Monitor",[66,67,68,69,70],"python","project","breadboard","raspberry","pi",159,"PlCsHATpVBQU6hYmb1RNXWuFJkbDTqgjSyNTLtOjHPo",[74,78],{"title":75,"path":76,"stem":77,"children":-1},"Pi Hacking #1","\u002F2013\u002Fpi-hacking-1-my-intro-to-the-world-of-electronics","2013\u002Fpi-hacking-1-my-intro-to-the-world-of-electronics",{"title":79,"path":80,"stem":81,"children":-1},"Pi Hacking #3","\u002F2013\u002Fpi-hacking-3-etv-viewers-count","2013\u002Fpi-hacking-3-etv-viewers-count",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":83},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m12 19l-7-7l7-7m7 7H5\"\u002F>",{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":85},"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M5 12h14m-7-7l7 7l-7 7\"\u002F>",{"id":87,"title":88,"body":89,"createdAt":1212,"description":51,"extension":58,"files":1213,"gistId":49,"meta":1214,"navigation":20,"owner":1215,"path":1216,"seo":1217,"stem":1218,"url":1219,"__hash__":1220},"gists\u002Fgists\u002F4647548.md","Python script for Raspberry Pi, Adafruit 7-segment 4-digit LCD backpack and a LED. Uses an USB mic to measure and display sound level.",{"type":25,"value":90,"toc":1210},[91,1206],[92,93,97],"pre",{"className":94,"code":95,"filename":96,"language":66,"meta":51,"style":51},"language-python shiki shiki-themes github-light github-dark","#!\u002Fusr\u002Fbin\u002Fpython\n\n# Sound level indicator on a 7-segment 4-digit LCD, for Raspberry Pi\n# Uses a USB mic to measure sound level\n# \n# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_LEDBackpack\u002FAdafruit_7Segment.py\n# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_LEDBackpack\u002FAdafruit_LEDBackpack.py\n# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_I2C\u002FAdafruit_I2C.py\n# \n# Author Ando Roots \u003Cando [at] sqroot [dot] eu> 2013\n# http:\u002F\u002Fsqroot.eu\n\nimport alsaaudio, time, audioop, datetime\nfrom Adafruit_7Segment import SevenSegment\nimport RPi.GPIO as GPIO\n\nclass SoundMonitor:\n  \n    # Red LED address\n    RED_LED = 23\n    \n    # Light red LED when measured sound value exceeds the preset limit\n    WARNING_THRESHOLD = 800\n    \n    # Tolerance as a percentage (0.5 is 50%)\n    # LCD output is changed when the measured value exceeds this tolerance\n    TOLERANCE = 0.15\n    \n    # Minimum time in seconds between each LCD value change\n    MAX_CHANGE_FREQ = 0.5   \n    \n    # 7-segment display (run i2cdetect -y 1 to get the addr)\n    segment = SevenSegment(address=0x70)\n    \n    # Alsaaudio instance\n    inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NORMAL, 'sysdefault:CARD=Set')\n    \n    def __init__(self):\n        \n        # LED\n        GPIO.setmode(GPIO.BCM)\n        GPIO.setup(self.RED_LED, GPIO.OUT)\n        \n        # Set attributes: Mono, 8000 Hz, 16 bit little endian samples\n        self.inp.setchannels(1)\n        self.inp.setrate(8000)\n        self.inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)\n        self.inp.setperiodsize(160)\n\n    \n    # Write a 4-digit number to the LCD\n    def write_number(self, value):\n        value = int(value)\n        if value > 9999:\n            print \"Value %s is out of bounds, setting to 9999\" % value\n            value = 9999\n        value = str(value).zfill(4)\n        self.segment.writeDigit(0, int(value[0]))\n        self.segment.writeDigit(1, int(value[1]))\n        self.segment.writeDigit(3, int(value[2]))\n        self.segment.writeDigit(4, int(value[3]))\n        return self\n    \n    # Get the current sound level\n    def get_sound_level(self):\n        \n        # Read data from device\n        l,data = self.inp.read()\n        if not l:\n            return 1\n        \n        # Return the maximum of the absolute value of all samples in a fragment.\n        value = float(audioop.max(data, 2))\n        if value \u003C 1:\n            value = 1.0\n        return value\n    \n    # Main loop\n    def run(self):\n        print \"Running the program - press Ctrl + C to exit.\"\n        time.sleep(2)\n        \n        saved_value = 1\n        last_changed = time.time()\n        \n        while True:\n            value = self.get_sound_level()\n            red_state = value > self.WARNING_THRESHOLD \n            \n            print \"Level: %s; Red: %s;\" % (value, red_state)\n            if abs((saved_value - value) \u002F value) > self.TOLERANCE:\n                if time.time() > last_changed + self.MAX_CHANGE_FREQ:\n                    self.write_number(value) # Change LCD output\n                    GPIO.output(self.RED_LED, red_state) # Light red LED?\n                    saved_value = value\n                    last_changed = time.time()\n        \n        time.sleep(.001)\n            \n    # Cleanup on exit\n    def __del__(self):\n        self.segment.disp.clear()\n        GPIO.cleanup()\n        \n# Run the program\nmonitor = SoundMonitor().run()\n","SoundMonitor.py",[98,99,100,109,114,120,126,132,138,144,150,155,161,167,172,183,197,215,220,233,239,245,257,263,269,280,284,290,296,307,312,318,332,337,343,368,373,379,408,413,425,431,437,456,483,488,494,508,521,534,547,552,557,563,574,588,605,626,637,655,679,698,719,738,747,752,758,768,773,779,793,804,813,818,824,842,857,867,874,879,885,895,904,914,919,929,940,945,956,968,990,996,1019,1053,1079,1091,1112,1122,1132,1137,1147,1152,1158,1168,1176,1184,1189,1195],"code",{"__ignoreMap":51},[101,102,105],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sJ8bj","#!\u002Fusr\u002Fbin\u002Fpython\n",[101,110,111],{"class":103,"line":52},[101,112,113],{"emptyLinePlaceholder":20},"\n",[101,115,117],{"class":103,"line":116},3,[101,118,119],{"class":107},"# Sound level indicator on a 7-segment 4-digit LCD, for Raspberry Pi\n",[101,121,123],{"class":103,"line":122},4,[101,124,125],{"class":107},"# Uses a USB mic to measure sound level\n",[101,127,129],{"class":103,"line":128},5,[101,130,131],{"class":107},"# \n",[101,133,135],{"class":103,"line":134},6,[101,136,137],{"class":107},"# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_LEDBackpack\u002FAdafruit_7Segment.py\n",[101,139,141],{"class":103,"line":140},7,[101,142,143],{"class":107},"# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_LEDBackpack\u002FAdafruit_LEDBackpack.py\n",[101,145,147],{"class":103,"line":146},8,[101,148,149],{"class":107},"# https:\u002F\u002Fgithub.com\u002Fadafruit\u002FAdafruit-Raspberry-Pi-Python-Code\u002Fblob\u002Fmaster\u002FAdafruit_I2C\u002FAdafruit_I2C.py\n",[101,151,153],{"class":103,"line":152},9,[101,154,131],{"class":107},[101,156,158],{"class":103,"line":157},10,[101,159,160],{"class":107},"# Author Ando Roots \u003Cando [at] sqroot [dot] eu> 2013\n",[101,162,164],{"class":103,"line":163},11,[101,165,166],{"class":107},"# http:\u002F\u002Fsqroot.eu\n",[101,168,170],{"class":103,"line":169},12,[101,171,113],{"emptyLinePlaceholder":20},[101,173,175,179],{"class":103,"line":174},13,[101,176,178],{"class":177},"szBVR","import",[101,180,182],{"class":181},"sVt8B"," alsaaudio, time, audioop, datetime\n",[101,184,186,189,192,194],{"class":103,"line":185},14,[101,187,188],{"class":177},"from",[101,190,191],{"class":181}," Adafruit_7Segment ",[101,193,178],{"class":177},[101,195,196],{"class":181}," SevenSegment\n",[101,198,200,202,205,209,212],{"class":103,"line":199},15,[101,201,178],{"class":177},[101,203,204],{"class":181}," RPi.",[101,206,208],{"class":207},"sj4cs","GPIO",[101,210,211],{"class":177}," as",[101,213,214],{"class":207}," GPIO\n",[101,216,218],{"class":103,"line":217},16,[101,219,113],{"emptyLinePlaceholder":20},[101,221,223,226,230],{"class":103,"line":222},17,[101,224,225],{"class":177},"class",[101,227,229],{"class":228},"sScJk"," SoundMonitor",[101,231,232],{"class":181},":\n",[101,234,236],{"class":103,"line":235},18,[101,237,238],{"class":181},"  \n",[101,240,242],{"class":103,"line":241},19,[101,243,244],{"class":107},"    # Red LED address\n",[101,246,248,251,254],{"class":103,"line":247},20,[101,249,250],{"class":207},"    RED_LED",[101,252,253],{"class":177}," =",[101,255,256],{"class":207}," 23\n",[101,258,260],{"class":103,"line":259},21,[101,261,262],{"class":181},"    \n",[101,264,266],{"class":103,"line":265},22,[101,267,268],{"class":107},"    # Light red LED when measured sound value exceeds the preset limit\n",[101,270,272,275,277],{"class":103,"line":271},23,[101,273,274],{"class":207},"    WARNING_THRESHOLD",[101,276,253],{"class":177},[101,278,279],{"class":207}," 800\n",[101,281,282],{"class":103,"line":5},[101,283,262],{"class":181},[101,285,287],{"class":103,"line":286},25,[101,288,289],{"class":107},"    # Tolerance as a percentage (0.5 is 50%)\n",[101,291,293],{"class":103,"line":292},26,[101,294,295],{"class":107},"    # LCD output is changed when the measured value exceeds this tolerance\n",[101,297,299,302,304],{"class":103,"line":298},27,[101,300,301],{"class":207},"    TOLERANCE",[101,303,253],{"class":177},[101,305,306],{"class":207}," 0.15\n",[101,308,310],{"class":103,"line":309},28,[101,311,262],{"class":181},[101,313,315],{"class":103,"line":314},29,[101,316,317],{"class":107},"    # Minimum time in seconds between each LCD value change\n",[101,319,321,324,326,329],{"class":103,"line":320},30,[101,322,323],{"class":207},"    MAX_CHANGE_FREQ",[101,325,253],{"class":177},[101,327,328],{"class":207}," 0.5",[101,330,331],{"class":181},"   \n",[101,333,335],{"class":103,"line":334},31,[101,336,262],{"class":181},[101,338,340],{"class":103,"line":339},32,[101,341,342],{"class":107},"    # 7-segment display (run i2cdetect -y 1 to get the addr)\n",[101,344,346,349,352,355,359,362,365],{"class":103,"line":345},33,[101,347,348],{"class":181},"    segment ",[101,350,351],{"class":177},"=",[101,353,354],{"class":181}," SevenSegment(",[101,356,358],{"class":357},"s4XuR","address",[101,360,361],{"class":177},"=0x",[101,363,364],{"class":207},"70",[101,366,367],{"class":181},")\n",[101,369,371],{"class":103,"line":370},34,[101,372,262],{"class":181},[101,374,376],{"class":103,"line":375},35,[101,377,378],{"class":107},"    # Alsaaudio instance\n",[101,380,382,385,387,390,393,396,399,402,406],{"class":103,"line":381},36,[101,383,384],{"class":181},"    inp ",[101,386,351],{"class":177},[101,388,389],{"class":181}," alsaaudio.PCM(alsaaudio.",[101,391,392],{"class":207},"PCM_CAPTURE",[101,394,395],{"class":181},",alsaaudio.",[101,397,398],{"class":207},"PCM_NORMAL",[101,400,401],{"class":181},", ",[101,403,405],{"class":404},"sZZnC","'sysdefault:CARD=Set'",[101,407,367],{"class":181},[101,409,411],{"class":103,"line":410},37,[101,412,262],{"class":181},[101,414,416,419,422],{"class":103,"line":415},38,[101,417,418],{"class":177},"    def",[101,420,421],{"class":207}," __init__",[101,423,424],{"class":181},"(self):\n",[101,426,428],{"class":103,"line":427},39,[101,429,430],{"class":181},"        \n",[101,432,434],{"class":103,"line":433},40,[101,435,436],{"class":107},"        # LED\n",[101,438,440,443,446,448,451,454],{"class":103,"line":439},41,[101,441,442],{"class":207},"        GPIO",[101,444,445],{"class":181},".setmode(",[101,447,208],{"class":207},[101,449,450],{"class":181},".",[101,452,453],{"class":207},"BCM",[101,455,367],{"class":181},[101,457,459,461,464,467,469,472,474,476,478,481],{"class":103,"line":458},42,[101,460,442],{"class":207},[101,462,463],{"class":181},".setup(",[101,465,466],{"class":207},"self",[101,468,450],{"class":181},[101,470,471],{"class":207},"RED_LED",[101,473,401],{"class":181},[101,475,208],{"class":207},[101,477,450],{"class":181},[101,479,480],{"class":207},"OUT",[101,482,367],{"class":181},[101,484,486],{"class":103,"line":485},43,[101,487,430],{"class":181},[101,489,491],{"class":103,"line":490},44,[101,492,493],{"class":107},"        # Set attributes: Mono, 8000 Hz, 16 bit little endian samples\n",[101,495,497,500,503,506],{"class":103,"line":496},45,[101,498,499],{"class":207},"        self",[101,501,502],{"class":181},".inp.setchannels(",[101,504,505],{"class":207},"1",[101,507,367],{"class":181},[101,509,511,513,516,519],{"class":103,"line":510},46,[101,512,499],{"class":207},[101,514,515],{"class":181},".inp.setrate(",[101,517,518],{"class":207},"8000",[101,520,367],{"class":181},[101,522,524,526,529,532],{"class":103,"line":523},47,[101,525,499],{"class":207},[101,527,528],{"class":181},".inp.setformat(alsaaudio.",[101,530,531],{"class":207},"PCM_FORMAT_S16_LE",[101,533,367],{"class":181},[101,535,537,539,542,545],{"class":103,"line":536},48,[101,538,499],{"class":207},[101,540,541],{"class":181},".inp.setperiodsize(",[101,543,544],{"class":207},"160",[101,546,367],{"class":181},[101,548,550],{"class":103,"line":549},49,[101,551,113],{"emptyLinePlaceholder":20},[101,553,555],{"class":103,"line":554},50,[101,556,262],{"class":181},[101,558,560],{"class":103,"line":559},51,[101,561,562],{"class":107},"    # Write a 4-digit number to the LCD\n",[101,564,566,568,571],{"class":103,"line":565},52,[101,567,418],{"class":177},[101,569,570],{"class":228}," write_number",[101,572,573],{"class":181},"(self, value):\n",[101,575,577,580,582,585],{"class":103,"line":576},53,[101,578,579],{"class":181},"        value ",[101,581,351],{"class":177},[101,583,584],{"class":207}," int",[101,586,587],{"class":181},"(value)\n",[101,589,591,594,597,600,603],{"class":103,"line":590},54,[101,592,593],{"class":177},"        if",[101,595,596],{"class":181}," value ",[101,598,599],{"class":177},">",[101,601,602],{"class":207}," 9999",[101,604,232],{"class":181},[101,606,608,611,614,617,620,623],{"class":103,"line":607},55,[101,609,610],{"class":207},"            print",[101,612,613],{"class":404}," \"Value ",[101,615,616],{"class":207},"%s",[101,618,619],{"class":404}," is out of bounds, setting to 9999\"",[101,621,622],{"class":177}," %",[101,624,625],{"class":181}," value\n",[101,627,629,632,634],{"class":103,"line":628},56,[101,630,631],{"class":181},"            value ",[101,633,351],{"class":177},[101,635,636],{"class":207}," 9999\n",[101,638,640,642,644,647,650,653],{"class":103,"line":639},57,[101,641,579],{"class":181},[101,643,351],{"class":177},[101,645,646],{"class":207}," str",[101,648,649],{"class":181},"(value).zfill(",[101,651,652],{"class":207},"4",[101,654,367],{"class":181},[101,656,658,660,663,666,668,671,674,676],{"class":103,"line":657},58,[101,659,499],{"class":207},[101,661,662],{"class":181},".segment.writeDigit(",[101,664,665],{"class":207},"0",[101,667,401],{"class":181},[101,669,670],{"class":207},"int",[101,672,673],{"class":181},"(value[",[101,675,665],{"class":207},[101,677,678],{"class":181},"]))\n",[101,680,682,684,686,688,690,692,694,696],{"class":103,"line":681},59,[101,683,499],{"class":207},[101,685,662],{"class":181},[101,687,505],{"class":207},[101,689,401],{"class":181},[101,691,670],{"class":207},[101,693,673],{"class":181},[101,695,505],{"class":207},[101,697,678],{"class":181},[101,699,701,703,705,708,710,712,714,717],{"class":103,"line":700},60,[101,702,499],{"class":207},[101,704,662],{"class":181},[101,706,707],{"class":207},"3",[101,709,401],{"class":181},[101,711,670],{"class":207},[101,713,673],{"class":181},[101,715,716],{"class":207},"2",[101,718,678],{"class":181},[101,720,722,724,726,728,730,732,734,736],{"class":103,"line":721},61,[101,723,499],{"class":207},[101,725,662],{"class":181},[101,727,652],{"class":207},[101,729,401],{"class":181},[101,731,670],{"class":207},[101,733,673],{"class":181},[101,735,707],{"class":207},[101,737,678],{"class":181},[101,739,741,744],{"class":103,"line":740},62,[101,742,743],{"class":177},"        return",[101,745,746],{"class":207}," self\n",[101,748,750],{"class":103,"line":749},63,[101,751,262],{"class":181},[101,753,755],{"class":103,"line":754},64,[101,756,757],{"class":107},"    # Get the current sound level\n",[101,759,761,763,766],{"class":103,"line":760},65,[101,762,418],{"class":177},[101,764,765],{"class":228}," get_sound_level",[101,767,424],{"class":181},[101,769,771],{"class":103,"line":770},66,[101,772,430],{"class":181},[101,774,776],{"class":103,"line":775},67,[101,777,778],{"class":107},"        # Read data from device\n",[101,780,782,785,787,790],{"class":103,"line":781},68,[101,783,784],{"class":181},"        l,data ",[101,786,351],{"class":177},[101,788,789],{"class":207}," self",[101,791,792],{"class":181},".inp.read()\n",[101,794,796,798,801],{"class":103,"line":795},69,[101,797,593],{"class":177},[101,799,800],{"class":177}," not",[101,802,803],{"class":181}," l:\n",[101,805,807,810],{"class":103,"line":806},70,[101,808,809],{"class":177},"            return",[101,811,812],{"class":207}," 1\n",[101,814,816],{"class":103,"line":815},71,[101,817,430],{"class":181},[101,819,821],{"class":103,"line":820},72,[101,822,823],{"class":107},"        # Return the maximum of the absolute value of all samples in a fragment.\n",[101,825,827,829,831,834,837,839],{"class":103,"line":826},73,[101,828,579],{"class":181},[101,830,351],{"class":177},[101,832,833],{"class":207}," float",[101,835,836],{"class":181},"(audioop.max(data, ",[101,838,716],{"class":207},[101,840,841],{"class":181},"))\n",[101,843,845,847,849,852,855],{"class":103,"line":844},74,[101,846,593],{"class":177},[101,848,596],{"class":181},[101,850,851],{"class":177},"\u003C",[101,853,854],{"class":207}," 1",[101,856,232],{"class":181},[101,858,860,862,864],{"class":103,"line":859},75,[101,861,631],{"class":181},[101,863,351],{"class":177},[101,865,866],{"class":207}," 1.0\n",[101,868,870,872],{"class":103,"line":869},76,[101,871,743],{"class":177},[101,873,625],{"class":181},[101,875,877],{"class":103,"line":876},77,[101,878,262],{"class":181},[101,880,882],{"class":103,"line":881},78,[101,883,884],{"class":107},"    # Main loop\n",[101,886,888,890,893],{"class":103,"line":887},79,[101,889,418],{"class":177},[101,891,892],{"class":228}," run",[101,894,424],{"class":181},[101,896,898,901],{"class":103,"line":897},80,[101,899,900],{"class":207},"        print",[101,902,903],{"class":404}," \"Running the program - press Ctrl + C to exit.\"\n",[101,905,907,910,912],{"class":103,"line":906},81,[101,908,909],{"class":181},"        time.sleep(",[101,911,716],{"class":207},[101,913,367],{"class":181},[101,915,917],{"class":103,"line":916},82,[101,918,430],{"class":181},[101,920,922,925,927],{"class":103,"line":921},83,[101,923,924],{"class":181},"        saved_value ",[101,926,351],{"class":177},[101,928,812],{"class":207},[101,930,932,935,937],{"class":103,"line":931},84,[101,933,934],{"class":181},"        last_changed ",[101,936,351],{"class":177},[101,938,939],{"class":181}," time.time()\n",[101,941,943],{"class":103,"line":942},85,[101,944,430],{"class":181},[101,946,948,951,954],{"class":103,"line":947},86,[101,949,950],{"class":177},"        while",[101,952,953],{"class":207}," True",[101,955,232],{"class":181},[101,957,959,961,963,965],{"class":103,"line":958},87,[101,960,631],{"class":181},[101,962,351],{"class":177},[101,964,789],{"class":207},[101,966,967],{"class":181},".get_sound_level()\n",[101,969,971,974,976,978,980,982,984,987],{"class":103,"line":970},88,[101,972,973],{"class":181},"            red_state ",[101,975,351],{"class":177},[101,977,596],{"class":181},[101,979,599],{"class":177},[101,981,789],{"class":207},[101,983,450],{"class":181},[101,985,986],{"class":207},"WARNING_THRESHOLD",[101,988,989],{"class":181}," \n",[101,991,993],{"class":103,"line":992},89,[101,994,995],{"class":181},"            \n",[101,997,999,1001,1004,1006,1009,1011,1014,1016],{"class":103,"line":998},90,[101,1000,610],{"class":207},[101,1002,1003],{"class":404}," \"Level: ",[101,1005,616],{"class":207},[101,1007,1008],{"class":404},"; Red: ",[101,1010,616],{"class":207},[101,1012,1013],{"class":404},";\"",[101,1015,622],{"class":177},[101,1017,1018],{"class":181}," (value, red_state)\n",[101,1020,1022,1025,1028,1031,1034,1037,1040,1042,1044,1046,1048,1051],{"class":103,"line":1021},91,[101,1023,1024],{"class":177},"            if",[101,1026,1027],{"class":207}," abs",[101,1029,1030],{"class":181},"((saved_value ",[101,1032,1033],{"class":177},"-",[101,1035,1036],{"class":181}," value) ",[101,1038,1039],{"class":177},"\u002F",[101,1041,1036],{"class":181},[101,1043,599],{"class":177},[101,1045,789],{"class":207},[101,1047,450],{"class":181},[101,1049,1050],{"class":207},"TOLERANCE",[101,1052,232],{"class":181},[101,1054,1056,1059,1062,1064,1067,1070,1072,1074,1077],{"class":103,"line":1055},92,[101,1057,1058],{"class":177},"                if",[101,1060,1061],{"class":181}," time.time() ",[101,1063,599],{"class":177},[101,1065,1066],{"class":181}," last_changed ",[101,1068,1069],{"class":177},"+",[101,1071,789],{"class":207},[101,1073,450],{"class":181},[101,1075,1076],{"class":207},"MAX_CHANGE_FREQ",[101,1078,232],{"class":181},[101,1080,1082,1085,1088],{"class":103,"line":1081},93,[101,1083,1084],{"class":207},"                    self",[101,1086,1087],{"class":181},".write_number(value) ",[101,1089,1090],{"class":107},"# Change LCD output\n",[101,1092,1094,1097,1100,1102,1104,1106,1109],{"class":103,"line":1093},94,[101,1095,1096],{"class":207},"                    GPIO",[101,1098,1099],{"class":181},".output(",[101,1101,466],{"class":207},[101,1103,450],{"class":181},[101,1105,471],{"class":207},[101,1107,1108],{"class":181},", red_state) ",[101,1110,1111],{"class":107},"# Light red LED?\n",[101,1113,1115,1118,1120],{"class":103,"line":1114},95,[101,1116,1117],{"class":181},"                    saved_value ",[101,1119,351],{"class":177},[101,1121,625],{"class":181},[101,1123,1125,1128,1130],{"class":103,"line":1124},96,[101,1126,1127],{"class":181},"                    last_changed ",[101,1129,351],{"class":177},[101,1131,939],{"class":181},[101,1133,1135],{"class":103,"line":1134},97,[101,1136,430],{"class":181},[101,1138,1140,1142,1145],{"class":103,"line":1139},98,[101,1141,909],{"class":181},[101,1143,1144],{"class":207},".001",[101,1146,367],{"class":181},[101,1148,1150],{"class":103,"line":1149},99,[101,1151,995],{"class":181},[101,1153,1155],{"class":103,"line":1154},100,[101,1156,1157],{"class":107},"    # Cleanup on exit\n",[101,1159,1161,1163,1166],{"class":103,"line":1160},101,[101,1162,418],{"class":177},[101,1164,1165],{"class":207}," __del__",[101,1167,424],{"class":181},[101,1169,1171,1173],{"class":103,"line":1170},102,[101,1172,499],{"class":207},[101,1174,1175],{"class":181},".segment.disp.clear()\n",[101,1177,1179,1181],{"class":103,"line":1178},103,[101,1180,442],{"class":207},[101,1182,1183],{"class":181},".cleanup()\n",[101,1185,1187],{"class":103,"line":1186},104,[101,1188,430],{"class":181},[101,1190,1192],{"class":103,"line":1191},105,[101,1193,1194],{"class":107},"# Run the program\n",[101,1196,1198,1201,1203],{"class":103,"line":1197},106,[101,1199,1200],{"class":181},"monitor ",[101,1202,351],{"class":177},[101,1204,1205],{"class":181}," SoundMonitor().run()\n",[1207,1208,1209],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":51,"searchDepth":52,"depth":52,"links":1211},[],"2013-01-27T09:29:51Z",[96],{},"anroots","\u002Fgists\u002F4647548",{"title":88,"description":51},"gists\u002F4647548","https:\u002F\u002Fgist.github.com\u002Fanroots\u002F4647548","lRrDDjcEQ8fdfKMpiWJI2zImBxa5Y0rqE6TVZJiroNI",1790886932551]