From f1cc946116716431c2c5055a2821ba7d27fa54a9 Mon Sep 17 00:00:00 2001 From: Alex Ellis Date: Sun, 20 Mar 2022 19:39:21 -0400 Subject: [PATCH] Add post on detecting pitch --- content/posts/tuner.md | 242 +++++++++++++++ content/posts/tuner/440hz.png | Bin 0 -> 3797 bytes content/posts/tuner/offset-2-product.png | Bin 0 -> 15439 bytes content/posts/tuner/offset-8.png | Bin 0 -> 18123 bytes .../tuner/time-series-offsets-visualized.png | Bin 0 -> 20401 bytes content/posts/tuner/time-series.png | Bin 0 -> 11090 bytes content/posts/tuner/tuner.js | 283 ++++++++++++++++++ docs/404.html | 2 +- docs/posts/tuner/440hz.png | Bin 0 -> 3797 bytes docs/posts/tuner/offset-2-product.png | Bin 0 -> 15439 bytes docs/posts/tuner/offset-8.png | Bin 0 -> 18123 bytes .../tuner/time-series-offsets-visualized.png | Bin 0 -> 20401 bytes docs/posts/tuner/time-series.png | Bin 0 -> 11090 bytes docs/posts/tuner/tuner.js | 283 ++++++++++++++++++ docs/tags/index.xml | 2 +- docs/tags/javascript/index.html | 2 +- docs/tags/javascript/index.xml | 4 +- 17 files changed, 813 insertions(+), 5 deletions(-) create mode 100644 content/posts/tuner.md create mode 100644 content/posts/tuner/440hz.png create mode 100644 content/posts/tuner/offset-2-product.png create mode 100644 content/posts/tuner/offset-8.png create mode 100644 content/posts/tuner/time-series-offsets-visualized.png create mode 100644 content/posts/tuner/time-series.png create mode 100644 content/posts/tuner/tuner.js create mode 100644 docs/posts/tuner/440hz.png create mode 100644 docs/posts/tuner/offset-2-product.png create mode 100644 docs/posts/tuner/offset-8.png create mode 100644 docs/posts/tuner/time-series-offsets-visualized.png create mode 100644 docs/posts/tuner/time-series.png create mode 100644 docs/posts/tuner/tuner.js diff --git a/content/posts/tuner.md b/content/posts/tuner.md new file mode 100644 index 0000000..6490d9d --- /dev/null +++ b/content/posts/tuner.md @@ -0,0 +1,242 @@ +--- +title: "Detecting pitch with the Web Audio API and autocorrelation" +date: 2022-03-20T13:00:15-04:00 +draft: true +--- + +I've been playing with the Web Audio API recently, and I made a basic app that will detect the pitch of incoming tones using your microphone. You can try it by pressing "Start" (be sure to try both the sine wave and the frequency displays), and I'll be walking through how it works below. + + +
+ + +

Press start to begin

+ +Rounding options: +
+ + +
+ + +
+ + +
+
+
+ +Smoothing options: +
+ + +
+ + +
+ + +
+
+
+ +Display (click Start after you switch): +
+ + +
+ + +
+
+ +
+ + + +----- + +# How it works + +This basic app relies on the [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API), a powerful module in our browsers that lets us directly work with noise with JavaScript. I also leveraged this when making [Morse Codle](/posts/morse-codle/) and [my Morse code games](/posts/morse-code/), which you can read about [here](/posts/writing-morse-code-games/). + +The Web Audio API works by connecting a series of nodes to an [AudioContext](https://developer.mozilla.org/en-US/docs/Web/API/AudioContext). For this setup, I wanted to connect the user's microphone as an incoming stream to an AudioContext. I also wanted to attach an [AnalyserNode](https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode) to the stream, which would allow me to access real-time data about the stream. + +This is all pretty straightforward, especially if we follow some existing examples from MDN on visualizing the [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API). First, we can access the microphone via [getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia). We can check if getUserMedia is valid and, if so, try to access the user's microphone, which creates the permissions check for the user. If that's successful, then we can connect our nodes and start the application. + +``` +var source; +var audioContext = new (window.AudioContext || window.webkitAudioContext)(); +var analyser = audioContext.createAnalyser(); +analyser.minDecibels = -100; +analyser.maxDecibels = -10; +analyser.smoothingTimeConstant = 0.85; +if (!navigator?.mediaDevices?.getUserMedia) { + // No audio allowed + alert('Sorry, getUserMedia is required for the app.') + return; +} else { + var constraints = {audio: true}; + navigator.mediaDevices.getUserMedia(constraints) + .then( + function(stream) { + // Initialize the SourceNode + source = audioContext.createMediaStreamSource(stream); + // Connect the source node to the analyzer + source.connect(analyser); + visualize(); + } + ) + .catch(function(err) { + alert('Sorry, microphone permissions are required for the app. Feel free to read on without playing :)') + }); +} +``` + + +For the main application loop via `visualize`, we want to do the following: +- Draw the sound data on the canvas +- Process the incoming sound data to calculate the frequency + +
+ +### Drawing the sound data on the canvas + +Because I was more interested in the processing side, I leaned on the examples in the [MDN Visualizations with Web Audio API page](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Visualizations_with_Web_Audio_API), particularly the examples from the Voice-change-O-matic. You can see the code snippets I borrowed [here](https://github.com/mdn/voice-change-o-matic/blob/gh-pages/scripts/app.js#L123-L167). + +### Processing the incoming sound data + +The real difference between that example app and this one is that we want to calculate the main frequency of the incoming sound, and that's where the interesting part of it is. + +#### Can we just use the AnalyserNode's getByteFrequencyData? + +The AnalyserNode actually already has all of the data we need, and it even exposes the `getByteFrequencyData` method, which populates a buffer with the frequency bucket intensity level via [Fast Fourier transform](https://en.wikipedia.org/wiki/Fast_Fourier_transform). + +The main problem is that if we're trying to get a specific frequency, we can't just look at the buckets (shout out to [this stackoverflow question](https://stackoverflow.com/questions/44502536/determining-frequencies-in-js-audiocontext-analysernode)). If we have a FFT size of 2048, sample rate of 48,000 Hz, our AnalyserNode will generate frequency bins across the range from [0Hz, 24000Hz], with each bin being `max_frequency / frequencyBinCount`, where `frequencyBinCount` is FFT size divided by 2. In this case, the bins would `24000 / 1024 == 23.4Hz` wide. In other words: + +``` +fData[0] is the strength of frequencies from 0 to 23.4Hz. +fData[1] is the strength of frequencies from 23.4Hz to 46.8Hz. +fData[2] is the strength of frequencies from 46.8Hz to 70.2Hz. +fData[3] is the strength of frequencies from 70.2Hz to 93.6Hz. +... +fData[511] is the strength of frequencies from 11976.6Hz to 12000Hz. +fData[512] is the strength of frequencies from 12000Hz to 12023.4Hz. +... +fData[1023] is the strength of frequencies from 23976.6Hz to 24000Hz. +``` + +The issue here is that these buckets wouldn't be exact enough to differentiate between notes in the lower ranges (you can see the note to frequency mapping [here](https://pages.mtu.edu/~suits/notefreqs.html)). For example, if we want to tune the top string of our guitar in the regular tuning, E, we would want to tune it close to 82.41 Hz (assuming we want the exact match - we won't be getting into any more advanced theory here). If we want to tune it to F instead, we would want to tune it to 87.3 Hz. If all we know about the sound of the string is that it's in the 70.2-93.6Hz bucket, we wouldn't be able to tell which one we're closer to. + +One way to get around this would be to decrease bucket size by increasing the FFT size - we could do this, but our calculations would be more expensive, we'd require more space for this, and we'd have to bump the size up 10-fold to even get closer to to fine-tuned distances. Additionally, we don't actually need these small bucket sizes for the higher frequency notes, which means we would have a ton of wasted bucket space. + +#### Autocorrelation: we can do some quick math ourselves + +Instead of relying on the `getByteFrequencyData`, we can instead access the sound information directly and calculate the frequency ourselves. Autocorrelation is a technique where we compare part of a signal, in this case a sound wave, with a delayed copy of itself. By looking at how the signal compares to itself with a given offset, then varying that offset, we can calculate the offset at which the pattern roughly repeats. That would represent the period of the sound wave, and we could easily then calculate the frequency. + +Let's say we have a very simple data series representing the signal at different time steps: + +``` +[0.0, 0.5, 1, 0.5, 0.0, -0.5, -1, -0.5, 0.0, 0.5, 1, 0.5, 0.0, -0.5, -1, -0.5] +``` + +That might look something like this, where the x-axis is time and the y-axis is amplitude: + +![Basic graph of the above time series](time-series.png) + +We want to compare this signal against what it would look like at different offsets, for example, with offsets 1 and 2: + +```none +Original: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5] +Offset 1: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0] +Offset 2: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5] +``` + +. You can kind of imagine it like this, with multiple graphs at offsets 1 and 2 respectively: + +![Graph of the above time series and additional graphs of the original shifted to the right by 1 and 2 time steps, respectively](time-series-offsets-visualized.png) + + + +To see where our graph repeats itself, we can look at each potential offset value and look at what it would look like if we multiplied each point on the graph by its offset value. Because we're expecting a sinusoidal wave, the sum of those products would be highest when the wave repeats itself, as it would basically be squaring each value. + +For example, for Offset 2, we would multiply each original value by the value of the offset graph: +```none +Original: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5] +Offset 2: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5] +Product: [ 0.0, .25, 0.0, -.25, 0.0, .25, 0.0, -.25, 0.0, .25, 0.0, -.25, 0.0, .25] +Sum: 0.25 +``` + +Or, another way to think about this, we would multiple each value in the original by its value two timesteps later: + +![Basic graph of the above time series with a line to the value 2 timesteps later for each](offset-2-product.png) + +This yields a total of 0.25 for this offset - not a strong contender! + +You could imagine doing this for each offset. At some point, if our wave is regular, we'll reach the point where the wave repeats itself. In this case, with offset 8, we would be multiplying the points by themselves, as the full offset means the graph repeats. + +```none +Original: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5, 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5] +Offset 8: [ 0.0, 0.5, 1.0, 0.5, 0.0, -0.5, -1.0, -0.5] +Product: [ 0.0, .25, 1.0, .25, 0.0, .25, 1.0, .25] +Sum: 3.0 +``` + +![Basic graph of the above time series multiplied by its value 8 timesteps later, which is the same value](offset-8.png) + +With a sum of 3, this would be the largest sum, and we'd know that our wave repeats itself every 8 timesteps. If our total time data length is 1 second cut into 15 time steps, then our frequency would be 15 / 8 = 1.875 Hz. + +What would this look like in code? We could do the following: + + + +``` +// Start with a bufferLength of the analyser's FFT size +var bufferLength = analyser.fftSize; +// Actually create the buffer +var buffer = new Float32Array(bufferLength); +// Populate the buffer with the time domain data +analyser.getFloatTimeDomainData(buffer); + +// Create a new array of the sums of offsets to do the autocorrelation +var offsetSums = new Array(bufferLength).fill(0); +// For each potential offset, calculate the sum of each buffer value times its offset value +for (let offset = 0; offset < bufferLength; offset++) { + for (let j = 0; j < SIZE - i; j++) { + offsetSums[offset] = offsetSums[offset] + buffer[j] * buffer[j+offset] + } +} + +// Calculate the offset with the highest value +var maxValue = -1; +var bestOffset = -1; +for (var i = 0; i < offsetSums.length; i++) { + if (offsetSums[i] > maxValue) { + maxValue = c[i]; + bestOffset = i; + } +} + +// Once we have the best offset for the repetition, we can calculate the frequency from the sampleRate +var frequency = sampleRate / bestOffset +``` + +That's pretty much it! All that's left is some UX to smooth the display changing (we don't want to flash a new value every animation frame, though you can try it above) and translate the frequency into a note. + +![Screenshot of the pitch detection with a 440Hz tuning fork.](440hz.png) + +You can see the full source code [here](tuner.js). + +----- + +This will eventually be part of an interactive ear training app, where you will listen to a tone and have to repeat it — this pitch detection will be the backbone of processing the incoming sound and translating it to the note. + +It's a good start for now! + + + \ No newline at end of file diff --git a/content/posts/tuner/440hz.png b/content/posts/tuner/440hz.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f6728b428f198cd21ab07210b5bc451e0a4dea GIT binary patch literal 3797 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 literal 0 HcmV?d00001 diff --git a/content/posts/tuner/offset-2-product.png b/content/posts/tuner/offset-2-product.png new file mode 100644 index 0000000000000000000000000000000000000000..67cfaee0a982b77549668c02db2f459f72e5f29d GIT binary patch literal 15439 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 z+gR9PNJRngL6yt!&w){3hc@{K0000000000000000000000000000000000000000 e0000WWqtt^5RZHNRu!TE0000> literal 0 HcmV?d00001 diff --git a/content/posts/tuner/time-series-offsets-visualized.png b/content/posts/tuner/time-series-offsets-visualized.png new file mode 100644 index 0000000000000000000000000000000000000000..b5285b5eaca40cfbaac6937e5d1462d737d85f6b GIT binary patch literal 20401 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 literal 0 HcmV?d00001 diff --git a/content/posts/tuner/time-series.png b/content/posts/tuner/time-series.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d70ad1ec97d54461a8529c000b608807057995 GIT binary patch literal 11090 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 c[d+1]) { + d++; + } + + // Iterate from that index through the end and find the maximum sum + var maxValue = -1; + var maxIndex = -1; + for (var i = d; i < SIZE; i++) { + if (c[i] > maxValue) { + maxValue = c[i]; + maxIndex = i; + } + } + + var T0 = maxIndex; + + // Not as sure about this part, don't @ me + // From the original author: + // interpolation is parabolic interpolation. It helps with precision. We suppose that a parabola pass through the + // three points that comprise the peak. 'a' and 'b' are the unknowns from the linear equation system and b/(2a) is + // the "error" in the abscissa. Well x1,x2,x3 should be y1,y2,y3 because they are the ordinates. + var x1 = c[T0 - 1]; + var x2 = c[T0]; + var x3 = c[T0 + 1] + + var a = (x1 + x3 - 2 * x2) / 2; + var b = (x3 - x1) / 2 + if (a) { + T0 = T0 - b / (2 * a); + } + + return sampleRate/T0; +} \ No newline at end of file diff --git a/docs/404.html b/docs/404.html index 8a75d7a..9a67dea 100644 --- a/docs/404.html +++ b/docs/404.html @@ -95,7 +95,7 @@

Read more

  • - Javascript + JavaScript
  • diff --git a/docs/posts/tuner/440hz.png b/docs/posts/tuner/440hz.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f6728b428f198cd21ab07210b5bc451e0a4dea GIT binary patch literal 3797 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 literal 0 HcmV?d00001 diff --git a/docs/posts/tuner/offset-2-product.png b/docs/posts/tuner/offset-2-product.png new file mode 100644 index 0000000000000000000000000000000000000000..67cfaee0a982b77549668c02db2f459f72e5f29d GIT binary patch literal 15439 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 z+gR9PNJRngL6yt!&w){3hc@{K0000000000000000000000000000000000000000 e0000WWqtt^5RZHNRu!TE0000> literal 0 HcmV?d00001 diff --git a/docs/posts/tuner/time-series-offsets-visualized.png b/docs/posts/tuner/time-series-offsets-visualized.png new file mode 100644 index 0000000000000000000000000000000000000000..b5285b5eaca40cfbaac6937e5d1462d737d85f6b GIT binary patch literal 20401 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 literal 0 HcmV?d00001 diff --git a/docs/posts/tuner/time-series.png b/docs/posts/tuner/time-series.png new file mode 100644 index 0000000000000000000000000000000000000000..b0d70ad1ec97d54461a8529c000b608807057995 GIT binary patch literal 11090 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 c[d+1]) { + d++; + } + + // Iterate from that index through the end and find the maximum sum + var maxValue = -1; + var maxIndex = -1; + for (var i = d; i < SIZE; i++) { + if (c[i] > maxValue) { + maxValue = c[i]; + maxIndex = i; + } + } + + var T0 = maxIndex; + + // Not as sure about this part, don't @ me + // From the original author: + // interpolation is parabolic interpolation. It helps with precision. We suppose that a parabola pass through the + // three points that comprise the peak. 'a' and 'b' are the unknowns from the linear equation system and b/(2a) is + // the "error" in the abscissa. Well x1,x2,x3 should be y1,y2,y3 because they are the ordinates. + var x1 = c[T0 - 1]; + var x2 = c[T0]; + var x3 = c[T0 + 1] + + var a = (x1 + x3 - 2 * x2) / 2; + var b = (x3 - x1) / 2 + if (a) { + T0 = T0 - b / (2 * a); + } + + return sampleRate/T0; +} \ No newline at end of file diff --git a/docs/tags/index.xml b/docs/tags/index.xml index d8b8c8c..907aa2d 100644 --- a/docs/tags/index.xml +++ b/docs/tags/index.xml @@ -12,7 +12,7 @@ - Javascript + JavaScript https://alexanderell.is/tags/javascript/ Sat, 12 Feb 2022 12:36:19 -0500 diff --git a/docs/tags/javascript/index.html b/docs/tags/javascript/index.html index 0815ba0..2f22d15 100644 --- a/docs/tags/javascript/index.html +++ b/docs/tags/javascript/index.html @@ -7,7 +7,7 @@ - Javascript · Caffeinspiration + JavaScript · Caffeinspiration diff --git a/docs/tags/javascript/index.xml b/docs/tags/javascript/index.xml index c9525f1..629ba7c 100644 --- a/docs/tags/javascript/index.xml +++ b/docs/tags/javascript/index.xml @@ -1,9 +1,9 @@ - Javascript on Caffeinspiration + JavaScript on Caffeinspiration https://alexanderell.is/tags/javascript/ - Recent content in Javascript on Caffeinspiration + Recent content in JavaScript on Caffeinspiration Hugo -- gohugo.io en Sat, 12 Feb 2022 12:36:19 -0500