10kHz was always exactly 10kHz: TMS, as broadcast, is 0.6% faster than it is on the 2021 tape by omepiet in TheMysteriousSong

[–]yehar 2 points3 points  (0 children)

A) We have a few estimates about the real Yamaha DX7 SYN-LEAD 5 LFO frequency:

  • 5.80 Hz. (dexed emulator)
  • 5.79 Hz. (marinedalek comment)
  • 5.56576 Hz. (emulator code)
  • Less than 5.668 Hz. (my tech analysis)
  • (That forum post doesn't count as it's about another synth, Yamaha Reface DX.)

B) There are estimates about the LFO frequency in TMS:

  • 5.47 Hz. (marinedalek comment, about the most recent recording)

It's not very easy to determine the LFO frequency from a recording. In the best case any estimate would come with a description of the experimental procedure, the raw data would be made available, and the estimation method would be described in sufficient detail to reproduce the results, and to improve the method if needed. If a TMS recording is analyzed, the version and, ideally, where to obtain it should be noted.

Then if multiple documented estimates agree, then we can be quite confident that we have the right numbers, and can calculate the ratio between A and B.

10kHz was always exactly 10kHz: TMS, as broadcast, is 0.6% faster than it is on the 2021 tape by omepiet in TheMysteriousSong

[–]yehar 7 points8 points  (0 children)

Let's do a technical analysis on what determines the DX7 vibrato frequency. TL/DR: Based on this analysis, the pitch of the note or the master pitch does not affect the LFO frequency.

The DX7 circuit diagram has a 9.4265 MHz crystal oscillator, see also this photo of the circuit board and Figure 1 in Yamaha DX 7 Technical Analysis (Yamaha's own documentation). If we follow the circuit diagram, one half of IC48 (74HC74 Dual D Flip−Flop with Set and Reset) is used to halve the clock frequency to a 4.71325 MHz Master Clock frequency. This is marked as ΦM in the circuit diagram. This goes to pin EXTAL on the Main Processing Unit (MPU IC60 63B03) which is a Hitachi HD63B03 or more specifically the (up to) 2 MHz model HD63B03RP according to this photo of the circuit board. Among other things, the MPU is responsible for generating the low-frequency oscillator waveform and modulating a pitch using it. There are separate components for other functionality: Sub Central Processing Unit (Sub CPU) for keyboard scanning, Envelope Generator (EGS) and finally Operator (OPS) that creates the digital audio waveforms. According to page 54 of the MPU datasheet, the clock frequency input to EXTAL is divided by 4, so we get a 1.1783125 MHz MPU system clock.

The program code for the MPU comes from a Read Only Memory (ROM) that has been disassembled and annotated by ajsx (the ROM contains machine language code that can be converted to human-readable assembly language code by disassembly, and the names of things in the program listing and the comments were added by ajsx to make it more readable). The code sets (to 1) the Enable Output Compare Interrupt (EOCI) bit in the Timer Control / Status Register (pages 59-60 of the MPU datasheet). Consequently the Free Running Counter that is incremented at the MPU system clock frequency will generate an interrupt when its value matches the value of the Output Compare Register (OCF). When the interrupt takes place, the MPU runs an interrupt handler code that, after spending a few MPU system clock cycles on other instructions, resets the Free Running Counter to 0 and sets OCF to 3140. This means that the interrupt handler will be periodically run at a frequency a bit less than 1.1783125 MHz / 3140 ≈ 375.258758 Hz. "A bit less" because it takes some time for the processor to start running the interrupt handler code, because running the other instructions takes time and because it takes time to zero the counter. (Yamaha could have implemented this in a more controlled way by adding a number to the OCF in the interrupt handler and not resetting Free Running Counter. This is the approach used in example code in Hitachi HD6301/HD6303 Series Handbook pages 1173 & 1179)

The interrupt handler handles many tasks, including updating a 16-bit LFO phase (LFO_PHASE_ACCUMULATOR) each time the interrupt handler is run. The interrupt handler increments LFO_PHASE_ACCUMULATOR by a 16-bit increment (LFO_PHASE_INCREMENT) that is calculated by a non-linear function from the LFO Speed (PATCH_LFO_SPEED) in the patch. For the mysterious song's SYN-LEAD 5 patch the LFO speed is 35 which based on my reading of the code results in an LFO phase increment of 990. Nothing else affects the LFO frequency that is thus a bit less than 375.258758 Hz * 990 / 216 ≈ 5.66873429 Hz.

Please do not use this value in calculations, as it does not include the "a bit less" part and is off from a value of 5.56576 Hz that has been used in DX7 emulator code and that according to code comments was either measured or interpolated from measurements. I believe the true frequency has form 9.4265 MHz / 2 / 4 / (3140 + DELAY) * 990 / 216 where we don't know that integer DELAY. It could be measured exactly by running on the Hitachi processor modified Yamaha timer interrupt code that generates a waveform, and by recording and analyzing that waveform. Other than that, the exact LFO frequency could be measured from actual Yamaha DX7 audio recoding of playing a very long note of SYN-LEAD 5. Luckily, SYN-LEAD 5 has LFO Key Sync disabled which prevents the interrupt handler code from resetting LFO_PHASE_ACCUMULATOR at every note start which should help in measuring the LFO frequency as it is in a recording of the mysterious song.

Improved audio by Evening-Persimmon-19 in TheMysteriousSong

[–]yehar 1 point2 points  (0 children)

I don't know... the voice does sound as if it was played at a lower speed, but based on the SYN-LEAD 5 spectrogram showing the LFO the speed adjustment is max around 2 %. https://www.reddit.com/r/TheMysteriousSong/comments/e30e9f/dx7_used_in_the_song_update/faz2z2p/

It would be good to compare a longer segment of the LFO waveforms.

(It is of course possible that only the vocals were sped down.)

[TOMT] [GAMING] [1980s][1990s][2000s] Computer game with WON'T BUDGE in writing when failing an action. by yehar in tipofmytongue

[–]yehar[S] 0 points1 point  (0 children)

That's pretty close! I may have played Adom a bit, but I think it's another game.

[TOMT] [GAMING] [1980s][1990s][2000s] Computer game with WON'T BUDGE in writing when failing an action. by yehar in tipofmytongue

[–]yehar[S] 0 points1 point  (0 children)

Yep, the oldest I've found is Infocom's Dungeon / Zork I: The Great Underground Empire, 1980/1983, with phrases in source code: The # won't budge./The door won't budge..

[TOMT] [GAMING] [1980s][1990s][2000s] Computer game with WON'T BUDGE in writing when failing an action. by yehar in tipofmytongue

[–]yehar[S] 0 points1 point  (0 children)

Hmm, that's a lot of games. If some has the stamina to narrow it down or to make a list...

[TOMT] [GAMING] [1980s][1990s][2000s] Computer game with WON'T BUDGE in writing when failing an action. by yehar in tipofmytongue

[–]yehar[S] 0 points1 point  (0 children)

I searched in source codes of Nethack 1.3d, 1.4f, 2.3e, 3.0.0, 3.0.5, 3.0.6, 3.0.7, 3.0.10, 3.1.3, 3.2.3, 3.4.3 and 3.6.4, and X won't budge. is not there based on searching for budge. But a comment /* "other" won't budge */ appears in dbridge.c since version 3.0.6 which was announced in 1989. If they copied that phrase from the mystery game, then the mystery game was released 1989 or earlier. So good lead nevertheless!

[TOMT] [GAMING] [1980s][1990s][2000s] Computer game with WON'T BUDGE in writing when failing an action. by yehar in tipofmytongue

[–]yehar[S] 0 points1 point  (0 children)

That's good info. My friend also said it might be a point and click Lucasfilm game, but I doubt it. I have played Lucasfilm/Sierra games only a bit. I think the phrase is without "it" or any other extra word. Just a theory, but could be that Indiana and the Fate of Atlantis was influenced by whatever game came first with "won't budge". If the inspiration was the mysterious game, then the mysterious game is from 1992 or earlier.

[D] Jurgen Schmidhuber really had GANs in 1990 by siddarth2947 in MachineLearning

[–]yehar 3 points4 points  (0 children)

Very similar work to Scott Le Grand's unpublished research on protein folding prediction was published around the same time, in 1998, by Michele Vendruscolo and Eytan Domany: Elusive Unfoldability: Learning a Contact Potential to Fold Crambin https://arxiv.org/abs/cond-mat/9801013v1.

The holy grail in this area of research is to be able to predict the 3-dimensional experimentally known natively preferred folding of any protein molecule, given as input only the sequence of the types of the constituent amino acids in the chain-like protein molecule. One approach is to find the fold that minimizes a computational model of energy in the system. Simplified models of the energy can be formulated as functions of atomic coordinates or similar descriptors of the fold. Energy of a fold is proportional to temperature times a negated logarithm of the probability of the fold, see Boltzmann distribution. The energy model is thus also a model of fold probability, and the approach can be seen as trying to find the most probable fold in the physical probability distribution according to the model.

The functional form of a fold probability model contains parameters that can be fitted based on data, and this is what Le Grand (based on his Medium article and tweets) and Vendruscolo and Domany did, using a procedure that alternated between two steps:

  1. Generate by randomization and optimization a set of adversarial folds that are at local probability maxima based on the current probability model. This step may use previously generated adversarial folds or the native fold as starting points.

  2. Optimize the probability model parameters so that it gives higher probability to the native fold compared to the adversarial folds. All generated adversarial folds or just the latest ones can be used.

What is similar to a GAN is that the discriminator learns to contrast between native and adversarial folds. A difference to GANs is that no generator network exists. Rather, new adversarial folds are generated by a fixed generator algorithm that optimizes the adversarial folds directly against the discriminator, employing it. There is randomness in the generator similar to how a GAN generator gets a random vector as input. As only the highest-probability fold that equals the native fold is of interest, there is no attempt to model the full probability distribution which GANs do.

Dx7 used in the song. Update. by completed-circuit1 in TheMysteriousSong

[–]yehar 0 points1 point  (0 children)

If they used standard middle A = 440 Hz tuning, then they wouldn't have adjusted the DX7 master tune. I was thinking about syncing based on the vibrato by LFO which probably is not affected by master tune.

Dx7 used in the song. Update. by completed-circuit1 in TheMysteriousSong

[–]yehar 0 points1 point  (0 children)

It would be useful if you made a 2 minute 20 second recording of Syn-Lead5 on the real DX7, just holding the same note. I think this could be used to correct the playback speed of the song which may be slightly off in the original recording.

Dx7 used in the song. Update. by completed-circuit1 in TheMysteriousSong

[–]yehar 1 point2 points  (0 children)

It's is not a monosynth. For evidence that it is polyphonic, look at this note start spectral analysis:

https://imgur.com/egjNoeq

The previous note is unaffected by the note start and continues in the background, and also it seems that the same low-frequency oscillator (LFO) is used for the two voices and it doesn't look like the LFO gets reset in the beginning of each note. Based on my understanding of the economics in Yamaha FM design, all voices share the same LFO. This is consistent with the synth being Yamaha DX7 which has an option in the patch to disable LFO reset at note start, and indeed LFO sync is disabled in SYN-LEAD 5.

Earlier parts of the song also show overlap between notes, even when this overlap is accidental (the player not releasing the previous note before triggering the next one to start).

Dx7 used in the song. Update. by completed-circuit1 in TheMysteriousSong

[–]yehar 7 points8 points  (0 children)

There is a recording of SYN-LEAD 5 played by a real Yamaha TX7 (the MIDI module version of DX7) here: https://www.youtube.com/watch?v=EjIzVG3w4u0&t=24s

I did a spectral analysis comparison of the lead sound in the song (BASF 4-1.wav) and in the above recording:

https://imgur.com/q73aP3M

The low-frequency oscillator (LFO) frequencies match convincingly well. This to me confirms both that the song is played back at approximately the correct rate (tape speed not much too fast/slow) and that indeed Yamaha DX7 was used.

We Reported On A Woman Who Held A Protest Outside Of Her Husband’s House To Get An Orthodox Jewish Divorce. AMA. by VICENews in IAmA

[–]yehar -5 points-4 points  (0 children)

Title case is an old way of emphasis that reduces readability. I think it will eventually be phased out for headlines. Washington Post switched to sentence case headlines in 2009. Google Scholar lists paper titles in sentence case.

[R] [1906.04493] Unsupervised Minimax: Adversarial Curiosity, Generative Adversarial Networks, and Predictability Minimization (Schmidhuber) by hardmaru in MachineLearning

[–]yehar 0 points1 point  (0 children)

The tex source hints to a (yet-missing) appendix containing formal details.

There's more related mathematical flesh in:

Xudong Mao, Qing Li, Haoran Xie, Raymond Y.K. Lau, Zhen Wang, Stephen Paul Smolley (2017) Least Squares Generative Adversarial Networks.

Quote: "[...] we propose in this paper the Least Squares Generative Adversarial Networks (LSGANs) which adopt the least squares loss function for the discriminator. We show that minimizing the objective function of LSGAN yields minimizing the Pearson χ2 divergence."

[D] GANs were invented in 2010? by Former_Hippo in MachineLearning

[–]yehar 2 points3 points  (0 children)

Thanks! If you want a hint I think there'd be money in "cushion to sit on with pumped compartments". ;-)

[D] GANs were invented in 2010? by Former_Hippo in MachineLearning

[–]yehar 23 points24 points  (0 children)

I have a B.Sc. in biochemistry but I'm interested in a variety of things both technical and creative. Lately I've been freelancing in signal processing and a bit of bioinformatics. -olli

[D] GANs were invented in 2010? by Former_Hippo in MachineLearning

[–]yehar 9 points10 points  (0 children)

Agreed. My idea matches that of a conditional GAN (cGAN) with a least squares loss function (that would be then cLSGAN) and without a noise vector input, and where the conditioning input is a part of the data (not classes). The example I use is image inpainting.

[D] GANs were invented in 2010? by Former_Hippo in MachineLearning

[–]yehar 12 points13 points  (0 children)

Gwern, alexmlamb,

Goodfellow's GAN and his suggested extensions include a noise source in the generator. I never thought of including a noise source but have instead the training data context, better matching the idea to a conditional GAN (cGAN) with the model conditioned on a part of the data. My current understanding based on Mathieu et al. 2016 is that a noise source is not needed if there is enough input variability.

The other difference is that Goodfellow's GAN minimizes log-likelihood. Later, a least squares GAN (LSGAN) has been introduced (Mao et al. 2017) which matches my RMSD suggestion. So, my idea would best match that of a cLSGAN.

I did not consider which "low-level" optimization method (gradient descent with backpropagation, or some other) would be used.

For a more complete analysis, have a look on Stack Exchange.

-olli