【问题标题】:Getting an exception when recording audio in J2me在 J2me 中录制音频时出现异常
【发布时间】:2012-09-20 09:17:07
【问题描述】:

在诺基亚 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();
            }
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

    将您的代码的录制部分与我的一个项目的录制部分进行比较时,我能发现的唯一区别是我在调用 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();
    

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

    不过我不播放音频,所以我不知道你的那部分代码是否导致了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多