folder Tahribat.com Forumları
linefolder Java
linefolder Soket Programlama İle Mikrofon Dinlemek



Soket Programlama İle Mikrofon Dinlemek

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Daha önce açtığım konudan yola çıkarak araştırmalar yaparak birkaç kod buldum. Kodlar çalışıyor fakat ses Server'dan Client'a dalgalı şekilde geliyor. Bunu nasıl engelleyebilirim ? Kodlar;

     

    Server:

     

    package soketprogramla;

     

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;

     

    import javax.sound.sampled.AudioFormat;

    import javax.sound.sampled.AudioSystem;

    import javax.sound.sampled.DataLine;

    import javax.sound.sampled.Mixer;

    import javax.sound.sampled.Port;

    import javax.sound.sampled.TargetDataLine;

     

    public class MicPlayer {

     

        private static final String IP_TO_STREAM_TO   = "localhost" ;

        private static final int PORT_TO_STREAM_TO     = 8888 ;

     

        /** Creates a new instance of MicPlayer */

        public MicPlayer() {

     

        }

     

        /**

         * @param args the command line arguments

         */

        public static void main(String[] args) {

        Mixer.Info minfo[] = AudioSystem.getMixerInfo() ;

        for( int i = 0 ; i < minfo.length ; i++ )

        {

         System.out.println( minfo[i] ) ;    

        }

     

     

        if (AudioSystem.isLineSupported(Port.Info.MICROPHONE)) {

        try {

     

     

          DataLine.Info dataLineInfo = new DataLine.Info( TargetDataLine.class , getAudioFormat() ) ;

          TargetDataLine targetDataLine = (TargetDataLine)AudioSystem.getLine( dataLineInfo  ) ;

          targetDataLine.open( getAudioFormat() );

          targetDataLine.start();

          byte tempBuffer[] = new byte[32000] ;

          int cnt = 0 ;

          while( true )

          {

          targetDataLine.read( tempBuffer , 0 , tempBuffer.length );

          sendThruUDP( tempBuffer ) ;

          }

     

        }

        catch(Exception e )

        {

        System.out.println(" not correct " ) ;

        System.exit(0) ;

        }

        }

     

     

     

        }

     

     

        public static AudioFormat getAudioFormat(){

        float sampleRate = 16000.0F;

        //8000,11025,16000,22050,44100

        int sampleSizeInBits = 16;

        //8,16

        int channels = 1;

        //1,2

        boolean signed = true;

        //true,false

        boolean bigEndian = false;

        //true,false

        return new AudioFormat( sampleRate, sampleSizeInBits, channels, signed, bigEndian );

        }

     

     

        public static void sendThruUDP( byte soundpacket[] )

        {

           try

           {

           DatagramSocket sock = new DatagramSocket() ; 

           sock.send( new DatagramPacket( soundpacket , soundpacket.length , InetAddress.getByName( IP_TO_STREAM_TO ) , PORT_TO_STREAM_TO ) ) ; 

           sock.close() ;

           }

           catch( Exception e )

           {

           e.printStackTrace() ;

           System.out.println(" Unable to send soundpacket using UDP " ) ;   

           }

     

        }

     

     

    }

     

     

    Client:

    package soketprogramla;

     

    import java.net.DatagramPacket;

    import java.net.DatagramSocket;

    import java.net.InetAddress;

     

    import javax.sound.sampled.AudioFormat;

    import javax.sound.sampled.AudioSystem;

    import javax.sound.sampled.DataLine;

    import javax.sound.sampled.SourceDataLine;

     

    public class RadioReceiver extends Thread {

     

        private static final String IP_TO_STREAM_TO   = "localhost" ;

        private static final int PORT_TO_STREAM_TO     = 8888 ;

     

        /** Creates a new instance of RadioReceiver */

        public RadioReceiver() {

        }

     

        public void run()

        {

            byte b[] = null ;

            while( true )

            {

               b = receiveThruUDP() ; 

               toSpeaker( b ) ;

            }        

        }

     

        /**

         * @param args the command line arguments

         */

        public static void main(String[] args) {

     

        RadioReceiver r = new RadioReceiver() ;

        r.start() ;

     

        }

     

     

        public static byte[] receiveThruUDP()

        {

           try

           {

           DatagramSocket sock = new DatagramSocket(PORT_TO_STREAM_TO) ; 

           byte soundpacket[] = new byte[1000] ;

           DatagramPacket datagram = new DatagramPacket( soundpacket , soundpacket.length , InetAddress.getByName( IP_TO_STREAM_TO ) , PORT_TO_STREAM_TO ) ;

           sock.receive( datagram ) ; 

           sock.close() ;

           return datagram.getData() ; // soundpacket ;

           }

           catch( Exception e )

           {

           System.out.println(" Unable to send soundpacket using UDP " ) ;   

           return null ;

           } 

     

        }

     

     

         public static void toSpeaker( byte soundbytes[] )

         {

     

          try{  

          DataLine.Info dataLineInfo = new DataLine.Info( SourceDataLine.class , getAudioFormat() ) ;

          SourceDataLine sourceDataLine = (SourceDataLine)AudioSystem.getLine( dataLineInfo );

          sourceDataLine.open( getAudioFormat() ) ;

          sourceDataLine.start();

          int cnt = 0;

          sourceDataLine.write( soundbytes , 0, soundbytes.length );

          sourceDataLine.drain() ;

          sourceDataLine.close() ;

          }

          catch(Exception e )

          {

          System.out.println("not working in speakers " ) ;

          }

     

        }

     

     

        public static AudioFormat getAudioFormat()

        {

        float sampleRate = 8000.0F;

        //8000,11025,16000,22050,44100

        int sampleSizeInBits = 16;

        //8,16

        int channels = 1;

        //1,2

        boolean signed = true;

        //true,false

        boolean bigEndian = false;

        //true,false

        return new AudioFormat( sampleRate, sampleSizeInBits, channels, signed, bigEndian );

        }

     

     

    }

     


    since 2005 // tbt
  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    hiç ses aktarımı yapmadım ama seslerde bozukluk varsa elektronikte biz distorsiyon diyoruz buna, bunu engellemek için filtrelemelr v.s. kullanılır. dsp konularına bakman gerek (digital signal processing) orda bazı filtreler var pir,iir gibi bunlara bak, bunla bozuk olan kısımları filtreleyip yeni bir dalga oluşturabilirsin. programlamada bu filtrelemeler nasıl olur nasıl yapılır bilmiyorum  ama en azından dediğim şeyleri araştırarak bir şeyler bulabileceğini düşünüyorum..


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    hocam bozukluktan da öte ses kesik kesik geliyor dolayısıyla anlaşılmaz oluyor. Aliasing gibi bişeyler var sanırım. Ben kodlarla alakalı olduğunu düşünüyorum sistemi yavaşlatan birşeyler var. Yine de sağol hocam bi bakayım dediklerine


    since 2005 // tbt
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    kesik kesik gelmesinin sebebi muhtemelen udp ile alakalıdır, çünkü udp hızlı iletişim için kullanılır ve paketlerin gidip gitmediğini kontrol etmiyor, paket kaybı mevcutsa dediğin gibi eksik veriden kaynaklı kesilmeler olabilir, udp yerine aynı işi tcp ip ile dener misin?


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek
    unbalanced bunu yazdı

    kesik kesik gelmesinin sebebi muhtemelen udp ile alakalıdır, çünkü udp hızlı iletişim için kullanılır ve paketlerin gidip gitmediğini kontrol etmiyor, paket kaybı mevcutsa dediğin gibi eksik veriden kaynaklı kesilmeler olabilir, udp yerine aynı işi tcp ip ile dener misin?

    udp yi hızlı olması için tercih ettim zaten tcp yavaşlatmaz mı olayı


    since 2005 // tbt
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    yavaş olacağını sanmıyorum hocam, mili saniyelik olaylar yok bunda.. skype a baktım, bazı şeylerini tcp bazılarını udp olarak kullanmışlar, aramalar için tcp, dosya aktarımı için udp kullanmışlar mesela.. ayrıca denemeden bilemezsin, kaybedecek bir şey yok..

    olmadı giden paketlerin boyutlarını büyütür/küçültürsün ya da gzip gibi bi şeyle sıkıştırıp karşı tarafa atabiirsin v.s. ?


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Beceremedim TCP'e çevirmeyi, yardımcı olabilecek var mıdır ?


    since 2005 // tbt
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    pSkpt
    pSkpt's avatar
    Kayıt Tarihi: 10/Aralık/2010
    Erkek
    unbalanced bunu yazdı

    yavaş olacağını sanmıyorum hocam, mili saniyelik olaylar yok bunda.. skype a baktım, bazı şeylerini tcp bazılarını udp olarak kullanmışlar, aramalar için tcp, dosya aktarımı için udp kullanmışlar mesela.. ayrıca denemeden bilemezsin, kaybedecek bir şey yok..

    olmadı giden paketlerin boyutlarını büyütür/küçültürsün ya da gzip gibi bi şeyle sıkıştırıp karşı tarafa atabiirsin v.s. ?

    Konuyla alakası yok ama merak ettim şu cümleden sonra "aramalar için tcp, dosya aktarımı için udp kullanmışlar" tam tersi olması gerekmez mi?

    Dosya aktarımında UDP kullanılırsa dosya bozuk gidecektir paketler eksik olduğu için ama video ses olayında paketin eksik gitmesi sadece donmalar ve kesik sese neden olacaktır.

    Ben mi yanlış anladım yoksa yanlış mı oldu cümle?


    İmza...
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    @manyaki, java ide si yüklü değil bende, olsaydı bakardım, uzun süredir java yazmıyorum ve iyi değilim javada zaten de yine bi şeyler bulabilirdim..

    @pSkpt, hocam google dan baktığımda şu cümleye itafen öyle dedim, vikipedia da göremedim microsoft bilgileri vermemiş diyorlar ama işte yine de detay vermişler benim başka yerden gördüğüm ise

    Skype uses TCP for call signalling, and both UDP and TCP for transporting media traffic. 

    ve şimdi gördüm medya aktarımı için de TCP varmış, google un direk arama sonuçlarına baktığımda UDP göründüğü için sadece UDP dedim ama demek ki TCP varmış yeni gördüm ben de


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    gece 5 e kadar durdum beceremedim ya :/ udp mantığı tek başına tamam, tcp mantığı da tek başına tamam, ama bu byte ları tcp ile yollayıp tcp ile okumayı başaramadım


    since 2005 // tbt
  11. KısayolKısayol reportŞikayet pmÖzel Mesaj
    ★★★★
    Genki
    Genki's avatar
    Kayıt Tarihi: 24/Ağustos/2005
    Erkek

    bence dosya aktarımda udp olmaz tcp olur

    sesli iletişim ise udp ile yapılmalıdır,yoksa aşırı trafik üretimi ve hantallık olur gibime geliyor

    Genki tarafından 29/Ara/13 14:16 tarihinde düzenlenmiştir
Toplam Hit: 4933 Toplam Mesaj: 20