MIDI playback?

Does anyone have MIDI playback working? One idea is that Haiku is missing midi sound fonts, which must be installed:
http://dev.haiku-os.org/ticket/1357

Has anyone tried installing sound fonts and then playing a midi file in MidiPlayer?

Thanks,
Andrew

Yes I have it working. Took me 6 minutes to do it.

http://www.haiku-os.org/community/forum/playing_midi_files#comment-12433

move the file to /boot/system/data/synth
create symlink to big_synth.sy
download midi and drop it on MidiPlayer

Some midi files here to get you started:
http://rock.mididb.com/

It’s working! A big kiss to you, Tones!

On a separate issue, do you have a makefile with an example of linking a GCC2 application?

Thanks!

Andrew, I only take kisses from pretty girls! :slight_smile:
Pat on the back for guys.

g++ linking example (from Arora):
g++ -Wl,-O1 -Wl,-rpath,/boot/common/lib -o …/arora .obj/aboutdialog.o .obj/acceptlanguagedialog.o .obj/autosaver.o .obj/autofilldialog.o .obj/autofillmanager.o .obj/browserapplication.o .obj/browsermainwindow.o .obj/clearprivatedata.o .obj/clearbutton.o .obj/moc_webpageproxy.o .obj/qrc_clicktoflash.o .obj/qrc_data.o .obj/qrc_graphics.o .obj/qrc_searchengines.o .obj/qrc_htmls.o -L/boot/common/lib -lQtWebKit -L/boot/common/lib -lphonon -lQtScript -lQtGui -lbe -lfreetype -ltracker -lQtNetwork -lnetwork -lQtCore -lroot -lz

I removed lots of the objects (.o files) because there were too many. You use -L for library location. -l for library to link against (ie: -lnetwork, link against libnetwork, -lroot - libroot). -o for output file name, ie: -o …/arora. And then all the object files you want to link together.

General syntax for linking (gcc & g++):
g++ -o Output-File object1 object2 object3 … -llibrary1 -llibrary2 -llibrary3 …

Edit: two little changes to general syntax

I have one! open terminal and type g++ *.cpp -o appname -lGL -logg -lvorbis

good example Michael because yours does compiling + linking. Mine is linking (object files) only. :slight_smile:

Andrew probably wanted compiling+linking because with my example, he would have to compile the object files first.

A Makefile usually compiles the objects first and then combines all the object files + links against libraries to make the binary program.

Extra info for midi.

TimGM6mb is only 1 sound font (well known). There are hundreds. Another very popular one is fluidR3 but very large, 150 MB download.
http://www.sf2midi.com/soundfonts/file-detail/fluidr3-gm-sf2-1401.html

Websites with additional sound fonts to test out.
http://clones.soonlabel.com/public/sfbank/
http://hammersound.com/cgi-bin/soundlink.pl
http://soundfonts.homemusician.net/
http://www.sf2midi.com/soundfonts/

The ones with GM (General Midi) in the name are worth testing out. When I first bought SB Live card it came with 2, 4 & 8 MB sound fonts. I used the 4 MB back then and was happy with it.

Thanks for examples, guys. I actually do have experience compiling and using makefiles. My problem is specifically with linking on Haiku. For instance if I link with this line using gcc2:
g++ *.cpp -o MyApp -L/boot/system/lib -l"stdc++.r4.so" it returns:
ld: cannot find -l/boot/system/lib/stdc++.r4.so

If I link with:
g++ */cpp -o MyApp -l/boot/system/lib/libstdc++.r4.so it returns the same error. :-/

I’m missing something simple, but what?

Why you need to link with libstdc++ ???

it’s linked by default as libroot and libbe (implicit)…

only set ‘setgcc gcc2’ command before

sorry for confusing you Andrew. :slight_smile:
You do not use the quotes - I put those in to show what you would replace.

gcc2 & gcc4 name libstdc++ a little differently.

gcc2: libstdc++.r4.so (-lstdc++.r4)
gcc4: libstdc++.so (-lstdc++)

you would check what gcc version you are using to know which to use.

I assume you use gcc4.
g++ *.cpp -o MyApp -lstdc++

if you have hybrid Haiku you can switch between gcc2&4 using setgcc command.

PS You should not need -L/boot/system/lib because Haiku should look in there. It may or may not look in /boot/common/lib so you may have to add -L/boot/common/lib (if the library is in that folder and not found).