The short answer: this tool will not hand you a WAV, and the reason is narrower than you would guess. A synthesizer genuinely does run here — it is the Play button — so the note events in a MIDI file do become sound on this page. What that voice is wired to is audioContext.destination, the speakers, and nothing else. The entire download surface of the site is two blobs: a .mid and a .csv. Ten different spellings a WAV writer would use — RIFF, encodeWav, writeWav, renderWav, MediaRecorder among them — return zero matches across every script and page here, and the only two uses of an offline audio context are decoders rather than renderers. Nor is a MIDI file a short WAV: the same 19 notes measure 210 bytes as MIDI and 172,034 bytes as WAV.
1. The synth that does run here
One note of the preview is built by the block below. Every value in it was read out of this site's own app.js rather than described from general knowledge of audio software, so you can check each line against the file:
| Part of the voice | What the code sets |
|---|---|
| Oscillator | osc.type = 'triangle' — one per detected note |
| Pitch | 440 × 2^((pitch − 69) / 12) |
| Attack | Linear, 0.012 s, from silence up to the ceiling |
| Gain ceiling | (velocity / 127) × 0.28 |
| Release | Exponential, down to a fixed 0.0001 at the note's end |
| Shortest voice | Math.max(0.05, end − start) — no note sounds for under 50 ms |
| Quietest voice | Math.max(0.05, velocity / 127) |
| Start offset | currentTime + 0.08 — an 80 ms lead-in before the first note |
| Oscillator stop | Note length + 0.05 s |
| Destination | g.connect(ac.destination) — the speakers |
Two things follow from that last row. The voice has no soundfont, no sampler and no instrument patch: a triangle wave is the whole timbre, so every note — regardless of what the original recording was — previews with the same tone colour. And because the last stop is ac.destination, closing the preview calls ac.close() and the sound disappears with the audio context. Nothing is buffered, captured or handed to an encoder at any point.
That is the whole of the synthesis on this site. It is a real synthesizer in the sense that matters to your ears, and it is not a renderer in the sense that matters to your filesystem. If you want to know what that playback actually preserves rather than where it is wired, what a MIDI player shows when it plays a file back measures the event census, the two different playback clocks, and a full round trip of the played audio through the same detector.
2. What the played waveform actually holds
A triangle wave is not a pure tone, and the difference is measurable. Running a discrete Fourier transform over exactly ten periods of the waveform the code asks for — 100 Hz at 48 kHz, so there is no spectral leakage to argue about — gives the levels below, each relative to the fundamental:
| Harmonic | Its interval above the note | Level |
|---|---|---|
| 1st (fundamental) | the note you played | 0 dB |
| 2nd | an octave | absent |
| 3rd | an octave and a fifth | −19.08 dB |
| 4th | two octaves | absent |
| 5th | two octaves and a major third | −27.96 dB |
| 7th | two octaves and a minor seventh | −33.80 dB |
| 9th | three octaves and a major second | −38.17 dB |
The even harmonics measure at the numerical floor of the transform, around −300 dB, which is to say they are not there. That is the signature of a triangle: odd partials only, each one falling off as one over the square of its number, so the 3rd sits 19.08 dB under the fundamental and the 9th sits 38.17 dB under it.
How many of those partials you actually hear depends on the note, because the device sample rate puts a ceiling on them. At a 48 kHz output — the usual default — the count runs from the bottom of this tool's own detection window to the top:
| Note | Frequency | Odd partials below 24 kHz | Below 22.05 kHz |
|---|---|---|---|
| A1 | 55 Hz | 218 | 200 |
| A2 | 110 Hz | 109 | 100 |
| A4 | 440 Hz | 27 | 25 |
| A5 | 880 Hz | 14 | 13 |
| A6 | 1760 Hz | 7 | 6 |
A bass note in the preview is built from more than two hundred partials; the top of the range gets seven. That is why the preview sounds thin on high notes and fuller on low ones, and it is a property of the oscillator, not of the notes you fed it.
3. How loud the preview is, and how much of your dynamics survive
Rendering the exact voice — triangle waveform multiplied by the 12 ms linear attack and the exponential release — puts the loudest possible sample of the preview at −11.06 dBFS. It is worth saying plainly: the Play button can never reach full scale. A velocity of 127, the loudest the detector emits, previews 11 dB below the top of the scale, so the preview will always sit quieter than the file you started from.
| Velocity | Gain ceiling | Peak level | Decay depth reached |
|---|---|---|---|
| 127 | 0.280 | −11.06 dBFS | 68.9 dB |
| 100 | 0.221 | −13.13 dBFS | 66.9 dB |
| 64 | 0.141 | −17.01 dBFS | 63.0 dB |
| 32 | 0.071 | −23.03 dBFS | 57.0 dB |
| 1 | 0.014 | −37.08 dBFS | 42.9 dB |
The third column is the one to notice. The release ramp always ends on the same absolute value, 0.0001, which is −80 dBFS — so a loud note has further to fall than a quiet one before it lands there. A velocity-127 note travels 68.9 dB during its life; a velocity-1 note travels 42.9 dB. The release is fixed at the bottom and variable at the top.
There is a second, larger distortion in the same path. The detector converts loudness to velocity at a rate of 1.85 velocity steps per decibel, which spends 100 of its 127 steps on 54 dB of level. The preview then maps those steps linearly onto gain. Measured end to end, 57.8 dB of level in the source becomes 16.1 dB of gain at the speakers — a squeeze of about 3.6 to one.
None of that is a defect. A preview is for checking whether the notes and the timing are right, and it does that job at a fixed, quiet level. It does mean the preview is not an audition of your dynamics, so it is the wrong thing to judge the mix by. If you are exporting a WAV to hear the piece properly, the export is where the real levels live.
4. Who can write a WAV
| Stage | Whose job it is | What you end up with |
|---|---|---|
| 1. Note events → sound you can hear | The Play button, using the triangle voice above | Audio at your speakers — nothing is saved anywhere |
| 2. Notes → a file | This converter's two export buttons | A format-1 MIDI (2 tracks, TPQ 480) and a CSV — no audio format exists here |
| 3. Sound → a WAV file | Your DAW, or a MIDI player with an export step | The WAV — the one stage this site does not take |
Leg 2 is worth reading twice, because it is where the expectation breaks. The tool hands you a format-1 MIDI holding up to 6 notes per frame and covering the same 55 Hz to 1800 Hz window it listens in, with the note times written to 4 decimal places in the CSV beside it. On 11 known-answer clips that audio→MIDI step scored 86.7% recall and 91.5% precision. Every one of those numbers describes note events. Not one of them describes samples, and a WAV is nothing but samples.
5. Checking the encoder claim yourself
You do not have to take the absence of a WAV writer on trust. It takes about a minute:
- Convert any audio file on the converter and let it finish, so both export buttons are live.
- Press the Play button and listen. That is the synthesizer this page is about — one triangle oscillator per note, and no instrument on top of it.
- Press the two download buttons. You will get a
.midand a.csv, and those are the only two files this tool can produce. - Open the
.midin any DAW or MIDI player, pick a patch you like, and use its export or bounce command to write a WAV. That is leg 3, and it is the only step in the chain that has an encoder in it.
Questions
Does this converter turn a MIDI file into a WAV?
No. The site's download surface is exactly two blobs, typed audio/midi and text/csv, and a search of every script and page here for ten common WAV-encoder names returns nothing. The two places an offline audio context appears are both on the decoding side, reading a file you dropped in. There is no code path from a note list to a WAV.
Then what is the Play button actually playing?
A synthesizer, built one oscillator per detected note: triangle waveform, a 12 ms linear attack, a gain ceiling of velocity over 127 times 0.28, then an exponential release to a fixed 0.0001. Its loudest sample measures −11.06 dBFS. It is a genuine synth voice, and it is connected to the speakers rather than to a file.
Why can I not just rename a .mid to .wav?
Because the two files hold different kinds of thing. The MIDI is a list of events — for the 19-note test piece used here, 210 bytes, about 11 bytes per note. The WAV is a stream of samples: the same music at 22,050 Hz, mono, 16-bit is 172,034 bytes, a 44-byte header followed by two bytes for every single sample. That is 819 times the size, and it is the same music. A WAV needs a sample rate and a bit depth; a MIDI has neither, which is why the numbers have to be chosen by whoever does the rendering.
What settings should I choose when I export the WAV in my DAW?
This site cannot measure that for you, so we will not pretend to. It never writes audio, so it has no export settings of its own to recommend. One figure is worth knowing anyway: the analysis here runs at 22,050 Hz, but that is the rate this tool listens at, not a target for your render. For a file you intend to keep, export at your project's rate and bit depth — 44.1 or 48 kHz, 16-bit for delivery or 24-bit if you will master it — and let your DAW decide, because that is the program doing the encoding.
Can I drop a .mid into the converter as the input file?
The file picker's filter is audio/*, which does not exclude a MIDI file by name, so the dialog may well offer it. It will not get through. The decoder needs samples to analyse and a MIDI file contains note events, so the attempt ends with the tool reporting that your browser could not decode the file. This page reads sound and writes note events; a MIDI file is the output format here, never an input.
Will the preview sound like the finished WAV?
No, and the gap is the point. The Play button is a fixed, quiet triangle voice that peaks at −11.06 dBFS no matter how loud the note, so what you hear is a level check, not an audition of your mix. A real WAV is the opposite: a sample-for-sample render at your chosen rate and bit depth, with the timbre of whatever patch you picked. The preview can never become that file — it is wired to the speakers, not to an encoder — so use it to confirm the notes and the timing, and let the DAW render decide how it actually sounds.
The measured conclusion is short: this page can make your notes audible and cannot make them a file. Open the exported MIDI in a DAW, choose a patch, and render — the notes and their timings are already correct, and the only thing left is the encoder you already own.
Related guides
- MIDI converterWhat is actually inside a MIDI file
- Clean up a converted MIDIThe 5 passes that turn a raw export into a usable part
- MIDI to sheet musicWhat this tool covers, and where the score comes from
- Sheet music to MIDIWhy this tool listens to audio, not reads scores
- Audio to sheet musicWhere a chord's notes actually land, measured
- MP3 to sheet musicWhether the codec moves anything the page would show
- MIDI to MP3What this tool covers, and what a synth does instead
- MIDI to OGGTwo steps, and only one of them changes the sound