{"id":442,"date":"2026-09-16T15:08:47","date_gmt":"2026-09-16T15:08:47","guid":{"rendered":"https:\/\/kyleohare.com\/?page_id=442"},"modified":"2026-09-16T15:27:18","modified_gmt":"2026-09-16T15:27:18","slug":"ausculta-project-acoustic-auscultation-for-machines-instant-audio-diagnosis","status":"publish","type":"page","link":"https:\/\/kyleohare.com\/?page_id=442","title":{"rendered":"Ausculta Project &#8211; Instant Audio Diagnosis"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignleft size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe.jpg\" alt=\"\" class=\"wp-image-445\" width=\"245\" height=\"245\" srcset=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe.jpg 1024w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe-300x300.jpg 300w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe-150x150.jpg 150w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe-768x768.jpg 768w\" sizes=\"(max-width: 245px) 100vw, 245px\" \/><figcaption class=\"wp-element-caption\">Ausculta Logo \/ September 2026<\/figcaption><\/figure><\/div>\n\n\n<p class=\"has-text-align-center\"><strong>2026-2027 project development phase <\/strong>&#8211; Ausculta Acoustic Auscultation for Machines<\/p>\n\n\n\n<p class=\"has-text-align-center\"><strong>Developing a listening app to diagnose machines and devices <\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-text-align-center\"><a href=\"https:\/\/kyleohare.com\/sound-diagnosis\/auscult-browser.html\">https:\/\/kyleohare.com\/sound-diagnosis\/auscult-browser.html<\/a><\/h2>\n\n\n\n<p class=\"has-text-align-center\">The URL above is the test location for the project, file updated daily \/ weekly <\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><strong>AUSCULTA<\/strong> is currently a browser-based acoustic diagnostic tool: record or upload a mechanical\/electrical sound (car, appliance, small engine, audio gear), and it either matches it against a library of known fault signatures or lets you teach it a new one. Single self-contained HTML file, ~4,000 lines, no build step, no backend \u2014 everything runs client-side via the Web Audio API.  In the future the app will be converted to an app for mobile phones and devices with microphones that can run the software without limitations.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"alignright size-large is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-1024x984.png\" alt=\"\" class=\"wp-image-453\" width=\"556\" height=\"533\" srcset=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-1024x984.png 1024w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-300x288.png 300w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-768x738.png 768w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-1536x1476.png 1536w, https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot.png 1995w\" sizes=\"(max-width: 556px) 100vw, 556px\" \/><\/figure><\/div>\n\n\n<p><strong>Storage &amp; persistence<\/strong><br><br><code>localStorage<\/code> as the primary store, with the File System Access API for auto-write-to-disk on Chrome\/Edge. The library auto-loads from <code>auscult-library.json<\/code> via <code>fetch()<\/code> on page load, which is why it needs an actual HTTP server.  It&#8217;s built-in library entries are designed to diagnose car\/truck, appliances, small engines, and audio gear.<\/p>\n\n\n\n<p><strong>The sound fingerprint \u2014 38 dimensions<\/strong><br><br>This is the core of the matching system: 20 log-spaced frequency buckets (active-bin-only averaging, computed via <code>bucketSpectrum<\/code>) plus 18 scalar features \u2014 centroid, spectral flatness (geometric\/arithmetic mean ratio, i.e. Wiener entropy), crest factor, impact rate, inter-onset interval CV, spectral spread, flux, rolloff, skewness, kurtosis, spectral crest, attack time, decay time (10dB-fall time from peak), three sub-band crest factors (low\/mid\/high), centroid stability (frame-to-frame stddev), attack-zone centroid, and centroid permutation entropy (ordinal-pattern Shannon entropy \u2014 volume-invariant temporal complexity, distinct from stddev-based stability). <\/p>\n\n\n\n<p>Everything L2-normalized, applied at matching time rather than storage time.  Each entry carries its own frequency range, acoustic pattern type (<code>periodic-impact<\/code>, <code>tonal<\/code>, <code>broadband-noise<\/code>, or <code>irregular-transient<\/code>), severity rating, likely causes, and recommended action \u2014 that data is what drives the heuristic half of the scoring (<code>scoreEntry<\/code>), separate from the learned kNN matching against real recorded examples.  Actual sound files are not stored anywhere, just the fingerprints of the sound file to conserve overall space on server(s) or the mobile device. <\/p>\n\n\n\n<p><strong>Matching<\/strong><br><br>Pure k=1 nearest-neighbor cosine similarity \u2014 verified through extensive leave-one-out testing that k=1 beats k=3 averaging for this data. Confidence-boost weighting scales with example count per label, plus a &#8220;borrowed heuristic&#8221; system where a custom label that text-matches a built-in entry inherits its heuristic. <\/p>\n\n\n\n<p><strong>Signal processing \/ selective hearing<\/strong><br><br>Two-formant speech rejection, startup-transient rejection, turn-signal rejection, ambient noise-floor calibration and subtraction, and an optional AC mains hum filter (two cascaded <code>BiquadFilterNode<\/code> notches at 60\/120Hz or 50\/100Hz, high-Q to stay narrow) and live clipping\/low-gain warnings during recording. <\/p>\n\n\n\n<p><strong>UI<\/strong><br><br>Dual analog VU meters (SVG needle gauges for output level and peak frequency) with JS-driven angle interpolation rather than CSS transitions \u2014  were needed because some browsers decompose an SVG <code>rotate()<\/code> attribute into a transformation matrix for CSS-transition purposes and interpolate that instead of the angle, which breaks visibly on large swings of the VU meter needle. Paired digital LED bargraphs.  Live spectrogram canvas with DPI-aware rendering and min-max range color normalization (a naive per-frame-max approach saturates to a solid color wash on any flat\/broadband signal \u2014 fixed this session). Guided batch-teach flow added.<\/p>\n\n\n\n<p><strong>The accuracy <\/strong> (the largest portion of this app to make it of work)<br><br>A long list of more sophisticated alternatives were tested rigorously against the real library and <em>didn&#8217;t<\/em> beat it: weighted\/proportional distance formulas, cross-correlation, DTW, Naive Bayes, tolerance envelopes, bitwise\/chromaprint-style hashing, PCA, mutual information weighting, SVM (tested with a real library, <code>ml-svm<\/code>), ensemble blending (measurably worse than either method alone), and convex hull bounding (mathematically impossible for this library size \u2014 needs N+1 points per class in N dimensions). <br><br>Mahalanobis distance was the one exception worth noting: tied the baseline exactly at best-tuned regularization, never beat it. Random Forest showed a real edge on average but with enough seed variance and retraining-cost concerns that it wasn&#8217;t shipped. The consistent conclusion: with most machine problem labels sitting at 1-2 examples, that data sparsity is the actual bottleneck, not the matching algorithm.  Currently the sound fingerprint library has about 130 examples which isn&#8217;t enough.  Teaching the app more examples should make the app much more accurate and a powerful device for diagnosing car problems, appliances, etc.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>2026-2027 project development phase &#8211; Ausculta Acoustic Auscultation for Machines Developing a listening app to diagnose machines and devices https:\/\/kyleohare.com\/sound-diagnosis\/auscult-browser.html The URL above is the test location for the project, file updated daily \/ weekly AUSCULTA is currently a browser-based acoustic diagnostic tool: record or upload a mechanical\/electrical sound (car, appliance, small engine, audio gear),&hellip;&nbsp;<a href=\"https:\/\/kyleohare.com\/?page_id=442\" class=\"\" rel=\"bookmark\">Read More &raquo;<span class=\"screen-reader-text\">Ausculta Project &#8211; Instant Audio Diagnosis<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"neve_meta_sidebar":"","neve_meta_container":"","neve_meta_enable_content_width":"","neve_meta_content_width":0,"neve_meta_title_alignment":"","neve_meta_author_avatar":"","neve_post_elements_order":"","neve_meta_disable_header":"","neve_meta_disable_footer":"","neve_meta_disable_title":""},"_links":{"self":[{"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages\/442"}],"collection":[{"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kyleohare.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=442"}],"version-history":[{"count":5,"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages\/442\/revisions"}],"predecessor-version":[{"id":454,"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages\/442\/revisions\/454"}],"wp:attachment":[{"href":"https:\/\/kyleohare.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=442"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}