Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.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 无法在Android中播放wav文件。!_Java_Android_Android Mediarecorder - Fatal编程技术网

Java 无法在Android中播放wav文件。!

Java 无法在Android中播放wav文件。!,java,android,android-mediarecorder,Java,Android,Android Mediarecorder,我试图在Android中附加两个wav文件。为此,我将两个文件都读取到2字节数组(A和B)。我将它们合并到一个新数组(C)。我将第三个数组C中的内容写入一个新的.wav输出文件。我还放入了wav头文件。我得到了大小为(C=A+B)的输出文件。但播放器未能播放该输出文件 如果第二个输入文件(B)没有读取字节数组(这里我初始化了B,但没有将第二个文件的内容写入字节数组,B),那么我可以播放输出文件,在这里第一个文件完全播放,但在播放器静音后(代替第二个文件) 为此,我使用了以下代码片段:请帮助解决此

我试图在Android中附加两个wav文件。为此,我将两个文件都读取到2字节数组(A和B)。我将它们合并到一个新数组(C)。我将第三个数组C中的内容写入一个新的.wav输出文件。我还放入了wav头文件。我得到了大小为(C=A+B)的输出文件。但播放器未能播放该输出文件

如果第二个输入文件(B)没有读取字节数组(这里我初始化了B,但没有将第二个文件的内容写入字节数组,B),那么我可以播放输出文件,在这里第一个文件完全播放,但在播放器静音后(代替第二个文件)

为此,我使用了以下代码片段:请帮助解决此问题

File firstFile=new File("path1.wav");
        File secondFile=new File("path2.wav");

        int size1=(int)firstFile.length();
        int size2=(int)secondFile.length();

        Log.i("Size1::"+size1,"Size2::"+size2);

        dataOne=new byte[size1];
        dataTwo=new byte[size2];




        newData=new byte[dataOne.length+dataTwo.length];


        try 
        {
            in1=new DataInputStream(new BufferedInputStream(new FileInputStream(firstFile)));
            in2=new DataInputStream(new BufferedInputStream(new FileInputStream(secondFile)));


            in1.readFully(dataOne);
            in1.close();
            in2.read(dataTwo);
            in2.close();

            int j;
            for(j=0;j<dataOne.length;j++)
                newData[j]=dataOne[j];
            for(int m=0;m<dataTwo.length;m++)
                newData[j+m]=dataTwo[j];




        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }


        try 
        {
            fWriter = new FileOutputStream("outputPath.wav");


            WAVE(fWriter);

            //fWriter.write(newData,0,newData.length);

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
File firstFile=新文件(“path1.wav”);
File secondFile=新文件(“path2.wav”);
int size1=(int)firstFile.length();
int size2=(int)secondFile.length();
Log.i(“Size1::”+Size1,“Size2:”+Size2);
dataOne=新字节[size1];
dataTwo=新字节[size2];
newData=newbyte[dataOne.length+dataTwo.length];
尝试
{
in1=新的DataInputStream(新的BufferedInputStream(新的FileInputStream(firstFile)));
in2=新的DataInputStream(新的BufferedInputStream(新的FileInputStream(第二个文件));
in1.准备就绪(dataOne);
in1.close();
in2.读取(数据二);
in2.close();
int j;

对于(j=0;j只需浏览此链接..希望对您有所帮助..我已经引用了该链接,但对我没有任何用处!!!!!所以您希望在程序外播放该输出文件,或者如果您从代码中播放该文件,是否可以…我希望在我的程序内播放该文件请在尝试一起播放包含2个wav文件的文件时显示您的logcat输出.
public void WAVE(FileOutputStream fWriter)
{

    try 
    {
        //0------------3
        fWriter.write('R');
        fWriter.write('I');
        fWriter.write('F');
        fWriter.write('F');


        //4------7

        byte[] res=new byte[4];

        int sizeOfFile=newData.length-8;
        res=toBytes(sizeOfFile);
        for(int j=0;j<4;j++)
            Log.i(""+j,""+res[j]);
        fWriter.write(res,0,4);




        //8-15
        fWriter.write('W');
        fWriter.write('A');
        fWriter.write('V');
        fWriter.write('E');
        fWriter.write('f');
        fWriter.write('m');
        fWriter.write('t');
        fWriter.write(' ');

        //16----19
         res=new byte[4];
        res=toBytes(16);
        for(int j=0;j<4;j++)
            Log.i(""+j,""+res[j]);
        fWriter.write(res,0,4);


        //20---21
        res=toBytes(1);
        for(int j=0;j<2;j++)
            Log.i("PCM"+j,""+res[j]);
        fWriter.write(res,0,2);

        //22---23
        res=toBytes(2);
        for(int j=0;j<2;j++)
            Log.i("NOC:MONO/STEREO"+j,""+res[j]);
        fWriter.write(res,0,2);

        //24--27
        int ASR=Integer.parseInt(44100);  
        res=toBytes(ASR);
        for(int j=0;j<4;j++)
            Log.i(ASR+"ASR"+j,""+res[j]);
        fWriter.write(res,0,4);

        //28--31 Bytes Per Second

        int Number_of_channels=2;
        int Samples_per_second=ASR;
        int Bits_per_Sample=32;
        int BPS=Number_of_channels*Samples_per_second*Bits_per_Sample/8;
                Integer.parseInt(audioSamplingRate);
        res=toBytes(BPS);
        for(int j=0;j<4;j++)
            Log.i(ASR+"BPS"+j,""+res[j]);
        fWriter.write(res,0,4);


        //32--33 Block Alignment

        int BA= Number_of_channels*Bits_per_Sample/8;

        res=toBytes(BA);
        for(int j=0;j<2;j++)
            Log.i("Block Alignment"+j,""+res[j]);
        fWriter.write(res,0,2);

        //34---35  Bits Per Sample

        res=toBytes(Bits_per_Sample);
        for(int j=0;j<2;j++)
            Log.i(ASR+"Bits Per Sample"+j,""+res[j]);
        fWriter.write(res,0,2);


        //36---39 "data"
        fWriter.write('d');
        fWriter.write('a');
        fWriter.write('t');
        fWriter.write('a');

        //40----43 length of data
        res=toBytes(newData.length);
        for(int j=0;j<4;j++)
            Log.i("Data Size"+j,""+res[j]);
        fWriter.write(res,0,4);

        fWriter.write(newData);

        fWriter.close();
    } 
    catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}
 public byte[] toBytes(int i)
{
  byte[] result = new byte[4];

  result[0] = (byte) (i >> 24);
  result[1] = (byte) (i >> 16);
  result[2] = (byte) (i >> 8);
  result[3] = (byte) (i /*>> 0*/);

  return result;
}