- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在j2me中是否可以测量JSR-135 Player制作的音频记录的信号幅度?
我知道我可以访问缓冲区,但是那又如何呢?
目标型号Bold 9000,支持格式PCM和AMR。我应该使用哪种格式?
也可以看看
Blackberry Audio Recording Sample Code
How To - Record Audio on a BlackBerry smartphone
谢谢!
最佳答案
获取原始PCM信号电平
class VoiceNotesRecorderThread extends Thread {
private Player _player;
private RecordControl _rcontrol;
private ByteArrayOutputStream _output;
private byte _data[];
VoiceNotesRecorderThread() {
}
public void run() {
try {
_player = Manager
.createPlayer("capture://audio?encoding=audio/basic");
_player.realize();
_rcontrol = (RecordControl) _player
.getControl("RecordControl");
_output = new ByteArrayOutputStream();
_rcontrol.setRecordStream(_output);
_rcontrol.startRecord();
_player.start();
} catch (final Exception e) {
UiApplication.getUiApplication().invokeAndWait(new Runnable() {
public void run() {
Dialog.inform(e.toString());
}
});
}
}
public void stop() {
try {
_rcontrol.commit();
_data = _output.toByteArray();
_output.close();
_player.close();
} catch (Exception e) {
synchronized (UiApplication.getEventLock()) {
Dialog.inform(e.toString());
}
}
}
byte[] getData() {
return _data;
}
}
private Bitmap getGraph(byte[] buffer, int zoom, int startFrom) {
Bitmap result = new Bitmap(Display.getWidth(), Display.getHeight());
Graphics g = new Graphics(result);
g.setColor(Color.BLACK);
int xPos = 0;
int yPos = Display.getHeight() >> 1;
for (int i = startFrom; i < buffer.length; i += 2 * zoom) {
byte[] b = new byte[] { buffer[i], buffer[i + 1] };
int level = (signedShortToInt(b) * 100 / 32767);
if (100 < level) {
level -= 200;
}
g.drawPoint(xPos, yPos - level);
xPos++;
}
return result;
}
public static final int signedShortToInt(byte[] b) {
int result = (b[0] & 0xff) | (b[1] & 0xff) << 8;
return result;
}
class Scr extends MainScreen {
BitmapField mGraphField = new BitmapField(new Bitmap(Display.getWidth(),
Display.getHeight()));
private VoiceNotesRecorderThread m_thread;
public Scr() {
add(mGraphField);
add(new NullField(FOCUSABLE));
}
boolean mRecording = false;
private int mZoom = 1;
private int mStartFrom = 0;
byte[] mAudioData = null;
protected void makeMenu(Menu menu, int instance) {
super.makeMenu(menu, instance);
menu.add(mRecordStopMenuItem);
menu.add(mPaintZoomIn);
menu.add(mPaintZoomOut);
menu.add(mPaintZoomToFitScreen);
menu.add(mPaintMoveRight);
menu.add(mPaintMoveLeft);
menu.add(mPaintMoveToBegin);
}
MenuItem mRecordStopMenuItem = new MenuItem("Record", 0, 0) {
public void run() {
if (!mRecording) {
m_thread = new VoiceNotesRecorderThread();
m_thread.start();
mRecording = true;
this.setText("Stop");
} else {
m_thread.stop();
mAudioData = m_thread.getData();
zoomToFitScreen();
mRecording = false;
this.setText("Record");
}
}
};
MenuItem mPaintZoomIn = new MenuItem("Zoom In", 0, 0) {
public void run() {
zoomIn();
}
};
MenuItem mPaintZoomOut = new MenuItem("Zoom Out", 0, 0) {
public void run() {
zoomOut();
}
};
MenuItem mPaintZoomToFitScreen = new MenuItem("Fit Screen", 0, 0) {
public void run() {
zoomToFitScreen();
}
};
MenuItem mPaintMoveLeft = new MenuItem("Left", 0, 0) {
public void run() {
moveLeft();
}
};
MenuItem mPaintMoveRight = new MenuItem("Right", 0, 0) {
public void run() {
moveRight();
}
};
MenuItem mPaintMoveToBegin = new MenuItem("To Begin", 0, 0) {
public void run() {
moveToBegin();
}
};
private void zoomOut() {
if (mZoom < 200)
mZoom++;
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
private void zoomIn() {
if (mZoom > 1)
mZoom--;
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
private void zoomToFitScreen() {
int lenght = mAudioData.length;
mZoom = (lenght / 2) / Display.getWidth();
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
private void moveRight() {
if (mStartFrom < mAudioData.length - 30)
mStartFrom += 30;
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
private void moveLeft() {
if (mStartFrom > 30)
mStartFrom -= 30;
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
private void moveToBegin() {
mStartFrom = 0;
mGraphField.setBitmap(getGraph(mAudioData, mZoom, mStartFrom));
}
protected boolean navigationMovement(int dx, int dy, int status,
int time) {
if (dx < 0) {
moveLeft();
} else if (dx > 0) {
moveRight();
}
if (dy < 0) {
zoomIn();
} else if (dy > 0) {
zoomOut();
}
return super.navigationMovement(dx, dy, status, time);
}
}
关于blackberry - J2ME/Blackberry-获得音频信号幅度水平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497706/
我正在开发一个 BlackBerry 应用程序,该应用程序在应用程序启动时需要启动画面。我还没有找到任何实现闪屏的例子。 我在应用程序的启动类中使用了一个计时器来显示启动图像。 有没有其他方法可以解决
有没有办法从BlackBerry OS中的代码启用Wifi? 谢谢 - 编辑 - 我只想添加代码片段以检查是否已启用WiFi: if ( (RadioInfo.getActiveWAFs() & Ra
Blackberry PlayBook的网络浏览器的User-Agent字符串是什么? 最佳答案 OS 1.0-根据RIM,它是 Mozilla/5.0 (PlayBook; U; RIM Table
我为黑莓做了简单的 java 应用程序,但在构建时出现以下错误。 "Building Hisantosh C:\BlackBerryJDE4.5.0\bin\rapc.exe -quiet impo
我们有几个黑莓应用程序,现在正在努力为 BB 10 做准备。这些应用程序是通过 Eclipse 和/或 RIM IDE 工具用 Java 制作的。然而,当我去 https://developer.bl
我已经实现了黑莓手机推送启动器的前4个步骤 发送推送请求 BlackBerry服务返回响应 BlackBerry服务将数据推送到设备上指定的特定端口 设备返回对BlackBerry服务的响应 现在,我
我有一个与黑莓 Storm 配对的蓝牙耳机。每当我打开/关闭耳机时, Storm 都会显示耳机已连接或断开连接的消息,并更新蓝牙指示灯图标。我想在我的应用程序中检测到耳机连接更改事件。我如何捕获事件变
如何在 BlackBerry 中实现图像按钮? 最佳答案 给你,完整的代码: import net.rim.device.api.system.Bitmap; import net.rim.devic
我下载了 BlackBerry 的 Eclipse 插件,它默认运行 BlackBerry OS 7。我需要针对 BlackBerry OS 6 和 OS 7 设备。这是否也适用于 BlackBerr
我正在尝试为黑莓浏览器找到一个好的模拟器,以便我可以尝试我的黑莓应用程序。 有没有在线版本所以我不必下载和安装一个? 或者在更糟糕的情况下,我应该下载哪一个? 谢谢, 最佳答案 RIM 提供了一些模拟
我正在编写一个自定义对话框窗口来显示长时间操作的状态,并希望使用 BB native 对话框中使用的小计时器图标(OS >= 4.6 上的小方形时钟)。 如何在我的对话框中使用此图形? 我已经熟悉布局
我想自定义出现在树 View 左侧的 (+) 符号 是否可以 我想在那个地方放置图像 我尝试自定义和搜索论坛以及黑莓论坛,其中一个说这是不可能的,但后来 我得到了一个链接,如下所示,这是可能的 htt
我在应用商店中有一个BlackBerry应用。我想从网页链接到该应用程序,因此,如果用户在浏览器中转到该页面并单击链接,则将启动BlackBerry AppWorld应用程序,并且用户将能够轻松下载
我正在尝试使用 Java + JDE 以编程方式拒绝黑莓上的调用。 我正在拦截 callIncoming事件,在那里我需要做一些事情来拒绝来自特定号码的调用。 有谁知道这是怎么做到的吗? 最佳答案 我
我想知道为 BlackBerry 开发的人是如何在他们的应用程序中管理屏幕的。最常见的做法(也是我正在使用的做法)似乎只是实例化并从当前屏幕推送新屏幕。我见过的另一个选项是使用 Main Applic
我为 BlackBerry 开发了一个订单处理应用程序。当我查看 bin 文件夹时,我看到 100 多个 .class文件。 我创建了一个用于添加新客户端的主屏幕类。屏幕有 7 个 LabelFiel
创建黑莓应用程序。 只是一个初学者,我已经搜索过但无法找到解决方案,尽管它很常见。如果有人能告诉我如何在 Java 中为黑莓应用程序显示密码提示和数字提示。 提前致谢!! 最佳答案 According
我在应用程序中使用树 View 来显示黑莓中的客户端服务器数据。我通过使用可扩展的 ListView 项目在 android 应用程序中实现了同样的事情。但在这里我面临两个问题 一种是: 我想添加父节
这是一个愚蠢的问题,但我知道黑莓的经典风格 JDE 开发,但我从未尝试过使用 WebWorks。 BB 网站表示可以为智能手机(OS 6.0+)和平板电脑构建应用程序 - 听起来很棒,但价格是多少?
我有兴趣为 BlackBerry 设备开发应用程序,想知道他们是否支持为应用程序开发人员提供演示版或测试版的概念?通过这个,我的意思是能够将我的应用程序的测试版或演示版部署到有限/受限的受众,例如业务
我是一名优秀的程序员,十分优秀!