| 1 | # Recording audio |
| 2 | |
| 3 | ## What OneNote 2010 does |
| 4 | |
| 5 | Observed in a lab clone on 2026-09-29, with a QEMU HD Audio device on a null |
| 6 | audio backend (it records silence; the clone has no camera, so Record Video |
| 7 | was not observed): |
| 8 | |
| 9 | - **Record Audio** (Insert, Recording) with the caret at the end of "Before |
| 10 | recording": after that paragraph OneNote adds the recording's file, an empty |
| 11 | paragraph, "Audio recording started: 5:18 PM Tuesday, September 29, 2026" in |
| 12 | the `cite` quick style (Calibri 9, #595959) and an empty paragraph. The |
| 13 | contextual Audio & Video tab shows Recording: Record Audio, Record Video, |
| 14 | Play, Pause, Stop, Rewind 10 Minutes, Rewind 10 Seconds, the position |
| 15 | ("00:08/00:08"), Fast Forward 10 Seconds, Fast Forward 10 Minutes, See |
| 16 | Playback and Audio & Video Settings (`native/read/onenote-recording-tab.png`). |
| 17 | - **The file** is named after the page ("Recorded.wma", shown without its |
| 18 | extension) and is Windows Media Audio 9 Voice, 8 kHz mono: 24,827 bytes for |
| 19 | 34 seconds. It is stored in the section's own file data store beside a |
| 20 | 32-pixel icon, never in `_onefiles`. The attachment carries |
| 21 | AudioRecordingGuid (`0x1c001c97`), IRecordMedia 1 (`0x14001d24`) and |
| 22 | AudioRecordingDuration in milliseconds (`0x14001cfd`, 33,903); the page lists |
| 23 | the recording in AudioRecordingGuids (`0x1c001ca3`, COM's `MediaPlaylist`). |
| 24 | - **Linked notes.** Every paragraph whose text changes while recording is |
| 25 | linked to that moment: the recording's GUID (`0x1c001c98`) and milliseconds |
| 26 | since the start (`0x14001c99`, COM's `MediaIndex`) on its text object. A |
| 27 | paragraph edited during recording is linked too ("Before recording edited", |
| 28 | 20,131 ms); empty paragraphs are not. The line saying when and the file are |
| 29 | linked at 0 and 151 ms. |
| 30 | - **Playback.** Hovering a linked paragraph, or selecting the recording, shows |
| 31 | a blue play button in the margin (`native/read/onenote-linked-notes.png`); a |
| 32 | click plays from the linked moment. |
| 33 | - **Deleting** the recording removes AudioRecordingGuids from the page; the |
| 34 | notes keep their links (`native/deleted`). |
| 35 | - **Pause** while recording (the Pause button again resumes) leaves the pause |
| 36 | out of the clock; a note written while paused is not linked |
| 37 | (`native/read/paused-while-recording.xml`). |
| 38 | - **See Playback** (on by default) highlights, as a selection, the note |
| 39 | linked last at or before the moment playing; the line saying when, linked at |
| 40 | 0, is not highlighted (`native/read/onenote-see-playback.png`). When the |
| 41 | note playing is off screen OneNote scrolls just far enough to show it |
| 42 | (`native/read/onenote-see-playback-scrolls.png`: 60 lines between two |
| 43 | notes, played from the top of the page). A linked |
| 44 | note plays from five seconds before its moment, the default of Options, |
| 45 | Audio & Video (`native/read/onenote-audio-video-options.png`), which also |
| 46 | shows the default video profile, Windows Media Video 8 for Local Area Network |
| 47 | (256 Kbps). Control-Alt-P plays and Control-Alt-S stops; Control-Alt-A does |
| 48 | not record. |
| 49 | - **Record Video** without a camera says "No camera available. Make sure the |
| 50 | camera is properly installed and connected." (`native/read/onenote-no-camera.png`). |
| 51 | Installing a virtual camera in the clone was refused, so OneNote's own video |
| 52 | recording was not observed. |
| 53 | - **0x1c001cc8** is a run list of {u32 character position, u8 state} on text |
| 54 | objects, OneNote's proofing state: its page date and time and the line saying |
| 55 | when recording started always carry `00 00 00 00 03` (three recordings, all |
| 56 | pages of `native/`), typed text none or 0, 1 or 9 (a misspelling), equations |
| 57 | 5. OneNote writes and rereads it itself and reads text without it, so |
| 58 | Snowbound writes it only on new pages' dates, as before. |
| 59 | - **Attach File** of a .wav makes it a recording as well: identity, |
| 60 | IRecordMedia 1 and its length (1,000 ms), listed on the page |
| 61 | (`native/attached`). MS-ONE requires this of .wma, .mp3, .wav, .wmv, .avi and |
| 62 | .mpg files. |
| 63 | |
| 64 | ## Rows |
| 65 | |
| 66 | `native/` is OneNote's recording (`notebook/`), its COM export |
| 67 | (`read/page-recorded.xml`), and the section after OneNote deleted the |
| 68 | recording (`deleted/`) or attached a .wav (`attached/`). |
| 69 | |
| 70 | `candidate/` is `a_recording_stores_its_file_line_and_linked_notes_for_onenote` |
| 71 | in `crates/snowbound/src/recording.rs`: the editor records at the end of |
| 72 | "Before recording", two notes are typed while it records, and Stop puts in |
| 73 | two seconds of a tone as Snowbound stores recordings, 16 kHz IMA ADPCM WAV. |
| 74 | `cold/` is a fresh OneNote 2010 read: the playlist, the file with its bytes, |
| 75 | the line and both notes linked to their moments. Opened in a lab clone, the |
| 76 | note's play button played the recording from there (`played-from-note.png`); |
| 77 | `native/read/onenote-plays-ima-adpcm.png` is OneNote playing a 20-second one. |
| 78 | Regenerate with `SNOWBOUND_RECORDING_EXPORT`, then `tools/native_runner.py DIR |
| 79 | COLD --expected-pages 1 --collect-notebook --screenshots`. |
| 80 | |
| 81 | `edit/` is `onenote_s_recording_round_trips_through_deleting_restoring_and_linking` |
| 82 | in `crates/onestore/tests/page_media.rs`: OneNote's recording deleted, put back |
| 83 | as undo does, and a paragraph linked at 25 s, each as its own edit. `edit/cold` |
| 84 | is a fresh OneNote 2010 read: the same playlist, links, WMA bytes and the new |
| 85 | link. Regenerate with `ONESTORE_RECORDING_EDIT_EXPORT`, then |
| 86 | `tools/native_runner.py DIR COLD --expected-pages 2 --collect-notebook |
| 87 | --screenshots`. |
| 88 | |
| 89 | `video/` is Record Video. `native/read/attached-video.xml` is OneNote |
| 90 | attaching one file of each kind: .avi, .mpg and .wmv become recordings (kind 2, |
| 91 | with their length), .mp4 and .mov plain files. OneNote played Motion JPEG AVI |
| 92 | with PCM or IMA ADPCM sound, MPEG-1 and WMV 8 with pictures |
| 93 | (`onenote-plays-attached-*.png`), but H.264 in AVI without them. `video/candidate` |
| 94 | is `a_video_recording_stores_its_file_line_and_linked_notes_for_onenote` in |
| 95 | `crates/snowbound/src/recording.rs`: two seconds of Motion JPEG at 320 by 240, |
| 96 | 15 a second, with 16 kHz PCM, as Snowbound records video. `video/cold` is a |
| 97 | fresh OneNote 2010 read; OneNote played it from a linked note with See Playback |
| 98 | highlighting it (`video/played-from-note.png`), and played what the macOS |
| 99 | conversion makes of `video/camera.mov` (H.264 and AAC, as a capture session |
| 100 | records) and what GStreamer recorded in a Debian 13 VM from its test sources |
| 101 | (`video/onenote-plays-*.png`). Regenerate with `SNOWBOUND_VIDEO_EXPORT`. |
| 102 | |
| 103 | `tools/test_recording.py` checks the rows without a VM. |