【问题标题】:Join MP3 files - converting Java code to Android加入 MP3 文件 - 将 Java 代码转换为 Android
【发布时间】:2012-12-01 05:08:21
【问题描述】:

我正在尝试制作一个可以加入 2 个 MP3 文件并将它们保存在 android SD 卡上的程序。我有可以运行的 Java 代码,但是当我尝试将其转换为 Android 时,它会出现一些错误。

Java 代码如下所示。效果很好。

import java.io.*;
public class TuneDoorJava {

    public static void main(String[] args) throws FileNotFoundException, IOException {
        FileInputStream fistream1 = new FileInputStream("F:\\aa.mp3");  // first source file
        FileInputStream fistream2 = new FileInputStream("F:\\bb.mp3");//second source file
        SequenceInputStream sistream = new SequenceInputStream(fistream1, fistream2);
        FileOutputStream fostream = new FileOutputStream("F:\\final.mp3");//destinationfile

        int temp;

        while( ( temp = sistream.read() ) != -1)
        {
            // System.out.print( (char) temp ); // to print at DOS prompt
            fostream.write(temp);   // to write to file
        }
        fostream.close();
        sistream.close();
        fistream1.close();
        fistream2.close();
    }
    }

在 Android 中,我想做的是:

public class MainActivity extends Activity {

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

      //  FileOutputStream fostream=null;
        FileInputStream fist=(FileInputStream)getResources().openRawResource(R.raw.t);
        FileInputStream fist2=(FileInputStream)getResources().openRawResource(R.raw.v);

        File sdCard = Environment.getExternalStorageDirectory();
        File dir = new File (sdCard.getAbsolutePath() + "/dir1");
        dir.mkdirs();
        File file = new File(dir, "filename");

       //FileInputStream fistream1 = new FileInputStream();  // first source file
        //FileInputStream fistream2 = new FileInputStream("F:\\bb.mp3");//second source file
        SequenceInputStream sistream = new SequenceInputStream(fist, fist2);

        FileOutputStream fostream = new FileOutputStream(file);

        int temp;
        while( ( temp = sistream.read() ) != -1)
        {
            // System.out.print( (char) temp ); // to print at DOS prompt
            fostream.write(temp);   // to write to file
        }
        fostream.close();
        sistream.close();
        fistream1.close();
        fistream2.close();
    }
}

【问题讨论】:

  • "一些错误"... 什么错误?完整的堆栈跟踪将是您问题的一个很好的补充。
  • “下面是用 Java 编写的代码。它运行良好。” 认真的吗?我很惊讶连接两个 MP3 的字节会产生一个有效的输出文件!
  • 是的,它正在工作! ....说真的

标签: java android mp3


【解决方案1】:

- 授予此权限WRITE_EXTERNAL_STORAGE

这是我项目中的工作代码:

public class ConcateSongActivity extends Activity {
    Button mbutt;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        mbutt = (Button)findViewById(R.id.button_Click_Karo);
        mbutt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                try {
                    FileInputStream fis1 = new FileInputStream("/sdcard/viv0.wav");
                    FileInputStream fis2 = new FileInputStream("/sdcard/viv1.wav");
                    SequenceInputStream sis = new SequenceInputStream(fis1,fis2);


                    FileOutputStream fos = new FileOutputStream(new File("/sdcard/vis.wav"));

                    int temp;

                    try {
                        while ((temp = sis.read())!= -1){

                            fos.write(temp);

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




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


            }
        });
    }
}

【讨论】:

  • “这是我项目中的工作代码:” 该实现与原始代码中使用的一样脆弱。当viv0.wav 是 22.05 KHz 单声道 8 位,viv1.wav 是 11.025 KHz 16 位立体声时尝试它会失败。
  • mp3 文件也一样吗?
【解决方案2】:

您需要通过在您的清单中添加以下行来授予您的应用写入 SD 卡的权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2013-06-23
    相关资源
    最近更新 更多