Java me 如何在Java ME、SE K770i上使用RecordControl录制/捕获音频

Java me 如何在Java ME、SE K770i上使用RecordControl录制/捕获音频,java-me,audio-recording,voice-recording,recording,media,Java Me,Audio Recording,Voice Recording,Recording,Media,我想在K770i上的Java ME应用程序上录制声音。所以我用了这个: 我的代码中的RecordControl示例。事情是这样的: import java.util.Vector; import javax.microedition.lcdui.Choice; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.l

我想在K770i上的Java ME应用程序上录制声音。所以我用了这个:

我的代码中的RecordControl示例。事情是这样的:

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类,如果在文档中是这样写的,那么这个类应该存在。或者,索尼爱立信的Java ME中是否有其他方法从Microphone录制/捕获音频


如何录制声音?

原因可能是它不支持音频捕获

尝试从索尼手机获取此值

System.getProperty(“supports.audio.capture”)

编写一个简单的midlet,并在上面的语句后面附加一个表单。如下图所示

frm.append(“支持音频:”+System.getProperty(“支持.Audio.capture”)

如果返回false,则您已清除。。。 录音控制不起作用

很少有索尼手机不支持音频捕获,比如索尼p1i


希望这有帮助。

好的,正如我说的,我是java me新手。所以我需要做的是:

1) 将JAD和清单文件中的MIDlet权限添加到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

现在一切都很顺利。这太差劲了,不是吗?

这太糟糕了。编译器不会抱怨播放器或管理器,因此您在某种程度上是针对只包含JSR-135部分的平台进行编译的。我不相信这对我来说是合法的。我认为有必要详细介绍一下您的工具链。我正在使用索尼爱立信SDK 2.5.0.6来开发Java™ ME PlatformIt返回在我的手机上受支持的信息。现在该怎么办?