Tux Guitar

Help

  Forums : Help
Subject TuxGuitar Alsa on mac OSX



Author Message
Jeremy
Post: Jun 19th 2007 at 8:04 AM

is it possible to get it because i want to change my sound bank


Back to Top
 
Julian
Post: Jun 19th 2007 at 11:31 AM

I don't think so..

tu run "tuxguitar-alsa" you need first ALSA (Advanced Linux Sound Architecture) libraries installed in your system.

but Alsa is only available for linux.. ( isn't it ? )


Back to Top
 
Auria
Post: Jun 19th 2007 at 10:24 PM

You can't.

It should however be possible to build a CoreAudio plugin and use the native instruments - there just needs someone to make it.

I think I have enough CoreAudio knowledg to make it, but not enough tuxguitar knowledge. perhaps if Julian points me in the right direction? (Basically it's easy to fill noteOn/noteOff/programChange/controlChange/picthBend stuff, there just isn't any notion of device and ports on mac)


Back to Top
 
Auria
Post: Jun 19th 2007 at 10:27 PM

Well my wording was bad - there are devices but for plain playback you don't need to care about them.


Back to Top
 
Jeremy
Post: Jun 20th 2007 at 6:10 AM

sp there is no way to improve the tux guitar sound bank? and in the next version can't you just make a soundbank people use on ALSA standard?


Back to Top
 
Julian
Post: Jun 20th 2007 at 10:41 AM

Hi,

To Auria:
>It should however be possible to build a CoreAudio plugin
>and use the native instrument
yes it's possible..
everyone can take the TuxGuitar-alsa project, and override
only the native methods ( *.c )
but i can't do that because i don't have a mac

To Jeremy:
>sp there is no way to improve the tux guitar sound bank?
TuxGuitar is not a software synthesizer.. it only connect to it.
as default, because it's written in java, it uses the "Java Sound Api" .. and Java Sound Api, is who needs the "soundbank" file.

however CVS version ot tuxguitar, has better options to select a midi device.. it works better under windows, because java sound api can see native ports under windows (i didn't know that )..
i tell you this, because maybe it also can see native Mac ports (i can't know)..

>and in the next version can't you just make a soundbank
>people use on ALSA standard?
i can't understand this question. (my english not good)
Alsa is the Linux Sound library..
tuxguitar-alsa plugin, is only to connect tuxguitar with alsa.. and select a native Midi Port.
that Midi Port. (sytnhesizer) is who play the sounds..
so a tuxguitar "soundbank" is not needed.


Back to Top
 
Auria
Post: Jun 20th 2007 at 8:18 PM

[quote]
To Auria:
>It should however be possible to build a CoreAudio plugin
>and use the native instrument
yes it's possible..
everyone can take the TuxGuitar-alsa project, and override
only the native methods ( *.c )
but i can't do that because i don't have a mac
[/quote]

yes i know

My question is, I suppose the Alsa plugin deals with ports somehow, and there is no need for such concept on mac, so i'm not sure how Alsa plugin lets the user choose a port and what I should change to change this behaviour.

[quote]sp there is no way to improve the tux guitar sound bank?[/quote]

Yes there is i'm discussing it right now with Julian... But forget Alsa, Alsa is Linux. You need to either a) get a better Java soundbank b) use a CoreAudio plugin to use Quicktime instruments (the plugin does not exist but I might be able to make it)


Back to Top
 
Julian
Post: Jun 20th 2007 at 9:04 PM

>My question is, I suppose the Alsa plugin deals with ports
>somehow, and there is no need for such concept on mac
well, i don't have any idea about mac..
i can tell you only how to make an output plugin for tuxguitar (under CVS version):
it are bassically 3 java interfaces:
---------------------------------------------------
MidiPortReader: it has only 2 methods:
*listPorts: returns a list of MidiPorts
*closeAll: close all ports.. (called at the end of the app)
maybe this method should be renamed to "free"

MidiPort: it contents the port info..
*getName: a single name to show at "selection" combo
*getKey: a unique key for that port. (needed to open it later)
*open,close: don't need explication.
*out: it returns the MidiOut for that port. (previously opened)

MidiOut: here are the midi events:
sendSystemReset();
sendAllNotesOff();
sendNoteOn(int channel, int key, int velocity);
sendNoteOff(int channel, int key, int velocity);
sendProgramChange(int channel, int value);
sendControlChange(int channel, int controller, int value);
sendPitchBend(int channel, int value)
---------------------------------------------------

so.. thats all.. tuxguitar do the other.


Back to Top
 
Julian
Post: Jun 20th 2007 at 9:13 PM

i forget say:
to get plugin work.. this file should be at classpath:
META-INF/services/org.herac.tuxguitar.player.base.MidiPortReader

and the content of that file should be:
package.bla.bla.MidiPortReaderImplementation

then tuxguitar will take dynamically it at start.

remember.. all of this works only on CVS version.


Back to Top
 
Jeremy
Post: Jun 21st 2007 at 7:02 AM

I have found the solution is to download the deluxe soundbank from java but are there 3rd party soundbanks of a higher standard that i could look into?


Back to Top
 
Auria
Post: Jun 21st 2007 at 9:38 PM

Ok I will try when I have time, i didn't think i needed CVS version for this


Back to Top
 
Auria
Post: Jun 21st 2007 at 10:38 PM

Okay

Can you explain me how to build the CVS sources? I have never used ants and the documentation seems to not apply to CVS sources i don't see the build propery files there are in the docs


Back to Top
 
Julian
Post: Jun 22nd 2007 at 10:31 AM

>i didn't think i needed CVS version for this
well, there are a lot of changes in CVS version..
1 of them is the combo to select a midi device at
"config -> sound"

to build it:
first type:
ant -Ddist.version=version

it'll made an TuxGuitar-[version]-src.tar.gz
it bassically makes a source package exluding non necessary files from CVS version.. and put the content of xml/* at first directory level.


then you need extract that source package,
modify "build.properties":
uncomment all at your OS settings. and comment the others.
also, see for swt.jar.. as default this is the path:
lib.swt.jar=lib/swt.jar
but that jar is not included at CVS version.. so you should download it: http://www.eclipse.org/swt


and type "ant" again.

if you select the mac settings, it will create an "tuxguitar-[version]-mac.app"
you can make a .dmg file following this:
http://www.eclipse.org/swt/macosx/


Back to Top
 
Auria
Post: Jun 22nd 2007 at 9:25 PM

So far so good =)

It now says
package org.herac.tuxguitar.player.base does not exist

I understand the plugin doesn't see the rest of TG while building - how do I do that in ant? I can't find build instructions for plugins...


Back to Top
 
Julian
Post: Jun 22nd 2007 at 9:47 PM

"org.herac.tuxguitar.player.base"
is at TuxGuitar project..

Are you building a plugin ??
if you are doing it..
you should build it also with "ant"..
but you need edit build.properties.. and set:

path.tuxguitar=here_the_path_of_tuxguitar.jar

OR

path.tuxguitar=here_the_path_of_tuxguitar src/
path.swt==here_the_path_of_swt.jar

Note, if you set the path of tuxguitar sources, swt.jar is needed.

remember, plugins and serverces. must be from CVS version.
also, i think you are tring to build tuxguitar-alsa ???
it'll fail on the try.. because it try to build native ( C ) sources.

however.. onces builded, you should move the tuxguitar-[plugin].jar to:
TuxGuitar/share/plugins
Or
TuxGuitar/share/services
(note tuxguitar-alsa, is not a plugin anymore.. it is now at services folder)


tell me.. did you try this version, already can load native devices ?? at "config -> sound" (it can't under linux.. but yes under windows)


Back to Top
 
Auria
Post: Jun 22nd 2007 at 10:45 PM

I don't get your answer - you say "Are you building a plugin ??" ... well isn't that what i'm trying to do, building a mac playback plugin?? do you mean ther eis a better way?


[quote]it'll fail on the try.. because it try to build native ( C ) sources.[/quote]

No, I modified the Alsa sources to remove Alsa code. Now i'm just trying to compile.

Now I have a "tuxguitar-coreaudio.jar" file, thanks! I put it in services folder, but how can I get tuxguitar to use it now? you said "
to get plugin work.. this file should be at classpath:
META-INF/services/org.herac.tuxguitar.player.base.MidiPortReader" but i can't find that file - do i need to create it?

[quote]
tell me.. did you try this version, already can load native devices ?? at "config -> sound" (it can't under linux.. but yes under windows)[/quote]

it only shows me "Java Sound Synthyesizer"


Back to Top
 
Auria
Post: Jun 22nd 2007 at 10:45 PM

Just to clarify, i am using a modification of the Alsa playback code.


Back to Top
 
Julian
Post: Jun 23rd 2007 at 11:20 AM

Ok,

you have your own plugin "tuxguitar-coreaudio.jar"..

>META-INF/services/org.herac.tuxguitar.player.base.MidiPortReader
>but i can't find that file - do i need to create it?
yes you need..

i'll try explain you (with my bad english)

TuxGuitar, has a class to load that service|plugins:
TGServiceReader.lookupProviders(Class c);

the lookupproviders method, try found all files called:
META-INF/services/[Class.getName()]
and make an Iterator with the content of the files.

on this case, the method is called as:
lookupProviders(MidiPortReader.class)

and the content of:
META-INF/services/org.herac.tuxguitar.player.base.MidiPortReader
should be the "package + classname" of the class what implements "MidiPortReader".

Note, all services included it on the jar file.. (see at build.xml of any plugin how they do that)
but you can put it at share/META-INF folder to test.


Back to Top
 
Auria
Post: Jun 23rd 2007 at 12:48 PM

Ok i think i understand.

Now when i open TuxGuitar, how can i activate the plugin?

right now the META-INF/services/org.herac.tuxguitar.player.base.MidiPortReader file contains "org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiPortReaderCA"

and is inside the .jar file

is that ok?


Back to Top
 
Auria
Post: Jun 23rd 2007 at 12:53 PM

Ok i get

java.lang.UnsatisfiedLinkError: no tuxguitar-coreaudio-jni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
at java.lang.Runtime.loadLibrary0(Runtime.java:822)
at java.lang.System.loadLibrary(System.java:992)
at org.herac.tuxguitar.player.impl.midiport.coreaudio.JNILibraryLoader.loadLibrary(Unknown Source)
at org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiReceiverJNI.(Unknown Source)
at org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiPortReaderAlsa.(Unknown Source)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at java.lang.Class.newInstance0(Class.java:350)
at java.lang.Class.newInstance(Class.java:303)
at org.herac.tuxguitar.classpath.TGServiceReader$IteratorImpl.next(Unknown Source)
at org.herac.tuxguitar.player.impl.MidiPlayerImpl.listPorts(Unknown Source)
at org.herac.tuxguitar.player.impl.MidiPlayerImpl.openPort(Unknown Source)
at org.herac.tuxguitar.gui.TuxGuitar.initPlayer(Unknown Source)
at org.herac.tuxguitar.gui.TuxGuitar.initPlayer(Unknown Source)
at org.herac.tuxguitar.gui.TuxGuitar.displayGUI(Unknown Source)
at org.herac.tuxguitar.gui.TuxGuitar.main(Unknown Source)

this means my lib is not correct, i'm not sure why... Perhaps it was not a good idea to try that without JNI and ant knowledge =/


Back to Top
 
Julian
Post: Jun 23rd 2007 at 12:57 PM

Thats seems to be right..

now, copy that jar to "tuxguitar/share/services"

and run tuxguitar..
go to "Settings -> Configure" and at "sound" tag, you should see the generated midi ports at the "Midi Port" combo.

one thing... at "share/services" remove "tuxguitar-alsa.jar" if it exists because it can crash...
the other "tuxguitar-jsa.jar" (is the Java Sound Api implementation).. so you can also remove it.. if you don't want see "Java Sound Synthyesizer" port.


Back to Top
 
Julian
Post: Jun 23rd 2007 at 1:15 PM

mmm we posted at same time...
about: "java.lang.UnsatisfiedLinkError"

first.. if you get that error.. is because tuxguitar could see the service.. so thats good.

well that error, is because the plugin is trying to load a Native library "tuxguitar-coreaudio-jni" and not found it.

i'm not sure what was the maded changes.. so i aks you some things:

**Are you using native sources ( *.c or *.cpp)???
if you aren't, you should remove:
---------------------------------------------------
static{
JNILibraryLoader.loadLibrary(JNI_LIBRARY_NAME);
}
---------------------------------------------------
from MidiReceiverJNI ?? (thats the class on tuxgutar-alsa)

if the answer is yes..
did you build the native library ???

the library should be at LibraryPath, to java found it..
-Djava.library.path= (look at tuxguitar launcher script)

Or, you can do equal as tuxguitar-alsa.. it includes the native library on the jar..
and "JNILibraryLoader" load that library.


Back to Top
 
Auria
Post: Jun 23rd 2007 at 4:15 PM

My code is just a modification of the Alsa code, so it works the same way.

it produces a .jnilib that gets included inside the jar file. the biggest modification is that i changed it to C++ however the header defines it as extern "C" so it still has C linking and there shouldn't be problems

I think the error could be that the "-shared" g++ switch does not exist on OS X so I built a dynamic lib instead of a shared lib.


Back to Top
 
hernux
Post: Jun 23rd 2007 at 7:01 PM

It should work as dynamic lib too.

I think you should forget about JNILibraryLoader for the moment, as this class was created having in mind the linux library.. It may not work on mac.

Instead use java framework to load the dynamic library:
----
* System.load(String filename)
Loads a code file with the specified filename from the local file system as a dynamic library.

* System.loadLibrary(String libname)
Loads the system library specified by the libname argument.
----

The first one, takes as argument the filename of the library, for instance, System.load("/home/xx/mylibrary.so") would load the library with that name.

The second one, uses the O.S. convention to load the library.. for instance, on linux System.loadLibrary("test") would load the library named /lib/libtest.so while on windows would load c:windowstest.dll ...

System.loadLibrary() looks for libraries on the java.library.path, you can set this using -Djava.library.path=xxxx on the command line (tuxguitar's launcher script sets this option).

On some systems, the folder where the library resides needs to be on LD_LIBRARY_PATH.

If none of these work properly, you should take a look at some documentation on how to do jni on mac.

cheers
Hernux


Back to Top
 
Auria
Post: Jun 23rd 2007 at 9:58 PM

Hey thanks!!!

It works! I got TuxGuitar playing with native Quicktime synthesizer =D

more work is required before it is distributable but it's a great step forward


Back to Top
 
Auria
Post: Jun 23rd 2007 at 10:25 PM

A few questions i don't get...

1) when you play a song then press stop, note off events are not thrown so the note continues to play forever. how does TG tell the player to stop all sound?

2) what is jint note? when i play using this as midi key, the played pitch is wrong... any idea why this happens?


Back to Top
 
Julian
Post: Jun 24th 2007 at 10:14 AM

Hi,

>how does TG tell the player to stop all sound?
On this order, that methods of MidiOut are called by the sequencer:
sendAllNotesOff();
sendSystemReset();

>what is jint note? when i play using this as midi key, the played pitch is wrong.
I'm not sure if i understand the question...
but however..
note there are differences of pitch value, with tuxguitar-alsa and tuxguitar-jsa:

at the method "sendPitchBend(int channel,int value)"
tuxguitar-alsa uses pitch as: ((value * 127) - 8191)
but on java sound API "value" not need be changed.

so, maybe you should see if it need be changed or not for coreaudio.


Back to Top
 
Anonymous
Post: Jun 24th 2007 at 12:56 PM

@Jeremy : Sorry for hijacking your thread! there is no other java soundbank that i know of. I know there is a commercial tool to create custom ones but i don't know much more.

@Julain: ok thanks first problem fixed.

my other problem is not with pitch bend.

I will give you an example. I will use fret 0 on highest string, which is a E note and midi key 64. When I add such note, my plugin receives a request for 'note on 64' message.

Then i choose "Play". I still receive a note on 64 event, but the pitch is not E, it is much lower than that.

It seems to be a pitch bend or a controller problem, I will inverstigate.


Back to Top
 
Auria
Post: Jun 24th 2007 at 3:15 PM

Ok i found the problem : it is controllers 100 and 101 (Registered Parameter Number LSB and MSB)

I don't know what these controllers are used for, i however was able to solve pitch problems by blocking them. I'm not sure sure why the change the pitch of played notes.

Now all that remains to fix is pitch bend and we can have native playback on mac.


Back to Top
 
Auria
Post: Jun 24th 2007 at 3:57 PM

Ok i think i got it all working! It would be ready for a first alpha/beta(?) version to be made available, and it could be shipped along with next mac TuxGuitar version - would you like to host it along alsa plugin, or?


Back to Top
 
Julian
Post: Jun 25th 2007 at 11:06 AM

Hi,

>Ok i found the problem : it is controllers 100 and 101 .....
That controllers are needed to set pitch bends greater than 2 semitones.. (for effects: bend, slide...).
i don't know exactly what they do...
but if they aren't setted, the pitch bend don't work fine.. (a slide from 2 TO 10, make sound as "2 TO 4")...
i taked that controllers, watching "midi" files what could play that pitch bends..
i think.. you can test export a midi file with tuxguitar, and listen it on a midiplayer.. and if it works, that shouldn't be the problem.. maybe something like "value * anyNumber" can be a solution.

>would you like to host it along alsa plugin, or?
well that's your decition.. "it's your project".
ofcourse you are welcome to upload it to the CVS and it will be included on Mac version. and ofcourse you at authors section.

Or you can register it on a new project. (on this case, it will be included if license is "compat" with tuxguitar license)

let me know, by "Contact" mail..


Back to Top
 
Jeremy
Post: Jun 26th 2007 at 7:24 AM

so is this available for download yet? if so where?


Back to Top
 
Auria
Post: Jun 26th 2007 at 8:34 PM

well right now it is in CVS version (CVS version is the development one... the one with the upcoming stuff of next version)

easiest is to wait for next version to come out. or you can build it yourself. or i also have it on my computer i could send it to you (though be aware CVS versions are not necessarly stable)


Back to Top
 
kanguru007
Post: May 23rd 2008 at 3:14 PM

How hard would it be to make it work with MIDI output ports so that TuxGuitar could play on external Midi synths? (or soft-synths by using MidiPatchBay)

I'm doing a soft synth for the Mac and I would like to be able to use it with TuxGuitar.

Regards


Back to Top
 
Julian
Post: May 23rd 2008 at 3:28 PM

Hi, i never had a mac.. so i'm "blind" to answer this questions.
It's supposed, you have the "CoreAudio" plugin maded by Auria.
I'm not sure how to connect to an "external synths" on mac, and if CoreAudio can do this.
but however, since 1.0-rc1 "all" tuxguitar ports/sequencers are "plugins". ( if you drop the folder share/plugins of tuxguitar, it'll not sound anymore ).

So if you already have your MIDI Synth (written on Java or C/C++ ) it's very easy to make a tuxguitar plugin
You'll need just a wrapper class beetween tuxguitar and your synth..
with methods like:
sendNoteOn( ... ), sendNoteOff( ... ), sendControlChange( ... ) bla bla bla.....


Back to Top
 
weining
Post: Mar 8th 2012 at 1:28 PM

Why do Goyard tote bags we go goyard bags to these goyard tote for sale lengths goyard tote replica for you? Simple. goyard handbags Over goyards the goyard tote replica past 15 goyard tote bags buy years we’goyard tote bags for sale ve seen goyard tote bags st louis changes goyard tote bags barneys in this goyard tote bags price industry goyard st louis tote replica that would goyard bags replica knock goyard bag online your goyard tote bags white socks goyard pairs off – both sac goyard good goyard barneys and bad. In goyard price our goyard online business, we goyard need to goyard tote be on goyard handbags online top of goyard bags online every goyard.com change Christian Louboutin replica out Fake christian Louboutin there to Faux Chrisitan Louboutin ensure Christian Louboutin replica boots our Replica christian Louboutin customers red bottom shoes are well Christian louboutin imitation taken knock off christian louboutin bootscare of christian louboutin replica handbags and christian louboutin boots 2011completely louboutin shoes satisfied. christian louboutin sale shoes That’s christian louboutin for less our shoes christian louboutin promise christian louboutin on sale to you – buy christian louboutin complete christian louboutin shoes cheap satisfaction christian louboutin discount shoes or your christian louboutin daffodile money back christian louboutin replica daffodile when you Designer handbagsbuy replica Replica Handbags watches.And Louis Vuitton replica for over Replica Bags 20 years Replica bags uk we’ve pioneered designer handbags purses unbelievable designer handbags for cheap advances in designer wholesale handbags an industry designer handbags discount that’s been designer handbags for sale tainted by designer handbag sale the phrase top designer handbags fake watches.Why best designer handbags do we say designer handbag online tainted? Because designer leather handbag the term fake designer bags for less almost always discount designer handbags outlet mean “junk.” And designer handbags discounted we never accept junk here.Rolex is a world famous Watch company, but not every one has got the money to buy Rolex watch, so for them there is the option of Rolex Watch Replicas. For buying Rolex Watch Replicas it is necessary to go to a good and reputed shop as they can offer such Rolex Watch Replicas that are quality wise sound.


Back to Top
 
Anonymous
Post: Apr 5th 2012 at 5:56 AM

Coach Shoes are very pupular in

USA,but it is a little expensive,if you would like to buy the cheap coach shoes,you had better go to the
Coach Purses Outlet who sell the coach items with low

price ,you can also choose other coach items in the
Coach Outlet.


Back to Top
 
Discount Louboutins
Post: Apr 6th 2012 at 7:58 AM

Long before spiked heels with exotic names red bottom shoes became objects of desire, chicks have been cheap christian louboutin shoe-crazy. But recently, we got proof of exactly how crazy: While louboutins cheap sales of most things have plummeted thanks to the recession, Christian Louboutin Pumps have gone up compared to the same period last year. Trust science to have the Christian Louboutin Sandals: Turns out, we've always been wired for shoe lust, even when the going gets through http://www.cheaplouboutinredbottom.com/.


Back to Top