返回信息流程序很简单,录一段音并且进行音频分析,使用的AudioRecord类,初始化什么的都行,就是利用AudioRecord.read(short[]audiodata,int offsetInShorts,int sizeInShorts)将录音数据写入audiodata数组里时,写进去的都是0.
关键代码:
button2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
stopRecord();
int readsize = 0;
audiodata = new short[buffersize];
readsize = ar.read(audiodata, 0, buffersize);
StringBuilder data = new StringBuilder("数据为");
for(int i=0;i<readsize;i++){
data.append(audiodata[i]);
}
textdata.setText(data);
}
});
它给我打印了1280(buffersize)个0.......
求解为什么?难道我麦克风坏了?
小白在此谢过了!
这是一条镜像帖。来源:北邮人论坛 / java / #34383同步于 2014/9/4
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
哎,写一个android小程序遇到问题,来求助了
rancho
2014/9/4镜像同步18 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
类型不匹配会报错的额..
StringBuilder java.lang.StringBuilder.append(int i)
Appends the string representation of the specified int value. The int value is converted to a string according to the rule defined by String.valueOf(int).
Parameters:
i the int value to append.
Returns:
this builder.
【 在 HB0318 的大作中提到: 】
: audiodata[i]是short类型吧。data.append()中能写入short类型么。把short转换成string试试呢
已然改成string,还是行不通
for(int i=0;i<1280;i++){
data.append(Short.toString(audiodata[i]));
}
textdata.setText(data);
还是1280个0
【 在 HB0318 的大作中提到: 】
: audiodata[i]是short类型吧。data.append()中能写入short类型么。把short转换成string试试呢
怎么还有int的事。你不是short么。试试.tostring()方法,把short转换成string。你这样是把short转换成int了么??
【 在 rancho 的大作中提到: 】
: 类型不匹配会报错的额..
: StringBuilder java.lang.StringBuilder.append(int i)
:
: ...................
不应该是audiodata[i].tostring()么
【 在 HB0318 的大作中提到: 】
: 怎么还有int的事。你不是short么。试试.tostring()方法,把short转换成string。你这样是把short转换成int了么??
首先直接toString()转换会报错,
其次,short转int属于低精度转高精度,可以自动完成。
就好比
short a = 25;
不会报错一样。
【 在 HB0318 的大作中提到: 】
: 不应该是audiodata[i].tostring()么
这我知道,我的意思是short不能直接转成string么。
【 在 rancho 的大作中提到: 】
: 首先直接toString()转换会报错,
: 其次,short转int属于低精度转高精度,可以自动完成。
: 就好比
: ...................
AudioRecord的public int read (short[] audioData, int offsetInShorts, int sizeInShorts)方法没有public int read (byte[] audioData, int offsetInBytes, int sizeInBytes)接收的数据准确,试试用byte呢
【 在 HB0318 的大作中提到: 】
: 这我知道,我的意思是short不能直接转成string么。
既然你坚持,上截图为证:
另外,如果写成
data.append(audiodata.toString());
不会报错。
打印的是
“
数据为[S@422c6ab8
”
现在已经完全糊涂了。。。