gpt4 book ai didi

作为应用程序工作但不作为小程序工作的 Java 类

转载 作者:太空宇宙 更新时间:2023-11-03 11:13:54 25 4
gpt4 key购买 nike

我是一名android开发人员,对java web开发没有广泛的了解,所以如果问题有点奇怪,请多多包涵。我创建了一个 java 类,它应该从 android 应用程序接收音频形式的数据包,并在 PC 扬声器上播放。该应用程序基本上是一个从手机到服务器的流媒体应用程序。该类(class)作为应用程序运行良好。

这是类的代码:

class Server {

AudioInputStream audioInputStream;
static AudioInputStream ais;
static AudioFormat format;
static boolean status = true;
static int port = 50005;
static int sampleRate = 8000;



public static void main(String args[]) throws Exception {


DatagramSocket serverSocket = new DatagramSocket(50005);

/**
* Formula for lag = (byte_size/sample_rate)*2
* Byte size 9728 will produce ~ 0.45 seconds of lag. Voice slightly broken.
* Byte size 1400 will produce ~ 0.06 seconds of lag. Voice extremely broken.
* Byte size 4000 will produce ~ 0.18 seconds of lag. Voice slightly more broken then 9728.
*/

byte[] receiveData = new byte[5000];

format = new AudioFormat(sampleRate, 16, 1, true, false);

while (status == true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);

serverSocket.receive(receivePacket);

ByteArrayInputStream baiss = new ByteArrayInputStream(
receivePacket.getData());

ais = new AudioInputStream(baiss, format, receivePacket.getLength());
toSpeaker(receivePacket.getData());

}



}

public static void toSpeaker(byte soundbytes[]) {
try {

DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(format);

FloatControl volumeControl = (FloatControl) sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);
volumeControl.setValue(6.0206f);

sourceDataLine.start();
sourceDataLine.open(format);

sourceDataLine.start();

System.out.println("format? :" + sourceDataLine.getFormat());

sourceDataLine.write(soundbytes, 0, soundbytes.length);
System.out.println(soundbytes.toString());
sourceDataLine.drain();
sourceDataLine.close();
} catch (Exception e) {
System.out.println("Not working in speakers...");
e.printStackTrace();
}
}
}

现在我想将该类转换为小程序,以便我可以将其部署为 Web 应用程序。这是小程序的代码:

public class AppletTest extends Applet {


AudioInputStream audioInputStream;
static AudioInputStream ais;
static AudioFormat format;
static boolean status = true;
static int port = 50005;
static int sampleRate = 8000;



public void init()
{

}

public void stop()
{

}



public void listening()
{
DatagramSocket serverSocket = null;
try {
serverSocket = new DatagramSocket(50005);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

/**
* Formula for lag = (byte_size/sample_rate)*2
* Byte size 9728 will produce ~ 0.45 seconds of lag. Voice slightly broken.
* Byte size 1400 will produce ~ 0.06 seconds of lag. Voice extremely broken.
* Byte size 4000 will produce ~ 0.18 seconds of lag. Voice slightly more broken then 9728.
*/

byte[] receiveData = new byte[5000];

format = new AudioFormat(sampleRate, 16, 1, true, false);

while (status == true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData,
receiveData.length);

try {
serverSocket.receive(receivePacket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

ByteArrayInputStream baiss = new ByteArrayInputStream(
receivePacket.getData());

ais = new AudioInputStream(baiss, format, receivePacket.getLength());
toSpeaker(receivePacket.getData());

}
}



public static void toSpeaker(byte soundbytes[]) {
try {

DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(format);

FloatControl volumeControl = (FloatControl) sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);
volumeControl.setValue(6.0206f);

sourceDataLine.start();
sourceDataLine.open(format);

sourceDataLine.start();

System.out.println("format? :" + sourceDataLine.getFormat());

sourceDataLine.write(soundbytes, 0, soundbytes.length);
System.out.println(soundbytes.toString());
sourceDataLine.drain();
sourceDataLine.close();
} catch (Exception e) {
System.out.println("Not working in speakers...");
e.printStackTrace();
}
}


}

调用小程序的html代码:

<HTML>
<TITLE>Applet Test</TITLE>
<HEAD></HEAD>
<BODY>
<applet code="AppletTest.class" height="200" width="500">Applet</applet>
</BODY>
</HTML>

小程序我已经托管了here

这是以数据包形式发送声音的android Activity :

public class SendActivity extends Activity {
private Button startButton, stopButton;

public byte[] buffer;
public static DatagramSocket socket;
private int port = 50005;
AudioRecord recorder;

private int sampleRate = 8000;
@SuppressWarnings("deprecation")
private int channelConfig = AudioFormat.CHANNEL_IN_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig,
audioFormat);
private boolean status = true;


int bufferSizeInBytes;
int bufferSizeInShorts;
int shortsRead;
short audioBuffer[];

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_send);

startButton = (Button) findViewById(R.id.start_button);
stopButton = (Button) findViewById(R.id.stop_button);

startButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

status = true;
startStreaming();


}

});

stopButton.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {

status = false;
recorder.release();
Log.d("VS", "Recorder released");

}

});

minBufSize += 5120;
System.out.println("minBufSize: " + minBufSize);
}


public void startStreaming() {

Thread streamThread = new Thread(new Runnable() {

@Override
public void run() {
try {

DatagramSocket socket = new DatagramSocket();
Log.d("VS", "Socket Created");

byte[] buffer = new byte[minBufSize];

Log.d("VS", "Buffer created of size " + minBufSize);
DatagramPacket packet;

final InetAddress destination = InetAddress
.getByName("http://abhideepmallick.byethost16.com/");

//final InetAddress destination = InetAddress.getByName("192.168.1.20");//machine IP

Log.d("VS", "Address retrieved");

recorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_RECOGNITION,
sampleRate, channelConfig, audioFormat,
minBufSize * 10);
Log.d("VS", "Recorder initialized");

recorder.startRecording();

while (status == true) {

// reading data from MIC into buffer
minBufSize = recorder.read(buffer, 0, buffer.length);

// putting buffer in the packet
packet = new DatagramPacket(buffer, buffer.length,
destination, port);

socket.send(packet);
System.out.println("MinBufferSize: " + minBufSize);

}

} catch (UnknownHostException e) {
Log.e("VS", "UnknownHostException");
} catch (IOException e) {
e.printStackTrace();
Log.e("VS", "IOException");
}
}

});
streamThread.start();
}


}

Android 布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SendActivity" >



<Button
android:id="@+id/stop_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/start_button"
android:layout_alignBottom="@+id/start_button"
android:layout_toRightOf="@+id/start_button"
android:text="Stop" />

<Button
android:id="@+id/start_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="79dp"
android:layout_marginTop="163dp"
android:text="Start" />

</RelativeLayout>

我应该怎么做才能使 java 类作为小程序工作?

最佳答案

我想您设法让浏览器的 java 插件是最新的,以便启动小程序。

小程序也有像 Activity 一样的生命周期。

init()方法就像一个构造函数,start()方法的目的是通知applet开始执行。

因此覆盖启动方法并从那里调用您的监听方法。如需更多信息,您可以浏览此幻灯片:http://de.slideshare.net/myrajendra/applet-life-cycle

可在此处找到示例:http://www.ugrad.cs.ubc.ca/~cs219/CourseNotes/Java/applets/lifecycle.html

关于作为应用程序工作但不作为小程序工作的 Java 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20142634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com