* STARTED Visualizing the balance of speaking in my French conversations with tutors :french:python:learning:visualization: :PROPERTIES: :CREATED: [2026-09-27 Sun 14:07] :CUSTOM_ID: notes-visualizing-the-balance-of-the-conversation :EXPORT_DATE: 2026-10-14T14:26:39-0400 :EXPORT_ELEVENTY_PERMALINK: /blog/2026/10/visualizing-the-balance-of-speaking-in-my-french-conversations-with-tutors/ :EXPORT_ELEVENTY_FILE_NAME: blog/2026/10/visualizing-the-balance-of-speaking-in-my-french-conversations-with-tutors/ :END: :LOGBOOK: CLOCK: [2026-09-27 Sun 14:07] :END: I've been studying French since November 2025 because I want to help my daughter learn it. After about eight months of taking pronunciation tutoring sessions once or twice a week and writing my journal in French, I decided to try conversation-focused tutoring sessions in June 2026. These sessions help me get used to talking and identify the gaps in my active vocabulary. These tutoring conversations feel quite different from other conversations I have. In real-life conversations with my husband and daughter, we usually leave a lot of space between sentences. When I'm hanging out with other people, I prefer to listen more than I talk. Tutoring sessions are different. I am investing time and money in practising talking. I can get a lot of listening practice from YouTube, so it's less about listening to people, although I still want to practice asking follow-up questions and connecting what the tutor says with my personal experiences. In those conversation classes with French tutors, I want to get a sense of how much I'm actually talking. I was motivated to visualize this after some sessions with a tutor who tended to go into lecture mode. I found myself needing to be a bit firmer about directing the conversation instead of slipping into a more passive role. I use OBS to record my sessions (with the tutor's permission, of course). I've configured it so that [[https://obsproject.com/kb/multiple-audio-track-recording-guide][my microphone goes on one track]] and my computer audio goes on another track, which makes it easy to analyze my side of the conversation without needing to use speaker diarization. I used [[https://gemini.google.com][Google Gemini]] to generate a script that uses [[https://github.com/snakers4/silero-vad][Silero voice activity detection]] to analyze my side of the multi-track MKV recording. Here's the file it generated. [[file:~/proj/speech/vad-file.py]] I call it with: #+begin_src sh :eval never-export :dir ~/proj/speech for FILE in ~/recordings/*conversation*.mkv; do if [ ! -f "$FILE-vad.txt" ]; then python vad-file.py -f "$FILE" -t 2 sacha 3 tutor -s 500 -o "$FILE-vad.txt"; fi; done #+end_src Then I can make a table analyzing different recordings: #+begin_src emacs-lisp :eval never-export :results replace (sacha-vad-tutor-make-table (directory-files sacha-recordings-dir t "-vad\\.txt\\'")) #+end_src Definition: [[dotfun:sacha-vad-tutor-make-table][sacha-vad-tutor-make-table]] The green bars represent the time that I spent speaking, and the black bars usually correspond to when the tutor is speaking. #+RESULTS: :results: | Date | Tutor | Minutes | % | Visualization | |------------+-------+---------+-----+-------------------------------------------------------------------------| | 2026-06-05 | R | 26 | 58% | [[file:/home/sacha/proj/french/conversation/2026-06-05-12-46-22-sacha.svg][file:/home/sacha/proj/french/conversation/2026-06-05-12-46-22-sacha.svg]] | | 2026-06-12 | R | 25 | 59% | [[file:/home/sacha/proj/french/conversation/2026-06-12-12-48-03-sacha.svg][file:/home/sacha/proj/french/conversation/2026-06-12-12-48-03-sacha.svg]] | | 2026-06-16 | R | 26 | 59% | [[file:/home/sacha/proj/french/conversation/2026-06-16-09-59-40-sacha.svg][file:/home/sacha/proj/french/conversation/2026-06-16-09-59-40-sacha.svg]] | | 2026-06-26 | R | 29 | 65% | [[file:/home/sacha/proj/french/conversation/2026-06-26-12-45-39-sacha.svg][file:/home/sacha/proj/french/conversation/2026-06-26-12-45-39-sacha.svg]] | | 2026-07-17 | R | 30 | 65% | [[file:/home/sacha/proj/french/conversation/2026-07-17-07-15-34-sacha.svg][file:/home/sacha/proj/french/conversation/2026-07-17-07-15-34-sacha.svg]] | | 2026-07-31 | R | 28 | 59% | [[file:/home/sacha/proj/french/conversation/2026-07-31-07-15-21-sacha.svg][file:/home/sacha/proj/french/conversation/2026-07-31-07-15-21-sacha.svg]] | | 2026-08-04 | R | 34 | 72% | [[file:/home/sacha/proj/french/conversation/2026-08-04-07-15-03-sacha.svg][file:/home/sacha/proj/french/conversation/2026-08-04-07-15-03-sacha.svg]] | | 2026-08-14 | R | 30 | 70% | [[file:/home/sacha/proj/french/conversation/2026-08-14-07-15-18-sacha.svg][file:/home/sacha/proj/french/conversation/2026-08-14-07-15-18-sacha.svg]] | | 2026-08-21 | R | 28 | 62% | [[file:/home/sacha/proj/french/conversation/2026-08-21-07-14-57-sacha.svg][file:/home/sacha/proj/french/conversation/2026-08-21-07-14-57-sacha.svg]] | | 2026-09-03 | R | 32 | 69% | [[file:/home/sacha/proj/french/conversation/2026-09-03-07-15-13-sacha.svg][file:/home/sacha/proj/french/conversation/2026-09-03-07-15-13-sacha.svg]] | | 2026-09-08 | C | 18 | 55% | [[file:/home/sacha/proj/french/conversation/2026-09-08-07-16-11-sacha.svg][file:/home/sacha/proj/french/conversation/2026-09-08-07-16-11-sacha.svg]] | | 2026-09-18 | R | 26 | 61% | [[file:/home/sacha/proj/french/conversation/2026-09-18-07-15-06-sacha.svg][file:/home/sacha/proj/french/conversation/2026-09-18-07-15-06-sacha.svg]] | | 2026-09-25 | I | 21 | 36% | [[file:/home/sacha/proj/french/conversation/2026-09-25-07-03-29-sacha.svg][file:/home/sacha/proj/french/conversation/2026-09-25-07-03-29-sacha.svg]] | | 2026-09-29 | I | 32 | 58% | [[file:/home/sacha/proj/french/conversation/2026-09-29-07-00-18-sacha.svg][file:/home/sacha/proj/french/conversation/2026-09-29-07-00-18-sacha.svg]] | | 2026-10-09 | R | 33 | 69% | [[file:/home/sacha/proj/french/conversation/2026-10-09-07-14-44-sacha.svg][file:/home/sacha/proj/french/conversation/2026-10-09-07-14-44-sacha.svg]] | :end: One of the things I like about [[https://www.italki.com/en/teacher/8899884][my regular tutor]] is that he has a technical background (uses Linux and Neovim, experiments with AI), so I enjoy talking about projects and ideas with him. In my conversation classes, he does a good job of asking follow-up questions, suggesting things I could try, and correcting or filling in the occasional thing I'm trying to find a word for in French. For fun, I decided to make a real-time display of this too: [[https://sachachua.com/blog/2026/10/using-emacs-to-visualize-speaking-and-target-words-phrases-in-real-ish-time/][Using Emacs to visualize speaking and target words/phrases in real-ish time]]. I'm usually too focused on figuring out what to say in French to actually pay attention to that during the conversation itself, but maybe it'll be handy someday. My next steps could include analyzing the other side of the conversation to find out my average time to respond. People usually start speaking [[https://journalofcognition.org/articles/10.5334/joc.268][within 200 milliseconds]] of the end of the other speaker's turn. I take a lot longer because I'm still formulating my thoughts and finding words, but it might be interesting to track my progress.