Login:
Menu:
Post: Author:
FamiTracker > General > Source and development > So, I'm working on a Linux version of FamiTracker Owner: NukeThePotato New post
Page 4 of 6 Sort: Goto Page: << Previous [1] [2] [3] [4] [5] [6] Next >>
Posted: 2012-07-22 05:09  (Last Edited: 2012-07-22 05:16) Reply | Quote
NukeThePotato

Avatar

Member for: 5087 days
Location: Calgary, AB, Canada
Status: Offline

#37032
I wasn't aware GitHub had a wiki. Now that I think about it, it was kind of obvious. I've browsed GitHub wikis before. Shows how much I pay attention.

EDIT: GitHub limits download bandwidth, so it's not a good site for hosting binaries. There's the possibility of also using Google Code or other alternatives as a supplement to GitHub. Nothing's written in stone.

Posted: 2012-07-23 02:33  (Last Edited: 2012-07-23 02:33) Reply | Quote
TechEmporium

Avatar

Member for: 5894 days
Status: Offline

#37051
You could use Dropbox's public folder to host binaries & a web page (using a free domain name like .co.cc to mask the true URL). That way, you won't really have to worry about FTP accounts, web admin scripts & other crap like that.

_______________________
Technology: the one thing that's hated & cursed at by all engineers, technologists, scientists & technicians!

(Lousy modern technology! )
Posted: 2012-08-02 12:26 Reply | Quote
NukeThePotato

Avatar

Member for: 5087 days
Location: Calgary, AB, Canada
Status: Offline

#37663
Preview 3 (and about time, too!)

Well, I'm about half a month late. Perhaps I should be going by Valve time, with the number 3 and all... (hopefully their Linux client comes out this year - I'm stoked!)

New to this preview is the actual ability to edit and save songs. The workflow is essentially the same as the Windows version, minus missing features like undo and select.
And of course, JACK support. Aside from a few xruns, it should run flawlessly. Hopefully it runs fine for the low latency JACK users (the lowest latency I can get is 85.3ms).
JACK users should run famitracker-play.sh or famitracker-qt.sh with the argument "-sound jack".

Screenshot

Downloads
Source (193.9kB)
Source with git tree (2.5MB)
64 bit binary (6.9MB)

Posted: 2012-08-02 13:26  (Last Edited: 2012-08-02 13:31) Reply | Quote
PJ

Avatar

Member for: 5133 days
Location: Poland
Status: Offline

#37664


Posted: 2012-08-02 14:31  (Last Edited: 2012-08-02 14:31) Reply | Quote
PJ

Avatar

Member for: 5133 days
Location: Poland
Status: Offline

#37666
Sorry for double post, but i upgraded boost to 1.50 and now it compiles, but i got linker error (yay! :P)
Quote:
Linking CXX executable famitracker-qt
/usr/bin/ld: CMakeFiles/famitracker-qt.dir/gui.cpp.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/usr/bin/ld: note: '_ZN5boost6system15system_categoryEv' is defined in DSO /usr/lib/libboost_system.so.1.50.0 so try adding it to the linker command line
/usr/lib/libboost_system.so.1.50.0: could not read symbols: Invalid operation
collect2: error: ld returned 1 exit status
make[2]: *** [src/qt-gui/famitracker-qt] B&#322;&#261;d 1
make[1]: *** [src/qt-gui/CMakeFiles/famitracker-qt.dir/all] B&#322;&#261;d 2
make: *** [all] B&#322;&#261;d 2


Posted: 2012-08-02 15:06  (Last Edited: 2012-08-02 15:10) Reply | Quote
NukeThePotato

Avatar

Member for: 5087 days
Location: Calgary, AB, Canada
Status: Offline

#37668
The compilation error seems to be a problem with C++11 defining TIME_UTC as 1. It's a boost issue that is fixed in 1.50.
https://bbs.archlinux.org/viewtopic.php?pid=1127280

The linker issue is a problem with boost 1.50 and threads wanting to link to boost_system.

Try running this in the famitracker/src directory and recompiling:
sed -i 's/REQUIRED thread/REQUIRED thread system/g' $(find . -name CMakeLists.txt)

I don't have boost 1.50 to test this on, but I think it should work.

Posted: 2012-08-02 16:16 Reply | Quote
CheeseGuy99

Avatar

Member for: 5161 days
Location: Amarillo, TX
Status: Offline

#37672
your doing very good so far!

_______________________
**** COMMODORE 64 BASIC V2 ****

Some other places I've tried to conquer:
Le Chipmusic
Le BattleOfTheBits
Posted: 2012-08-02 16:19  (Last Edited: 2012-08-02 16:22) Reply | Quote
PJ

Avatar

Member for: 5133 days
Location: Poland
Status: Offline

#37673
Your magic command did not really work, but i added "system" manually in several CMakeLists.txt and it works!

I experienced those "semi-rare crashes", and sometimes program just freezes and does not respond to anything(it happened to me twice). I also find that bug with disappearing panel really annoying :P

Instrument editor works almost like the original one(however it lacks this "drawing line with right mouse button" feature, and i used that one very often).

Anyway, great job! Im looking forward to next preview!
To celebrate the occasion, i attached FTM made entirely in this Famitracker version!


Attachments:
mm1ss.ftm (1 Kb)
Posted: 2012-08-03 00:08  (Last Edited: 2012-08-03 00:10) Reply | Quote
NukeThePotato

Avatar

Member for: 5087 days
Location: Calgary, AB, Canada
Status: Offline

#37697
PJ wrote:
Your magic command did not really work, but i added "system" manually in several CMakeLists.txt and it works!

Cool! My magic is a little rusty, but that's the idea.
I don't want to add boost_system for versions under 1.50 because it's a useless dependency. I might do a version check for the next update.

PJ wrote:
I experienced those "semi-rare crashes", and sometimes program just freezes and does not respond to anything(it happened to me twice).

Well, shit. I thought I squashed all those stupid threading issues.

To anyone getting freezing or crashing and wants to help:
Build a debug version. Either redo the compile instructions with -DCMAKE_BUILD_TYPE=Debug, or reconfigure your existing famitracker-bin with "cmake . -DCMAKE_BUILD_TYPE=Debug"

In the famitracker-bin directory, run "LD_LIBRARY_PATH=./src/sound/ gdb ./src/qt-gui/famitracker-qt". Type "run" to start the program.
Ctrl+C whenever the program freezes. Enter "thread apply all bt". Post the results.

(the LD_LIBRARY_PATH nonsense is to load the sound modules. otherwise the program won't start)

If you have an IDE that recognizes cmake (like Qt Creator), that works too. It just needs to be configured with LD_LIBRARY_PATH.

PJ wrote:
I also find that bug with disappearing panel really annoying :P

That should really be dealt with. It's pissing me off, too.
I did a little investigation; it's a Qt bug that makes the visibilityChanged(bool) signal inconsistent with isVisible().
For now, comment out line 40 of qt-gui/MainWindow.cpp.

PJ wrote:
Instrument editor works almost like the original one(however it lacks this "drawing line with right mouse button" feature, and i used that one very often).

The sequence editor is done, apart from three things: Arpeggio scrolling, DPCM import/previewing/editing, and line drawing. I'll get them working next time around.
EDIT: Four things, including the graphical keyboard.

PJ wrote:
Anyway, great job! Im looking forward to next preview!
To celebrate the occasion, i attached FTM made entirely in this Famitracker version!

Yay!

Posted: 2012-08-03 03:06 Reply | Quote
com63

Avatar

Member for: 5697 days
Location: North Van, BC, Canada.
Status: Offline

#37707
Great job so far, looking nice!

It would be great, though, to have all of the keystrokes. I hardly ever use the mouse in Famitracker. :/

_______________________
Everything moves real slow when it's 40 below.
Posted: 2012-08-03 04:09 Reply | Quote
joonmoon



Member for: 5025 days
Status: Offline

#37712
i will surly have to get and Ubuntu
again. awesome man do it

Posted: 2012-08-03 16:54  (Last Edited: 2012-08-03 16:55) Reply | Quote
PJ

Avatar

Member for: 5133 days
Location: Poland
Status: Offline

#37757
I dont know if it counts as freezing, but suddenly I was unable to make any sound with the program, and also "Play" did not really play(no sound and cursor was in place, too).

Quote:
^C
Program received signal SIGINT, Interrupt.
0xb7fdd424 in __kernel_vsyscall ()
(gdb) thread apply all bt

Thread 15 (Thread 0xb2862b40 (LWP 13587)):
#0 0xb7fdd424 in __kernel_vsyscall ()
#1 0xb6e6d3f2 in __lll_lock_wait () from /lib/libpthread.so.0
#2 0xb6e68e64 in _L_lock_517 () from /lib/libpthread.so.0
#3 0xb6e68ca3 in pthread_mutex_lock () from /lib/libpthread.so.0
#4 0xb6f711f4 in pthread_mutex_lock () from /lib/libc.so.6
#5 0x08077b2e in boost::mutex::lock (this=0x8136f08) at /usr/include/boost/thread/pthread/mutex.hpp:64
#6 0xb7f9e5ec in SoundGen::requestSound (this=0x81464c0, buf=0xb3d02536, sz=541, idx=0x810dcfc) at /home/piotrek/Pobieranie/famitracker/src/famitracker-core/sound.cpp:503
#7 0xb7f9e56a in SoundGen::soundCallback (buf=0xb3d02170, sz=1024, data=0x81464c0, idx=0x810dcfc) at /home/piotrek/Pobieranie/famitracker/src/famitracker-core/sound.cpp:487
#8 0xb71828c7 in core::SoundSink::performSoundCallback (this=0x810dce0, buf=0xb3d02170, sz=1024) at /home/piotrek/Pobieranie/famitracker/src/core/soundsink.cpp:170
#9 0xb7f71460 in AlsaSound::callback (data=0x810dce0) at /home/piotrek/Pobieranie/famitracker/src/sound/alsa.cpp:60
#10 0xb7189e4d in core::SoundThread::_job (t=0x810de24, f=0xb7f7135c <AlsaSound::callback(void*)>, data=0x810dce0) at /home/piotrek/Pobieranie/famitracker/src/core/soundthread.cpp:50
#11 0xb718a7ec in boost::_bi::list3<boost::_bi::value<core::SoundThread*>, boost::_bi::value<void (*)(void*)>, boost::_bi::value<void*> >::operator()<void (*)(core::SoundThread*, void (*)(void*), void*), boost::_bi::list0> (this=0xb4700ef8, f=@0xb4700ef4: 0xb7189e3c <core::SoundThread::_job(core::SoundThread*, void (*)(void*), void*)>, a=...) at /usr/include/boost/bind/bind.hpp:392
#12 0xb718a75c in boost::_bi::bind_t<void, void (*)(core::SoundThread*, void (*)(void*), void*), boost::_bi::list3<boost::_bi::value<core::SoundThread*>, boost::_bi::value<void (*)(void*)>, boost::_bi::value<void*> > >::operator() (this=0xb4700ef4) at /usr/include/boost/bind/bind_template.hpp:20
#13 0xb718a70e in boost::detail::thread_data<boost::_bi::bind_t<void, void (*)(core::SoundThread*, void (*)(void*), void*), boost::_bi::list3<boost::_bi::value<core::SoundThread*>, boost::_bi::value<void (*)(void*)>, boost::_bi::value<void*> > > >::run (this=0xb4700df0) at /usr/include/boost/thread/detail/thread.hpp:74
#14 0xb71a4ed0 in ?? () from /lib/libboost_thread.so.1.50.0
#15 0xb6e66d08 in start_thread () from /lib/libpthread.so.0
#16 0xb6f638fe in clone () from /lib/libc.so.6

Thread 3 (Thread 0xb46ffb40 (LWP 13348)):
#0 0xb7fdd424 in __kernel_vsyscall ()
#1 0xb6e6a7fb in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2 0xb6f70fec in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libc.so.6
#3 0x080863e0 in boost::condition_variable_any::wait<boost::unique_lock<boost::mutex> > (this=0x810deb8, m=...) at /usr/include/boost/thread/pthread/condition_variable.hpp:145
#4 0xb7182706 in core::SoundSink::_timeloop_read (this=0x810dce0, tgt=..., skip=@0xb46ff1ec: 0) at /home/piotrek/Pobieranie/famitracker/src/core/soundsink.cpp:113
#5 0xb71827a4 in core::SoundSink::_timeloop (this=0x810dce0) at /home/piotrek/Pobieranie/famitracker/src/core/soundsink.cpp:127
#6 0xb7182891 in core::SoundSink::_timeloop_bootstrap (s=0x810dce0) at /home/piotrek/Pobieranie/famitracker/src/core/soundsink.cpp:165
#7 0xb7189c9b in boost::_bi::list1<boost::_bi::value<core::SoundSink*> >::operator()<void (*)(core::SoundSink*), boost::_bi::list0> (this=0x810e010, f=
@0x810e00c: 0xb7182874 <core::SoundSink::_timeloop_bootstrap(core::SoundSink*)>, a=...) at /usr/include/boost/bind/bind.hpp:253
#8 0xb71898e4 in boost::_bi::bind_t<void, void (*)(core::SoundSink*), boost::_bi::list1<boost::_bi::value<core::SoundSink*> > >::operator() (this=0x810e00c) at /usr/include/boost/bind/bind_template.hpp:20
#9 0xb7189390 in boost::detail::thread_data<boost::_bi::bind_t<void, void (*)(core::SoundSink*), boost::_bi::list1<boost::_bi::value<core::SoundSink*> > > >::run (this=0x810df08)
at /usr/include/boost/thread/detail/thread.hpp:74
#10 0xb71a4ed0 in ?? () from /lib/libboost_thread.so.1.50.0
#11 0xb6e66d08 in start_thread () from /lib/libpthread.so.0
#12 0xb6f638fe in clone () from /lib/libc.so.6

Thread 2 (Thread 0xb51bab40 (LWP 13347)):
#0 0xb7fdd424 in __kernel_vsyscall ()
#1 0xb6e6a7fb in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2 0xb6f70fec in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libc.so.6
#3 0xb71a5dfc in boost::thread::join() () from /lib/libboost_thread.so.1.50.0
#4 0xb7189e1e in core::SoundThread::wait (this=0x810de24) at /home/piotrek/Pobieranie/famitracker/src/core/soundthread.cpp:43
#5 0xb7189d45 in core::SoundThread::run (this=0x810de24, f=0xb7f7135c <AlsaSound::callback(void*)>, data=0x810dce0) at /home/piotrek/Pobieranie/famitracker/src/core/soundthread.cpp:22
#6 0xb7f716d9 in AlsaSound::setPlaying (this=0x810dce0, playing=true) at /home/piotrek/Pobieranie/famitracker/src/sound/alsa.cpp:108
#7 0xb7f9eed1 in SoundGen::auditionNote (this=0x81464c0, note=5, octave=3, instrument=0, channel=0) at /home/piotrek/Pobieranie/famitracker/src/famitracker-core/sound.cpp:734
#8 0x080765b9 in gui::auditionnote_thread (a=...) at /home/piotrek/Pobieranie/famitracker/src/qt-gui/gui.cpp:504
#9 0x08076732 in gui::func_threadpool_playing () at /home/piotrek/Pobieranie/famitracker/src/qt-gui/gui.cpp:558
#10 0x0807c92d in boost::detail::thread_data<void (*)()>::run (this=0x810d1f0) at /usr/include/boost/thread/detail/thread.hpp:74
#11 0xb71a4ed0 in ?? () from /lib/libboost_thread.so.1.50.0
#12 0xb6e66d08 in start_thread () from /lib/libpthread.so.0
#13 0xb6f638fe in clone () from /lib/libc.so.6

Thread 1 (Thread 0xb6998740 (LWP 13344)):
#0 0xb7fdd424 in __kernel_vsyscall ()
---Type <return> to continue, or q <return> to quit---
#1 0xb6f598cb in poll () from /lib/libc.so.6
#2 0xb6dbc15b in g_poll () from /lib/libglib-2.0.so.0
#3 0xb6dada50 in ?? () from /lib/libglib-2.0.so.0
#4 0xb6dadbb1 in g_main_context_iteration () from /lib/libglib-2.0.so.0
#5 0xb7362a21 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/libQtCore.so.4
#6 0xb7681f2a in ?? () from /lib/libQtGui.so.4
#7 0xb732f6ec in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/libQtCore.so.4
#8 0xb732f9e1 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /lib/libQtCore.so.4
#9 0xb7334c7a in QCoreApplication::exec() () from /lib/libQtCore.so.4
#10 0xb75cede4 in QApplication::exec() () from /lib/libQtGui.so.4
#11 0x0807607f in gui::spin () at /home/piotrek/Pobieranie/famitracker/src/qt-gui/gui.cpp:352
#12 0x08074f4c in main (argc=1, argv=0xbffff974) at /home/piotrek/Pobieranie/famitracker/src/qt-gui/main.cpp:62
(gdb)


Posted: 2012-08-03 20:15 Reply | Quote
Jarhmander

Avatar

Member for: 7309 days
Status: Offline

#37762
Woah, I should learn to better use gdb.

Posted: 2012-08-05 14:11  (Last Edited: 2012-08-06 13:36) Reply | Quote
NukeThePotato

Avatar

Member for: 5087 days
Location: Calgary, AB, Canada
Status: Offline

#37860
Thanks to the stack trace PJ provided (thanks, PJ!), I identified the cause of the sound engine freezing. In Layman's terms (sort of), two threads (the ALSA engine thread and the gui thread pool) were waiting on the other to complete, and therefore never would. This is known as a deadlock, and is one of the many ugly faces of threads programming.
Also fixed was an unrelated locking bug in the DPCM editor.

The source and binaries have been updated.

EDIT (8/06/12): The fix I issued also introduced a regression that appears similar but not the same, and is now fixed. Because this comes from the current work tree, it also comes with more features in the again-updated version:
- Changing the effect column count
- Playing the current row (Ctrl+Return), and playing from the current row (Alt+Return). The latter is a feature I've always wanted to see in FamiTracker.
- Note notation in the noise channel is corrected


Posted: 2012-08-06 17:59 Reply | Quote
icesoldier

Avatar

Member for: 5518 days
Location: Amarillo, Texas, United States
Status: Offline

#37914
NukeThePotato wrote:
...and playing from the current row (Alt+Return). The latter is a feature I've always wanted to see in FamiTracker.

Oh, you mean F6? (Or F7; I can't remember offhand which is "loop this pattern" and which is "play from the current row".)

_______________________
Website (includes FTM's of my covers)
Page 4 of 6 Sort: Goto Page: << Previous [1] [2] [3] [4] [5] [6] Next >>