4

Nokia 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();
            }
        }
    }
}
4

1 に答える 1

0

あなたのコードの記録部分と私のプロジェクトの 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();

これは、Sony Ericsson の携帯電話で機能します。

ただし、オーディオは再生しないので、コードのその部分が問題を引き起こしているかどうかはわかりません。

于 2012-10-19T19:35:27.787 に答える