{"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-10-30T22:52:57","modified_gmt":"2026-10-30T22:52:57","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":"<p><!-- Ausculta Project page \u2014 paste into a Custom HTML block. Styles only affect what's inside .koau -->\n \t<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n \t<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Archivo:wght@400;500;600;800&amp;family=IBM+Plex+Mono:wght@500&amp;display=swap\" rel=\"stylesheet\">\n<style>\n.koau{background:#101113;color:#ECE8E1;font-family:Archivo,system-ui,sans-serif;width:100vw;max-width:100vw;margin-left:calc(50% - 50vw);margin-right:calc(50% - 50vw);overflow:hidden;line-height:1.5;-webkit-font-smoothing:antialiased}<br \/>\n.koau *,.koau *::before,.koau *::after{box-sizing:border-box}<br \/>\n.koau h1,.koau h2,.koau h3,.koau p,.koau ul,.koau ol,.koau li,.koau figure,.koau figcaption{font-family:inherit;color:inherit;text-transform:none;border:0;background:none}<br \/>\n.koau h1,.koau h2,.koau h3,.koau figure{margin:0}<br \/>\n.koau ul,.koau ol{margin:0;padding:0;list-style:none}<br \/>\n.koau li::marker{content:none}<br \/>\n.koau a{color:#ECE8E1;text-decoration:none;box-shadow:none;border-bottom:0;transition:color .15s,opacity .15s}<br \/>\n.koau a:hover{color:#F2A33A}<br \/>\n.koau a.koau-btn:hover{opacity:.9}<br \/>\n.koau a.koau-btn.solid:hover{color:#15100A}<br \/>\n.koau a:focus-visible{outline:2px solid #F2A33A;outline-offset:3px}<br \/>\n.koau img{display:block;max-width:100%;height:auto;border:0;box-shadow:none}<br \/>\n.koau svg{display:inline-block;flex:none}<br \/>\n.koau .mono{font-family:'IBM Plex Mono',monospace}<br \/>\n.koau .spec li{padding:10px 0;border-top:1px solid #2A2D33;font-size:15.5px;line-height:1.55;color:#B5B1AA}<br \/>\n<\/style>\n<div class=\"koau\">\n<p><!-- intro --><\/p>\n<section style=\"max-width: 1100px; margin: 0 auto; padding: clamp(56px, 8vw, 104px) clamp(20px, 4vw, 48px) clamp(40px, 6vw, 64px); display: flex; flex-wrap: wrap-reverse; gap: 48px 72px; align-items: center\">\n<div style=\"flex: 999 1 520px; min-width: 0\">\n<div style=\"display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 24px\">\n<span class=\"mono\" style=\"display: inline-flex; align-items: center; gap: 8px; padding: 7px 12px; border-radius: 999px; background: #2A2418; color: #F2A33A; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase\"><span aria-hidden=\"true\" style=\"width: 7px; height: 7px; border-radius: 50%; background: #F2A33A\"><\/span>In development \u00b7 2026\u20132027<\/span><br \/>\n<span class=\"mono\" style=\"display: inline-flex; align-items: center; padding: 7px 12px; border-radius: 999px; border: 1px solid #3A3E45; color: #A9A59E; font-size: 12px; letter-spacing: 0.08em; text-transform: uppercase\">The Lab<\/span><\/div>\n<h1 style=\"font-size: clamp(52px, 7.6vw, 104px); line-height: 0.92; font-weight: 800; letter-spacing: -0.045em\">Ausculta<\/h1>\n<p style=\"margin: 16px 0 0; font-size: clamp(22px, 2.6vw, 30px); line-height: 1.2; font-weight: 600; letter-spacing: -0.015em\">Instant audio diagnosis for machines and devices.<\/p>\n<p style=\"margin: 22px 0 0; max-width: 580px; font-size: clamp(18px, 1.9vw, 20px); line-height: 1.55; color: #C9C5BE\">Record or upload the sound a car, appliance, small engine or piece of audio gear is making. Ausculta compares it with known fault signatures and suggests what might be wrong, or learns the sound as a new one.<\/p>\n<div style=\"margin-top: 32px; display: flex; flex-wrap: wrap; gap: 12px; align-items: center\">\n<a class=\"koau-btn solid\" href=\"https:\/\/kyleohare.com\/sound-diagnosis\/auscult-browser.html\" style=\"display: inline-flex; align-items: center; gap: 10px; min-height: 52px; padding: 0 26px; border-radius: 999px; background: #F2A33A; color: #15100A; font-weight: 600; font-size: 16px\">Try the test build <svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"><\/path><\/svg><\/a><br \/>\n<span style=\"font-size: 14px; color: #A9A59E\">Runs in your browser \u00b7 Updated daily or weekly<\/span><\/div>\n<\/div>\n<figure style=\"flex: 0 1 300px; min-width: 0\">\n<div style=\"border-radius: 20px; overflow: hidden; background: #17191C; border: 1px solid #2A2D33; padding: 10px\">\n<img decoding=\"async\" src=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/image_fe3e2fe.jpg\" alt=\"Ausculta logo\" style=\"width: 100%; border-radius: 12px\"><\/div><figcaption class=\"mono\" style=\"margin-top: 10px; font-size: 12px; letter-spacing: 0.06em; color: #A9A59E\">Ausculta logo \u00b7 September 2026<\/figcaption><\/figure>\n<\/section>\n<p><!-- screenshot --><\/p>\n<section aria-label=\"Screenshot of Ausculta\" style=\"max-width: 900px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 48px) clamp(56px, 8vw, 96px)\">\n<div style=\"border-radius: 20px; background: #17191C; border: 1px solid #2A2D33; padding: 8px\">\n<div aria-hidden=\"true\" style=\"display: flex; align-items: center; gap: 6px; padding: 8px 10px 12px\">\n<span style=\"width: 10px; height: 10px; border-radius: 50%; background: #F2A33A\"><\/span><span style=\"width: 10px; height: 10px; border-radius: 50%; background: #3A3E45\"><\/span><span style=\"width: 10px; height: 10px; border-radius: 50%; background: #3A3E45\"><\/span><\/div>\n<p><img decoding=\"async\" src=\"https:\/\/kyleohare.com\/wp-content\/uploads\/2026\/09\/ausculta-screenshot-1024x984.png\" width=\"1024\" height=\"984\" alt=\"Ausculta in the browser: VU meters, live spectrogram and diagnosis results\" loading=\"lazy\" style=\"width: 100%; border-radius: 12px\"><\/p>\n<\/div>\n<\/section>\n<p><!-- how it works --><\/p>\n<section style=\"border-top: 1px solid #24272C\">\n<div style=\"max-width: 1100px; margin: 0 auto; padding: clamp(64px, 9vw, 112px) clamp(20px, 4vw, 48px)\">\n<p class=\"mono\" style=\"margin: 0 0 14px; font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: #F2A33A\">How it works<\/p>\n<h2 style=\"max-width: 720px; font-size: clamp(34px, 4.4vw, 52px); line-height: 1.05; font-weight: 800; letter-spacing: -0.03em\">Listen, fingerprint, match.<\/h2>\n<ol style=\"margin-top: 48px; display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 32px\">\n<li style=\"padding-top: 20px; border-top: 1.5px solid #F2A33A\"><span class=\"mono\" style=\"font-size: 13px; color: #F2A33A\">01<\/span><br \/>\n<h3 style=\"margin-top: 10px; font-size: 21px; font-weight: 600\">Record or upload<\/h3>\n<p style=\"margin: 6px 0 0; font-size: 16px; line-height: 1.6; color: #B5B1AA\">Capture the sound with your microphone or load an audio file. Live VU meters and a spectrogram show what&#8217;s being heard.<\/p>\n<\/li>\n<li style=\"padding-top: 20px; border-top: 1.5px solid #3A3E45\"><span class=\"mono\" style=\"font-size: 13px; color: #F2A33A\">02<\/span><br \/>\n<h3 style=\"margin-top: 10px; font-size: 21px; font-weight: 600\">Fingerprint the sound<\/h3>\n<p style=\"margin: 6px 0 0; font-size: 16px; line-height: 1.6; color: #B5B1AA\">The recording is reduced to a compact acoustic fingerprint that describes its tone, texture and rhythm.<\/p>\n<\/li>\n<li style=\"padding-top: 20px; border-top: 1.5px solid #3A3E45\"><span class=\"mono\" style=\"font-size: 13px; color: #F2A33A\">03<\/span><br \/>\n<h3 style=\"margin-top: 10px; font-size: 21px; font-weight: 600\">Match or teach<\/h3>\n<p style=\"margin: 6px 0 0; font-size: 16px; line-height: 1.6; color: #B5B1AA\">The fingerprint is compared with a library of known faults, with likely causes, severity and next steps. New sounds can be taught to the library.<\/p>\n<\/li>\n<\/ol>\n<div style=\"margin-top: 48px; display: flex; flex-wrap: wrap; gap: 10px; align-items: center\">\n<span class=\"mono\" style=\"font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase; color: #A9A59E; margin-right: 6px\">Built-in library<\/span><br \/>\n<span style=\"display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1px solid #3A3E45; font-size: 16px; font-weight: 500\">Cars &amp; trucks<\/span><br \/>\n<span style=\"display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1px solid #3A3E45; font-size: 16px; font-weight: 500\">Appliances<\/span><br \/>\n<span style=\"display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1px solid #3A3E45; font-size: 16px; font-weight: 500\">Small engines<\/span><br \/>\n<span style=\"display: inline-flex; align-items: center; min-height: 44px; padding: 0 18px; border-radius: 999px; border: 1px solid #3A3E45; font-size: 16px; font-weight: 500\">Audio gear<\/span><\/div>\n<\/div>\n<\/section>\n<p><!-- numbers --><\/p>\n<section style=\"background: #F2A33A; color: #15100A\">\n<div style=\"max-width: 1100px; margin: 0 auto; padding: clamp(48px, 7vw, 80px) clamp(20px, 4vw, 48px); display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 32px\">\n<div>\n<div style=\"font-size: clamp(48px, 6vw, 72px); line-height: 1; font-weight: 800; letter-spacing: -0.04em\">38<\/div>\n<p style=\"margin: 10px 0 0; font-size: 16px; line-height: 1.5; color: #3A2A10\">dimensions in every sound fingerprint<\/p>\n<\/div>\n<div>\n<div style=\"font-size: clamp(48px, 6vw, 72px); line-height: 1; font-weight: 800; letter-spacing: -0.04em\">~130<\/div>\n<p style=\"margin: 10px 0 0; font-size: 16px; line-height: 1.5; color: #3A2A10\">example sounds in the library so far<\/p>\n<\/div>\n<div>\n<div style=\"font-size: clamp(48px, 6vw, 72px); line-height: 1; font-weight: 800; letter-spacing: -0.04em\">0<\/div>\n<p style=\"margin: 10px 0 0; font-size: 16px; line-height: 1.5; color: #3A2A10\">servers: everything runs in your browser<\/p>\n<\/div>\n<div>\n<div style=\"font-size: clamp(48px, 6vw, 72px); line-height: 1; font-weight: 800; letter-spacing: -0.04em\">1<\/div>\n<p style=\"margin: 10px 0 0; font-size: 16px; line-height: 1.5; color: #3A2A10\">self-contained HTML file, with a mobile app planned<\/p>\n<\/div>\n<\/div>\n<\/section>\n<p><!-- under the hood --><\/p>\n<section style=\"max-width: 1100px; margin: 0 auto; padding: clamp(64px, 9vw, 112px) clamp(20px, 4vw, 48px)\">\n<div style=\"display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 24px; margin-bottom: 48px\">\n<div style=\"max-width: 680px\">\n<p class=\"mono\" style=\"margin: 0 0 14px; font-size: 13px; letter-spacing: 0.12em; text-transform: uppercase; color: #F2A33A\">Under the hood<\/p>\n<h2 style=\"font-size: clamp(34px, 4.4vw, 52px); line-height: 1.05; font-weight: 800; letter-spacing: -0.03em\">The technical details.<\/h2>\n<\/div>\n<p style=\"margin: 0; max-width: 380px; font-size: 17px; line-height: 1.6; color: #C9C5BE\">A single client-side app of about 4,000 lines, built on the Web Audio API with no backend.<\/p>\n<\/div>\n<div style=\"display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 40px 56px\">\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Sound fingerprint<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>38-dimension vector: 20 log-spaced frequency bands plus 18 scalar features<\/li>\n<li>Features include spectral centroid, flatness, crest factor, kurtosis, attack and decay time, and centroid permutation entropy<\/li>\n<li>Vectors are L2-normalized at match time<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Matching<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>k=1 nearest-neighbor cosine similarity, which beat k=3 in leave-one-out testing<\/li>\n<li>Heuristic scoring per entry: pattern type, severity, likely causes and recommended actions<\/li>\n<li>Custom labels that match a built-in entry inherit its heuristics<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Clean signal<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>Speech and turn-signal rejection<\/li>\n<li>Startup-transient rejection and noise-floor calibration<\/li>\n<li>Optional mains hum filter (60\/120 Hz or 50\/100 Hz)<\/li>\n<li>Clipping and low-gain warnings<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Storage &amp; privacy<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>Only fingerprints are stored, never the audio itself<\/li>\n<li>Saved in the browser, with auto-save to disk on Chrome and Edge<\/li>\n<li>The library loads from a JSON file served over HTTP<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Interface<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>Dual analog VU meters and LED bargraphs<\/li>\n<li>Live, DPI-aware spectrogram<\/li>\n<li>Guided batch-teach flow for adding new sounds<\/li>\n<\/ul>\n<\/div>\n<div>\n<h3 style=\"font-size: 20px; font-weight: 600\">Accuracy &amp; roadmap<\/h3>\n<ul class=\"spec\" style=\"margin-top: 12px\">\n<li>DTW, SVM, Random Forest and Mahalanobis distance were tested; none clearly beat the baseline<\/li>\n<li>The limit is data: most labels have only one or two examples<\/li>\n<li>Accuracy improves as more examples are taught, and a mobile app is planned<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/section>\n<p><!-- cta --><\/p>\n<section style=\"max-width: 1100px; margin: 0 auto; padding: 0 clamp(20px, 4vw, 48px) clamp(72px, 10vw, 128px)\">\n<div style=\"border-radius: 24px; background: #17191C; border: 1px solid #2A2D33; padding: clamp(32px, 5vw, 64px); display: flex; flex-wrap: wrap; gap: 40px; align-items: flex-end; justify-content: space-between\">\n<div style=\"flex: 1 1 460px; min-width: 0\">\n<h2 style=\"font-size: clamp(34px, 4.6vw, 56px); line-height: 1; font-weight: 800; letter-spacing: -0.035em\">Help Ausculta learn.<\/h2>\n<p style=\"margin: 18px 0 0; max-width: 520px; font-size: 18px; line-height: 1.55; color: #C9C5BE\">Try the test build on a machine you know well. Every new example makes the diagnosis more accurate, and feedback is always welcome.<\/p>\n<\/div>\n<div style=\"flex: 0 1 340px; display: flex; flex-direction: column; gap: 10px\">\n<a class=\"koau-btn solid\" href=\"https:\/\/kyleohare.com\/sound-diagnosis\/auscult-browser.html\" style=\"display: flex; align-items: center; justify-content: space-between; min-height: 56px; padding: 0 22px; border-radius: 14px; background: #F2A33A; color: #15100A; font-weight: 600; font-size: 17px\">Open the test build <svg aria-hidden=\"true\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h14M13 6l6 6-6 6\"><\/path><\/svg><\/a><br \/>\n<a href=\"mailto:kyleohare@gmail.com?subject=Ausculta%20feedback\" style=\"display: flex; align-items: center; justify-content: space-between; min-height: 56px; padding: 0 22px; border-radius: 14px; border: 1px solid #3A3E45; font-weight: 600; font-size: 17px\">Send feedback<\/a><\/div>\n<\/div>\n<\/section>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In development \u00b7 2026\u20132027 The Lab Ausculta Instant audio diagnosis for machines and devices. Record or upload the sound a car, appliance, small engine or piece of audio gear is making. Ausculta compares it with known fault signatures and suggests what might be wrong, or learns the sound as a new one. Try the test&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":6,"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages\/442\/revisions"}],"predecessor-version":[{"id":669,"href":"https:\/\/kyleohare.com\/index.php?rest_route=\/wp\/v2\/pages\/442\/revisions\/669"}],"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}]}}