<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Uri</title>
    <description>The latest articles on DEV Community by Uri (@uridovoicenote).</description>
    <link>https://dev.to/uridovoicenote</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4110477%2Fbc808c50-778e-4218-9c25-51939049ebc8.png</url>
      <title>DEV Community: Uri</title>
      <link>https://dev.to/uridovoicenote</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/uridovoicenote"/>
    <language>en</language>
    <item>
      <title>Dictation is not long-form transcription — I tried five tools before writing my own</title>
      <dc:creator>Uri</dc:creator>
      <pubDate>Sat, 05 Sep 2026 01:07:38 +0000</pubDate>
      <link>https://dev.to/uridovoicenote/dictation-is-not-long-form-transcription-i-tried-five-tools-before-writing-my-own-5505</link>
      <guid>https://dev.to/uridovoicenote/dictation-is-not-long-form-transcription-i-tried-five-tools-before-writing-my-own-5505</guid>
      <description>&lt;p&gt;Dictation is writing with your mouth: you say a sentence, look at the screen, fix it. Transcribing long-form audio is a different problem — you talk for fifteen minutes without looking at anything, and you want the whole text afterwards. Almost every tool I had at hand solved the first case and broke on the second, each in its own way.&lt;/p&gt;

&lt;p&gt;⚠️ All of this is &lt;strong&gt;as of when I tested it&lt;/strong&gt;. These products change fast; recheck before deciding anything on this basis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dictation inside ChatGPT.&lt;/strong&gt; The audio got cut off when it ran long. That hurt most, because long was exactly what I wanted: describing the whole context of a new project, or narrating a dream in detail. Losing that is losing minutes of speech that do not come back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audio in Claude.&lt;/strong&gt; When I tested it, it captured English better than Portuguese.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Docs dictation.&lt;/strong&gt; No punctuation. You get one running block — and in fifteen minutes of audio, a running block is unreadable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The native iOS recorder.&lt;/strong&gt; It records as long as you like and transcribes, but getting the transcript out of it and into somewhere else — a coding session, a chat — is enough friction to make you quit halfway.&lt;/p&gt;

&lt;p&gt;I also tried Google Meet. Speaker identification worked well in my test, but getting the text meant starting a meeting, making sure transcription was configured and enabled, ending the meeting, waiting for the transcript email, and downloading it if I wanted a file. That is a lot of steps when all I want is to capture a thought.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I was still missing after trying all five:&lt;/strong&gt; a short path from a long spoken thought to text I could use somewhere else. Each tool added a different interruption, limitation, or set of steps to that workflow.&lt;/p&gt;

&lt;h3&gt;
  
  
  The two problems the script had to solve
&lt;/h3&gt;

&lt;p&gt;It became a terminal script calling OpenAI's transcription API. The list was short — accept speech of any length, return punctuated text, leave the text where I was already working — and the first two items were harder than they looked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First: the limit is not file size, it is duration.&lt;/strong&gt; The model truncates its output somewhere around 8 to 11 minutes of audio, regardless of how many megabytes the file has. Slice by size and you find out the worst way: the upload succeeds, the transcript comes back, and the ending is missing. So the split is by time, in 6-minute pieces, with margin.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second: where to cut.&lt;/strong&gt; Cutting at exactly 6:00 lands in the middle of a word. The model gets half a word at each end and &lt;strong&gt;completes the fragment&lt;/strong&gt; — you get an invented word, a lost word, or a duplicated sentence, once per seam. The fix is to push the cut to the nearest silence, inside a 45-second window.&lt;/p&gt;

&lt;p&gt;Then came the part I did not expect. &lt;strong&gt;The silence threshold cannot be fixed, and it cannot be derived from average volume either.&lt;/strong&gt; Measuring twelve real recordings, the noise floor ranged from −50 to −35 dB &lt;strong&gt;without tracking the mean&lt;/strong&gt;: the loudest recording, averaging −25 dB, had the lowest floor of all. A hardcoded value either finds no pauses at all or marks the entire file as silence.&lt;/p&gt;

&lt;p&gt;The way out was to search for the threshold instead of picking one: start strict and loosen in 5 dB steps until pauses appear. Each pass is analysis only — about 1 second on a 15-minute file — so the search is cheap. On a real 19-minute recording, all three cuts landed on a pause and the seams do not show in the text.&lt;/p&gt;

&lt;h3&gt;
  
  
  The cost, which was the doubt holding me back
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;US$ 0.003 per minute&lt;/strong&gt; with &lt;code&gt;gpt-4o-mini-transcribe&lt;/code&gt;, checked against the actual invoice. In the month I measured it came to &lt;strong&gt;726 minutes&lt;/strong&gt; of speech — a little over twelve hours — for about two dollars. Not all of it was one project: that is what I talk in a full month of work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where this does not work
&lt;/h3&gt;

&lt;p&gt;What comes back is transcribed speech, not finished text: repetition, "I mean", the sentence abandoned halfway. It works as a prompt or a draft; it does not work for structured reading. And the script runs in a terminal, which means: only in front of the computer. The idea that arrives on the street kept getting lost — and that became the next problem.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was prepared with AI assistance.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
