2012-09-20 54 views
4

當我在諾基亞C1中錄製音頻時,出現異常。下面是我得到的以下例外:在J2me中錄製音頻時獲得例外

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

回答

0

唯一的區別你的代碼的記錄部分與我的一個項目的記錄部分進行比較時,我發現,是我叫player.start()之前,我打電話recordControl.startRecord()

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

這對我的作品在索尼愛立信手機。

雖然我不回放音頻,所以我不知道你的代碼的那部分是否導致了問題。