MusicString - Now with Visual MusicString IDE!

Discuss everything else here

Moderator: ArcWolf

Post Reply
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

MusicString - Now with Visual MusicString IDE!

Post by Frooxius »

Hi there!
MusicString is another of my many projects, it's an simple programming language designed for Music/Melody synthesis using a very compact ASCII strings (plus there's a compression version coming up, utilizing UTF-8), in another words - you can write music with just a few symbols!

This makes it deal for pasting on Twitter, sharing in social networks, IRC, instant messaging or even putting to your signature or in the post. The language is quite straightforward, but allows simple loops (repeating parts of the tunes), playing several notes at once (basically by forking) or even subroutines with arguments and conditional execution. It supports several instruments and also soundfonts for your own sounds/instruments! (and you can use several soundfonts in one song at once!)

Today, I finished the first working version of MusicString compiler and generated the first audio with MusicString ever. This is the MusicString that was used for the first one:

Code: Select all

{test;a[$0.:3]a}abc{test:z}abc{test:8z}
You can listen to generated audio here:
http://data.solirax.org/musicstring/First.wav

Here's another tune, which sounds more like a music and less like a testing piece:

Code: Select all

->5dd.4abcfeg5ddd(bcd,egd)3dddefghaaabb(bbbc,ccca)5dda
You can listen to generated audio here:
http://data.solirax.org/musicstring/More.wav

For now, this is all, but stay tuned, because I'm gonna release specification and compiler binary soon, so you can begin making your very own tunes! ^^ If you're capable enough even now to understand the simple syntax of the MusicString language from the examples, feel free to type any of them here into the topic and I'll generate them now for you :3

I hope you'll like this project, 1llusion showed interest in integration with this forums using a bbcode tag [musicstring]

So... stay tuned for more tunes! >:3

------------------------------------------------------------------------------------------------------------------

I have another tune, which I created partially by randomly mushing keys on the keyboard, but it doesn't sound THAT bad, surprisingly x3

Code: Select all

3>{0;pokcfghmrldslfdfsadewoiadajlekjadfadhfweiudadlkjha eauhdfalkjdhfalsuehaldkjnxlmhldsakjhflkdsajfajhkhkjhkjhkjh kjhkjhkjhkjhkjhkkkkkhkhjkjhkjhkjhkhjkjhkjhuyiuyilkjhutkjoiyt uytriyutyutabcdefghijklmno pqrstuvwxyzzzzzz...p.p.p.p.p.dlprmldflkj} (/{0:},^{0:}, 5|[rtt.:30],6=~[tTop:15], 4=-[d...dd.....d.d.d....ddd.d...:30])
Listen to it here

------------------------------------------------------------------------------------------------------------------

It's here! *snip, get the newer version*

I just released the first public version of the MusicString to WAV (16b PCM) compiler! It takes plaintext file with MusicString code as an input and outputs a WAV file (16b PCM, 48 kHz), the length is capped to 30 minutes, so in case the MusicString loops forever, result will be 30 minutes long.

It's packaged with a few examples, so try them out and then begin to make your own tunes! ^^ Don't hesitate to share them here with us!

It's also first version, not all features are implemented yet and some are gonna change a bit, plus there are probably bugs, so sorry in advance if it crashes here and then or doesn't work as it should.

------------------------------------------------------------------------------------------------------------------

New version of Visual MusicString was released!

Download for Windows
Download for Mac OS X
Download for Linux (you need Qt 4.8.0 libraries, they are not part of the package)

[size=large]Version 0.2[/size]
[+] Added versions for Linux and Mac OS X
[+] Added exporting to audio file
[+] Added syntax error reporting
[+] Added real-time playing sample-rate option
[+] Added About Visual MusicString page (includes version numbers and compile times)
[+] Added amplitude peak visualizer
[*] Numerous bug-fixes

----------------------------------
Compiler history:

Version 0.2.2a
DOWNLOAD HERE
[+] Added normalization - activated automatically in case of clipping, adjusts maximum amplitude to 0.95 (test with hugechord.mstr)
[*] Fixed bug when parsing loops and going into unintended infinite loop in some circumstances
[*] Edited Saving code, has now about 50 % less memory footprint, though it's slower

UPDATE! Version 0.2.1a
Please update to the new version, *snip*
[+] Linux binary is now available! The code compiles and works correctly both under Linux and Windows now, porting to Mac OS X is in progress
[*] Fixed a bug that caused incorrect loops to be terminated by the [loopname] statement
[*] Fixed a bug that caused parsing thread to hang by going into an unintended infinite loop under some circumstances


UPDATE! Version 0.2a
Please update to the new version,*snip*
[*] Rewrote the parsing thread scheduling code and (hopefully) resolved all timing issues that way, also made code more clean
[+] New noise generation, so it now has much better, frequency based noise and plucks!
[+] Now supports statement [loopname] to terminate any loop with that name (you can try it with tune.mstr)
[+] New and updated examples
Last edited by Frooxius on Thu Mar 01, 2012 12:29 pm, edited 5 times in total.
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Updated to version 0.1.1a ! *snip, get the newer version*
-Fixed a timing issue

For a quick reference, here are syntax constructs copied from my private MusicString analysis document, some don't work yet though:

Code: Select all

0 – 9 = duration of the note
a – Z = play tone of given frequency
. = pause
~ = set sine waveform
/ = set sawtooth waveform
| = set pluck waveform
- = set square waveform
^ = set triangle waveform
* = set noise waveform
( … ) = chord – group several statements that are played at once. It’s considered as one note, even if it contains several. Separate individual statements with comma
{name; sequence} = subroutine definition
{name: parameters} = subroutine call, parameters are optional
$n = argument usage in subroutine, n is number from 0 to 9
[name: sequence :n] = repeat sequence n times, 0 for infinity, name is optional
[name] = stop sequence with given name, if playing
&n = perform shift of pitch scale
&+n = perform shift of pitch scale plus 1 more step
&-n = perform shift of pitch scale minus 1 more step
@bpm; = set bpm
#soundfont;	= specifies a file with alternate soundfont that will be used
>	= set the tones to use fadeout
<	= set the tones to use fadein
=	= set the tones to use constant volume
%n	= set the volume, n is an alphabet letter
?n	= skip over following statement if argument n is zero
!n	= skip over following statement if argument n is nonzero
?(n=x)	= skip over following statement if argument n != x
!(n=x)	= skip over following statement if argument n == x
?(n@y=x) = skip over following statement if argument n@y == x
!(n@y=x) = skip over following statement if argument n@y != x
	@y = represents a simple integer operation with another number y
	Operations can be following: +, -, *, /, %, <<, >>, &, |, ^
Regarding chords, you write them like this
ab(c,d) <--- Plays a, then b, and then c and d at once
(ab,cd) <--- Playes a and c at once, then b and d at once

Additionally, you can use chords to play several instruments at once, like this for example:
(^abcdefgh, >^[.D:5], ~6roTHl)
Last edited by Frooxius on Wed Feb 15, 2012 7:33 pm, edited 1 time in total.
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Sleet
Bringing Foxy Back
Posts: 17291
Joined: Thu Apr 29, 2010 1:32 am
Location: Nephelokokkygia
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Sleet »

This is really cool!
Image
Questions? Comments? Concerns? Friendly banter? Feel free to click the "PM" button below!
User avatar
yehoshua
Posts: 1984
Joined: Wed May 25, 2011 7:32 pm
Location: Canananada

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by yehoshua »

I want to see someone play stairway to heaven with this!
Oh, and I should learn to use that as well, looks awesome.
Sent from my conifer.
User avatar
RandomGeekNamedBrent
laughing maniacally
Posts: 21032
Joined: Mon Jan 24, 2011 10:42 pm
Location: an invisible, flying volcano over Virginia

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by RandomGeekNamedBrent »

this looks quite awesome indeed. I may have to write some quick things for this some time.
Paradigm Shift by me
I do not actually believe any of what I'm saying.
RP character sheets
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Wow, thanks! ^^ Share any tunes you create! :3 If you need any help, don't hesitate to contact me, I'll also appreciate feedback on both features and bugs, speaking of which...

UPDATE! Version 0.2a
Please update to the new version, DOWNLOAD HERE
[*] Rewrote the parsing thread scheduling code and (hopefully) resolved all timing issues that way, also made code more clean
[+] New noise generation, so it now has much better, frequency based noise and plucks!
[+] Now supports statement [loopname] to terminate any loop with that name (you can try it with tune.mstr)
[+] New and updated examples
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Hi again, here's a small update, I designed a logo for this project. Official website and documentation are coming soon! >:3 Keep tuned!

Image
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Sleet
Bringing Foxy Back
Posts: 17291
Joined: Thu Apr 29, 2010 1:32 am
Location: Nephelokokkygia
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Sleet »

Maybe a treble clef would look better than an eighth note?
Image
Questions? Comments? Concerns? Friendly banter? Feel free to click the "PM" button below!
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Sleet: I dunno, I liked the idea that the bottom of the note is like a ball of yarn/string and I think that treble clef has too complicated shape for what I intended. I might change the logo later though, or keep this one, I dunno yet...
--------------------------------------------------------------------------------------

Anyway, I generated a list of frequencies and corresponding notes that are supported by MusicString, which is however implemented in a way that the frequency range is limitation only of the MusicString language, the actual audio synthesizer doesn't have any limitation like that. It's basically limited only by precision of the datatypes and memory, it can easily synthetize for example 1 Ghz sawtooth with 10 Ghz sampling rate if you tell it to

Here's the table, it should also help as an aid during writing MusicString tunes, I'll be releasing website and documentation soon (hopefully later today, now I'm going to sleep).

Image
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Sleet
Bringing Foxy Back
Posts: 17291
Joined: Thu Apr 29, 2010 1:32 am
Location: Nephelokokkygia
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Sleet »

I'm I the first person to try this other than you? I hope so! 'Cause I want this to be the first third-party file. *giggles*

^3n4nnm3lllmmnn5N4m3l4m5n-4JJ5I^3n4nm5l4mnn3l6J

EDIT: Can you equalize RMS amplitude? 'Cause the square is much louder than the sine and the triangle.
Image
Questions? Comments? Concerns? Friendly banter? Feel free to click the "PM" button below!
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Sleet: I'm sorry to disappoint you, a bunch of people already tried it before you. I presented this project at another (much bigger and computer science oriented) forums that I'm not sure if I can link here also on #experimentalmusic and #indiefurs on furnet.irc and #hackerfurs (don't worry, hacker in the old sense as somebody who explores possibilities of technology to make something better, any black-hat (malicious) activities are frowned upon) on anthronet.irc and in addition to that, I discussed the project privately with a few friends who study musical schools and compose music or play in a band, so you didn't really have much chance to be first, sooowiiii ^^' (oh, also I showed it to my grandma, because I was visiting her the day after I made first working version (this Monday night) and she made something with it too *giggles in a somewhat silly way* )

I tweets one of the tunes somebody made, because he uploaded it online: https://twitter.com/#!/Frooxius/status/ ... 3559395328

Though it's not anything bad at all, it's not a race or anything, it's the contribution you made that count, not the "position" on the line of people who did something and I appreciate it, cool tune, I hope they'll grow more elaborate over time :3

Yes, thanks for the suggestion regarding the volume, I'm already looking into it (don't worry, it bothers me as well), though there's a few things to be considered. First, soundfonts, when you load a soundfont, the basic waves are replaced by samples and the program has no idea what they are and if it should normalize them somehow, plus I don't really want to perform normalization every time something is compiled, so the soundfont itself should come with balanced volumes. However, it should be optional, what if someone doesn't want it to tamper with the volume at all? I don't want to get to a stage, where the tool thinks it know more than the composer and does something with the volume he didn't want it to do. Not to mention that maximum volume of some waves will produce lower amplitude than other waves... I dunno, I'm thinking about it.
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

UPDATE! Version 0.2.1a
Please update to the new version, DOWNLOAD HERE
[+] Linux binary is now available! The code compiles and works correctly both under Linux and Windows now, porting to Mac OS X is in progress
[*] Fixed a bug that caused incorrect loops to be terminated by the [loopname] statement
[*] Fixed a bug that caused parsing thread to hang by going into an unintended infinite loop under some circumstances
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Sleet
Bringing Foxy Back
Posts: 17291
Joined: Thu Apr 29, 2010 1:32 am
Location: Nephelokokkygia
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Sleet »

That's cool, I'm still sure I'm the only one to make that song with it. :P And you have a cool grandma!

Why not provide an option for dynamics? That would solve both problems.
Image
Questions? Comments? Concerns? Friendly banter? Feel free to click the "PM" button below!
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Sleet: Well you can be the first one to make elaborate song with it, because other people did so far simple tunes, so there's still a chance for you! :D

As for dynamics, let me quote part of my earlier post:

Code: Select all

.....
%n   = set the volume, n is an alphabet letter
.....
I was under impression that you knew about this and simply wanted for all waveforms to have same volume (instead of amplitude) at the same volume level. For not %n sets the amplitude, where a is lowest, Z is highest.
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Sleet
Bringing Foxy Back
Posts: 17291
Joined: Thu Apr 29, 2010 1:32 am
Location: Nephelokokkygia
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Sleet »

I think the same volume would be more conducive to keeping these strings short without loss of information.
Image
Questions? Comments? Concerns? Friendly banter? Feel free to click the "PM" button below!
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Yeah, that's why I'm looking into it. So people don't have to manually change the volume every time they want to use square wave instrument and then change it back. Please be patient though, I'm still releasing alpha versions and there are more issues or not yet implemented features and whole thing is still subject to some heavy changes.

Once I release final 1.0 version, I'll make sure that none of the following versions and additions change behavior of existing features to preserve backwards compatibility, but for now, the behavior of some features is still changing from version to version.
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Update! Download the v0.2.1 again
[+] Added Mac OS X binary, now whole trio Windows+Linux+Mac is supported!
[+] Created official website! Visit http://musicstring.solirax.org
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Version 0.2.2a
DOWNLOAD HERE
[+] Added normalization - activated automatically in case of clipping, adjusts maximum amplitude to 0.95 (test with hugechord.mstr)
[*] Fixed bug when parsing loops and going into unintended infinite loop in some circumstances
[*] Edited Saving code, has now about 50 % less memory footprint, though it's slower
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Hi again! I already began working on related project: Visual MusicString!
It's an MusicString IDE - GUI application (built with Qt) that will aid you when writing MusicString tunes, for now it mostly acts as simple editor (with tabbed support) and player with visualization, you can download the early version (very little extra functionality, might crash here and there) here:

Download Visual MusicString preview (Windows only)
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Tunes packed into a bunch of ASCII charact

Post by Frooxius »

Good news! Visual MusicString is now available also for Linux and MacOS X (actually, I don't think I even showed you the Windows version)! It needs Qt libraries to run though, so make sure to get them (they are included for the Windows version). If you're running one of these two, I'll be grateful if you try them out and tell me if they work fine.

Download Windows Binary
Download Linux Binary
Download Mac Binary

What is Visual MusicString?
It's an IDE (integrated development environment) for the MusicString language, it will aid you in composing your MusicString tunes, creating soundfonts, playing your creations and also exporting them, in nice and friendly user interface!

I'm now officially rolling development versions!

Screenies :3

Image
Image
Image
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
User avatar
Frooxius
Posts: 311
Joined: Tue Jul 28, 2009 6:00 pm
Contact:

Re: MusicString - Now with Visual MusicString IDE!

Post by Frooxius »

New version of Visual MusicString was released!

Download for Windows
Download for Mac OS X
Download for Linux (you need Qt 4.8.0 libraries, they are not part of the package)

Version 0.2
[+] Added versions for Linux and Mac OS X
[+] Added exporting to audio file
[+] Added syntax error reporting
[+] Added real-time playing sample-rate option
[+] Added About Visual MusicString page (includes version numbers and compile times)
[+] Added amplitude peak visualizer
[*] Numerous bug-fixes
Image
hug_overflow.asm wrote: LOOP: HUG #Peanut, #Grape
PUSH ACC
JMP LOOP
Post Reply