diff --git a/README.md b/README.md
index 64a452ffa20fb769616980800429c5aaa67626a1..6929c0d2cdc7db4492f4b5ec507edd643d006447 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,17 @@
+KinskiGL_ALSA
+=============
+This project is a fork of KinskiGL for use alsa for audio outpout on raspbery
+Is more a hack of a final code 
+he use m_omx_render_hdmi object a best wave are creat à new object for alsa
+
+for change output use 
+echo "pcm hw:0,0" | nc 127.0.0.1 33333
+hw:0,0=jack3.5mm raspbery
+hw:0,1=hdmi
+hw:1,0=usb sound card
+
+For this time we don't can change output during playback (shutdown the audio and fast read the end of the video)
+
 KinskiGL
 ========
 
diff --git a/modules/media/rpi/MediaController.cpp b/modules/media/rpi/MediaController.cpp
index adf83cab429060e4af33c42398933de9910eaad5..f3057b1a8242419d477c9b435928506bb36c9921 100644
--- a/modules/media/rpi/MediaController.cpp
+++ b/modules/media/rpi/MediaController.cpp
@@ -24,6 +24,8 @@ extern "C"
 namespace kinski{ namespace media
 {
     std::shared_ptr<COMXCore> m_OMX;
+    std::string alsa_pcm;
+
 
     struct MediaControllerImpl
     {
@@ -421,7 +423,7 @@ namespace kinski{ namespace media
         m_impl->m_render_target = the_render_target;
         m_impl->m_audio_target = the_audio_target;
 
-        m_impl->m_player_audio.reset(new OMXPlayerAudio());
+        m_impl->m_player_audio.reset(new OMXPlayerAudio());        
         m_impl->m_player_video.reset(new OMXPlayerVideo());
 
         if(!m_impl->m_omx_reader.Open(m_impl->m_src_path.c_str(), true/*m_dump_format*/,
@@ -496,6 +498,12 @@ namespace kinski{ namespace media
             LOG_WARNING << "could not open audio player";
             return;
         }
+        
+        if(m_impl->m_has_audio)
+        {
+            m_impl->m_player_audio->SetAlsaPcm(alsa_pcm);//ici
+        }
+        
         if(m_impl->m_has_audio)
         {
             m_impl->m_player_audio->SetVolume(m_impl->m_volume);
@@ -529,6 +537,7 @@ namespace kinski{ namespace media
             m_impl->m_playing = true;
             m_impl->m_pause = false;
             set_rate(m_impl->m_rate);
+        printf("\n\nplay-------------------------------------------\n\n");
 
             // start thread
             m_impl->m_thread = std::thread(std::bind(&MediaControllerImpl::thread_func, m_impl.get()));
@@ -577,8 +586,9 @@ namespace kinski{ namespace media
         return m_impl ? m_impl->m_volume : 0.f;
     }
     
-    void MediaController::set_alsa_pcm(std::string alsa_pcm)
+    void MediaController::set_alsa_pcm(std::string l_alsa_pcm)
     {
+        alsa_pcm=l_alsa_pcm;
         if(m_impl)
             m_impl->m_player_audio->SetAlsaPcm(alsa_pcm);//ici
     }
diff --git a/modules/media/rpi/OMXAudio.cpp b/modules/media/rpi/OMXAudio.cpp
index a63be18dc75375f488f5ae8f6999e6f2fe13582a..f6b298f993b6b5e825bdc3d7e38507ac87352d03 100644
--- a/modules/media/rpi/OMXAudio.cpp
+++ b/modules/media/rpi/OMXAudio.cpp
@@ -36,6 +36,7 @@ using namespace std;
 // the size of the audio_render output port buffers
 #define AUDIO_DECODE_OUTPUT_BUFFER (32*1024)
 static const char rounded_up_channels_shift[] = {0,0,1,2,2,3,3,3,3};
+std::string pcm;
 
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
@@ -112,6 +113,7 @@ bool COMXAudio::PortSettingsChanged()
 	  printf("\n\n\nFAIL_ALSA\n\n\n");
       return false;
   }
+  SetAlsaPcm(pcm);
 
   UpdateAttenuation();
 
@@ -758,8 +760,9 @@ void COMXAudio::SetMute(bool bMute)
 }
 
 //***********************************************************************************************
-void COMXAudio::SetAlsaPcm(std::string pcm)
+void COMXAudio::SetAlsaPcm(std::string l_pcm)
 {
+    pcm=l_pcm;
     char* spcm;
     spcm=new char[pcm.size()];
     strcpy(spcm,pcm.c_str());
diff --git a/modules/media/rpi/omx_alsasink_component.cpp b/modules/media/rpi/omx_alsasink_component.cpp
index a9a13f84a209eb409270744b99e36e1c8e8869d3..4e540688b2564cf3d5355b61f77c15eb76174be9 100644
--- a/modules/media/rpi/omx_alsasink_component.cpp
+++ b/modules/media/rpi/omx_alsasink_component.cpp
@@ -144,6 +144,7 @@ OMX_ERRORTYPE omx_alsasink_component_Constructor(OMX_COMPONENTTYPE *openmaxStand
   
   /* Allocate the playback handle and the hardware parameter structure */
   char* name = alsa_pcm.c_str();
+  printf("\n\nOpen audio %s ------------------------------\n\n",name);
   if ((err = snd_pcm_open (&omx_alsasink_component_Private->playback_handle, name, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
     DEBUG(DEB_LEV_ERR, "cannot open audio device %s (%s)\n", name, snd_strerror (err));
     return OMX_ErrorHardware;
diff --git a/src/projects/media_player/MediaPlayer.cpp b/src/projects/media_player/MediaPlayer.cpp
index a659832e795164c5f6c74cd5d62f219e1bff51a7..1992fb0000ada5e8a896e14777538e90e3f4f8cb 100644
--- a/src/projects/media_player/MediaPlayer.cpp
+++ b/src/projects/media_player/MediaPlayer.cpp
@@ -245,7 +245,7 @@ void MediaPlayer::update_property(const Property::ConstPtr &theProperty)
         }else{ m_broadcast_timer.cancel(); }
     }else if(theProperty == m_alsa_pcm)
     {
-	//m_movie->set_alsa_pcm(*m_alsa_pcm);
+	m_movie->set_alsa_pcm(*m_alsa_pcm);
     }
 }
 
@@ -379,7 +379,7 @@ void MediaPlayer::setup_rpc_interface()
         if(!rpc_args.empty()){ *m_brightness = kinski::string_to<float>(rpc_args.front()); }
     });
 
-    /*remote_control().add_command("pcm", [this](net::tcp_connection_ptr con,
+    remote_control().add_command("pcm", [this](net::tcp_connection_ptr con,
                                         const std::vector<std::string> &rpc_args)
     {
         con->send("set_pcm ");//ici
@@ -392,7 +392,7 @@ void MediaPlayer::setup_rpc_interface()
         { 
             con->send(to_string(m_alsa_pcm)); 
         }
-    });*/
+    });
     
     remote_control().add_command("set_rate");
     register_function("set_rate", [this](const std::vector<std::string> &rpc_args)