Code Monkey home page Code Monkey logo

performous's Introduction

alt text

Performous

Build Status

An open-source karaoke, band and dancing game where one or more players perform a song and the game scores their performances. Supports songs in UltraStar, Frets on Fire and StepMania formats. Microphones and instruments from SingStar, Guitar Hero and Rock Band as well as some dance pads are autodetected.

Website at https://performous.org/ << If you can't reach it try the mirror https://performous.asgardsings.nl
Wiki at https://github.com/performous/performous/wiki
Discord at https://discord.gg/NS3m3ad

For compiling instructions visit the wiki page: https://github.com/performous/performous/wiki/Building-and-installing-from-source

Latest builds

performous's People

Contributors

abompard avatar ajenbo avatar apoleon avatar arielenter avatar baklap4 avatar berarma avatar darkmagister avatar dos1 avatar hetorusnl avatar isadofschi avatar jormangeud avatar jose1711 avatar lord-kamina avatar marwin89 avatar nieknooijens avatar ooshlablu avatar oznog avatar peque avatar rainbyte avatar s-k-y-l-i avatar sajjadg avatar scientica avatar stump avatar tapio avatar taynaron avatar tobix avatar tronic avatar twollgam avatar xaldyz avatar yoda-jm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

performous's Issues

Dance mode overhaul

Graphics update:

  • 3D arrow objects
  • Coloring based on note timing (as in other dance games), beat effects
  • Better track visualization (instead of the ugly texture)
  • BGCHANGE support (background videos)

Gameplay:

  • Proper mine support (currently buggy, matches too easily)
  • Improved hold note/combo support + roll/lift notes
  • 3D mode instead of traditional scrolling? (proof of concept in dance3d branch)

Core:

  • 3D object stretching/repeating support for long arrows
  • Clean up the dancegraph/instrumentgraph mess

HELP WANTED!

Various text layout bugs

Proper positioning/scaling for text elements.

  • Correct vertical alignment
  • Use dimensions to specify bounding box (possibly init from SVG)
  • Highlighted (current) lyric should be rendered in front of the others

Can't build on Mac

I've tried to follow your instruction to build it under Mac OS X 10.8 ML.

I would say it is very hard task :) All dependency was installed via brew.
Not all of them cmake can find out, during configuration package. There is some problem with magick++, but that problem coming form brew bug. Most important problem is coming on compile stage:

/usr/local/include/boost/variant/detail/move.hpp:141:35: error: no member named 'move' in namespace 'boost::detail::variant'; did you mean 'move'?
rhs = boost::detail::variant::move(tmp);

Simialr erros are a lot on that stage.
Seems it is problem coming from compile flags, could you please advise me where and how (and which one) should I use?

Seems that flags can solve it http://stackoverflow.com/questions/13445742/apple-and-shared-ptr

Latency calibration

Implement in-game latency calibration helper with the intention of making latency calibration as easy as possible.

  • Audio roundtrip by analyzing the sound captured by the microphone (fully automatic)
  • Controller/audio latency by playing blindly (listening to the beat only)
  • Audio/video by playing visually without audio? (needs controller/audio calibrated)

Windows build

We need a Windows build and also restore the CI system.

Building for Windows is hard because we have a) a huge pile of dependencies that need to be compiled first and b) no Windows developer.

For the past couple of releases, I have been cross-compiling the deps and Performous from Linux. However, my toolchain is now severely outdated and cannot compile Performous anymore. I'm now using MXE, which is nice in that it has build rules for all Performous' deps and also features an up-to-date compiler (in contrast to e.g. mingw packages in Ubuntu repos). I have tried to update the toolchain on several occasions, but it is hard: MXE compiles everything as static libs, but CMake doesn't handle recursive library deps, so I get a ton of undefined references. On the other hand, if I patch MXE to compile dynamic libs, compilation of some of them fails.

I have now added a mega hack to the build scripts that have allowed me to successfully compile and link Performous.exe. The hack uses pkg-config directly to fetch the private dependencies of the static libs and injects them to CMake's link command. I don't know why the CMake scripts don't do this automatically, even though they at least attempt to use pkg-config. Perhaps someone more intimate with CMake (@Tronic?) could shed some light, or even make CMake behave.

Regarding the exe, it doesn't start through Wine, which is unfortunate for testing. However, it works on real Windows, though it's rather buggy:

  1. Menus render on top of each other
  2. There is sometimes fullscreen flickering
  3. Some images fail to load randomly, resulting in black boxes
  4. Covers on the song browser sometimes leave trails
  5. Popup menus miss background
  6. Some other similar things I forgot

All of these seem to be graphical issues: I do get audio output and I also tested some instrument gameplay which worked fine apart from graphics glitches.

I'd now like to invite anyone who can to help:

  1. Test the build and report if you have same/different/no issues
  2. Any suggestions or actual work on fixing the bugs?
  3. Any suggestions or actual work on fixing CMake with static libs?

Mic software feedback to speakers

Allow singers to hear themselves while singing. Needs audio syncing (big technical obstacle) and preferably some kind of reverb effect. Adjusting volume based on correctness could also be useful.

playlist support for events

hi there (tapio might remember me from last time with the composer stuff see: performous/composer#3)

I'd like to add playlist support to performous for use at events or karaoke nights. in other words, while someone is singing, other people should be able to search for songs and put them into a play-que after each song the que is being displayed for a few seconds (so people can pass microphones) and the next song in the que is started. initially it would be a small bar at the top of the screen, but eventually this can be extended with multi-monitor support and/or an android app for remote access to the playlist.
i forked a temporarily working copy here: https://github.com/nieknooijens/performous but as with every enhancement, you should at first be able to compile the base program 🎱 .
I already have this set up with the only problem that I get this error at launch:

No config schema file found.
Install the file or define environment variable PERFORMOUS_ROOT

shouldn't be hard to get around but unfortunately I don't know how...

I also had a peek at some code from performous, looks like we have to create a new playlist-editor-screen class, for the actual editing. I also came upon this from screen_songs.cc (I assume this is the song browser):

else if (nav == input::NAV_START) {
ScreenManager* sm = ScreenManager::getSingletonPtr();
Screen* s = sm->getScreen("Sing");
ScreenSing* ss = dynamic_cast<ScreenSing*> (s);
assert(ss);
ss->setSong(m_songs.currentPtr());
sm->activateScreen("Sing");

so I guess [msongs.currentPtr()], returns a pointer for the currently selected song, it shouldn't be too hard to create a linked list with pointers from different songs and check the list after each song.

so will you help me to create this feature?

option videogap is not supported

Hello,

I have to use #videogap option for 2 songs because the mp3 is not ripped from the video file. I discovered Performous does not support this option very well: most of the times the video is not played, only text. I tested with ultrastardx without any problem. Thank you for your help.

Whammy bar pitch shifter algorithm

Text moved from wiki:

Status: There is some framework done i.e. passing the whammy value (the value itself needs some love/interpolating/AnimValue) to audio engine and a dummy function in which to implement the algorithm.

Here is the opinion of Vincent Verfaille (Doctor in Music Technology) when I asked for real time pitch shifter.

Bonjour Vincent,

Le plus simple et efficace me semble être une interpolation de la forme d'onde.
Par exemple, en augmentant le nombre de nouveaux échantillons M générés à partir de N < M échantillons d'origine,
on simule bien la pression sur la whammy bar lorsque le pitch descend; on simule en même temps les changements
de timbres liés au fait que la corde se détend, mais pas ceux des résonances de la caisse qui normalement ne bougent pas.
Cela dit, pour une guitare électrique, on se permet de les oublier.
Donc, l'algorithme le + simple est aussi le plus efficace!

Une interpolation cubique (voir des B-splines cubiques) est adaptée pour cela, elle permet de produire des
variations de phases cubiques et donc des variations de fréquence quadratique, ce qui évite les sauts de fréquence
aux extrémités de l'intervalle.
Il faut cependant filtre passe-bas le signal avant de le ré-échantillonner, pour éviter le repliement du spectre;
la fréquence de coupure de ce passe bas est donc N/M * Fn (Fn: demi-fréquence d'échantillonnage du signal original).
Tout ceci peut se faire en temps réel, avec une latence de quelques échantillons (le nombre d'échantillons pour
une interpolation cubique étant 4).

Après, reste le problème de la longueur du signal puisque sinon, le signal généré est plus long que le
signal de départ. Deux solutions:
- ajout-superposition (overlap-add = OLA): ré-échantillonnage + passe bas -> OLA, et le tour est joué.
Par contre, cela peut générer des problèmes de phase lors de l'OLA, d'où l'utilisation de méthodes
pitch-synchrones (PSOLA). Ça peut rester du temps-réel, mais avec plus de latence... et d'artefacts potentiels.
- sinon, considérer que la "whammy bar" ne va que vers la caisse de la guitare (et le pitch uniquement
vers le bas); dans ce cas, utiliser le signal d'entrée pour générer le signal de sortie comme expliqué
précédemment, puis le moduler en amplitude en fonction du signal d'entrée. Autrement dit, la hauteur
et le timbre sont obtenus par un signal de plus en plus désynchronisé, mais l'amplitude par le signal
réel. C'est une autre bidouille efficace, surtout lorsque le signal s'éteint vite. Dès que le whammy
bar est relâchée, on revient en mode normal.

Voilà, j'espère que ça aidera!
Vous trouverez les codes Matlab de la transposition (pitch-shifting) par ré-échantillonnage et de la
transposition pitch-synchrone dans des livres comme celui d'Udo Zoelzer (Dagitial Audio Effects; les
codes existent en ligne), il fait exactement ce qu'il vous faut.

Bonne chance,

Vincent Verfaille

Will translate this as soon as I have time ([[User:Yoda|Yoda]] 23:34, 25 January 2010 (UTC))

=== Translation from Google translate ===
Hello Vincent,

The simplest and most effective seems to be an interpolation of the waveform.
For example, increasing the number of new samples generated from M N <M samples of origin
well it simulates the pressure on the whammy bar when the pitch goes down, it simulates the same time changes
stamps related to the fact that the rope is relaxed, but not those of the resonances of the body that normally do not move.
However, for an electric guitar, we allow ourselves to forget.
So, the algorithm is the + single most effective!

Cubic interpolation (see B-splines) is adapted to this, it can produce
cubic phase variations and hence quadratic frequency variations, which avoids the frequency hopping
the ends of the interval.
It must, however, low-pass filter the signal before re-sampled to avoid aliasing;
cutoff of this lowpass is N / M * Fn (Fn: half-sampling frequency of original signal).
All this can be done in real time, with a latency of few samples (the number of samples for
cubic interpolation being 4).

Then there remains the problem of the length of the signal because otherwise the signal generated is longer than the
starting signal. Two solutions:

  • Add-overlay (overlap-add = OLA): resampling + lowpass -> OLA, and voila.
    By cons, it can cause phase problems at the OLA, hence the use of methods
    pitch-synchronous (PSOLA). It can stay on the real-time, but with more lag ... and potential artifacts.
  • Otherwise, consider that the "whammy bar" is only going to fund the guitar (and the only pitch
    down), in which case, use the input signal to generate the output signal as explained
    above, then the amplitude modulated as a function of input signal. In other words, the height
    and tone are achieved by a signal increasingly out of sync, but the amplitude of the signal
    real. This is another hack effective, especially when the signal goes off quickly. Once the whammy
    bar is released, it returns to normal.

Well, I hope it helps!
You will find the Matlab code transposition (pitch-shifting) by re-sampling and
transposition pitch-synchronous in books like Udo Zoelzer (Dagitial Audio Effects; the
codes are available online), it does exactly what you need.

Good luck

Vincent Verfaille

=== Links ===

  • V. Verfaille, DRIVING PITCH-SHIFTING AND TIME-SCALING ALGORITHMS WITH ADAPTIVE AND GESTURAL TECHNIQUES: [http://www.elec.qmul.ac.uk/dafx03/proceedings/pdfs/dafx20.pdf]

Compile error

Compiling git from tonight...

[ 41%] Building CXX object game/CMakeFiles/performous.dir/screen_intro.cc.o
[ 43%] Building CXX object game/CMakeFiles/performous.dir/controllers-joystick.cc.o
/home/chris/performous/game/controllers-joystick.cc:19:40: error: expected ‘;’ at end of member declaration
/home/chris/performous/game/controllers-joystick.cc:19:46: error: ‘override’ does not name a type
/home/chris/performous/game/controllers-joystick.cc:22:52: error: expected ‘;’ at end of member declaration
/home/chris/performous/game/controllers-joystick.cc:22:54: error: ‘override’ does not name a type
make[2]: *** [game/CMakeFiles/performous.dir/controllers-joystick.cc.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [game/CMakeFiles/performous.dir/all] Error 2
make: *** [all] Error 2

Thoughts?
I duplicated on two PCs, second was a fresh loaded VM although the game doesnt run in a VM itll compile.

Patch for composer to remove deprecation and compile errors

Hi,

i know you prefer people to push commits to the git repository. But as I don't currently have write access, and I'm not sure if my patch is correct, I'm posting it here. Hopefully someone can check it and commit it.

With this patch the current version in the git repository now compiles and runs on Linux Mint Debian Edition.

--- composer_clean/src/ffmpeg.cc    2013-02-11 21:14:52.425153064 +0800
+++ composer/src/ffmpeg.cc  2013-02-11 19:16:33.101251211 +0800
@@ -49,7 +49,7 @@
    // TODO: use RAII for freeing resources (to prevent memory leaks)
    QMutexLocker l(&s_avcodec_mutex); // avcodec_close is not thread-safe
    if (pAudioCodecCtx) avcodec_close(pAudioCodecCtx);
-   if (pFormatCtx) av_close_input_file(pFormatCtx);
+   if (pFormatCtx) avformat_close_input(&pFormatCtx);
 }

 double FFmpeg::duration() const {
@@ -67,8 +67,8 @@
    QMutexLocker l(&s_avcodec_mutex);
    av_register_all();
    av_log_set_level(AV_LOG_ERROR);
-   if (av_open_input_file(&pFormatCtx, m_filename.c_str(), NULL, 0, NULL)) throw std::runtime_error("Cannot open input file");
-   if (av_find_stream_info(pFormatCtx) < 0) throw std::runtime_error("Cannot find stream information");
+   if (avformat_open_input(&pFormatCtx, m_filename.c_str(), NULL, NULL)) throw std::runtime_error("Cannot open input file");
+   if (avformat_find_stream_info(pFormatCtx, NULL) < 0) throw std::runtime_error("Cannot find stream information");
    pFormatCtx->flags |= AVFMT_FLAG_GENPTS;
    audioStream = -1;
    // Take the first video/audio streams
@@ -82,7 +82,7 @@
    pAudioCodec = avcodec_find_decoder(cc->codec_id);
    audioQueue.setRateChannels(cc->sample_rate, cc->channels);
    if (!pAudioCodec) throw std::runtime_error("Cannot find audio codec");
-   if (avcodec_open(cc, pAudioCodec) < 0) throw std::runtime_error("Cannot open audio codec");
+   if (avcodec_open2(cc, pAudioCodec, NULL) < 0) throw std::runtime_error("Cannot open audio codec");
    pAudioCodecCtx = cc;
 }

@@ -182,10 +182,10 @@
        audioQueue.input(samples, samples + outsize, 1.0 / MAX_VALUE);\
    }
                switch (pAudioCodecCtx->sample_fmt) {
-                   case SAMPLE_FMT_S16: OUTPUT_SAMPLES(short, 32767.0); break;
-                   case SAMPLE_FMT_S32: OUTPUT_SAMPLES(int, 8388607.0); break; // 24 bit samples padded to 32 bits
-                   case SAMPLE_FMT_FLT: OUTPUT_SAMPLES(float, 1.0); break;
-                   case SAMPLE_FMT_DBL: OUTPUT_SAMPLES(double, 1.0); break;
+                   case AV_SAMPLE_FMT_S16: OUTPUT_SAMPLES(short, 32767.0); break;
+                   case AV_SAMPLE_FMT_S32: OUTPUT_SAMPLES(int, 8388607.0); break; // 24 bit samples padded to 32 bits
+                   case AV_SAMPLE_FMT_FLT: OUTPUT_SAMPLES(float, 1.0); break;
+                   case AV_SAMPLE_FMT_DBL: OUTPUT_SAMPLES(double, 1.0); break;
                    default: throw std::runtime_error("Unsupported sample format");
                }
 #undef OUTPUT_SAMPLES

After this patch is applied there is still one deprecation warning. That is because I am not sure how to fix this warning.

Cheers, Ian

Band: Online and LAN Multiplayer

It is possible to play multiplayer in current performous (of course it gets better when #51 gets done), but it's fun to be able to play online or in your LAN with your friends.
we will be one step closer to add band feature. should we name it Band instead of multiplayer online?

Adding avatar doesn't work

I've tried to add a custom avatar using the wiki page:
https://github.com/performous/performous/wiki/Player-configuration

but it doens't work anymore it have some error parsing the xml file, so it overwrite it so you are loosing all your highscore :( here the error:

~/.config/performous/database.xml:6: parser error : Opening and ending tag mismatch: players line 3 and player

^
~/.config/performous/database.xml:8: parser error : Opening and ending tag mismatch: performous line 2 and players

^
`/.config/performous/database.xml:9: parser error : Extra content at the end of the document

^
Could not load ~/.config/performous/database.xml: Document not well-formed.
will try to create

Resizing Performous window crashes Gnome Shell

Resizing a few times with Win+Left/Right first leads to graphics artifacts (Performous window rendered black) and lost focus and then makes the entire desktop hang so that gnome-shell uses a high percentage of CPU and doesn't render anything. No kidding. Xorg has to be killed in order to restore a functional desktop (possibly killing gnome-shell and starting some other WM might be possible too, in case you had some very important unsaved work open).

Other than that, there are focus loss issues even when Performous is simply started (in maximized windowed mode, as enforced by Gnome Shell). At times I have to Alt+Tab to Performous when it starts even though normally it receives focus automatically.

These are really Gnome bugs but I don't feel like logging onto their bug tracker so here goes, for now at least.

Proper score dialog + highscore handling

Should they be combined somehow or one of them removed?

Highscore needs to:

  • Remember per mic/instrument which player was using it last
  • Ask names for the highest ranked people first
  • Display more clearly which player is which

Karaoke feedback

Hi folks,

I love performous, you guys rock for making it!

It would be even better if we could have some (optional) microphone feedback. I am "just" talking about mixing the microphone input to the song output.

I'd write it myself but I am pretty clueless in sound processing. If you think it is easy and sombody can point me to where this should be integrated. I can give it a shot myself.

thanks again!

Some video's play choppy in performous 0.7 X86_64 Linux

As the title says: some video's play fine (lucky star - AVI -> FFH264 & FFAAC) but some are really choppy (gagnam style AVI - FFODIVX and guus meeuwis which is also AVI - FFH264) they keep in sync but skip a lot of frames every second....

Layout and visual design issues

Most of these are not blockers, but annoyances or enhancements. Not in any particular order.

Song browser

  1. I don't particularly like the current light blue color of the game and song title
  2. Hiscores look somewhat like they are in a temporary position
  3. I don't like the default background (black bg with the white performous guy on the right)
  4. With light backgrounds, the right side of the song title becomes unreadable
  5. Playlist menu needs separate theme from instrument menu and e.g. darker background
  6. Playlist menu tooltips are in a bad position and with poor color, should probably just remove
  7. Available game modes should be prominently displayed. I already moved them, made bigger and added some glow, but the glow doesn't seem to work very well on light backgrounds
  8. I liked the fallback background of moving tiled covers so much that I added some (different) movement to the regular full screen bg images too. This could be improved.

Singing screen

  1. Score dialog goes partially out of screen on 16:9 aspect ratio
  2. Mic icon and the score seem to overlap a bit
  3. Popup menus are rather ugly
  4. Add some zooming, panning and fading into static background images?

Players screen

Much work to be done here.

Playlist screen

  1. Displaying covers next to the list would be nice, or at least the next song's cover
  2. Background could be the next or currently selected song's background

Recording performances

Record webcam video (if available), audio and input event information to be stored with a high score, or allow sharing online.

There are a number of technical difficulties that need to be solved.
-Syncinc audio clocks together for a single audio track that matches the original song
-A/V compression with ffmpeg (realtime in a separate thread?)
-Online features (separate issue)
-Input storage format for instruments and dance (if supported at all)
-Disk storage format (is video stored only once and each player stored separately?)

medeli/dbdrums drumkit supported

i have a dbdrums DB10 module that have usb interface
i connected and work like a charm in git version compilen on debian wheezy!

dmesg:

[10892.998226] usb 1-1.2: new full-speed USB device number 4 using ehci_hcd
[10893.092433] usb 1-1.2: New USB device found, idVendor=0a67, idProduct=5011
[10893.092443] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[10893.092450] usb 1-1.2: Product: e-drum
[10893.092455] usb 1-1.2: Manufacturer: Medeli El\xffffffe2\xffffff81\xffffffa5\xffffff81\xffffffa5\xffffffe6\xffffff8c\xffffff80\xffffff8c\xffffff80\xffffffe7\xffffff90\xffffff80\xffffff90\xffffff80\xffffffe7\xffffff88\xffffff80\xffffff88\xffffff80\xffffffe6\xffffffbc\xffffff80\xffffffbc\xffffff80\xffffffe6\xffffffb8\xffffff80\xffffffb8\xffffff80

product page:
http://www.dbdrums.com.ar/productos/modulos/modulo-de-bateria-dbdrums-db10#.UaLRfXzgif0

can add it to the working devices page on wiki?

microphone make performous crash

in the latest git version (this not happens in 0.7.0) if i attach a mic (i have a usb guitar hero mic) and i assign a player to it after pressing enter to save it, performous crash, here the error:
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
Expression 'alsa_snd_pcm_start( stream->capture.pcm )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2858
Expression 'AlsaStart( stream, 0 )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 4144

and i can not run performous again until i remove the mic from the config file

Gamma correction and premultiplied alpha are handled incorrectly

Cairo uses linear gamma and premultiplied alpha but we handle bitmaps from it as sRGB, causing a few issues. However, simply switching to linear RGB won't solve the problem because Cairo (toy API) PNG loading is broken and it doesn't gamma-correct loaded images. Presumably gdk-imglib PNG loading API might do proper gamma correction but that will cause banding because Cairo only supports 32 bit RGBA (8 bit per component).

Currently, due to Cairo thinking that it is operating in linear space, even though it isn't:

  • Premultiplication is done in sRGB instead of linear RGB (where it should be), resulting partially transparent pixels displaying in wrong shade.
  • Blending and AA operations produce incorrect results.
  • SVG colors might be off even when not transparent (not sure what the specification says or if rsvg handles correction anyway).

Possible fix 1: load PNGs and JPEGs using our own loader that correctly converts them into linear float format. This means a lot of pixel fiddling and potentially slow processing in software. Cairo and other sources could use their native formats without issues when bitmaps are out of the way (although some banding would still occur with Cairo).

Possible fix 2: Use Cairo gdk-imglib loading in hopes that it does things properly. This will cause banding due to the limited precision of Cairo image buffers (gamma-correcting back and forth in 8 bit precision). This is technically the correct way to deal with this but both performance and image quality will suffer.

Possible fix 3: Load images as they are, using our own loader, with no premultiplication, and rewrite rendering code so that it can work with non-premultiplied textures. This gives us the fastest image loading and good image quality but implementing multiple rendering modes might be tricky. Cairo can only be used for text and SVG, and it will still require support for premultiplied linear RGB textures.

All solutions that I can think of are difficult and there are drawbacks. Things mostly work the way they are now but we cannot use e.g. white transparent pixels in images, SVG or text (it will display in gray) and anything that is transparent renders incorrectly.

As a reference, the image sources and their native formats that we have to deal with:

  • JPEG (RGB24, sRGB)
  • PNG (RGB24 or RGBA32, non-premultiplied, sRGB)
  • SVG (BGRA32, premultiplied, linear)
  • Text (same as SVG)
  • Video (RGB24, sRGB -- but libswscale can do other formats, YUV would be best)
  • Webcam (BGR24, sRGB)

Segfault on dance

When pressing Start during song start (before instrument menu was shown), Performous segfaulted. Party in progress, can't debug-- But registering this here so that it is not forgotten as it is obviously a blocker for 0.8 release.

segmentation fault on startup

I tried to install preformous via the github instructions. I am running ubuntu 12.04 and have installed libjack-jackd2-dev. After going through the installation, when I call performous on the command line I get the following:

Performous 0.7.0+
Internationalization: Enabled
MIDI I/O: Enabled
Webcam support: Enabled

ALSA lib pcm_dsnoop.c:612:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib audio/pcm_bluetooth.c:1614:(audioservice_expect) BT_GET_CAPABILITIES failed : Input/output error(5)
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server socket
jack server is not running or cannot be started
X Error of failed request: BadRequest (invalid request code or no such operation)
Major opcode of failed request: 153 (GLX)
Minor opcode of failed request: 19 (X_GLXQueryServerString)
Serial number of failed request: 13
Current serial number in output stream: 13

then the terminal just hangs...

any suggestions what to do from here? thanks

Kiosk/arcade mode and related functions

Add features needed for running Performous in embedded systems such as arcade cabinets.

  • Kiosk/arcade mode (disable exiting the game and limit other functions, auto-reset after idle for a certain period)
  • Allow playing a single song given as command-line argument (no menus)

We are waiting for a commercial sponsor to pay for the development.

Program crashes when ending a song (results screen)

FATAL ERROR: boost thread: thread not joinable: Invalid argument

Distro: Archlinux
Windowmanager: i3
Desktop: none

Full log:
% performous
Performous 0.7.0+
Internationalization: Enabled
MIDI I/O: Enabled
Webcam support: Enabled

ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
audio/error: Audio device 'dev="USBMIC" mics="blue,red"': No such device.
audio/error: Audio device 'dev="Microphone" mics="*"': No such device.
audio/error: Audio device 'out=2': Device doesn't have enough output channels
ALSA lib seq_hw.c:457:(snd_seq_hw_open) open /dev/snd/seq failed: Permission denied
Saved configuration to "/home/philip/.config/performous/config.xml"
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
Saved configuration to "/home/philip/.config/performous/config.xml"
ALSA lib pcm_dsnoop.c:613:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream
ALSA lib pcm_dmix.c:1018:(snd_pcm_dmix_open) unable to open slave
FATAL ERROR: boost thread: thread not joinable: Invalid argument

Hang on exit, window stays open

After pressing Alt+F4 in song browser (I think).

(gdb) thread apply all bt

Thread 1 (Thread 0x7f3fbb9d79c0 (LWP 21632)):
pthread_cond_wait@@GLIBC_2.3.2 () at ../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
0x00007f3fb2bfcae6 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
0x00007f3fb2bfcec7 in ?? () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
0x00007f3fb2bfd033 in xcb_writev () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
0x00007f3fb470cd5e in _XSend () from /usr/lib/x86_64-linux-gnu/libX11.so.6
0x00007f3fb470d237 in _XReply () from /usr/lib/x86_64-linux-gnu/libX11.so.6
0x00007f3fb4708d5d in XSync () from /usr/lib/x86_64-linux-gnu/libX11.so.6
0x00007f3fba5d881d in ?? () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
0x00007f3fba5d995d in ?? () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
0x00007f3fba5cbb1e in SDL_VideoQuit () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
0x00007f3fba5a54b5 in SDL_QuitSubSystem () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
0x00007f3fba5a555e in SDL_Quit () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
0x00007f3fb5aab121 in __run_exit_handlers (status=0, listp=0x7f3fb5e306a8 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:77
0x00007f3fb5aab1a5 in __GI_exit (status=) at exit.c:99
0x00007f3fb5a90eac in __libc_start_main (main=0x70d7b4 <main(int, char**)>, argc=1, ubp_av=0x7fffda6df8c8, init=, fini=, rtld_fini=, stack_end=0x7fffda6df8b8)
at libc-start.c:294
0x0000000000613899 in _start ()

(no other threads)

Could we filter or sort by difficulties?

I was trying to find some easy dance in performous, and it seem there is no way to sort, filter, or even look at available difficulties without launching the track. It would be great to have someway to quickly find track whose difficulties match one's capabilities.

Guitar hero controller for Android/iOS

Hello,

I just downloaded to try the Guitar hero controller for Android/iOS and the PC server (see https://play.google.com/store/apps/details?id=com.rainy.fretsplayer&hl=es) and it ask me to change the keyboard mapping configuration in order to work.

What it do is to show the frets colors in the phone, and send the respective keyboard keys (1 to 5) But in this controller the pick and the whamy are 6 and 7 respectively. In Performous is shift/enter and backspace, again respectively.

There is no way (that I know) to change the mapping of the app, since is very basic and closed.

I looked in all the xml in both "program files/performous" and "user/app data/roaming/performous". In the IRC they told me to change a file (config-controllers.cc or something like that) and compile. Too much for me.

So, I recommend to add keyboard configuration in next versions, so we can adapt Performous to any kind of initiative like that.

Port Performous to SDL 2.0

Performous is currently using SDL 1.2. Porting over to the new (soon to be released) version will enable:

  • Multiple keyboard support (e.g. more than one keyboard guitar at a time).
  • Multiple display support (currently broken because of SDL 1.2 limitations).

Care must be taken to still support SDL 1.2 as well because it will take a while until 2.0 becomes widely available. Because Performous' reliance on SDL facilities is light, supporting both shouldn't be difficult. Porting should be done in branch "sdl2" (not yet created) and the work should only be started after the 0.8 release (scheduled this Friday).

TODO:

  • Add FindSDL2.cmake script (find one that already exists or write our own)
  • Modify game/CMakeLists.txt to detect/choose a version
  • Fix any API incompatibilities in code
  • Make use of scancodes rather than keysyms for guitar frets and other things that should use the same key no matter which layout (e.g. French vs. English)
  • Implement proper multi-display support (this is a major task)

Note: the current input system already supports multiple keyboards in theory. The keyboard number is just always zero with SDL 1.2. Simply using SDL 2.0 instead of 1.2 should enable this new feature and thus it is not included as a TODO task.

HiScore saving

I'm not saving high scores on git from yesterday, anyone confirm?

fspath branch needs testing

I've rewritten a large parts of the filename handling of Performous as well as the parts of songparsers dealing with this. The work is nearing completion and I am looking for a merge to master but this needs to be reviewed and tested thoroughly because it will almost certainly create some regressions.

On the positive side, it fixes a number of existing bugs and makes automatic media file finding better than at any point before. And it eliminates a lot of redudant code.

  • Songparsers of specific types no longer seek for their media files. This is done centrally in songparser.cc.
  • All paths are absolute, so you can refer to song.cover or other files directly instead of song.path + song.cover.

Comments are welcome.

Online Score Chart

It would be nice if we can collect high-scores from all clients (if they willing to send their score for us).

DLC (Issue #4) make it possible for users to play the same song that server can identify.

sound problems when rewinding songs twice

when rewinding a song twice really fast, the sound stops and the song continues, when playing a bit around with the song again (forwarding, rewinding) the sound starts playing again.

Texture corruption/mismatch

One of the menu pics in main menu (the one used when "Perform" is selected) suddenly displayed some CD cover instead of what it should, and would stay that way until the menu was refreshed (by entering Practice in my case). This suggests a bug in threaded texture handling (or graphics drivers, less likely). Could not reproduce.

embedded webserver for remote (playlist) control

we already discussed this on IRC, and I already made a new branch but I wanted to share some Ideas:
1 - interface should contain 3 tabs, 1 for viewing the playlist, 1 for managing the playlist and 1 for remote control, I created a mock-up using http://jquerymobile.com/ builder but I can't add new pages to it using the editor, so I think I should go back to text based stuff.

the mock-up is here: http://ubuntuone.com/7mvcjWYXewyM9jWqT9XM5C
2 things to mention that doesn't concern this issue:
1 jquery mobile uses MIT licence, which is compatible with GPL so that's good!
2 the automated build-system http://aave.performous.org/ci/ci.cgi doesn't generate anything good.

Using C++11 facilities to clean up code and Boost dependencies

We can reduce but not entirely remove dependency on Boost by replacing parts of it with stdlib equivalents. This bug is a tracker for features to replace, and for discussion about compiler compatibility.

  • boost/algorithm/string.hpp: No stdlib equivalents
  • boost/bind.hpp: std::bind in functional
  • boost/circular_buffer.hpp: No stdlib equivalent
  • boost/cstdint.hpp: Now in stdlib (cstdint)
  • boost/date_time.hpp: Partial support from stdlib (chrono)
  • boost/filesystem.hpp: C++ still doesn't know of files :/
  • boost/foreach.hpp: C++11 built-in range-based for!
  • boost/format.hpp: No direct stdlib equivalent but see std::to_string(num)
  • boost/function.hpp: std::function (functional)
  • boost/iostreams/stream_buffer.hpp: ???
  • boost/lexical_cast.hpp: See std::to_string and std::stoi etc. (string)
  • boost/noncopyable.hpp: C++11 deleted functions (but noncopyable is cleaner in code)
  • boost/program_options.hpp: Never gonna get into stdlib
  • boost/ptr_container/: Not in C++11 and probably not in C++14 either.
  • boost/regex.hpp: The last time I tried (quite recently), the libstdc++ implementation was unusably incomplete.
  • boost/smart_ptr/scoped_ptr.hpp: std::unique_ptr in memory (also replaces std::auto_ptr)
  • boost/smart_ptr/shared_ptr.hpp: std::unique_ptr (if shared_ptr was only used for calling a free function of a C lib), std::shared_ptr if the resource is actually shared, C++11 move semantics instead if a resourse is only being moved.
  • boost/thread/: std::thread and stdlib mutexes (no idea if stdlib implementation is good yet or if all necessary lock types are included or not)
  • boost/variant.hpp: Didn't make it into C++11

We don't currently use Boost.ASIO directly but likely will, soon. Sockets didn't make it into C++11.

Segfault on guitar BRE

At the end of Iron Maiden - Run To The Hills, when playing the first notes of big rock ending on keyboard guitar, Performous segfaulted.

controllers/info: processing (keyboard 0 instrument 2) GUITAR BLUE (NAV_NONE) value=0
controllers/info: processing (keyboard 0 instrument 2) GUITAR RED (NAV_NONE) value=1
Muistialueen ylitys

OpenGL ES 2.0 + EGL port

The new rendering engine in 0.7.0 should make this rather straight-forward. Implementing this would allow us to try porting the game to new embedded and mobile platforms such as the Raspberry Pi (which has been requested a few times; performance might become an obstacle but it's worth a try).

Coughing in my microphone causes segfault

Now that's one weird issue.

I mostly use, for now, Performous's "Training" feature (read the microphone's pitch and shows it on a sheet). This tool is useful to me when creating song files with Composer alongside, as seen as in a semi-related issue report on COmposer's GitHub page.

My microphone is actually a throat microphone. This allows me to keep my hands free while working, and minimize external noise impact. However, it tends to over-amplify some sounds, such as coughing , or scratching near the throat; in such cases, Performous tries to analyze the pitch and draw notes on screen, fails, and segfaults.

When launched in a Terminal, the error is reported as:
"terminate called without an active exception"

This might be a hint regarding how Performous handles the microphone inputs. I doubt this could appear in-game, in regular play situation - the input usually isn't that aggressive.

OS: Ubuntu 12.04 64bit
Performous 0.7.0

Second mic off pitch

Used windows version no issues. Grabbed newest git on Ubuntu (duet and videogap support), player one mic is normal, player two mic is always a step high on pitch. I can swap mics to verify its the second usb port rather than the mic. Duplicated on other hardware, same usb mics.
Mics are Audio-Technica USB.
Any ideas?

singstar compatibility?

Hello,

I have a SingStar 80's vol. 3 for Nintendo Wii and I would like to know if I can use the files with Performous 0.7? On the DVD, in the songs directory, each karaoke music have .xml (lyrics, tempo...), .tex (cover?) and .vid (vidéo in bink format) files. Is performous could read directly this files or do I have to convert them? If I have to convert them, someone could explain me how? I saw on a tutorial I could convert .vid in avi file with radtools, but I found nothing for the xml and tex files...
Thank you.

Instrument menu buggy

After have choose a song, if you press a button in the guitar to select the player you can not move in the menu that appear (the menu to choose the instrument, the difficulty,...) you press down and it immediately go up to play, and also if you green to start the game the menu go away but reappear immediately after, also it seems that the start button create more mess than helping.

Tried with 2 guitar, it works with the keyboard only.

"Not set" option sometimes flickers in audio device config menu.

The option flickers between gray and black every frame when a mic is chosen (not for output). Current settings (all mics and output currently not set) do not seem to affect it but the bug doesn't occur every time. I suspect that this might be caused by the settings actually having invalid value other then "not set" because making any setting (pressing Enter) clears the flicker problem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.