HapPlayer audio error

Hi all!

I am working in Fedora 35 and neither GStreamer 1.20 nor 1.19 works with the ofVideoPlayer and ofVideoGrsbber. You can check more info about the problem here in OpenFramework Github webage. Because of this problem, I am attempting to change a patch that use ofVideoPlayer to ofxHapPlayer. However, I found a problem with the audio. The idea of the patch was to play random videos and sounds from folders using ofVideoPlayer and ofSoundPlayer.It did worked. It loads one video while the other is playing and so on, However with the HapPlayer it seems that when one is playing the audio device get busy son the other can be loaded. I took out the part of the audio to check if the problem was the ofSoundPlayer but seems that it is the Hap Player.

The error is the following:

playing: openFrameworks/apps/myApps/haptest/bin/data/video/1.mov
loading: openFrameworks/apps/myApps/haptest/bin/data/video/3.mov

RtApiAlsa::getDeviceInfo: snd_pcm_open error for device (hw:0,0), Device or resource busy.

[ error ] RtApiAlsa::probeDeviceOpen: pcm device (hw:0,0) won't open for output.
[ error ] ofxHapPlayer: Error starting audio playback.

the code is base in someone else code (I do not remember where I took it) particulay the playAndReload function


string pathV = "openFrameworks/apps/myApps/haptest/bin/data/video/";
ofxHapPlayer movies[2];

unsigned int nowPlayer;
unsigned int totalMovies;
unsigned int loadingMovieId;

void playAndPreload();


void ofApp::playAndPreload(){

   // PLAY the current movie
   // need to load the first movie : should only happen once
   if( !movies[nowPlayer].isLoaded() ){
      movies[nowPlayer].load(pathV + ofToString(loadingMovieId + 1) + ".mov" );
   cout << "playing: " << movies[nowPlayer].getMoviePath() << endl;

   // PRELOAD the next movie
   // get a unique random ID
   int preloadId = floor(ofRandom(totalMovies));
   while (preloadId == loadingMovieId ) {
      preloadId = floor(ofRandom(totalMovies));
   // set the loading movie to the new ID
   loadingMovieId = preloadId;

   int nextPlayer = nowPlayer == 0 ? 1 : 0;
   // load movie in the player that isn't 'nowPlayer'
   movies[nextPlayer].load(pathV + ofToString(loadingMovieId+1) + ".mov" );
   cout << "loading: " << movies[nextPlayer].getMoviePath() << "\n" << endl;

void ofApp::update(){
     // check for 'isMovieDone'
     if( movies[nowPlayer].getIsMovieDone() ){
         movies[nowPlayer].stop();  // stop currently playing video
         nowPlayer = ( nowPlayer == 0 ) ? 1 : 0; // swap video player ID
         playAndPreload(); // make the magic happen 
void ofApp::draw(){

Any idea how I can sort this out, or if there is another player that allows me to do this?