三星手机上录音崩溃的问题

firstime_tzjz 2012-06-14 05:03:33
某些三星手机的音频驱动好像是改过的,在 HTC 手机上跑的好好的程序,拿到三星上就录音崩溃。我目前的手机是三星GT-I8150,我的源码如下:
public class AndroidAudioRecordManager
{
public int frequency =8000;
public int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO;
public int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;
int recBufSize, playBufSize;
AudioRecord audioRecord;
boolean isRecording = false;
private long filterCtxPtr = 0;
Thread recordThread=null;

private native void putAudioData(long filterCtxPtr, byte[] buffer,
int dataLen);

public void startParametersFromFilter(long filterCtxPtr, int rate,
int channel, int bits)
{
this.filterCtxPtr = filterCtxPtr;
frequency = rate;
recBufSize = AudioRecord.getMinBufferSize(frequency,
channelConfiguration, audioEncoding);
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
frequency, channelConfiguration, audioEncoding,
recBufSize);
isRecording = true;
recordThread=new AudioRecordThread();
recordThread.start();
}

public void stopFromFilter()
{
isRecording = false;
try
{
recordThread.join();
} catch (InterruptedException e)
{
}
}

class AudioRecordThread extends Thread
{
public void run()
{
android.os.Process.setThreadPriority(-19);
try
{
byte[] buffer = new byte[recBufSize];
int rstat=audioRecord.getRecordingState();
int dstat=audioRecord.getState();
if(dstat!=AudioRecord.STATE_INITIALIZED)
{
return;
}
Thread.sleep(1000);
audioRecord.startRecording();
while(isRecording)
{
int bufferReadResult = audioRecord.read(buffer, 0, 320);
putAudioData(filterCtxPtr, buffer, bufferReadResult);
}
audioRecord.stop();
} catch (Throwable t)
{
}
finally
{
audioRecord.release();
audioRecord=null;
}
}
}
};


执行到 int bufferReadResult = audioRecord.read(buffer, 0, 320); 这一句,bufferReadResult 始终是 -110。请有经验的大虾帮帮忙,高分相赠,非常感谢!
...全文
516 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaohj5200 2013-05-08
  • 打赏
  • 举报
回复
楼主,我遇到了recorder初始化失败的问题,帮个忙,怎么解决呀
groce 2012-10-25
  • 打赏
  • 举报
回复
可能是因为其他声音播放线程与该线程冲突。
德生coding 2012-06-20
  • 打赏
  • 举报
回复
不同手机音频系统具体实现有些区别,有些未必是按标准做的,因此还是得具体问题具体分析,把错误打印贴出来供大家分析。
firstime_tzjz 2012-06-20
  • 打赏
  • 举报
回复
3 楼:
在其他手机上没有问题。

4 楼:
系统录音并不是 PCM 数据,我需要 PCM 数据,而且我需要实时数据,而不是声音文件。
j_f0001 2012-06-19
  • 打赏
  • 举报
回复
系统有录音的功能,录完后,你只要将录完的文件拷入指定地方就可以了
阿鹏兄 2012-06-19
  • 打赏
  • 举报
回复
logcat有没有报错?会不会和线程有关?
firstime_tzjz 2012-06-15
  • 打赏
  • 举报
回复
很遗憾,不行。
ameyume 2012-06-14
  • 打赏
  • 举报
回复
sampleRateInHz the sample rate expressed in Hertz. 44100Hz is currently the only rate that is guaranteed to work on all devices, but other rates such as 22050, 16000, and 11025 may work on some devices.

api说明,把采样率设置为44100hz试试。

80,493

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧