录音到RMS中,没有声音...
片段如下:
.....................
p = Manager.createPlayer("capture://audio");
p.realize();
rc = (RecordControl) p.getControl("RecordControl");
ByteArrayOutputStream output = new ByteArrayOutputStream();
rc.setRecordStream(output);
rc.startRecord();
p.start();
Thread.currentThread().sleep(3000);
p.stop();
byte b[] = output.toByteArray();
rs.open();
System.out.println(id = rs.addRecord(b, 0, b.length););
System.out.println("record sound end!");
rc.stopRecord();
rc.commit();
放音功能如下:
.............................
System.out.println("play is begin;");
InputStream is = new ByteArrayInputStream(rs.getRecord(id));
p = Manager.createPlayer(is, "audio/X-wav");
p.start();
System.out.println("play is end;");
为啥不好使呢?谢谢
问题点数:100、回复次数:19Top
1 楼cuilichen(fjfjfjfj)回复于 2005-05-22 11:36:16 得分 0
使用流进行播放应该没有问题的。
有更多的信息吗?Top
2 楼kmlzkma(我去你妈)回复于 2005-05-22 20:43:27 得分 0
import javax.microedition.media.Player;
import javax.microedition.media.Manager;
import javax.microedition.media.MediaException;
import javax.microedition.media.control.VideoControl;
import javax.microedition.media.control.RecordControl;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Gauge;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Item;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Image;
import javax.microedition.midlet.MIDlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
public class AudioForm extends Form implements CommandListener/*, Runnable*/ {
private Player p;
private Game main;
private VideoControl vc = null;
private Command exitCommand, commit,playCommand;
private Save save;
private Gauge gauge;
private boolean run;
private int id;
public AudioForm(Game main) {
super("请留言:");
this.main = main;
run = true;
append(gauge = new Gauge("record", true, 3, 0));
addCommand(exitCommand = new Command("离开", Command.SCREEN, 1));
addCommand(commit = new Command("录音", Command.SCREEN, 1));
setCommandListener(this);
save = Save.getSaveInstance();
}
public void recordSound() {
RecordControl rc;
try {
// Create a DataSource that captures live audio.
p = Manager.createPlayer("capture://audio");
p.realize();
// Get the RecordControl, set the record location, and
// start the Player and record for 3 seconds.
rc = (RecordControl) p.getControl("RecordControl");
ByteArrayOutputStream output = new ByteArrayOutputStream();
rc.setRecordStream(output);
rc.startRecord();
System.out.println("record sound begin!");
new Thread(this).start();
p.start();
Thread.currentThread().sleep(3000);
p.stop();
byte b[] = output.toByteArray();
save.open();
System.out.println(id = save.addRecord(b));
run = false;
System.out.println("record sound end!");
rc.stopRecord();
rc.commit();
addCommand(playCommand = new Command("play", Command.SCREEN, 1));
} catch (IOException ioe) {
System.err.println(ioe);
} catch (MediaException me) {
System.err.println(me);
} catch (InterruptedException e) {
System.err.println(e);
}
}
public void run() {
while (run) {
int v = (int) (p.getTimeBase().getTime() / 1000000L);
gauge.setValue(v);
}
}
public void playSound() {
try {
System.out.println("play is begin;");
InputStream is = new ByteArrayInputStream(save.getRecord(id));
p = Manager.createPlayer(is, "audio/X-wav");
p.start();
System.out.println("play is end;");
} catch (IOException ioe) {
System.err.println(ioe);
} catch (MediaException me) {
System.err.println(me);
}
}
public void commandAction(Command c, Displayable d) {
if (c == exitCommand) {
save.close();
try {
p.stop();
} catch (MediaException me) {
System.err.println(me);
}
if (p != null) {
p.close();
p.deallocate();
p = null;
}
main.showMenu();
} else if (c == commit) {
recordSound();
}else if(c == playCommand){
playSound();
}
}
}
//Save类:
import javax.microedition.rms.RecordStore;
import javax.microedition.rms.RecordStoreNotFoundException;
import javax.microedition.rms.RecordStoreFullException;
import javax.microedition.rms.RecordStoreException;
import javax.microedition.rms.RecordStoreNotOpenException;
import javax.microedition.rms.InvalidRecordIDException;
import java.util.Date;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;
import java.io.DataOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
public class Save {
private RecordStore rs = null;
private static final Save save_instance = new Save();
/*"分数||时间||姓名||留言||照片"*/
private Save() {
open();
try{
if (rs.getNumRecords() == 0) {
String record = "0||"+new Date()+"||无名||超过0分就能赢我!";
System.out.println(addRecord(record));
byte[] b = null;
addRecord(b);
addRecord(record);
addRecord(b);
addRecord(record);
addRecord(b);
}
} catch (RecordStoreNotOpenException rsnoe) {
System.err.println(rsnoe);
}
}
public void open(){
try {
rs = RecordStore.openRecordStore("kmlzkma", true);
} catch (RecordStoreFullException rsfe) {
System.err.println(rsfe);
} catch (RecordStoreException rse) {
System.err.println(rse);
}
}
public static Save getSaveInstance() {
return save_instance;
}
public int addRecord(byte[] pic) {
try {
if(pic == null) return rs.addRecord(null, 0, 0);
return rs.addRecord(pic, 0, pic.length);
} catch (Exception e) {
System.err.println(e);
}
return 0;
}
public int addRecord(String string) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeUTF(string);
byte[] data = baos.toByteArray();
return rs.addRecord(data, 0, data.length);
} catch (IOException ioe) {
System.err.println(ioe);
} catch (Exception e) {
System.err.println(e);
}
return 0;
}
public void setRecord(int num,byte[] pic) {
try {
rs.setRecord(num,pic, 0, pic.length);
} catch (Exception e) {
System.err.println(e);
}
}
public void setRecord(int num,String string) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeUTF(string);
byte[] data = baos.toByteArray();
rs.setRecord(num,data, 0, data.length);
} catch (IOException ioe) {
System.err.println(ioe);
} catch (Exception e) {
System.err.println(e);
}
}
public byte[] getRecord(int num) {
try {
return rs.getRecord(num);
} catch (RecordStoreNotOpenException rsnoe) {
System.err.println(rsnoe);
} catch (InvalidRecordIDException ire) {
System.err.println(ire);
} catch (RecordStoreException rse) {
System.err.println(rse);
}
return null;
}
public String getStringRecord(int num) {
try {
byte[] data = rs.getRecord(num);
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
return dis.readUTF();
} catch (RecordStoreNotOpenException rsnoe) {
System.err.println(rsnoe);
} catch (InvalidRecordIDException ire) {
System.err.println(ire);
} catch (RecordStoreException rse) {
System.err.println(rse);
} catch (IOException ioe) {
System.err.println(ioe);
}
return null;
}
public void close() {
try {
rs.closeRecordStore();
} catch (RecordStoreNotOpenException rsnoe) {
System.err.println(rsnoe);
} catch (RecordStoreException rse) {
System.err.println(rse);
}
}
}Top
3 楼prok(换换口味)回复于 2005-05-23 10:13:41 得分 0
markTop
4 楼kmlzkma(我去你妈)回复于 2005-05-24 13:57:18 得分 0
如何录音到RMS而不是.wav文件中,我写的对么?
感觉是没有录进去呀,流那地方写的对么?谢谢Top
5 楼kmlzkma(我去你妈)回复于 2005-05-25 21:04:27 得分 0
狂顶Top
6 楼yuling1216()回复于 2005-05-26 15:45:33 得分 0
狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!狂顶!!!!!Top
7 楼kmlzkma(我去你妈)回复于 2005-05-27 12:03:05 得分 0
嗷!嗷!嗷!Top
8 楼kmlzkma(我去你妈)回复于 2005-05-28 10:24:34 得分 0
汪!汪!汪!Top
9 楼39827140(不想穿裤叉)回复于 2005-05-29 17:49:30 得分 0
你是不是受刺激了?Top
10 楼kmlzkma(我去你妈)回复于 2005-05-30 09:36:50 得分 0
没能力解决问题就闭嘴看别人怎么做的.Top
11 楼prok(换换口味)回复于 2005-05-30 15:36:13 得分 0
听说不是所有手机都支持得.Top
12 楼yyworld()回复于 2005-05-30 16:38:30 得分 50
你的播放格式是audio/X-wav。首先要确定录音时存储的格式,多数手机默认是储存为amr的。Top
13 楼kmlzkma(我去你妈)回复于 2005-05-31 07:40:06 得分 0
我不是放RMS里了么?还有格式么?
audio/x-tone-seq?Top
14 楼fage87295970(任我行)回复于 2005-05-31 09:07:30 得分 0
顶Top
15 楼sea2000cn(我想我是海)回复于 2005-06-08 08:25:22 得分 50
支持“yyworld() ”的观点,多数手机默认是储存为amr的。
有些时候存储方式为μ-law(由amr转换来的)Top
16 楼geodetic()回复于 2005-06-08 13:01:36 得分 0
markTop
17 楼kmlzkma(我去你妈)回复于 2005-06-16 22:09:32 得分 0
对应与AMR就没办法了么?求教Top
18 楼hrlixiang(hrlx)回复于 2005-06-17 18:10:16 得分 0
用的是什么手机?Top
19 楼kmlzkma(我去你妈)回复于 2005-06-25 20:46:40 得分 0
西门子,c65Top




