File wavFile=new File("D:\\RecordAudio.wav");
FileInputStream fis=new FileInputStream(wavFile);
fis.read(tempBuffer, 0, cnt);
System.out.println(tempBuffer.length);
String byteArrayStr= new String(tempBuffer);
String rec=list1;
System.out.println(rec);
String format="<"+rec+">-"+name+":"+byteArrayStr;
pw.println(format);
}
catch(Exception e)
{
System.out.println("hello user12");
System.out.println(e);
e.printStackTrace();
}
//其实我已经选择了我的.wav文件frmom pc并且我想使用serversocket异常类将它发送到服务器然后服务器再次将我的文件发送到特定的客户端。所以为此我认为我们需要转换为bytearrayoutputstream 。但我的程序无法正常工作
答案 0 :(得分:0)
以下是通过研究和拼凑关于发送 WAV 文件并在接收时将它们保存为 WAV 的代码而设法汇集在一起的东西。我不相信所有的代码
注意:并非所有 WAV 文件都可以使用,因为并非所有格式都受 JAVA 支持,您可以使用 wavosaur 等工具将它们转换为更通用的格式。检查此答案以获取更多解释https://stackoverflow.com/a/14961460/2225628 我已经用 21 MB 的文件进行了测试,并且可以正常工作。
(代码暂时可以使用改进服务于目标)
先运行服务器,然后运行客户端
客户:
import javax.sound.sampled.*;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import java.net.Socket;
public class Client {
private static Socket socket;
private static BufferedInputStream inputStream;
public static void main(String[] args) throws LineUnavailableException {
try {
socket = new Socket("127.0.0.1", 6666);
if (socket.isConnected()) {
inputStream = new BufferedInputStream(socket.getInputStream());
AudioInputStream ais = AudioSystem.getAudioInputStream(inputStream);
try {
AudioSystem.write(ais, AudioFileFormat.Type.WAVE, new
File("test3.wav")
);
}
catch(Exception e) {
e.printStackTrace();
}
/*// IF YOU WANT TO PLAY SOUND DIRECTLY FROM SPEAKERS COMMENT OUT THE TRY CATCH BLOCK ABOVE
// AND UNCOMMENT THE BELOW SECTION
Clip clip = AudioSystem.getClip();
clip.open(ais);
clip.start();
while (inputStream != null) {
if (clip.isActive()) {
System.out.println("********** Buffred *********" + inputStream.available());
}
}*/
}
} catch (IOException | UnsupportedAudioFileException e) {
System.err.println(e);
}
}
}
服务器:
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import java.io.File;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocker = new ServerSocket();
Socket client = null;
serverSocker.bind(new InetSocketAddress(6666));
if (serverSocker.isBound()) {
client = serverSocker.accept();
OutputStream out = client.getOutputStream();
while (true) {
AudioInputStream ain = testPlay("idont.wav");
if (ain != null) {
AudioSystem.write(ain, AudioFileFormat.Type.WAVE, out);
}
}
}
serverSocker.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static AudioInputStream testPlay(String filename) {
AudioInputStream din = null;
try {
File file = new File(filename);
AudioInputStream in = AudioSystem.getAudioInputStream(file);
System.out.println("Before :: " + in.available());
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat =
new AudioFormat(AudioFormat.Encoding.PCM_UNSIGNED, baseFormat.getSampleRate(),
8, baseFormat.getChannels(), baseFormat.getChannels(),
baseFormat.getSampleRate(), false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);
System.out.println("After :: " + din.available());
return din;
} catch (Exception e) {
// Handle exception.
e.printStackTrace();
}
return din;
}
}
再说一次,我不会因为编写我只是拼凑起来的代码而受到赞扬