Code Monkey home page Code Monkey logo

Personal Portfolio

ToneTutor

Links Repo, Demo

When beginner musicians are learning how to play an instrument, it’s relatively easy to determine if you’ve played the right notes or not. However, they often overlook the timbre of these notes, which is equally important. Timbre is the quality of a note; for example, warm and round vs sharp and bright.

The main aspect that defines timbre are overtones. Overtones (often referred to as the harmonic series) are a sonic phenomenon where a root frequency is accompanied by frequencies which are integer multiples of the root. So, if an instrument plays the note $A_{\large4}$, you are not only hearing the root frequency $440\text{hz}$, but also $440\text{hz} \times 2$, $440\text{hz} \times 3$, $440\text{hz} \times 4$, etc. Different instruments and playing techniques (such as picking vs plucking, or playing near the bridge vs near the neck) alter the volume of certain overtones, thus changing the timbre.

This project aims to invent the means for quantifying timbre, so that beginner musicians can receive real-time, visual feedback to train their ear and improve their playing technique.

ToneTutor assigns a number to timbre with three steps:

  1. it uses pitch detection to determine the fundamental note
  2. it performs a Fourier transformation to figure out the overtones corresponding to that note.
    • In ToneTutor, this is called the harmonic fingerprint.
  3. it calculates a weighted sum of the harmonic fingerprint, with higher overtones having a higher weight.
    • In ToneTutor, this is called a benya.
      • In general, a smaller benya results from a warm note, whereas a large benya results from a bright note.

Note - ToneTutor is still a work in progress.

Expand to learn more about the harmonic series

Synth

Links Repo, Demo

An Android app for additive synthesis. After adjusting the harmonic-series editor and waveshape selector to construct a sound, the user can play music with the resizable, polyphonic keyboard and pitch bend slider.

The app uses a synth library I wrote in a Kotlin for generating, manipulating, and playing periodic signals with overtones. This library is also used in ToneTutor for testing purposes.

This was my first dive into app development, and it ended up being a fantastic learning experience.

SatisfactoryCalculator

Links Repo

Satisfactory is a factory building game that I've been playing for the past few months. However, the game requires some ratio math that can become tiresome when planning larger factories. So, using Compose for Desktop, a Kotlin framework, I created a desktop app for browsing the game's recipes and calculating the clock speeds required for a given output/minute or vice versa. As a bonus, the app's UI mimics an in-game menu.

SatisfactoryCalculator - Demo

TimeCalc

Links Repo

Time arithmetic is something that is quite tedious to me. And, with a hybrid-remote job where I need to track my hours, it's something I need to do quite often. So, I wrote TimeCalc, a CLI REPL-like program for performing arithmetic with time and durations.

TimeCalc was written with Kotlin-Native, which compiles down to a binary executable rather than a JVM byte-code. This makes it easier to add the executable to PATH and run from the command line.

TimeCalc supports the following:

  1. Addition and subtraction TimeCalc - Addition and Subtraction

  2. Parentheses TimeCalc - Parentheses

  3. Variables and a reserved variable now TimeCalc - Variables

A common use case is seeing what time I will be ending work that day. Suppose I want to get 8 hours, and I've already spent an 5 hours and 26 minutes. In TimeCalc, this is achieved with the following: TimeCalc - Example

ToolNotifier

Links Repo

I developed an app to help my brother stay updated on the latest tools available on hyperKitten.com, a simple website that doesn't have a mailing list. The app regularly checks the website and sends notifications via email or text when it is updated. This helps my brother, who does hand carpentry, stay informed about new tool releases without having to manually check the website himself.

To accomplish this, the app uses WorkManager, a popular library for scheduling tasks, to run a script in the background on an old Android phone. This script checks the website, scrapes the last-updated date, compares it to the previous last-updated date, and alerts the mailing list if the date is new.

Michael Twohy's Projects

Michael Twohy doesn’t have any public repositories yet.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.