1,323 karma · joined May 28, 2021
Plus, many reactors now have liked season 1 a lot better than when it initially aired.
Forgejo became a hard fork in 2024, with both projects diverging. If you're using it for local hosting I don't personally see much of a difference between them, although that may change as the two projects evolve.
- familiarity with the accent and/or speaker;
- speed and style/cadence of the speech;
- any other audio that is happening that can muffle or distort the audio;
- etc.
It can also take multiple passes to get a decent transcription.
[1] https://search.nixos.org/packages?channel=unstable&query=mus...
[2] https://search.nixos.org/packages?channel=unstable&query=med...
Versioned standards allow you to know that you are compliant to that version of the specification, and track the changes between versions -- i.e. what additional functionality do I need to implement.
With "living standards" you need to track the date/commit you last checked and do a manual diff to work out what has changed.
There are effectively two approaches to voice synthesis: time-domain and pitch-domain.
In time-domain synthesis you care concatenating short waveforms together. These are variations of Overlap and Add: OLA [1], PSOLA [2], MBROLA [3], etc.
In pitch-domain synthesis, the analysis and synthesis happens in the pitch domain through the Fast Fourier Transform (visualized as a spectrogram [4]), often adjusted to the Mel scale [5] to better highlight the pitches and overtones. The TTS synthesizer is then generating these pitches and converting them back to the time domain.
The basic idea is to extract the formants (pitch bands for the fundamental frequency and overtones) and have models for these. Some techniques include:
1. Klatt formant synthesis [6]
2. Linear Predictive Coding (LPC) [7]
3. Hidden Markov Model (HMM) [8]
4. WaveGrad NN/ML [9]
[1] https://en.wikipedia.org/wiki/Overlap%E2%80%93add_method
[2] https://en.wikipedia.org/wiki/PSOLA -- Pitch-synchronous Overlap and Add
[3] https://en.wikipedia.org/wiki/MBROLA -- Multi-Band Resynthesis Overlap and Add
[4] https://en.wikipedia.org/wiki/Spectrogram
[5] https://en.wikipedia.org/wiki/Mel_scale
[6] https://en.wikipedia.org/wiki/Dennis_H._Klatt
[7] https://en.wikipedia.org/wiki/Linear_predictive_coding
[8] https://www.cs.cmu.edu/~awb/papers/ssw6/ssw6_294.pdf
[9] https://arxiv.org/abs/2009.00713 -- WaveGrad: Estimating Gradients for Waveform Generation
You have to explicitly annotate that a Kotlin data class is a Java record due to the limitations Java has on records compared to data classes [1]. This is similar to adding nullable/not-null annotations in Java that are mapped to Kotlin's nullable/non-nullable types.
Where there is a clean 1-1 mapping and you are targeting the appropriate version of Java, the Kotlin compiler will emit the appropriate Java bytecode.
[1] https://kotlinlang.org/docs/jvm-records.html#declare-records...
The two-way interop is one of Kotlin's advantages as it makes porting code from Java to Kotlin easier, or using existing Java libraries. For example, you don't have/need something like Scala's `asJava` and `asScala` mappers as the language/standard library does that mapping for you.
The interop isn't always perfect or clean due to the differences in the languages. But that's similar to writing virtual function tables in C -- you can do it, and have interop between C and C++ (such as with COM) but you often end up exposing internal details.
I don't know if this is a data/transcription issue, an issue with noisy audio, or what.
[1] https://www.electoralcalculus.co.uk/homepage.html
[2] https://en.wikipedia.org/wiki/Opinion_polling_for_the_next_U...
There's currently work on XPath 4.0 -- https://qt4cg.org/specifications/xquery-40/xpath-40.html.
[1] (2016 https://arxiv.org/abs/1609.03499) WaveNet: A Generative Model for Raw Audio
[2] (2017 https://arxiv.org/abs/1711.10433) Parallel WaveNet: Fast High-Fidelity Speech Synthesis
[3] (2021 https://arxiv.org/abs/2106.07889) UnivNet: A Neural Vocoder with Multi-Resolution Spectrogram Discriminators for High-Fidelity Waveform Generation
[4] (2022 https://arxiv.org/abs/2203.14941) Neural Vocoder is All You Need for Speech Super-resolution
1. your graphics driver isn't loading/working;
2. you can't log into the GUI due to a bug in the login screen;
3. you are working on a server that is headless, i.e. doesn't have a GUI installed, or are SSHing into a server/other machine.
I've experienced (2) a while ago and more recently there was another issue recently with upgrading breaking a system [1]. I also encountered the latter but was unable to keep the terminal open due to that bug (it kept switching back to the login screen), so I had to boot into a system via a USB stick, chroot into the system, then install the uninstalled desktop package.
[1] https://www.gamingonlinux.com/2025/04/ubuntu-25-04-upgrades-...
- interface/API based -- this is supported in modern languages via interfaces, traits, etc.
- implementation/code based -- modern languages tend to only support single inheritance; they tend to also support default method implementations on the interfaces/traits
[1] https://en.wiktionary.org/wiki/manga#English [2] https://www.w3.org/TR/simple-ruby/
1. write the test code first (possibly with a skeleton implementation) if you want to get an idea/feel for how the class/code is intended to be used;
2. write the code first if you need to;
3. ensure that you have at least one test at the point where the code is mimimally functional.
More generally:
1. don't aim for 100% code coverage (around 80-90% should be sufficient);
2. test a representative example and appropriate boundary conditions;
3. don't mock classes/code you control... the tests should be as close to the real thing as possible, otherwise when the mocked code changes your tests will break and/or not pick up the changes to the logic -- Note: if wiring up service classes, try and use the actual implementations where possible;
4. use a fan in/out approach where relevant... i.e. once you have tests for various states/cases in class A (e.g. lexing a number, e.g. '1000', '1e6', '1E6') you only need to test the cases that are relevant to class B (e.g. token types, not lexical variants, e.g. integer/decimal/double);
5. test against publically accessible APIs, etc... i.e. wherever possible, don't test/access internal state; look for/test publically visible behaviour (e.g. don't check that the start and end pointers are equal, check that is_empty() is true and length() is 0) -- Note: testing against internals is subject to implementation changes whereas public API changes should be documented/properly versioned.
For example, goose/geese is the result of the plural form and singular form undergoing different paths in the Great Vowel Shift resulting in the different vowels in the modern form.
There's also evidence that Proto-Indo-European had laryngeal consonants that have disappeared in all modern languages derived from it [1], but have left their mark on the descendant languages.
And yes, being able to do all of these in pure HTML/CSS would be awesome. Though we are getting there with things like `details` and the newer `popover` features which should make things like rich tooltips, menu buttons, etc. a lot easier to implement. IIRC, there are also several anchor CSS properties to make positioning a lot simpler.
[1] https://developer.mozilla.org/en-US/blog/html-details-exclus...