Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中使用socket和serversocket类发送.wav音频文件 File wavFile=新文件(“D:\\RecordAudio.wav”); FileInputStream fis=新的FileInputStream(wavFile); fis.read(tempBuffer,0,cnt); System.out.println(tempBuffer.length); String byteArrayStr=新字符串(临时缓冲区); 字符串rec=list1; 系统输出打印项次(rec); 字符串格式=“-”+name+:“+bytearrastr; println(格式); } 捕获(例外e) { System.out.println(“hello user12”); 系统输出打印ln(e); e、 printStackTrace(); }_Java - Fatal编程技术网

如何在java中使用socket和serversocket类发送.wav音频文件 File wavFile=新文件(“D:\\RecordAudio.wav”); FileInputStream fis=新的FileInputStream(wavFile); fis.read(tempBuffer,0,cnt); System.out.println(tempBuffer.length); String byteArrayStr=新字符串(临时缓冲区); 字符串rec=list1; 系统输出打印项次(rec); 字符串格式=“-”+name+:“+bytearrastr; println(格式); } 捕获(例外e) { System.out.println(“hello user12”); 系统输出打印ln(e); e、 printStackTrace(); }

如何在java中使用socket和serversocket类发送.wav音频文件 File wavFile=新文件(“D:\\RecordAudio.wav”); FileInputStream fis=新的FileInputStream(wavFile); fis.read(tempBuffer,0,cnt); System.out.println(tempBuffer.length); String byteArrayStr=新字符串(临时缓冲区); 字符串rec=list1; 系统输出打印项次(rec); 字符串格式=“-”+name+:“+bytearrastr; println(格式); } 捕获(例外e) { System.out.println(“hello user12”); 系统输出打印ln(e); e、 printStackTrace(); },java,Java,//实际上,我已经从我的pc上选取了.wav文件,我想使用serversocket异常类将其发送到服务器,然后服务器再次将我的文件发送到特定的客户端。因此,我认为我们需要将其转换为bytearrayoutputstream。但是我的程序工作不正常通过研究和拼凑有关发送WAV文件的代码,并在收到它们后将其保存为WAV,以下内容得以整合。我不相信所有的密码 注意:并非所有的WAV文件都能工作,因为JAVA并不支持所有格式,您可以使用wavosaur之类的工具将其转换为更通用的格式。检查这个答案以获得

//实际上,我已经从我的pc上选取了.wav文件,我想使用serversocket异常类将其发送到服务器,然后服务器再次将我的文件发送到特定的客户端。因此,我认为我们需要将其转换为bytearrayoutputstream。但是我的程序工作不正常

通过研究和拼凑有关发送WAV文件的代码,并在收到它们后将其保存为WAV,以下内容得以整合。我不相信所有的密码

注意:并非所有的WAV文件都能工作,因为JAVA并不支持所有格式,您可以使用wavosaur之类的工具将其转换为更通用的格式。检查这个答案以获得更多解释 我用一个21MB的文件进行了测试,效果很好

(代码可以暂时使用改进,以实现目标)

先运行服务器,然后运行客户端

客户:

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();
    }
服务器:

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);
        }
    }
}

同样,我没有因为编写代码而受到赞扬,我只是把东西拼凑在一起

一个字符串就是一堆文本;波形文件不包含文本<代码>新字符串(contentsOfAWaveFile)会给你带来垃圾。还有什么是“工作不正常”的意思?到目前为止,你的代码看起来还不错。接下来,您需要打开一个到服务器的套接字,通过服务器发送字节,然后获取下一个字节块(重复直到完成)。你的问题到底是什么?什么不起作用?
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;
    }
}