SimplePiano V4.3
SimplePiano with the SP_mickesjo WVGA Skin
As the name suggests it's a simple piano application. I took over "CrisRowlands SimplePiano" after Cris decided to give up developing it (Original thread). The main reason I took over is because I wanted to implement multitouch. I own HTC HD2 so my emphasize was on the WVGA format, but the application should also support VGA resolution. It should be pretty easy to create skins for other resolutions as well...
Features:
WVGA, VGA, QVGA, HVGA versions.
It has three octaves.
Record and Playback.
Dualtouch via the PinchToZoom events (not ideal but the best I could find...)
Customizable skins.
Customizable sounds (currently include Piano, Acoustic Guitar & Violin).
Currently in develop:
Continuous sliding of the keyboard view.
Change the skn files to support arbitrary number of keys.
CHANGELOG:
21.06.10(4.3)
Added two single finger chord modes (Major and Minor) - Requires special skin. I don't like this solution so I didn't follow it. If anyone is interested in this please let me know...
Added minimum note sustain length control (in milliseconds). If minimum sustain is not specified the full sample is played.
Added support for looping over the sample (by looping over the sample) Two samples can be specified, one is played once in the beginning, and the second is played over and over until the key is released. If the second sample is not specified the first one is used for the loop. This feature requires appropriate sound samples to be available.
Sounds are controlled via "Sound.lst" file. Different behavior of the notes (those mentioned above) can be controlled via this file.
Added OK/Cancel button to the settings dialog.
Vibration LED index can be now set via the "Device" tab in the settings dialog.
Polyphony can control to the "Device" tab in the settings dialog.
Fixed a problem where SimplePiano closed if an incompatible skin was chosen.
Fixed issue where bitmaps were not always clipped to bounds.
Fixed crash when sound file did not exist.
Changed applications icon (thanks mickesjo)
11.06.10(4.2) Added some exception handling during initialization and a vga skin for the Default skin. Fixed the link to point here.
10.06.10(4.0) Initial release including the new features (dualtouch, recording etc. as desribed in this post).
Screenshots:
Skins: Default WVGA skin, MewSkin WVGA skin, MewSkin VGA skin, SP_mickesjo WVGA skin, Saplorer UI WVGA skin
Settings Dialog
Download:
SimplePiano V4.3 (WVGA/VGA/HVGA/QVGA)
Alternative Download(Uploading) (including mickesjo's skin and Osprey00's alternative piano sounds - thanks to Osprey00)
Additional Skins:
(must be installed in the same location as the main application)
HVGA Rescale of the original skin (thanks to sam-2007 on post #130).
MewSkin (WVGA/VGA)
SP_mickesjo (WVGA/VGA/QVGA), thanks mickesjo. atlaswing created replacements key images, these can be found on post #47. HVGA version (thanks to sam-2007 on post #130).
Saplorer UI (WVGA), thanks xclarinetistx
Additional Sounds (thanks conantroutman):
(must be installed in the same location as the main application)
Violin
Acoustic Guitar
Piano Samples 8bit (lower quality) - these samples replace the default piano samples that comes with SimplePiano.
Alternative piano samples (thanks to Osprey00)
Rectangular QVGA (320x320) patch - extract the files from the zip files into the "Default" skin folder.
Click to expand...
Click to collapse
Previous version:
SimplePiano V4.2 (WVGA/VGA)
For QVGA the modified default skin has to be installed too.
Skins:
Default (WVGA/VGA/QVGA)(CrisRownlands' original skin)
MewSkin (WVGA/VGA)
SP_mickesjo (WVGA/VGA/QVGA), thanks mickesjo
Click to expand...
Click to collapse
Other Notes:
If I may quote Cris:
I hope you folks like it
Feedback is appreciated, improvements can only happen if I know what you folks want.
Click to expand...
Click to collapse
Some documentation
Some useful information about the *.skn files and the Sound.lst file.
The *.skn files
These files define the location of the different items on the screen. For each screen resolution the skin supports there should be one skn file. When a skin is chosen, SimplePiano search the skin directory for a compatible skn file and loads the skin according to its content.
here's an example for a skn file
Code:
Display=0,0,480,800
This line declare the target resolution of the skin. It is given in the following format: 0,0,Width,Height
Code:
Name=mewskin
The name of the skin, currently not used for anything.
Code:
Octave1=360,10,120,120
Octave1Image=OneNormal.png,OnePressed.png
Each key should include those two lines. The first line describe the location and size of the image, using the following format:
KeyName=Left,Top,Width,HeightThe second line points to the images to be used with this key. The following format is used:
KeyNameImage=NormalStateImage, PressedStateImageWhere KeyName is one of the following:
Octave1, Octave2, Octave3
Quit, Settings,
Record, Replay,
NormalKey1, ..., NormalKey8
SharpKey1, ..., SharpKey6All these keys must be specified.
NormalKey# stands for the normal note keys (C,D,E,F,G,A,B & C)
SharpKey# stands for the semitone keys (C#, Eb, F#, Ab, Bb & C#)
In addition the toolbar background has to be specified as well:
Code:
Toolbar=360,0,120,800
ToolbarImage=Background.png
unlike a regular key here only one image is supplied.
In addition the optional chord modifier keys can be specified (using the same logic):
Code:
ChordMajor=-30,0,60,60
ChordMajorImage=MajorNormal.bmp,MajorPressed.bmp
ChordMinor=-30,60,60,60
ChordMinorImage=MinorNormal.bmp,MinorPressed.bmp
The Sounds.lst file
This file defines the sounds to be used with the selected instrument. First of all it binds a note to a wav file. In addition different properties can be set for each note, as I'll explain below:
Code:
[1]
The file is divided into octave, currently there are 4 octaves (since SimplePiano also includes C4 &C#4). Each octave is titled with its number.
Code:
C=Data\C1.wav, Loop=0
Then, the sound files for this octave are given. The following format is used:
Note=FileName, Option1=value1, Option2=value2,...Note is one of the 12 notes in an octave. The following notation is used: C,Cs,D,Eb,E,F,Fs,G,Ab,A,Bb,B.
Then a relative path to the sound file is specified. Followed by a list of parameters and values pairs separated by comas. These parameters are optional. The following parameters can be declared:
Loop=#This specify how many times to loop over the sample (0 - plays the note once, -1 loop infinitely). If a non-zero value is given for a note, the note will be played as long as the key is pressed, once the key is released the playing will cease immediately. By default (if not specified) Loop=0.
MinimumLength=#This specify the minimum length (in milliseconds) a note is to be played. If this value is -1 the sample will be fully played. any other (non-negative number), the note will be played at leas this amount of time. For example, if a value of 500 is specified, every touch on the keyboard will generate a 500ms sound. If the key is held longer than 500ms the sound will stop when the key is released (or the sample reaches its end). The default behavior depends on the "Loop" setting: If Loop=0 MinimumLength=-1. Otherwise MinimumLength=0.
Good job man
Good luck with this
I don't suppose you could maybe send me a copy of the source code etc?
Maybe upload it & give me a link.
The main reason I wasn't able to implement these features is because I don't know how. It would be quite interesting to learn about how you did it
good job on significantly improving chris' already nice work
And dang you've beaten me to first reply
ephestione said:
good job on significantly improving chris' already nice work
And dang you've beaten me to first reply
Click to expand...
Click to collapse
cris_rowlands said:
Good job man
Good luck with this
I don't suppose you could maybe send me a copy of the source code etc?
Maybe upload it & give me a link.
The main reason I wasn't able to implement these features is because I don't know how. It would be quite interesting to learn about how you did it
Click to expand...
Click to collapse
Thanks guys...
Cris... no problems, just let me tidy the project a little...
I love your simple piono 4.1. Now 4.2 should be better than 4.1. Thanks for the updated version...
OP, thanks for the APP. I look forward to future updates once more of the bugs have been knocked out!
Update: added a download link to the mewskin, this is nicer looking especially for the VGA resolutions (but also on the WVGA). Kudos to the author (xxmewstarxx)...
Just install the mewskin.cab after installing SimplePiano (no need to reinstall).
Z.
for now, I vote for default to 0 interval between multitouch keypresses, instead of 300ms
Not much of a big deal as you can change it yourself, yet if you already restarted to register multitouch, and you change that option later, you need to restart again
I am also thinking about spanning through more than 3 octaves, and a different method of changing the octave that lets you do that faster and more easily, will report back when I have a better idea
Nice!
Unfortunately the space on the screen ins't that much but if there was a way to "somehow" squeeze in and create spaces for Chord Symbols/Buttons and when these are being pressed, a chord is being played (a flat chords, an arpeggio). Said chord-sounds could be default-sounds distributed with the application or pre-recorded by the user. Something similar to those Casio-chords (or whatever they are called) which do the fingering for you. Another option could be that it played just the root of the chord so one could create some variety and a little base-line while playing the melody on the normal keyboard.
The problem, I guess, is surely the space on the screen and the limit of two touches simultaneously.
Just some thoughts....
ephestione said:
I am also thinking about spanning through more than 3 octaves, and a different method of changing the octave that lets you do that faster and more easily, will report back when I have a better idea
Click to expand...
Click to collapse
tilleke said:
Nice!
Unfortunately the space on the screen ins't that much but if there was a way to "somehow" squeeze in and create spaces for Chord Symbols/Buttons and when these are being pressed, a chord is being played (a flat chords, an arpeggio). Said chord-sounds could be default-sounds distributed with the application or pre-recorded by the user. Something similar to those Casio-chords (or whatever they are called) which do the fingering for you. Another option could be that it played just the root of the chord so one could create some variety and a little base-line while playing the melody on the normal keyboard.
Click to expand...
Click to collapse
Well, as for the 3 octave limitation, that could be easily broken, just that I don't have the sounds... If someone's willing to generate them I'll include them in the application.
About changing octaves I thought of two possibilities, one would be to just add two buttons at the end of the keyboard that moves one octave up or down. Another possibility is to create a slider above (or below) the keyboard on which you can slide left or right to change octaves. Sliding can also be continuous so that the first note is necessarily C. Such slider can also have some buttons to toggle chords buttons as tilleke suggeted...
tilleke said:
The problem, I guess, is surely the space on the screen and the limit of two touches simultaneously.
Click to expand...
Click to collapse
I really hope HTC will release some proper API that supports real multitouch...
Z.
tilleke said:
Nice!
Unfortunately the space on the screen ins't that much but if there was a way to "somehow" squeeze in and create spaces for Chord Symbols/Buttons and when these are being pressed, a chord is being played (a flat chords, an arpeggio). Said chord-sounds could be default-sounds distributed with the application or pre-recorded by the user. Something similar to those Casio-chords (or whatever they are called) which do the fingering for you. Another option could be that it played just the root of the chord so one could create some variety and a little base-line while playing the melody on the normal keyboard.
The problem, I guess, is surely the space on the screen and the limit of two touches simultaneously.
Just some thoughts....
Click to expand...
Click to collapse
zevele said:
Well, as for the 3 octave limitation, that could be easily broken, just that I don't have the sounds... If someone's willing to generate them I'll include them in the application.
About changing octaves I thought of two possibilities, one would be to just add two buttons at the end of the keyboard that moves one octave up or down. Another possibility is to create a slider above (or below) the keyboard on which you can slide left or right to change octaves. Sliding can also be continuous so that the first note is necessarily C. Such slider can also have some buttons to toggle chords buttons as tilleke suggeted...
I really hope HTC will release some proper API that supports real multitouch...
Z.
Click to expand...
Click to collapse
I was thinking the exact same things regarding octave switching, more like automatic recognition, as in when you press a key near the border, the keyboard gets slided past the border of a X length to accomodate for the "direction" you're taking
And tilleke suggestion is very interesting.
Here's my take: just like you play two sounds together when you do multitouch, you don't need to really record a chord, you only need to play 3 sounds together.
Example, put a swith on top, with three positions:
1) Normal
2) Major chord
3) Minor chord
Then you press, say, C
Cases:
"normal" : the note C is played
"major" : the notes C E and G are played
"minor" : the notes C D# and G are played
THe switch would be a slider onr, because a toggle one (1-2-3-1-2 and so on) would take too long if you need 1 and you're currently on 2.
Glad to see somebody picking up on this where Chris left off.....
If you want more octaves I'd be happy to provide them.
Just out of interest, are the samples in this version the same ones from Chris' original version?
conantroutman said:
Glad to see somebody picking up on this where Chris left off.....
If you want more octaves I'd be happy to provide them.
Just out of interest, are the samples in this version the same ones from Chris' original version?
Click to expand...
Click to collapse
More samples can't hurt, but at the moment I'm trying to solve the chords feature...
The samples are the same ones from the previous version.
Thanks,
Z.
Totally awesome. Poor WM support. it seems like everyone writes off Windows platform as thou its limited, but if you had the support you show with this simple piano, the experience level and communication would be thought on a positive (note) about windows platform... GOOD JOB!!
Thanks zevele for the work!
xda member TWolf has a FlashPiano that he stopped developing. The program itself has a great sample of 4 instruments in mp3 form, but I don't know enough about music to rename them. Maybe somebody here can take a look and rename the files. Here's the link and source code from TWolf:
http://forum.xda-developers.com/showpost.php?p=2806409&postcount=126
Would be nice to include mellotron in this, like the Manetron for iPhone
http://www.youtube.com/watch?v=pcIRG1X0VMs
dio62000 said:
Would be nice to include mellotron in this, like the Manetron for iPhone
http://www.youtube.com/watch?v=pcIRG1X0VMs
Click to expand...
Click to collapse
Seeing these applications on the iphone just depresses me... they run so much better than on the windows mobile...
Specifically to your question... If you mean playing several instruments in parallel, it shouldn't be to complicated to implement...
Okay, here's my idea for a solution for the chords feature, I've added two buttons below the keyboard one toggles a major chord and the other a minor. As all other buttons these can be moved and changed through the skin files. Please try it and let me know what you think...
SimplePiano
http://rapidshare.com/files/398328285/SimplePianoV43beta.CAB
MewSkin
http://rapidshare.com/files/398329265/mewskincabV43beta.CAB
Thanks,
Z.
Can this be hosted somewhere else? Rapidshare gives some of us problems and the the download limitation sucks. I can't download the v43beta after just downloading the v42 version. My suggestion is drop.io or dropbox... You can even use the free Skydrive for this.
Thanks for the good work...
Hello, I come to ask only for a few tips or merely a bit of guidance on my development for Android.
I'm pretty skilled in ActionScript and new to Java. In this thread I ask how would I do some things in Java, providing the equivalent in AS.
I intend to draw shapes on screen and use them as UI - as a deeper layer within the Android XML UI.
In ActionScript, I can create Sprites or DisplayObjects, edit their "graphics" property like
// create a DisplayObject instance
_someDisplayObject = new DisplayObject();
// create a white square inside it
_someDisplayObject.graphics.beginFill(0xFFFFFF);
_someDisplayObject.graphics.drawRect(0,0,100,100);
_someDisplayObject.graphics.endFill();
// place it dinamically in a position relative to the Stage (canvas)
_someDisplayObject.x. = Stage.stageWidth / 2;
------------------
Also, are there Tweening libraries like TweenLite or Tweener ? Those which allows to create animation with one like of code like:
// move display object to position X = 300 with half transparency, in half second
Tweener.addTween(_someDisplayObject, { x:300, alpha:0.5, time:0.5, transition"EaseOutSine" } );
------------------
Can anyone give a clue, on what am I looking at, to try the same in Java for Android ?
Just an advice letting me know where to start would be greatly appreciated. :fingers-crossed:
Thank you !
You can create shapes in Android using XML or in your Java code or with both. You can also create Animations including Tween animations. (I haven't used animations before though so I can't help any further).
The first place to go is the Android Developers website (d.android.com/develop) and then in the API Guides section under User Interface option and App Resources option in the left hand menu. There are samples included in the Android SDK under API Demos which you can use to get your started.
I can't post links because I haven't made 10 posts yet, sorry.
As you already know, the Android display model is more complex than the one used in ActionScript.
There is no direct equivalent for the graphics property from AS3 in Android.
To draw low-level graphics you can use the canvas parameter provided in the onDraw method (you override it in your own class inherited from android.view.View).
As for the Tweening, like Kavrocks said, try to learn how to use the Animation class and it's extensions, because they are built inside the android framework, therefore optimized (that's just my opinion). All the tweening engines in AS3 are based on dynamic calling of properties (by name). Java uses the reflection api for calling dynamic properties, but it is much slower than a direct call (from a specialized Animation class, in this case).
I am also trying to figure out different modes of applying animations and effects in actionscript. There's a tutorial on Lynda where you can see som tips from migrating from AS to Java, and HTML5, both of this can help you understand better how to apply them in your application.