Как получить аудио поток при наборе номера с компьютера (модема) на мобильный телефон с помощью JavaComm lib - PullRequest
0 голосов
/ 25 июня 2018

меня зовут Завади, я разрабатываю Java-приложение, которое будет звонить модему для вызова телефона.Я работаю с API JavaComm, чтобы общаться с последовательным портом.Мне удалось отправить SMS.По поводу звонков я сталкиваюсь с проблемами.Хорошо, я хорошо набираю команду ATD.Проблема заключается в том, что, когда телефон, принимающий вызов, принимает вызов, я не могу ни передать аудио с вызываемого телефона на компьютер, ни воспроизвести поступающий звук на динамиках ПК.Я хотел бы, чтобы кто-нибудь помог мне.Вот мой код:

package server;

import java.io.*;
import java.net.DatagramPacket;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.comm.*;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
import static server.recevoirAudio.status;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.FloatControl;
import static server.recevoirAudio.format;
import static server.recevoirAudio.sourceDataLine;

public class Connect implements SerialPortEventListener,
  CommPortOwnershipListener {


  private String comPort = "COM20"; // Ce Port COM  doit avoir été connecté avec le Modem GSM
  private String messageString = "";
  private CommPortIdentifier portId = null;
  private Enumeration portList;
  private InputStream inputStream = null;
  private OutputStream outputStream = null;
  private SerialPort serialPort;
  AudioInputStream audioInputStream;
  static AudioFormat format;
  static int sampleRate = 16000;
  static DataLine.Info dataLineInfo;
static SourceDataLine sourceDataLine;

  /** Creates a new instance of GSMConnect */
  public GSMConnect(String comm) {

this.comPort = comm;


 }

 public boolean init() {
    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements()) {
      portId = (CommPortIdentifier) portList.nextElement();
      if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
        if (portId.getName().equals(comPort)) {
            System.out.println("init");
          return true;
        }
      }
    }
    return false;
  }

public void checkStatus() {
    send("AT+CREG?\r\n");
  }

 public void dial(String phoneNumber) {
 try {
//pour appeller
      messageString = "ATD" + phoneNumber + ";\n\r";
      outputStream.write(messageString.getBytes());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void send(String cmd) {
    try {
      outputStream.write(cmd.getBytes());
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public void sendMessage(String phoneNumber, String message) {
    send("AT+CMGS=\"" + phoneNumber + "\"\r\n");
    send(message + '\032');
  }

 public void hangup() {
    send("ATH\r\n");
  }

  public void connect() throws NullPointerException {
    if (portId != null) {
      try {
        portId.addPortOwnershipListener(this);
        serialPort = (SerialPort) portId.open("MobileGateWay", 2000);
      } catch (PortInUseException e) {
        e.printStackTrace();
      }

  try {
    inputStream = serialPort.getInputStream();
    outputStream = serialPort.getOutputStream();
  } catch (IOException e) {
    e.printStackTrace();
  }

  try {
    /** These are the events we want to know about*/
    serialPort.addEventListener(this);
    serialPort.notifyOnDataAvailable(true);

  } catch (TooManyListenersException e) {
    e.printStackTrace();
  }


//Register to home network of sim card</p>

  send("ATZ\r\n");

} else {
  throw new NullPointerException("COM Port not found!!");
}

}

public void serialEvent(javax.comm.SerialPortEvent serialPortEvent) {
    switch (serialPortEvent.getEventType()) {
      case SerialPortEvent.BI:
      case SerialPortEvent.OE:
      case SerialPortEvent.FE:
      case SerialPortEvent.PE:
      case SerialPortEvent.CD:
      case SerialPortEvent.CTS:
      case SerialPortEvent.DSR:
      case SerialPortEvent.RI:
      case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
      case SerialPortEvent.DATA_AVAILABLE:

    byte[] readBuffer = new byte[4096];
    format = new AudioFormat(sampleRate, 16, 1, true, false);
    }`
}
  public void ownershipChange(int type) {
    switch (type) {
      case CommPortOwnershipListener.PORT_UNOWNED:
        System.out.println(portId.getName() + ": PORT_UNOWNED");
        break;
      case CommPortOwnershipListener.PORT_OWNED:
        System.out.println(portId.getName() + ": PORT_OWNED");
        break;
      case CommPortOwnershipListener.PORT_OWNERSHIP_REQUESTED:
        System.out.println(portId.getName() + ": PORT_INUSED");
        break;
    }

  }


}

Похоже, я не понимаю, как поступить со звуком в этом случае.Любая директива действительно будет полезна

...