Giter Site home page Giter Site logo

philburk / mobileer-synth Goto Github PK

View Code? Open in Web Editor NEW
10.0 3.0 1.0 2.84 MB

General MIDI Synthesizer used as a ringtone engine by Mobileer. Suitable for use on 32-bit embedded systems.

License: Apache License 2.0

C 99.91% Makefile 0.01% Shell 0.03% CMake 0.04%
midi synthesizer ringtones

mobileer-synth's Introduction

mobileer-synth

General MIDI Synthesizer in portable C by Mobileer.

This synthesizer was licensed for use in the Palm Treo and other mobile devices for playing ringtones.

The library is given MIDI bytes as input and produces 16-bit PCM audio as output. It can be easily connected to any audio system. Optional output modules can be used to play in real-time using PortAudio or to output a WAV file.

The library has 3 levels:

  • ME1000 - is for low memory devices and uses a virtual analog synthesizer instead of wavetables
  • ME2000 - adds wavetables for piano, violin, drums and other instruments that are difficult to synthesize
  • ME3000 - adds support for DLS and Scalable Polyphonic MIDI ringtone standards

Documentation in docs folder

Dependencies and Requirements

The synthesizer uses 32-bit fixed-point arithmetic for its signal processing. It does not use floating point.

It has minimal software dependencies and can even run without a memory allocator on embedded devices with no operating system.

It does not require any file I/O. The wavetable instruments are loaded at compile time from a header produced by a custom editor.

The ME1000 requires:

  • Memory
    • Code 20-30 KB ROM
    • Instrument Library 14 KB ROM
    • Data 20-30 KB RAM
  • 32-bit integer arithmetic, eg ARM-7, Blackfin

The ME2000 adds more ROM for the wavetables, depending on quality. A 1 MB instrument set is included.

  • On an ARM946 generating audio at 44100 Hz
    • each wavetable voice requires 1.5 MIPS
    • each synthesized voice requires 2.4 MIPS

Building

The current build system requires CMake and a C compiler.

This will generate a library for the ME2000 and a few example programs.

cd spmidi
mkdir build
cd build
cmake ..
make

The libraries will be in the "spmidi/build/lib" folder and the executables will be in the "spmidi/build/bin" folder.

This will play a diatonic scale and output the results to a WAV file.

bin/play_scale

If you have ALSA installed then you can hear the output:

aplay spmidi_output.wav

You can convert any standard MIDI file to WAV using "play_midifile". We have included some ringtones that you can use for testing.

bin/play_midifile ../../data/ringtones/phil/songs/FurryLisa_rt.mid
aplay spmidi_output.wav
bin/play_midifile ../../data/ringtones/phil/songs/Bach_Sonata3EMajor.mid
aplay spmidi_output.wav

Contributors

  • Phil Burk - primary developer and sound designer
  • Robert Marsanyi - DLS and other contributions to the ME3000
  • Ryan Fransesconi - contributed to the instrument editor written in Java

mobileer-synth's People

Contributors

philburk avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

alexriegler12

mobileer-synth's Issues

Release as open source

Devin Magruder [email protected] wrote:

have you ever considered releasing the ME-series synth tools and the source code to the synth there?
There may not be much immediate interest but I feel that those interested in embedded MIDI/FM
synthesizers (like those found in older phones) would appreciate the contribution.

Please release smaller than 1 MB wavetables and API docs

I have read on the old product website, that there were smaller wavetables as well.
Can you please release them, so that I can use it on a ESP32 or other embedded system ?
Also, it seems as if the official API documentation (aside from the comments in the headers) are missing.

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.