通过socket将语音从android发送到PC的噪音

时间:2015-01-27 17:29:19

标签: java android sockets voice pc

我正试图通过套接字将语音从android发送到PC。我的代码正在运行,但在PC端,我听到的是很多噪音,我甚至无法听到任何声音。

这是我正在使用的Android代码:

     byte buffer[]=new byte[1024];
     int buffersize = AudioRecord.getMinBufferSize(SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
         mic=new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, buffersize);
         mic.startRecording();

                  while(running){
                        count=mic.read(buffer, 0, buffer.length);
                        if(count>0){
                           OutputStream.write(buffer, 0, count);
                        }
                  }

这是PC代码:

    float sampleRate=44100;
    int sampleSize=16;
    int channel=1;
    boolean sign=true;
    boolean bigendian=true;
    AudioFormat format=new AudioFormat(sampleRate, sampleSize, channel, sign, bigendian);

    SourceDataLine voiceLine;
    DataLine.Info LineInfo=new DataLine.Info(SourceDataLine.class, format);
    if(AudioSystem.isLineSupported(LineInfo)){
        System.out.println("Line Supported...");
    }else{
        System.out.println("not supported Line...");
    }
    voiceLine = (SourceDataLine) AudioSystem.getLine(LineInfo);
    voiceLine.open(format);
    voiceLine.start();
    byte buffer[] = new byte[1024];
    inputStream=new BufferedInputStream(connection.getInputStream());    
    while(true){
                 count=inputStream.read(buffer,0,buffer.length);
                 InputStream in;
                 in=new ByteArrayInputStream(buffer);
                 AudioInputStream ais=new AudioInputStream(in, format, buffer.length /format.getFrameSize());
                 ais.read(audio, 0, count);
                 voiceLine.write(audio, 0, count);
            }

到目前为止我测试的是什么:

  • 用android检查android时语音清晰。
  • 当我将耳机连接到Android手机时语音清晰。
  • 没有耳机连接到Android手机的声音不清楚(很多噪音)。

到目前为止我尝试过:

  • 使用较少的SAMPLE RATE(8000)。
  • 使用UDP而不是TCP。
  • 尝试不同的缓冲区大小。

但什么也没得到。我太糊涂了。有人请帮助我............... :(

1 个答案:

答案 0 :(得分:0)

我最终解决了这个问题。

事实证明我必须将其更改为bigendian=false;,现在它可以正常工作。