在J2me中录制音频时获得异常

时间:2012-09-20 09:17:07

标签: audio java-me midp audio-recording mmapi

我在诺基亚C1录制音频时遇到异常。以下是我得到的以下例外情况:

Error2:
javax.microediting.media.MediaException: MUS

任何人都可以帮我删除此异常或我在哪里出错?

下面,我提供了我的代码,其中我得到了这个例外:

package video;

import javax.microedition.midlet.*;

import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.media.*;
import javax.microedition.media.control.*;

public class VoiceRecordMidlet extends MIDlet {

    private Display display;

    public void startApp() {
        display = Display.getDisplay(this);
        display.setCurrent(new VoiceRecordForm());
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }
}

class VoiceRecordForm extends Form implements CommandListener {

    private StringItem message;
    private StringItem errormessage;
    private final Command record, play, end;
    private Player player;
    private byte[] recordedAudioArray = null;
    private RecordControl rc;
    private ByteArrayOutputStream output;

    public VoiceRecordForm() {
        super("Recording Audio");
        message = new StringItem("", "Select Record to start recording.");
        this.append(message);
        errormessage = new StringItem("", "");
        this.append(errormessage);
        record = new Command("Record", Command.SCREEN, 0);
        this.addCommand(record);
        play = new Command("Play", Command.SCREEN, 0);
        end = new Command("End", Command.SCREEN, 0);
        this.setCommandListener(this);
    }

    public void commandAction(Command comm, Displayable disp) {
        if (comm == record) {
            Thread t = new Thread() {

                public void run() {
                    try {

                        player = Manager.createPlayer("capture://audio");

                        player.realize();
                        rc = (RecordControl) player.getControl("RecordControl");
                        output = new ByteArrayOutputStream();
                        rc.setRecordStream(output);
                        rc.startRecord();
                        player.start();
                        removeCommand(record);
                        addCommand(end);


                    } catch (Exception e) {
                        errormessage.setLabel("Error1");
                        errormessage.setText(e.toString());
                    }
                }
            };

            t.start();

        } else if (comm == play) {
            try {

                ByteArrayInputStream recordedInputStream = new ByteArrayInputStream(recordedAudioArray);

                Player p2 = Manager.createPlayer(recordedInputStream, "audio/basic");

                **p2.prefetch();

                p2.start();**

            } catch (Exception e) {
                errormessage.setLabel("Error2");
                errormessage.setText(e.toString());
            }
        } else if (comm == end) {
            try {
                rc.stopRecord();
                removeCommand(end);
                addCommand(play);
                                rc.commit();
                recordedAudioArray = output.toByteArray();

                player.close();

            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在将代码的录制部分与我的某个项目的录制部分进行比较时,我能发现的唯一区别是我在调用recordControl.startRecord()之前调用了player.start()

player = Manager.createPlayer("capture://audio");
player.realize();
player.start();
recordControl = (RecordControl) player.getControl("RecordControl");
bos = new ByteArrayOutputStream();
recordControl.setRecordStream(bos);
recordControl.startRecord();

这适用于索尼爱立信手机。

我不播放音频,所以我不知道你的代码中是否有这个问题。