2010-05-22 30 views
2

我想在K770i上的Java ME App上錄製聲音。在我的代碼RecordControl的如何在Java ME,SE上使用RecordControl記錄/捕獲音頻K770i

http://java.sun.com/javame/reference/apis/jsr135/javax/microedition/media/control/RecordControl.html

例如:所以我用這個。它是這樣的:

import java.util.Vector; 

import javax.microedition.lcdui.Choice; 
import javax.microedition.lcdui.Command; 
import javax.microedition.lcdui.CommandListener; 
import javax.microedition.lcdui.Display; 
import javax.microedition.lcdui.Displayable; 
import javax.microedition.lcdui.List; 
import javax.microedition.media.Manager; 
import javax.microedition.media.MediaException; 
import javax.microedition.midlet.MIDlet; 

import java.io.*; 

import javax.microedition.lcdui.*; 
import javax.microedition.media.*; 
import javax.microedition.media.control.*; 
import javax.microedition.midlet.*; 
import javax.microedition.rms.*; 

(...) 

try { 
    // Create a Player that captures live audio. 
    Player p = Manager.createPlayer("capture://audio"); 
    p.realize(); 
    // Get the RecordControl, set the record stream, 
    // start the Player and record for 5 seconds. 
    RecordControl rc = (RecordControl)p.getControl("RecordControl"); 
    ByteArrayOutputStream output = new ByteArrayOutputStream(); 
    rc.setRecordStream(output); 
    rc.startRecord(); 
    p.start(); 
    Thread.currentThread().sleep(5000); 
    rc.commit(); 
    p.close(); 
} catch (IOException ioe) { 
} catch (MediaException me) { 
} catch (InterruptedException ie) { } 

但不幸的是,當我嘗試構建它,它告訴我:

*** Creating directories *** 
*** Compiling source files *** 
..\src\example\audiodemo\AudioPlayer.java:121: cannot find symbol 
symbol : class RecordControl 
location: class example.audiodemo.AudioPlayer 
      RecordControl rc = (RecordControl)p.getControl("RecordControl"); 
     ^
..\src\example\audiodemo\AudioPlayer.java:121: cannot find symbol 
symbol : class RecordControl 
location: class example.audiodemo.AudioPlayer 
      RecordControl rc = (RecordControl)p.getControl("RecordControl"); 
          ^
2 errors 

所以我的問題是:爲什麼沒有RecordControl類,如果在單證它是這樣寫上課應該在那裏。或者是否有其他方法在Sony Ericsson的Java ME中記錄/捕獲微距內的音頻?

你怎麼錄音?

+0

這是非常糟糕的。編譯器不會抱怨播放器或管理器,因此您在某種程度上針對僅包含JSR-135部分的平臺進行編譯。我不相信這是合法的JavaME。我認爲這是值得詳細描述你的工具鏈。 – 2010-06-25 15:31:10

+0

我正在使用索尼愛立信SDK 2.5.0.6 for Java™ME平臺 – 2010-07-11 23:36:38

回答

3

原因可能是它不支持音頻捕獲。

嘗試從索尼手機獲取此值。

System.getProperty( 「supports.audio.capture」)

寫一個形式附加在上面的語句一個簡單的MIDlet。如下所示。

frm.append(「Supports Audio:」+ System.getProperty(「supports.audio.capture」));

如果這返回false,那麼你很清楚... RecordControl不會工作。

很少有索尼手機不支持音頻捕捉..像索尼p1i。

希望這有助於..

+0

它返回的信息表明它在我的手機上支持。現在做什麼? – 2010-07-11 23:28:34

1

好了,正如我所說的,我的Java ME新手。因此,我需要做的:

1)添加到的MIDlet-權限在JAD和清單文件javax.microedition.media.control.RecordControl

2)在運行build.bat,我從其他演示項目中使用添加列入mmapi.jar中,其中RecordControl坐落在

所以我加入這裏顯示一個最後一行:

set CLDCAPI=%LIB_DIR%\cldcapi10.jar 
set MIDPAPI=%LIB_DIR%\midpapi20.jar 
set MMAPI=%LIB_DIR%\mmapi.jar 

並根據這種變化更新的代碼,其他兩行:

%JAVAC% -bootclasspath %CLDCAPI%;%MIDPAPI%;%MMAPI% -source 1.3 -target 1.3 -d ..\tmpclasses -classpath ..\tmpclasses %JAVA_FILES% 

%PREVERIFY% -classpath %CLDCAPI%;%MIDPAPI%;%MMAPI%;..\tmpclasses -d ..\classes ..\tmpclasses 

現在一切都很順利。這是非常蹩腳的是不是?