[Mixxx-devel] The MinGW build, and other pending changes
I found my MinGW branch at https://github.com/mixxxcommunity/mixxx, in a branch called ulatekh-mingw. I branched that into my own repo and brought it up to date. The merge didn't go very smoothly, but I managed to fix all the problems by hand. (Good thing I kept the last bzr version of the trunk and my branches!) You can find the pull request at https://github.com/mixxxcommunity/mixxx/pull/1 . I would appreciate it if the Powers That Be could review it. The longer it goes ignored, the more work it is for me. That branch involves some changes that, while necessary to get Mixxx to build under MinGW, aren't directly related. The details are at https://bugs.launchpad.net/mixxx/+bug/1186462 . I would appreciate it if those changes could get cherry-picked. Finally, https://bugs.launchpad.net/mixxx/+bug/1184432 contains another neglected fix, this one for the 64-bit Linux version. I would appreciate it if this fix could get checked into the 1.11 release branch. Thanks for any attention to these issues. Steven Boswell -- This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] The MinGW build, and other pending changes
Done...see https://github.com/mixxxdj/mixxx/pull/25 Thanks in advance for taking a look at it. From: Max Linke max_li...@gmx.de To: Steven Boswell II ulat...@yahoo.com Cc: mixxx-devel mixxx-devel@lists.sourceforge.net Sent: Sunday, June 23, 2013 2:34 PM Subject: Re: [Mixxx-devel] The MinGW build, and other pending changes Hi Can you create a new pull request against mixxxdj/mixxx. I'm not sure if I have time this week to at it. Best Max Steven Boswell II ulat...@yahoo.com wrote: I found my MinGW branch at https://github.com/mixxxcommunity/mixxx, in a branch called ulatekh-mingw. I branched that into my own repo and brought it up to date. The merge didn't go very smoothly, but I managed to fix all the problems by hand. (Good thing I kept the last bzr version of the trunk and my branches!) You can find the pull request at https://github.com/mixxxcommunity/mixxx/pull/1 . I would appreciate it if the Powers That Be could review it. The longer it goes ignored, the more work it is for me. That branch involves some changes that, while necessary to get Mixxx to build under MinGW, aren't directly related. The details are at https://bugs.launchpad.net/mixxx/+bug/1186462 . I would appreciate it if those changes could get cherry-picked. Finally, https://bugs.launchpad.net/mixxx/+bug/1184432 contains another neglected fix, this one for the 64-bit Linux version. I would appreciate it if this fix could get checked into the 1.11 release branch. Thanks for any attention to these issues. Steven Boswell-- This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Branches moved to github
I see that my auto-DJ-crates branch has been moved to github, but it's owned by daschuer. I had held off moving my own branches to github; the chatter on the list seemed to say let Owen do it. Not a big deal -- I can fork daschuer's repo and issue my own pull request. My question is...where did my MinGW branch end up? Steven Boswell -- This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Directory-hash calculation during library-rescan
Right now I'm rescanning my track collection on my laptop, and I expected it to be a short operation, but it's taking forever. I'm guessing it's because I moved a large part of my track collection to a different partition on my hard drive, even though the path remained the same. The issue is that QDirIterator doesn't present the tracks in any particular order; it'll be dictated by how they happened to be stored in the underlying filesystem. When I moved the track collection, that permuted the files in each directory. The issue is that the directory-hash calculation isn't order-independent; it calculates the directory hash by appending all the filenames to one string. If we changed it to calculate the hash of each filename individually, and XORed those together, then it would be order-independent, and shouldn't detect less changes than the previous method. Thoughts? Steven Boswell -- How ServiceNow helps IT people transform IT departments: 1. A cloud service to automate IT design, transition and operations 2. Dashboards that offer high-level views of enterprise services 3. A single system of record for all IT processes http://p.sf.net/sfu/servicenow-d2d-j___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Mixxx 1.11.0 now in RPMFusion
It's been moved out of the testing repos is now available for everyone from RPMFusion. W00t! Steven Boswell -- How ServiceNow helps IT people transform IT departments: 1. A cloud service to automate IT design, transition and operations 2. Dashboards that offer high-level views of enterprise services 3. A single system of record for all IT processes http://p.sf.net/sfu/servicenow-d2d-j___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] MinGW build of Mixxx from Fedora Core is ready to merge!
Please see https://code.launchpad.net/~ulatekh/mixxx/mingw -- we can now build the MS Windows version of Mixxx (including the installer) from Fedora Core. The necessary information to build the dependent packages is at https://github.com/ulatekh/fedora-mingw-ardour -- I'm working to get these packages submitted to Fedora and RPMFusion, but there seems to be a really big backlog. Finally, the lament on http://mixxx.org/wiki/doku.php/build_windows_installer , i.e. Now, doesn't this make you long for a MinGW build?, has been answered! I've been working with Tuukka Pasanen on his ffmpeg branch -- with my changes, it builds and runs under MS Windows, and I got it to play a .wma file. My MinGW version of ffmpeg is REALLY minimalist; my next project is to build as many of its dependencies as I can. There are only several dozen of those. :-) To the Powers That Be: please look at my branch and consider merging it. Steven Boswell -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
I finally built Fedora RPMs for all of Mixxx's dependencies, got them to pass rpmlint/mock/fedora-review, and even submitted a few package-requests, so they might actually end up in Fedora's repos. Until then, here's a github repo containing all the files you'll need to turn Fedora Core's standard packages into their MinGW equivalents: https://github.com/ulatekh/fedora-mingw-ardour.git (It's a branch of someone else's similarly-themed archive, but for Ardour's dependencies. Mixxx and Ardour share several dependencies.) You'll need to build and install (in order) libmad, portmidi, protobuf, libid3tag, taglib, flac, gsm, libsndfile, libsamplerate, portaudio, jack-audio-connection-kit, kde-filesystem, and phonon. Coming soon: phonon, qt (rebuilt to use phonon), vamp-plugin-sdk, and hss1394. I got Mixxx to build with them using scons, the dist32 directory is created properly, and the result runs fine under MS Windows! Here's my branch: lp:~ulatekh/mixxx/mingw Next project...getting the scons-driven NSIS build to make an installer! I haven't even tried it yet, but I don't have time now...I'm going out of town tomorrow. I'll continue when I get back! Until then...feel free to try it out! Steven Boswell-- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] CFLAGS vs. CCFLAGS?
I just noticed something... build/mixxx.py refers to CFLAGS in one place, and everywhere else in the build system, it's called CCFLAGS. That looks like an inconsistency that should be fixed. Thoughts? Steven Boswell -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Mixxx 1.11.0 submitted to RPMFusion
You may follow along at https://bugzilla.rpmfusion.org/show_bug.cgi?id=2801 . Hopefully it'll be in the yum repos soon! The build failed on x86_64; I don't have a 64-bit Linux to test on. (I could install one, but not now...I'm leaving for a trip tomorrow.) Has anyone tried to build Mixxx on 64-bit Linux? ( http://buildsys.rpmfusion.org/build-status/job.psp?uid=17256 says that plugins/vamp/libmixxxminimal.so apparently didn't build.) Steven Boswell -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
If you do that, I'll be glad to put my cmake knowledge to good use by reviewing your work. From: Tuukka Pasanen pasanen.tuu...@gmail.com To: mixxx-devel mixxx-devel@lists.sourceforge.net Sent: Monday, May 20, 2013 10:49 PM Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine Hello, CMake seems to be (What comes out) old fashion Makefile system I that I happens to like. Real life is allways a superior thread in this kind of a projects. What are benefits (other than faster building and somehow cleaner configuraion + KDE using CMake) in switch? I could probably do it because it sounds 'fun' task but after I somehow get FFmpeg/Libav work back to trunk. Kind regards, Tuukka-- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
The mixxx.pro in the lp:~ulatekh/ mixxx/mingw branch has been brought up to date, at least as much as I know how to; feel free to try it out. FYI, I've built mingw-phonon, but am still struggling to rebuild mingw-qt so that it'll use phonon. Once that's done, I can enable vinylcontrol and hid in the MinGW build! Steven Boswell From: Tuukka Pasanen pasanen.tuu...@gmail.com To: mixxx-devel@lists.sourceforge.net Sent: Monday, May 20, 2013 4:27 AM Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine Hello, openSUSE also have good mingw support and rpms. I see if I have time to play with this. Is it possible to get rid of scons and get this qmake for 1.12? It would be nice just to have pure QT building system. Thanks, Tuukka -- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Compiling mixxx on linux
Maybe you're trying to build the 64-bit version? I haven't tried that myself yet. Maybe add machine=i386 to your scons line? From: James J Fagan jfag...@binghamton.edu To: mixxx-devel@lists.sourceforge.net Sent: Monday, May 20, 2013 6:31 PM Subject: Re: [Mixxx-devel] Compiling mixxx on linux Thank you for all the tips I have now passed the step of build -dep mixxx but when I try to compile with scons i get the following error: i386 architecture of input file `lib/fidlib-0.9.10/fidlib.o' is incompatible with i386:x86-64 output Any ideas on what I need to do to fix this? Thanks, James Fagan-- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine
I'm fairly familiar with cmake. But switching to another build system is a lot of work; we'd have to be really sure there are enough benefits. Also...real life is threatening to intrude any day now :-) Steven Boswell From: Daniel Schürmann dasch...@mixxx.org To: Tuukka Pasanen pasanen.tuu...@gmail.com Cc: mixxx-devel mixxx-devel@lists.sourceforge.net Sent: Monday, May 20, 2013 11:23 AM Subject: Re: [Mixxx-devel] Building Mixxx with MinGW on a Linux machine Hi Tuukka, my vote is for cmake, The KDE guys have made good experience with it. But I think this is a lot of work to migrate to cmake. I would be happy if someone picks up that task. Scons is so slow. Kind regards, Daniel -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Compiling mixxx on linux
You need to add an install_root setting to your scons command line. When I'm making test builds, mine looks like install_root=/home/sboswell/localroot . Then I have /home/sboswell/localroot/bin in my PATH. I can run Mixxx builds from the command line that way, and it finds all the files. From: James J Fagan jfag...@binghamton.edu To: Steven Boswell II ulat...@yahoo.com Sent: Monday, May 20, 2013 6:58 PM Subject: Re: [Mixxx-devel] Compiling mixxx on linux Thanks for all the help, I got passed this issue but now when I run using ./mixxx I get Main]: Could not open xml file: /usr/local/share/mixxx/schema.xml I have the file schema.xml in /home/james/Desktop/mixxx-trunk/mixxx/res so should I just copy it to where it wants it? or am I doing something very wrong? Thanks, James Fagan On Mon, May 20, 2013 at 9:54 PM, Steven Boswell II ulat...@yahoo.com wrote: Maybe you're trying to build the 64-bit version? I haven't tried that myself yet. Maybe add machine=i386 to your scons line? From: James J Fagan jfag...@binghamton.edu To: mixxx-devel@lists.sourceforge.net Sent: Monday, May 20, 2013 6:31 PM Subject: Re: [Mixxx-devel] Compiling mixxx on linux Thank you for all the tips I have now passed the step of build -dep mixxx but when I try to compile with scons i get the following error: i386 architecture of input file `lib/fidlib-0.9.10/fidlib.o' is incompatible with i386:x86-64 output Any ideas on what I need to do to fix this? Thanks, James Fagan -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Building Mixxx with MinGW on a Linux machine
After building an MS Windows installer for Mixxx using the standard instructions, I decided to try getting it to work with MinGW running under Linux. The branch at lp:~ulatekh/mixxx/mingw is the result of my work so far. The qmake version (i.e. build/qtcreator/mixxx.pro) is a bit clunky, but can be made to work. Here's my scons command to cross-compile the MS Windows version: scons ladspa=0 shoutcast=0 hifieq=1 script=0 optimize=0 ffmpeg=0 target=windows crosscompile_root=/usr/i686-w64-mingw32/sys-root/mingw hss1394=0 vamp=0 vinylcontrol=0 hid=0 sqlitedll=0 I haven't built hss1394 for MinGW yet, vinylcontrol and hid depend on phonon (which has heavy dependencies, like KDE :-), and I'm still trying to build a MinGW version of jack-audio-connection-kit -- until then, Mixxx uses DirectSound. Many of the packages that Mixxx depends on are not in the yum repos. See https://bugs.launchpad.net/mixxx/+bug/1179683 for an archive containing .spec files and patches that can be used to transform the standard versions of the dependencies into the MinGW versions. The archive is specific to Fedora Core 18, but I provided enough information to let you adjust my work to your own Linux distribution. Give it a go, let me know if it works for you! Longer term, I'm trying to get these dependencies submitted to Fedora, but based on the VERY long list of packages awaiting review, I doubt it'll ever happen. I don't know if we can set up a yum repo on mixxx.org, but that would be one solution. Steven Boswell-- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] djworx tl;dr: Mixxx needs effects
PLEASE, let's not go the route of the Chrome/Firefox model. I _hate_ that. Major versions should be reserved for changes that are not backwards-compatible, like they were originally intended. And at the risk of angering our lead developer, I think Chrome did it first. ;-) From: Owen Williams owilli...@mixxx.org To: mixxx-devel@lists.sourceforge.net Sent: Monday, May 13, 2013 2:21 PM Subject: Re: [Mixxx-devel] djworx tl;dr: Mixxx needs effects Or we could drop the 1. and just call this release Version 11. That's sort of the chrome/firefox model. (At least it's not 0.9.9.11BETA) On Mon, 2013-05-13 at 23:13 +0200, William Good wrote: On Mon, May 13, 2013 at 5:44 PM, Owen Williams owilli...@mixxx.org wrote: And apparently our version numbers are too low?? That's a weird complaint. Meh, it seems that's always an issue people have with OSS. The authors have some sort of vision for the next major release, and everyone else just expects every non-bugfix release to increment the major version number (as happens with most commercial software). At some point in Linux 2.x, Linus said whatever, here's Linux 3.0.-- AlienVault Unified Security Management (USM) platform delivers complete security visibility with the essential security capabilities. Easily and efficiently configure, manage, and operate all of your security controls from a single console and one unified framework. Download a free trial. http://p.sf.net/sfu/alienvault_d2d___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] 1.11.0 source code release
So is the source code release in http://downloads.mixxx.org/mixxx-1.11.0/ stable now? The issue is that I'd like to get an updated mixxx package onto rpmfusion.org, and want to know if I can refer to that source release in the .spec file, e.g. Source0: http://downloads.mixxx.org/mixxx-%{version}/%{name}-%{version}-src.tar.gz;. I'll of course apply any updates in the current version of the release branch, and call the package mixxx-1.11.0-20130512bzr (for whatever date I finally do this). Steven Boswell -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Pending changes, blueprints
Now that the release is out the door and we all have some breathing room, can I get some opinions on my pending changes and blueprints? https://bugs.launchpad.net/mixxx/+bug/1051106 is a simple implementation of an incremental/pausable library-scan, to allow the locked-database problem during library-rescan to be worked around until such time (if any) that this problem is handled on an architectural level. Daniel Schürmann added a comment that seemed to imply that it had multithreading issues, but as far as I can tell, my change doesn't have any multithreaded database-access implications that the original code didn't have. Can someone please tell me if there's any reason this change shouldn't be committed? Also, https://bugs.launchpad.net/mixxx/+bug/1179098 contains a bug fix for a data-loss problem I found with the set-log's Join with previous menu-item. Any thoughts? Finally, please look at https://blueprints.launchpad.net/mixxx/+spec/auto-dj-crates -- I just made it more sophisticated, by allowing the tracks to be prioritized (in addition to # of times played) by the last time it was played! Until my bug fix for Join with previous, I didn't realize that this info was stored in PlaylistTracks.pl_datetime_added for set-log playlists. Also, I believe I handled RJ Ryan's objection to this feature, namely that the original concept made Mixxx too much like a media player. Now, there's an Add random button, which allows the DJ to accept, remove, or move around any randomly-added track, which should take care of the objection. I appreciate any time you're willing to put into this. There are a lot of other improvements to Mixxx that I'd like to do, but only if there's a chance they'll make it into the master branch. Steven Boswell -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update
Since I've done a little ffmpeg programming in the past, I thought I'd take a look at this. Hopefully I'm doing my comparison right; inside of a checkout of Mixxx's trunk, I did bzr update -r 3365, since that seems to be the last version that was merged into the ffmpeg branch. Assuming my comparison is right, my first question is...is there any particular reason that there are so many unrelated changes? It appears that support for preview decks has been totally munged (src/engine/enginechannel.[cpp,h], src/library/baseexternalplaylistmodel.cpp, src/library/baseexternaltrackmodel.cpp, src/library/cratetablemodel.cpp, and many many others), that some files have been copied (src/library/previewbuttondelegate.[cpp,h].moved and src/previewdeck.cpp.moved), ConfigObject::exists() has been removed, src/mathstuff.h now has Apple-only definitions for functions that exist in Qt (i.e. qIsNaN() and qIsInf()), etc. Some clarifications on this would be appreciated. Now I'll dig into the actual FFMPEG changes :-) Steven Boswell From: Tuukka Pasanen pasanen.tuu...@gmail.com To: mixxx-devel@lists.sourceforge.net Sent: Wednesday, May 8, 2013 11:52 AM Subject: [Mixxx-devel] Mixxx and FFMPEG/Libav status update [...] FFMPEG/Libav support is now in state it can be used drop-in placement in playing and recording. [...] -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update
Wait...it's easier than that...instead of having to fetch a QTextCodec, I can just call QString::fromUtf8(). New patch. :-) Steven Boswell From: Steven Boswell II ulat...@yahoo.com To: mixxx-devel@lists.sourceforge.net mixxx-devel@lists.sourceforge.net Sent: Sunday, May 12, 2013 3:35 PM Subject: Re: [Mixxx-devel] Mixxx and FFMPEG/Libav status update Tuukka: So far, all I've noticed wrong is the Unicode handling for metadata (artist, title, etc.) The enclosed patch fixes that. I also noticed that you're apparently having problems with Unicode paths under MS Windows. After digging around for a while, it appears that this is a known bug, though ff_win32_open() in libavformat/os_support.c (at least in my version of ffmpeg, i.e. 1.0.5) seems to be doing the right thing for UTF-8. So it's still a mystery. But maybe this will help you track down the problem. Steven Boswell -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may ___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-develdiff -ur mixxx-cleaned/src/soundsourceffmpeg.cpp mixxx/src/soundsourceffmpeg.cpp --- mixxx-cleaned/src/soundsourceffmpeg.cpp 2013-05-12 11:34:19.268383000 -0700 +++ mixxx/src/soundsourceffmpeg.cpp 2013-05-12 15:45:37.682676947 -0700 @@ -29,6 +29,7 @@ //#endif #include QDebug +#include QTextCodec static QMutex ffmpegmutex; static bool ffmpeginit = false; @@ -161,6 +162,8 @@ * The method toLocal8Bit() returns the local 8-bit representation of the string as a QByteArray. * The returned byte array is undefined if the string contains characters not supported * by the local 8-bit encoding. + * + * See https://ffmpeg.org/trac/ffmpeg/ticket/819 for relevant bug report. */ QByteArray qBAFilename = m_qFilename.toLocal8Bit(); #else @@ -408,10 +411,10 @@ #else uint8_t **l_pIn = (uint8_t **)inframe-extended_data; #endif - + #else - int64_t l_lInReadBytes = av_samples_get_buffer_size(NULL, m_pCodecCtx-channels, +int64_t l_lInReadBytes = av_samples_get_buffer_size(NULL, m_pCodecCtx-channels, inframe-nb_samples, m_pCodecCtx-sample_fmt, 1); #endif @@ -422,7 +425,7 @@ int l_iOutSamplesLines = 0; - // Alloc too much.. if not enough we are in trouble! +// Alloc too much.. if not enough we are in trouble! av_samples_alloc(m_pOut, l_iOutSamplesLines, 2, l_iOutSamples, AV_SAMPLE_FMT_S16, 0); #else int l_iOutSamples = av_rescale_rnd(inframe-nb_samples, m_pCodecCtx-sample_rate, m_pCodecCtx-sample_rate, AV_ROUND_UP); @@ -691,6 +694,8 @@ * The method toLocal8Bit() returns the local 8-bit representation of the string as a QByteArray. * The returned byte array is undefined if the string contains characters not supported * by the local 8-bit encoding. + * + * See https://ffmpeg.org/trac/ffmpeg/ticket/819 for relevant bug report. */ QByteArray qBAFilename = m_qFilename.toLocal8Bit(); #else @@ -730,22 +735,24 @@ //qDebug() ffmpeg: Parse HEADER [MP3,WMA]; while ((FmtTag = av_dict_get(FmtCtx-metadata, , FmtTag, AV_DICT_IGNORE_SUFFIX))) { +// Convert the value from UTF-8. +QString strValue (QString::fromUtf8 (FmtTag-value)); if( !strncmp( FmtTag-key, artist, 7) ) { -//qDebug() ffmpeg: HEADER [MP3,WMA] artist: FmtTag-key = FmtTag-value; -this-setArtist(FmtTag-value); +//qDebug() ffmpeg: HEADER [MP3,WMA] artist: FmtTag-key = strValue; +this-setArtist(strValue); } else if( !strncmp( FmtTag-key, album, 5) ) { -//qDebug() ffmpeg: HEADER [MP3,WMA] album: FmtTag-key = FmtTag-value; -this-setAlbum(FmtTag-value); +//qDebug() ffmpeg: HEADER [MP3,WMA] album: FmtTag-key = strValue; +this-setAlbum(strValue); } else if( !strncmp( FmtTag-key, date, 4) ) { -//qDebug() ffmpeg: HEADER [MP3,WMA] date: FmtTag-key = FmtTag-value; -this-setYear(FmtTag-value); +//qDebug() ffmpeg: HEADER [MP3,WMA] date: FmtTag-key = strValue; +this-setYear(strValue); } else if( !strncmp( FmtTag-key, genre, 5) ) { -//qDebug() ffmpeg: HEADER [MP3,WMA] genre: FmtTag-key = FmtTag-value; -this-setGenre(FmtTag-value); +//qDebug() ffmpeg: HEADER [MP3
[Mixxx-devel] MS WIndows build problem, forum problem
The build problem I just ran into was reported on the forums; see http://www.mixxx.org/forums/viewtopic.php?f=3t=4382 . Unfortunately, no one ever answered him. The problem is that the source code being built from wasn't part of a Bazaar checkout, and src/SConscript doesn't handle that gracefully. The enclosed patch takes care of the problem. I tried to register for the forums, so that I could tell the user what to do, but it keeps telling me You have provided an invalid answer to the question. So the first and last letter in equalizer isn't er? Steven Boswell --- mixxx-orig/src/SConscript 2013-05-10 16:13:51.0 -0700 +++ mixxx/src/SConscript 2013-05-12 21:17:21.883028714 -0700 @@ -38,11 +38,15 @@ str_list.append('#define VER_FILEVERSION ') # Remove anything after ~ or - in the version number and replace the dots with commas str_list.append(mixxx_version.partition('~')[0].partition('-')[0].replace('.',',')) -str_list.append(','+str(bazaar_revision)+'\n') +if bazaar_revision: +str_list.append(','+str(bazaar_revision)) +str_list.append('\n') str_list.append('#define VER_PRODUCTVERSION ') str_list.append(mixxx_version.partition('~')[0].partition('-')[0].replace('.',',')) -str_list.append(','+str(bazaar_revision)+'\n') +if bazaar_revision: +str_list.append(','+str(bazaar_revision)) +str_list.append('\n') import datetime now = datetime.datetime.now() -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] RPMFusion Bug 2413 - mixxx doesn't understand arm arches
Has anyone seen this? https://bugzilla.rpmfusion.org/show_bug.cgi?id=2413 I don't own any computers with an ARM arch, so I can't help with this, but for anyone that knows ARM arches, this sounds like an easy fix... Steven Boswell -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] 1.11.0 status
I hope this is a dumb question...removing Browse mode is only for the Mac App Store version, right? From: RJ Ryan russelljr...@gmail.com To: Too Many DJs mixxx-devel@lists.sourceforge.net Sent: Wednesday, May 8, 2013 11:14 AM Subject: Re: [Mixxx-devel] 1.11.0 status Hi folks -- we got rejected due to not following sandbox rules. I requested a temporary sandbox exception on filesystem access and I hoped they would grant it but they didn't. We're going to have to do some major work to get this fixed. We may even have to completely remove Browse mode. On the plus side, I'm going to release 1.11.0 tonight hopefully. Now that I know the MAS is not going to happen for a while we'll have to release without it. Woo? RJ -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] 1.11.0 status
One more hopefully dumb question...there's a difference between the Mac build and the Mac App Store build, right? I'd hate for a user to start with the Mac App Store build, go through all the trouble of getting an open-source Mac build, and find that there's no difference... From: RJ Ryan russelljr...@gmail.com To: Too Many DJs mixxx-devel@lists.sourceforge.net Sent: Wednesday, May 8, 2013 11:14 AM Subject: Re: [Mixxx-devel] 1.11.0 status Hi folks -- we got rejected due to not following sandbox rules. I requested a temporary sandbox exception on filesystem access and I hoped they would grant it but they didn't. We're going to have to do some major work to get this fixed. We may even have to completely remove Browse mode. -- Learn Graph Databases - Download FREE O'Reilly Book Graph Databases is the definitive new guide to graph databases and their applications. This 200-page book is written by three acclaimed leaders in the field. The early access version is available now. Download your free book today! http://p.sf.net/sfu/neotech_d2d_may___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] New blueprint: auto-DJ crates (with solid beta!)
Hello all! Some time ago, I proposed allowing crates to be a source of random tracks for Auto-DJ. I have filed a blueprint for it; you may see it at https://blueprints.launchpad.net/mixxx/+spec/auto-dj-crates . I've also created a branch for it, and uploaded a solid beta version of it. I just need some feedback on the GUI, and for someone with the authority to consider it for merging into the trunk. Let me know what you think! Steven Boswell -- Get 100% visibility into Java/.NET code with AppDynamics Lite It's a free troubleshooting tool designed for production Get down to code-level detail for bottlenecks, with 2% overhead. Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap2___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Best practices for database queries?
On Wednesday, May 1, 2013 at 11:42 AM, RJ Ryan wrote: On Wed, May 1, 2013 at 2:15 PM, Daniel Schürmann wrote: Yes, we should solve this issue and use the const values in any case. This allows to rely on IDE features like display call tree. I think we should stick with whatever makes the code easiest to maintain (which would be using the constants when possible) -- maybe the constants should be renamed to be a little easier on the eyes? A lot of the DAO code doesn't use the constants, that's true. We should fix those queries. Oy...OK. I'll keep the source-code comment with the human-readable version, just to make it easier to understand. But I am not sure if the use of const QString is performance neutral to const char* and #define because the heavy QSting constructor is called. So IMHO we should change it to const char*. From what I've seen, the table names are #define'd strings, and the column names are global QString objects. Seems like we should have one way to do this. I'd prefer #define'd strings, simply because the compiler can optimize this easily. If the compiler can optimize const char * just as well, let's do that instead. I try to make sure my code runs well on low-end hardware (a side effect of programming video-game consoles for so many years... :-) There are a lot of non-performance-neutral choices we make in Mixxx, but that alone isn't enough to make a decision, we have to take the context into account. Compared to the QSqlQuery::exec() that comes immediately after all these queries, some string concatenation isn't going to break the bank, cycle-wise. Processors are pretty good at memcpy these days :). That's fine until we try to run Mixxx on a GP2X. :-) On Wednesday, May 1, 2013 at 12:07 PM, RJ Ryan wrote: I would prefer we totally got rid of writing SQL queries directly in code and instead composed them using declarative C++ classes which are then compiled down to SQL. That's one thing I really like about C# 3.0 ... the introduction of LINQ. So much programming revolves around database queries; it's hard to believe that it's taken this long for database-queries to become a first-class member of the language, or that only one language has figured this out so far. Steven Boswell-- Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET Get 100% visibility into your production application - at no cost. Code-level diagnostics for performance bottlenecks with 2% overhead Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap1___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] GSoC 2013 - Interested in Non-Blocking Database Access
On Monday, April 29, 2013 at 9:46 PM, RJ Ryan wrote: Some database operations do need transactional semantics for their whole operation (i.e. if you were to stop it half-way and commit to allow other readers/writers to process) -- for example shuffling a playlist. In this case multiple writers could lead to data corruption races. Granted...shuffling wouldn't be considered an interruptible write operation. Library-rescan and playlist-import could be, though. today's approach of doing some operations on the GUI thread blocks Qt from processing events. This has implications on Mixxx's responsiveness because things like waveform rendering cannot do work while the Qt main thread is blocked attempting to read/write from the database. Fair enough. Although C++ doesn't support continuation-style programming very well, it's at least possible with Qt -- the GUI could set up a database query, send it to the DB thread via signal, and receive the results via signal, but oy, that would make the code a lot more complicated...there's gotta be a simpler way. Steven Boswell-- Introducing AppDynamics Lite, a free troubleshooting tool for Java/.NET Get 100% visibility into your production application - at no cost. Code-level diagnostics for performance bottlenecks with 2% overhead Download for free and get started troubleshooting in minutes. http://p.sf.net/sfu/appdyn_d2d_ap1___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] GSoC 2013 - Interested in Non-Blocking Database Access
Correct me if I'm wrong, but wouldn't a functional non-blocking database access implementation be a lot simpler than what's been discussed here? The issue is that some database operations are interruptible, although it's more efficient for them to not be done incrementally. Library-rescan, and playlist/crate import where the imported playlist-file has a lot of tracks that aren't already in the database, seem to be the two biggest cases, and both involve adding lots of entries to the library table. It seems to be that implementing this feature boils down to this: 1) Clean up the src/library/dao layer so that each DAO object only accesses/modifies one table directly. 2) Any table that can remain locked for a long time (just library?) gains some internal logic that allows writers to run unimpeded unless there are readers, in which case the batch-write operation is committed, all the readers are allowed to do their thing, then the batch-write operation continues. This is much simpler than a separate thread, and accomplishes the same thing. Steven Boswell -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Nasty bug in database! (old news?)
Please see https://bugs.launchpad.net/mixxx/+bug/1171235 -- my performance improvement to playlist/crate import is bugged, and I submitted a patch for it. If you've imported playlists/crates with that code, you just have to delete them and re-import them, and your database will be error-free again. The source of the bug is an error in the database format -- even though schema 3 changed library.location from a varchar(512) to an integer, the REFERENCES constraint wasn't changed from track_locations(location) to track_locations(id). That led me to write bad code without realizing it. Also, schema 3 didn't do anything to convert the text-based location to an integer-based location, which would be an old bug. The patch I submitted to bug #1171235 not only fixes my code, it also corrects the constraint in the library table, and adds some comments to the place (i.e. schema 3) where the problem was introduced, and how it could have been avoided. I'm guessing that schema 3 being broken is old news, but I thought I'd say something anyway. Perhaps we should be using sqlite with PRAGMA foreign_keys = ON? Steven Boswell -- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Nasty bug in database! (old news?)
Please see https://bugs.launchpad.net/mixxx/+bug/1171235 -- my performance improvement to playlist/crate import is bugged, and I submitted a patch for it. Not the first time broken code has made it in right before a release :). Granted, but I'm deeply unthrilled to be the cause of such a thing. That's why I tried to explain the context...it was my threadbare excuse for doing something so unprofessional. ;-) We really could use library unit tests. I was surprised to find that constraint checking had to be explicitly enabled; if they had been enforced, it's likely the bugged version of my patch would have been detected before it left my hands. The source of the bug is an error in the database format [...] Good catch! Schema versions 1 and 2 never made it into the wild -- it's from when we were developing the SQLite library in its own branch so that explains why we never heard from any users about the conversion issue. Indeed. I was wondering how it managed to be in there! The patch I submitted to bug #1171235 not only fixes my code, it also corrects the constraint in the library table, and adds some comments to the place (i.e. schema 3) where the problem was introduced, and how it could have been avoided. The REFERENCES change is probably worth doing [...] Good news. So please check in the change as soon as you can. I don't want my breakage to go any further! Steven Boswell-- Try New Relic Now We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Hello, and some patches
I just posted a patch that implements incremental-rescan and pausable rescanning. See https://bugs.launchpad.net/mixxx/1.11/+bug/1051106 for more details. BTW, I have three other bug-fix patches posted, ready for comment and/or commit: https://bugs.launchpad.net/mixxx/+bug/1171232 https://bugs.launchpad.net/mixxx/+bug/1171234 https://bugs.launchpad.net/mixxx/+bug/1171235 Steven Boswell -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Bug fixes for Mixxx
We need a bug report to track those changes. So please file one, assign it to you and add your patch. The status should be In Progress Sigh...formality :-) @RJ: What is the state of the 1.11.0 branch. It is still open for patches like this? I sure hope it is...I'm still finding bugs :-) Enclosed is a patch to CrateDAO::addTracksToCrate(). Without it, if one imports to a crate, and (for example) all of the tracks are already in that crate, it'll only think half of them failed to add. BTW, I'm working on a big performance improvement to importing crates. It uses SQL queries to avoid adding tracks that are already in the track_locations table, and does the same for the crate_tracks table. I hope to submit it for your consideration shortly. Steven Boswell--- mixxx/src/library/dao/cratedao.cpp 2013-04-07 19:41:28.496946000 -0700 +++ mixxx-build/src/library/dao/cratedao.cpp 2013-04-21 09:29:29.822356551 -0700 @@ -231,6 +231,7 @@ // We must emit only those trackID that were added so we need to // remove the failed ones. trackIdList.removeAt(i); + --i; } } transaction.commit(); -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Vast performance improvement to importing crates
Enclosed is a patch that vastly improves the performance of importing crates when the tracks are already in the database. I ran into this problem while trying to build crates for various sub-sets of already-imported tracks. All it does is detect when tracks referred to during a crate-import already exist in the database, and avoids trying to add them again. Before, an .m3u file with ~1900 tracks in it, imported in about 5 minutes. Now, it's about 2 seconds. So I think this is a worthy change :-) I was thinking about doing the same for the crate_tracks database, but I wasn't sure if that'd be more optimal. Right now, CrateDAO::addTracksToCrate() logs an error every time there's a duplicate crate/track pair. However, crate_tracks is also set up so that each crate/track pair has to be unique. So it might be faster to create a temporary table with the crates/tracks to add, then do an SQL query to get only the crate/track pairs that aren't already in crate_tracks, and only insert those, solely because of the unique constraint on crate_tracks. Besides, the same test (i.e. the ~1900-track .m3u file), run when the playlist already contains those tracks, still runs in ~2 seconds, so maybe it's no big deal. Any opinions on this? BTW, the performance problem I found in CrateFeature::slotImportPlaylist() (i.e. calling addTrack() in a loop, instead of just calling addTracks() once) also exists in BasePlaylistFeature::slotImportPlaylist(). Enclosed is another patch to fix that. Steven Boswell --- mixxx-patched/src/library/cratetablemodel.cpp 2013-04-07 19:41:28.496946000 -0700 +++ mixxx-build/src/library/cratetablemodel.cpp 2013-04-21 09:48:51.269970571 -0700 @@ -93,7 +93,8 @@ } } -int CrateTableModel::addTracks(const QModelIndex index, QListQString locations) { +int CrateTableModel::addTracks(const QModelIndex index, +const QListQString locations) { Q_UNUSED(index); // If a track is dropped but it isn't in the library, then add it because // the user probably dropped a file from outside Mixxx into this playlist. --- mixxx-patched/src/library/cratetablemodel.h 2013-04-07 19:41:28.496946000 -0700 +++ mixxx-build/src/library/cratetablemodel.h 2013-04-21 09:48:55.862554265 -0700 @@ -31,7 +31,8 @@ virtual void removeTracks(const QModelIndexList indices); virtual bool addTrack(const QModelIndex index, QString location); // Returns the number of unsuccessful track additions -virtual int addTracks(const QModelIndex index, QList QString locations); +virtual int addTracks(const QModelIndex index, +const QList QString locations); virtual void moveTrack(const QModelIndex sourceIndex, const QModelIndex destIndex); TrackModel::CapabilitiesFlags getCapabilities() const; --- mixxx-patched/src/library/dao/trackdao.cpp 2013-04-07 19:41:28.496946000 -0700 +++ mixxx-build/src/library/dao/trackdao.cpp 2013-04-21 09:49:56.637278419 -0700 @@ -523,26 +523,96 @@ addTracksFinish(); } -QListint TrackDAO::addTracks(QListQFileInfo fileInfoList, bool unremove) { +QListint TrackDAO::addTracks(const QListQFileInfo fileInfoList, +bool unremove) { +QSqlQuery query(m_database); QListint trackIDs; - TrackInfoObject* pTrack; +TrackInfoObject* pTrack; +// Prepare to add tracks to the database. +// This also begins an SQL transaction. addTracksPrepare(); -//create the list of TrackInfoObjects from the fileInfoList -QMutableListIteratorQFileInfo it(fileInfoList); -while (it.hasNext()) { -QFileInfo info = it.next(); -pTrack = new TrackInfoObject(info); +// Create a temporary database of the paths of all the imported tracks. +query.prepare (QString (CREATE TEMP TABLE playlist_import +(location varchar (512; +if (!query.exec()) { +LOG_FAILED_QUERY(query); +goto err0; +} + +// All all the track paths to this database. +query.prepare (QString (INSERT INTO playlist_import (location) +VALUES (:location))); +foreach (const QFileInfo rFileInfo, fileInfoList) { +query.bindValue (:location, rFileInfo.absoluteFilePath()); +if (!query.exec()) { +LOG_FAILED_QUERY(query); +goto err1; +} +} + +// Get the IDs of all tracks that are already in the database. +query.prepare (QString (SELECT id FROM playlist_import, track_locations +WHERE playlist_import.location = track_locations.location)); +if (!query.exec()) { +LOG_FAILED_QUERY(query); +goto err1; +} +while (query.next()) { +int trackId = query.value(query.record().indexOf(id)).toInt(); +trackIDs.append (trackId); +} + +// If imported-playlist tracks are to be unremoved, do that for all playlist +// tracks that were already in the database. +if (unremove) +{ +QStringList idStringList; +foreach (int id, trackIDs) +
Re: [Mixxx-devel] New feature for Auto DJ
I went ahead and implemented my idea for allowing crates to serve as sources of random tracks for auto-DJ. Hopefully you'll all warm up to the idea, or maybe I'll add an option to the scons line like autodjcrates=1 to allow people to compile it out if they so choose. Right now, I have a Crates tree-item under the Auto DJ tree item, and then each crate that's been added to auto-DJ as a source of random tracks is listed under that Crates tree-item. You can right-click on it and remove it from the auto-DJ crates list. You can also right-click on a Crate in the existing tree and add/remove them to/from the auto-DJ crates list. I added an integer autodj column to the crates table in the database; it's 1 if the crate is in the auto-DJ crate list, and 0 otherwise. I also added an Add random track button to the auto-DJ's GUI, allowing the user to add as many random tracks as desired, and to remove any undesirable selections. The feature still needs work before I can submit it to the project. I did a very quick port of the SongJockey code from my djserver program (previously posted to this mailing list), so that I could use it for a car show I DJed today; I still need to clean it up and port it to Qt. I really want to replace the tree-view of auto-DJ crates with a crates table, so that you can see how many tracks are in each crate, how many unplayed tracks are in each one, and so on. And I still haven't totally worked out the signal logic. Right now, I'm subscribing to the loadTrack() signal to determine when a track has been loaded into a deck; there's also a loadTrackToPlayer() signal, but it doesn't seem to get called, at least within auto-DJ. However, loadTrack() doesn't get signaled when a track is manually placed into a deck; there seems to be a newTrackLoaded() signal emitted by Deck, but I don't know how to get access to that from within AutoDJ. It appears I can access the decks through PlayerManager, but AutoDJ doesn't currently have a reference to PlayerManager. So I'm not sure what to do about this yet. Perhaps what I want is to detect when tracks are added/removed to/from the auto-DJ queue, and when tracks are added/removed to/from the history. That may be simpler and less error-prone. My song-jockey logic depends on the last time the track was played, in order to prioritize tracks that haven't been played, but the last-played time is not stored in the database, only the date/time the track was added to the database. Is there any objection to adding that information to the track database? Your feedback is appreciated. Steven Boswell -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Non-Blocking Database Access
The core database code is in src/library/dao. From: Łukasz Olender luki...@gmail.com To: mixxx-devel@lists.sourceforge.net Sent: Saturday, April 13, 2013 8:08 AM Subject: [Mixxx-devel] Non-Blocking Database Access Hi all, I’m interested in GSoC participating in Mixxx project. I’d like to get more info about one of ideas mentioned in gsoc2013 ideas list – Non-Blocking Database Access. It seems to be an interesting task, but I need to get involved into sources to have better understanding of complexity of this problem. Can you give me some instructions where to search for code connected with database operations?-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Whither LADSPA?
From what I can tell digging around on the Net, LADSPA support in Mixxx existed at one time, but is now broken. I can't seem to find any info on how it's broken, or what it would take to fix it. Does anyone know? All I know so far is that adding ladspa=1 to the scons command line leads to the build failing. I would certainly like to see LADSPA in Mixxx. Steven Boswell -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Trouble using Auto DJ
about which version of Mixxx you are talking? I'm doing all of my work in the 1.11 release branch. I want a stable version of Mixxx with some extra features that I've implemented, so working in 1.11 seemed like my best option. 1: without interaction 2: pressing fade now (Bad track playing or too long) 3: Double click on a track D somewhere in the library (urgent wish) 4: Right Click Add to Auto DJ Top/Bottom 5: Shuffle But anyhow, locking track 1 if it is the same that is already loaded and paused seems to be reasonable. The alternative would be, if the user manually dragged a track to the first position, and the former first track is loaded in a deck, then that track should get unloaded in favor of the track that was just dragged to the top of the auto-DJ queue. You should also know that we have a advanced AutoDJ version in our pipeline. lp:~smstewart91/mixxx/advanced_autodj It was done during GSoC 2012, but it was not maintained since then. Argh...more neglected code...although it seems that, this time, some of those features made it into the trunk. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Hello, and some patches
Please attach the patch to bug #1090888 and assign the bug to yourselves or mark it as duplicate and use bug #870128 instead. OK, done. The patch is attached to bug #1090888. Could some with write privileges on the bzr database commit this change push it into the 1.11.0 branch, please? Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
I'm not sure it adds much extra value to be able to select multiple crates as your pool. In my experience, it does -- that allows you to have several different sources for the next random song. I commonly want to have several categories available. Plus, we already have an Add to AutoDJ context menu for crates and playlists that queues all their tracks to the ADJ playlist. Actually, that option only exists for playlists -- it's missing for crates. I've been thinking over this feature and I'm not sure it's a direction we should take. If you can suggest an open-source jukebox app, I'll go work on that instead and stop bothering you. I wish I had known this before I spent so much time reading over the Mixxx source code. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Hello, and some patches
In my experience, the queries in Mixxx do block. That's how this assertion was hit in the first place. It appears that a table can have multiple simultaneous readers, but only one writer, and readers are blocked while there's a writer. I suppose this could be an issue with how sqlite is built on different platforms, with different options and whatnot, but that would be pretty unsettling. I'm running Mixxx on Fedora Core 17. From: RJ Ryan russelljr...@gmail.com To: Steven Boswell II ulat...@yahoo.com Cc: mixxx-devel@lists.sourceforge.net mixxx-devel@lists.sourceforge.net Sent: Friday, April 12, 2013 8:57 AM Subject: Re: [Mixxx-devel] Hello, and some patches The queries don't block (well, you can configure them to busy-wait for a set number of seconds at the Qt SQL driver level but we don't) but in general we don't want blocking because if we block the Qt main thread then the whole GUI will stall while the library scanner is scanning. Today we just see the queries fail complaining the database is locked when this problem presents itself. -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
I've been thinking over this feature and I'm not sure it's a direction we should take. If you can suggest an open-source jukebox app, I'll go work on that instead and stop bothering you. There are a bunch of great FLOSS jukebox apps out there -- Tomahawk and Banshee are two of my favorites and I know a few of the developers. I guess I'll go look at those. we would love for you to continue to contribute to Mixxx and help create great DJ software. Well, no...my motivation to work on Mixxx was to make it what I needed it to be. If those changes are never going to be accepted into the software, then what's the point? Just don't be surprised when you find you're the only one left working on this project. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
Here's my first idea for implementing djserver-like playlists in Mixxx. I think the right metaphor is to allow crates to be added to auto-DJ. There would be a sub-item under the Auto DJ tree-view item, called Crates. There, you would see all the crates that have been loaded into auto-DJ. In the existing Crates view, you could right-click on a crate and select Add to Auto-DJ. In the Auto-DJ Crates view, you could right-click on a crate and select Remove from Auto-DJ. If auto-DJ needs a new track, and none are in the list, it'll pick a random track from the totality of loaded crates, using the djserver-like rules I outlined earlier. This seems like a simple idea...but I've already run into an unexpected roadblock. I can't figure out how to add a Crates sub-item under the Auto DJ item in the tree view! I thought I could search the code for QTreeView and QTreeWidget and find the relevant code, but that came up empty! I thought I could look at the skin documentation and use that to understand an existing skin, but the documentation seems to be out of date, and looking at QTreeView in a skin.xml file doesn't show how those items (Library, Auto DJ, Playlists, Crates, etc.) get added to the tree-view! Can someone please point out where this code/UI lives? Steven Boswell -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
We should ensure that the Auto DJ has always n amount of tracks 4 in its play list when connected to a crate so the user can foresee what will happen Sure, the number of pending tracks to keep in auto-DJ, when there are crates loaded into auto-DJ, can be configured. How will this interact withlp:~keithsalisbury/mixxx/track_selector_feature? I think your rules are different from this rules but at least they are rules;-) If and when that feature is merged into the trunk, I'm sure it can be made compatible. But this brings up a question for me...it appears that that feature is done, and has been waiting for review since May of last year. Why has it not been merged? It always distresses me to see neglected merge-requests like this one. The library layout is not setup by the skin file. Maybe it helps looking at the call tree around mixxx/src/library/rhythmbox/rhythmboxfeature.cpp Ah...now I see that each item in that tree-view is a subclass of LibraryFeature, and the tree-view is populated by the Library constructor. That should be enough to figure out how to add a Crates sub-item to Auto DJ. Thanks! Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
The merge request from: lp:~keithsalisbury/mixxx/track_selector_feature looks really not nice without any comment. Are you saying the feature is badly written and the source code isn't documented? You lost me. Re: crates in auto-DJ, let me tell you where I'm at so you can stop me if I'm going wrong. I now have a Crates tree-item under the Auto DJ tree-item in the library view. (It took a lot of code-reading to figure out that it wasn't hard to add. :-) Now it looks like I have to create a new subclass of WLibraryTableView, called WCrateTableView, so that the crates loaded into auto-DJ can be displayed. There I can display the name of the crate, the number of tracks in the crate, and the number of tracks being considered for playback (i.e. based on how many times they've already been played). The alternative is to display the crate names as sub-items of the new Crates tree-item, and to display the tracks in each crate if they're clicked on, but that seems redundant and pointless. A crate view seems more meaningful, though it's more work. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Hello, and some patches
1) Flushing after every folder is scanned sounds like it could have a significant impact on scanning performance. Using your friend's large collection have you noticed any reduction in scanning speed? I haven't rescanned the collection over again since making this change. I can do that, though. I tested it with my small collection and it has a huge impact. That doesn't surprise me. In the worst case, we can add an incremental library scanning option to the preferences. But the old variant will have to lock the main Mixxx window to prevent using it. Some GUIs do that automatically when a modal dialog is displayed...I guess Qt doesn't? Reading the sqlitedb shouldn't be affected by the scanner as sqlite allows for multiply reads all the time, also with an open transaction. [...] As far as I understand the sqlite specs the db should never block to a read request, so I'm puzzled why this happens in mixxx. AFAIK, multiple readers are OK, but there can be only one writer on a table, and a writer locks out readers. That certainly seems to be how it's behaving, too. Perhaps non-incremental library-scanning can be rewritten to create new tables with temporary names, then at the end, drop the old tables and move the new tables in their place? 2) RE: returning in BSTM if the table query fails I think this looks like a nice workaround to that bug Is there actually a reliable way to reproduce this error. I sometimes get it at random and so far I failed to reproduce it with ways that other described. I can reproduce it pretty easily by trying to click on the Library or Auto DJ playlists during a library rescan. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] Hello, and some patches
On Tuesday, April 9, 2013 at 10:45 PM, Daniel Schürmann wrote: And thank you very much for your patch. I am impressed that you are so familiar with the Mixxx code without any help! The library-rescan code had a decent amount of source-code comments, so I figured it out pretty quickly. I always like finding documented code. Hopefully I'll continue to find that as I go through Mixxx's source. :-) I had not the chance to test it, but from the code it looks very good and suitable to fix the bug. Please attach the patch to bug #1090888 and assign the bug to yourselves or mark it as duplicate and use bug #870128 instead. As soon as I figure out how to do all that, I will! On Wednesday, April 10, 2013 at 7:15 AM, RJ Ryan wrote: In the future we're looking at refactoring everything so that all library operations happen in one thread and all other threads communicate with that thread via message passing. [...] That would ultimately be the best solution, but that was a bigger change than I was willing to take on as my first project. :-) We're in the process of releasing 1.11.0 right now and I will be holding a 1.12.0 planning meeting soon. You should join us! Announcements will go out to mixxx-devel for the date/time. I don't know how useful I'd be in such a meeting, but I can try! Maybe I'll just learn by listening. Re: my incremental library-scanning change...right now, I plan for my next version to allow for both incremental and non-incremental scanning, controlled from the same progress dialog. The dialog will gain a checkbox, defaulting to unchecked, that allows for incremental scanning. If scanning is not incremental, the dialog will be modal (i.e. QWidget::setWindowModality()), so that the user can't click on the Mixxx GUI and cause crashes. If scanning is incremental, the dialog will not be modal, and changes will get committed to the database relatively often. Clicking the pause button will also make the dialog non-modal and commit changes to the database. As soon as I have that written, I'll e-mail the patch to the list, for your comment. Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
Re: [Mixxx-devel] New feature for Auto DJ
On Wednesday, April 10, 2013 at 2:01 PM, Daniel Schürmann wrote: It would be wonderful if you can share your experience in real time audio processing and play list generation with us and join us to make Mixxx even better. I'll do what I can! I guess I'll find out how much of my experience is still relevant. :-) Here is a list of links what I can find and remember. I will look at those links when I have time...probably tonight and tomorrow. Since this mailing list is somewhat volatile, you should consider opening a wishlist bug or a blueprint on Launchpad or a new page on our Wiki to save the ideas. (Or all of it). I can do that once my ideas get a bit more cooked, i.e. once I understand the target audience better. It seems that Auto DJ isn't the sort of thing that professional DJs make a lot of use of; they're too busy being ultra-hip with record scratching and whatnot. So who knows how much use my playlist changes will see outside of...well, me. :-) Btw: Is your djserver open source? I've never released the code before, but I don't mind releasing it under GPL v2. I just got it compiling and running under Fedora Cores 14 and 16 -- the last time I built it was apparently September 2002. :-) Let me write up a bit of user documentation and I'll e-mail it to the list! Steven Boswell-- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Trouble using Auto DJ
I was beating the heck out of auto-DJ last night, and got it to mess up a few times. Sometimes, the played track wouldn't get removed from the list, and the other deck would get loaded with the same track. I thought it was because of shuffling the playlist, or adding new tracks to the top of the queue, or dragging tracks to the decks manually, but after reading the code over today, I don't think that's it -- the code seems to expect that. However, I can cause that problem by dragging a track to the top of the auto-DJ queue manually. The code (i.e. src/dlgautodj.cpp) apparently leaves the track at the top of the auto-DJ queue when it loads the deck, and only removes it when the track starts playing. I wonder, why is that? DlgAutoDJ::shufflePlaylist() has to special-case this, as does WTrackTableView::sendToAutoDJ(). Plus, DlgAutoDJ::toggleAutoDJButton() will mess up if the first track in the queue is on the 2nd deck, and the second track in the queue is on the 1st deck -- neither will get removed from the auto-DJ queue. I think it'd be less error-prone to remove the track from the auto-DJ queue as soon as it's loaded into a deck. The alternative would, at a minimum, have to prevent the user from dragging a track to the top of the auto-DJ queue, which would probably confuse the user. Any thoughts on this? I would do the work of fixing this, once I have your feedback on the issues involved. Steven Boswell -- Precog is a next-generation analytics platform capable of advanced analytics on semi-structured data. The platform includes APIs for building apps and a phenomenal toolset for data science. Developers can use our toolset for easy data analysis visualization. Get a free account! http://www2.precog.com/precogplatform/slashdotnewsletter___ Get Mixxx, the #1 Free MP3 DJ Mixing software Today http://mixxx.org Mixxx-devel mailing list Mixxx-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mixxx-devel
[Mixxx-devel] Hello, and some patches
Hello all! I got a panicked call from a DJ/KJ friend of mine this weekend. He knew I was handy with computers needed help DJing a gig he had that evening. I quickly found mixxx (in the rpmfusion repo for Fedora Core 17), put it through its paces, called him back to tell him I thought I could fake it, spent a few more hours load-testing mixxx and beating it to death...then went to the gig. We pulled it off! So, just like that, I'm a DJ. :-) Enclosed are some patches I've come up with so far. I doubt they're ready to check in; I'm posting them mostly for feedback, and so you can point out any problems with them. I'm building with the 1.11 branch. The patch to src/library/basesqltablemodel.cpp is meant to fix bug #1090888, i.e. https://bugs.launchpad.net/mixxx/+bug/1090888 . The problem is that, if the database is locked, the code continues with an invalid SQL-query result. My solution is to move the query to the top of the method, and return if the query fails. The rest of the patch makes it possible for library-rescan to run in parallel with the rest of the GUI. Before, the database would stay locked during rescan, although nothing prevented the user from trying to use the rest of the GUI, which would lead to the GUI hanging and/or crashing relatively often. My solution is to commit at the end of scanning each individual directory, so that other database clients get a chance to do their work. I also added a pause button to the library-rescan window. I intend to spend part of this evening load-testing my changes. My DJ friend has several hundred GB of music; I tried to scan it right before the gig, but didn't finish. When I had time, I let it run, and it took about 4 hours. Being able to scan it incrementally, and allowing Mixxx to be usable meanwhile, would have been a big help; these changes allow that. I have more to say, but I figure I'll stop here for now...no need to talk your ear off in my first e-mail :-) Steven Boswell --- mixxx/src/library/basesqltablemodel.cpp 2013-04-08 12:24:12.405359000 -0700 +++ mixxx-build/src/library/basesqltablemodel.cpp 2013-04-09 13:00:07.983890678 -0700 @@ -177,15 +177,6 @@ QTime time; time.start(); -// Remove all the rows from the table. -// TODO(rryan) we could edit the table in place instead of clearing it? -if (m_rowInfo.size() 0) { -beginRemoveRows(QModelIndex(), 0, m_rowInfo.size()-1); -m_rowInfo.clear(); -m_trackIdToRows.clear(); -endRemoveRows(); -} - QString columns = m_tableColumnsJoined; QString orderBy = orderByClause(); QString queryString = QString(SELECT %1 FROM %2 %3) @@ -204,6 +195,16 @@ if (!query.exec()) { qDebug() this select() error: __FILE__ __LINE__ query.executedQuery() query.lastError(); +return; +} + +// Remove all the rows from the table. +// TODO(rryan) we could edit the table in place instead of clearing it? +if (m_rowInfo.size() 0) { +beginRemoveRows(QModelIndex(), 0, m_rowInfo.size()-1); +m_rowInfo.clear(); +m_trackIdToRows.clear(); +endRemoveRows(); } QSqlRecord record = query.record(); @@ -215,7 +216,7 @@ tableColumnIndices.push_back(record.indexOf(column)); } - // sqlite does not set size and m_rowInfo was just cleared +// sqlite does not set size and m_rowInfo was just cleared //int rows = query.size(); //if (sDebug) { //qDebug() Rows returned rows m_rowInfo.size(); --- mixxx/src/library/dao/trackdao.cpp 2013-04-08 12:24:12.405359000 -0700 +++ mixxx-build/src/library/dao/trackdao.cpp 2013-04-09 13:43:04.586253057 -0700 @@ -14,6 +14,7 @@ #include library/dao/cuedao.h #include library/dao/playlistdao.h #include library/dao/analysisdao.h +#include util/sleepableqthread.h QHashint, TrackWeakPointer TrackDAO::m_sTracks; QMutex TrackDAO::m_sTracksMutex; @@ -376,6 +377,33 @@ WHERE location = :location); } +// Allow added tracks to be flushed periodically, so as not to keep the database +// locked. +// Optionally pause between transactions. +void TrackDAO::addTracksFlush (const volatile bool a_rbPause, +const volatile bool a_rbCancel) +{ +// Complete any pending transaction. +if (m_pTransaction) { +m_pTransaction-commit(); +delete m_pTransaction; +m_pTransaction = NULL; +} + +// Broadcast the list of added tracks to any interested subscribers. +emit (tracksAdded (m_tracksAddedSet)); +m_tracksAddedSet.clear(); + +// If requested, pause. +// It'd be more efficient to use a QMutex/QWaitCondition, but that's +// probably overkill. +while (!a_rbCancel a_rbPause) +SleepableQThread::sleep (1); + +// Start a new transaction. +m_pTransaction = new ScopedTransaction(m_database); +} + void TrackDAO::addTracksFinish() { if (m_pTransaction) { m_pTransaction-commit(); @@