Giter Site home page Giter Site logo

pulkomandy / sawteeth Goto Github PK

View Code? Open in Web Editor NEW
22.0 3.0 7.0 193 KB

A sound synthetizer, tracker and replayer, similar to AHX.

C++ 75.42% C 16.63% CMake 0.53% HTML 5.99% Shell 0.05% Smalltalk 1.39%
tracker haiku music ahx songs c-plus-plus music-composition

sawteeth's Introduction

Sawteeth

What?

Sawteeth is a soft-synth (with tracker) for BeOS and Haiku, meant to either create cool synthsounds to use in cubase and such, or cute chip-tunes. It uses no samples but only generated waveforms.

Originally developed by Jonas and Arvid Norberg and released in 2000, it is now open-sourced under the MIT licence.

Sawteeth generates music files that take very little space and not much CPU time to replay. It is based around base oscillators, filters, envelopes, and clipping. The pattern editor allows you to reuse pieces of melody easily (including transposing them). The instruments and patterns can also be edited in real-time while the music is playing.

Sound Quality

The sound synthesis is of high quality with little aliasing noise, 44kHz and float precision. (some of the filters and definitely the clipping adds aliasing noise, so use them with care) The anti alias method is "infinite oversampling with boxfilter" Modulation rate is static for a song but can be anything between 0.673Hz and 44100Hz (lousy performance at high modrate)

Thanks

I've been given all filter code by Stefan Hållén.

Arvid Norberg is doing big parts of the editor (close to all of the part editor and the instrumenteditor) and a lot of complaining on my bad oo design of the player :)

A big inspiration is Abyss's AHX tracker. A sawteeth song is pretty similar to a AHX song, in the future a AHX to sawteeth converter could be reality (sawteeth lacks some AHX features so it wouldn't be perfect).

Features

  • Retro feel, all the way.
  • All your favourite waveforms : Saw, Square, Triangle, Noise, Sinus
  • Filter with many modes,
  • Clipping with many modes,
  • 'ADSR' for filter and amp
  • Fast synthesis

Working with Sawteeth

http://www.linusakesson.net/music/elements/index.php

Compiling Sawteeth

You need cmake and make installed, as well as some version of gcc and the Haiku development header:

pkgman install gcc gcc_syslibs haiku_devel make cmake

Then you can build this way:

mkdir build
cd build
cmake ..
make

sawteeth's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

sawteeth's Issues

Allow to set a color for each part

Like in renoise and arkos tracker.
Color should show up in part editor (window tab color? background? picker-box) and in the sequencer (box color).

Does not compile due to if.. else identation errors

Here's the error log:

~/Sawteeth> cmake .
~/Sawteeth> make | nc termbin.com 9999
/boot/home/Sawteeth/Source/stAiffWindow.cpp: In member function 'void stAiffWindow::Thread()':
/boot/home/Sawteeth/Source/stAiffWindow.cpp:116:4: error: this 'if' clause does not guard... [-Werror=misleading-indentation]
    if (sbuf[c] > max) max = sbuf[c];if (sbuf[c] < min) min = sbuf[c];
    ^~
/boot/home/Sawteeth/Source/stAiffWindow.cpp:116:37: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'if'
    if (sbuf[c] > max) max = sbuf[c];if (sbuf[c] < min) min = sbuf[c];
                                     ^~
cc1plus: all warnings being treated as errors
make[2]: *** [Source/CMakeFiles/Sawteeth.dir/stAiffWindow.cpp.o] Error 1
make[1]: *** [Source/CMakeFiles/Sawteeth.dir/all] Error 2
make: *** [all] Error 2

Does not compile on x86_64

Attempts to compile as C++11 by default (unless I'm doing something wrong, which is very likely) and fails. I can provide specific errors if necessary, but I think this is a configuration issue. I just ran cmake ./ and then make

Sample support (WAV)

Support for WAV samples. Is required so that there can be real voices, real drums etc. Strips the need for an extra application to handle this and makes the editing experience more complete and immersive.

redrawing is slow

The track view redraws slowly enough when not playing, but when playing it's pretty horrendous. This can be seen by dragging the horizontal scroll bar and paying attention to the black boxes that appear as it is redrawn... virtually the entire window is black boxes if dragged while playing.

Update to add support for Layout Management

This application does not use the Layout API. This results in weird behavior with cut-off text, as well as a lot of other visible quirks.

image

Certain important labels are also cut off, and the margins between objects are not sufficient:

image

The Control windows should be reimplemented, and the windows should be resizable.

Multiple vertical tracks

A tracker gui similar to MED / Protracker / Milkytracker. The purpose is to allow vertical editing of patterns side by side.

Weird splash screen behavior

The splash screen of Sawteeth seems very clunky, resulting in a lack of clarity of the portrayed information. The splash screen should either get fixed or, alternatively (and preferably) get replaced with an About window, which should be implemented using the built-in implementation of Haiku.

(The splash screen is also used as a substitute for an About window.)

Certain sections contain incorrect/outdated data as well.

image

Replace "Let The Music" menu item

This issue is relevant to #50.

Sawteeth currently has a menu item that allows people to control playback, which can be pretty difficult to use if you're an average user that does not regularly use keyboard shotcuts. Sawteeth plays loud generated sounds by default, so the playback must be made easier to control.

ShowImage's ToolBarIcons implementation may be a good place to start exploring potential options.

No build instructions - repo version blasts noise

So it's been a hot minute...maybe an hour since I touched anything Be. Went hunting for some old audio stuff, Sequitur, Sawteeth. The old html says APlayer can play st files but I can't find mention of such a player for BeOS or other. I think I remember it existing but man...that was 20 years ago. Any idea who/what can play st files outside Sawteeth because when I try to use Sawteeth is just blasts me with noise. I tried to build from source but there are no build instructions, no make file etc.

todolist from sawteeth 1.2

= IMPORTANT =

  • Sequencer
    when you add a channel so unmute channels and volume is set to zero ... same problem when saving. It should perhaps unmute them? Anyway when saving.

r-loop Krupp up when deleted

  • Part window
    When editing in a part it should be possible to play it solo.
    current instrument and octave, should be printed (perhaps in the title)

= NON-ESSENTIAL =

  • library
    song.h should be called the same as the class, and class should be called stSong
  • Editor : Should ask if you want to save changes when closing.
  • sequencer: click ruler to jump in track
  • Part window : add a button to delete the part completely from the song.

Windows should be centered on startup

The Sawteeth windows appear in a very arbitrary position when the app itself is launched, as seen in the following screenshot:

image

The windows themselves should be near the center of the screen, in a way that's clear to the average user.

Vibrato is too deep

It's very hard to do a slight vibrato effect. Even setting the slider to 1px from the left gives bad results on high-pitched notes.
Make this slider logarithmic maybe ?

cmake is broke

Error given:

Error: Failed to open input file "../../Source/Resource.rsrc": No such file or directory

Certain menu items should not be clickable

There are certain menu items that can be clicked, yet they do nothing when clicked.

Here's an example of an item:

image

The items should either be rendered as unclickable, or they should be given some sort of corresponding, appropriate functionality.

Scope view

Like the one in MusicLine, for each instrument. Rather useful tool to see what you're doing.
Maybe a spectrum analyser, too ?

Swapping instruments must be made easier

This issue is relevant to #47.

I've spent a handful amount of time using the program, yet I still can't figure out how to apply or swap out instruments and use them in a specific channel.

As a person who has used other digital audio workstations (e.x. Ableton Live), where swapping instruments can be as simple as a selection and a keyboard shortcut, this can be overwhelming.

The user interface should be improved in order to make that piece of functionality that already exists within the program easier to access and use.

image

Improve menu bar organization

Most applications on Haiku follow a particular format when it comes to menu bars, as seen in the following examples:

image

image

image

However, in the case of Sawteeth, one can observe that the menu bar does not really look as organized as one would expect from an advanced digital audio workspace.

image

This should be worked on and the menu bar has to be reimplemented in a user-friendlier fashion.

Release checklist

Before a release:

  • Check if we can compile with gcc2 and gcc8 (32 + 64bit) without warnings, both the editor and STLib
  • Update readme.html, version.history, Resource.rdef which each contain at least the version number
  • The "default song" title also needs to be changed as it contains the version number

zoom vertically centers track view on screen

is this on purpose? I think it's rather inconvenient as it can more easily be hidden behind other windows this way... if it is on purpose, maybe we could add an option to make it zoom to different regions?

Mismatched versions

This issue is relevant to #48.

The versions shown in the window title and in the splash screen do not match.

Degraded sound

I've noticed a significant amount of static in the opening of the Lemmings theme by stefan (in the stefo directory of the original distro). Also, the seQ part in Infinity by biteOn doesn't play properly.

Remove txt class from libST

The txt class is essentially the same as BPositionIO. Use the system one to wipe some bytes out of libST.

Improve mouse handling in ADSR and filter editors

You have to click exactly on the draggers to grab them, and they are very small.

Also add a legend (cuttoff freq / time or amplitude / time) to help know wat you're doing. At first I thought "filter" was about drawing the filter freq. response diagram!

be lib shouldn't be included

Due to Haiku moving away from references to all things Be, the reference to the be lib in the CMakeLists.txt in Source should be removed if possible.

Import AHX files

AHX is a fileformat used on amiga by AHX tracker (formerly known as THX).

Load this files in Sawteeth and add the missing features to replay them if applicable.

Fileformat spec :
http://pulkomandy.lexinfo.fr/projects/sawteeth/wiki/AHX

APlayer has a player for it already. Also, HivelyTracker, which is now open source, can import AHX files. It uses the HVL fileformat internally, but the synth engine is also quite similar to Sawteeth with some extras (ring modulator, 2 effect columns in parts, etc.)

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.