关于 AudioRecord 初始化失败的问题

里沃特 2014-09-19 05:01:56
int sampleRate = 8000, 
channelConfig = AudioFormat.CHANNEL_IN_MONO,
audioFormat = AudioFormat.ENCODING_PCM_16BIT,
audioSource = AudioSource.MIC;

int bufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
AudioRecord recorder = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize);


部分机型初始化失败:
[ android.media.AudioRecord ] Error code -1 when initializing native AudioRecord object.

但是我发现同时有另外一个APP是别人写的却又可以初始化成功,并且有声音。经过反编译后发现它用的是 AudioSource.CAMCORDER,这个网上的资料是相当的少,我在我的代码里面直接改成为 CAMCORDER 初始化还是失败,我估计人家的APP一定做了什么其他的处理,但是代码好像是混淆过了,根本很难查。

另外所有的 sampleRate 我都测试过了,都不行。手机也重启过了还不行。

不知道有没有高手知道这方面的问题,请赐教。
...全文
1974 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
慕白bmy 2015-12-11
  • 打赏
  • 举报
回复
引用 17 楼 Mr_Tony 的回复:
我碰上了-20错误,是采样率的问题。手机与手机之间的采样率是不一样的。


我用同样 的平台去连接。 一样 还是-20错误。
W/AudioPolicyManagerBase( 121): getInput() could not find device for inputSource 10

E/AudioRecord( 967): Could not get audio input for record source 10

E/AudioRecord-JNI( 967): Error creating AudioRecord instance: initialization check failed.

E/android.media.AudioRecord( 967): Error code -20 when initializing native AudioRecord object.

D/A2dpStateMachine( 967): RecordThread====================

W/dalvikvm( 967): threadid=23: thread exiting with uncaught exception (group=0x415a2560)

D/A2dpStateMachine( 967): A2DP Playing state : device: B4:30:52:04:73:0B State:11->10

E/AndroidRuntime( 967): FATAL EXCEPTION: Thread-94

E/AndroidRuntime( 967): Process: com.android.bluetooth, PID: 967

E/AndroidRuntime( 967): java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.

E/AndroidRuntime( 967): at android.media.AudioRecord.startRecording(AudioRecord.java:506)

E/AndroidRuntime( 967): at com.android.bluetooth.a2dp.A2dpStateMachine$RecordThread.run(A2dpStateMachine.java:873)
Mr_Tony 2015-02-25
  • 打赏
  • 举报
回复
我碰上了-20错误,是采样率的问题。手机与手机之间的采样率是不一样的。
里沃特 2015-01-05
  • 打赏
  • 举报
回复
引用 13 楼 komaw123 的回复:
请问有解决吗,怎么解决的
引用 15 楼 komaw123 的回复:
问题没找到,但是我解决了问题。新建一个工程然后把原来的工程文件一个个加进去,重新编译,即可。这个可能是工程在上传下载到svn的时候出的错,总之呢是android深层次的bug
我还没解决,感谢你的分享。
komaw123 2014-10-15
  • 打赏
  • 举报
回复
问题没找到,但是我解决了问题。新建一个工程然后把原来的工程文件一个个加进去,重新编译,即可。这个可能是工程在上传下载到svn的时候出的错,总之呢是android深层次的bug
komaw123 2014-10-14
  • 打赏
  • 举报
回复
我也遇到这个问题,百思不得其解,一个原因是说原来打开的还没释放,有的说是权限问题,我发现相同的代码,别人的应用可以,而我完全复制了它的代码用在我的应用中,就是不行
komaw123 2014-10-14
  • 打赏
  • 举报
回复
请问有解决吗,怎么解决的
Darcy杨 2014-09-24
  • 打赏
  • 举报
回复

		int sampleRate = 44100;
		int channel = AudioFormat.CHANNEL_IN_MONO;
		int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
		int bufferSize = 4 * AudioRecord.getMinBufferSize(sampleRate, channel, audioFormat);

		return new AudioRecord(AudioSource.CAMCORDER, sampleRate, channel, audioFormat, bufferSize);
注意在AndroidManifest.xml里添加录音权限,并且检查下权限是否可用(比如被管理软件禁止等)。如果再不行,就换个手机吧。 sampleRate只有44100是API级别被保证支持的
里沃特 2014-09-24
  • 打赏
  • 举报
回复
引用 5 楼 rover11 的回复:
不清楚,俺们用的 MediaRecorder
而且录下来的是压缩格式,我需要的是PCM格式。
里沃特 2014-09-24
  • 打赏
  • 举报
回复
引用 5 楼 rover11 的回复:
不清楚,俺们用的 MediaRecorder
MediaRecorder 要写文件。如果用 socket 的话太复杂了。
里沃特 2014-09-24
  • 打赏
  • 举报
回复
引用 10 楼 youngc527 的回复:
应该是你的代码其他地方的问题。 我现在就用的这个配置,小米,联想都测似过,没有问题的。
另外因为我们对讲是跟硬件对讲,所以固定 sampleRate 用 8000。不过其他的我都测试过,也没用。
里沃特 2014-09-24
  • 打赏
  • 举报
回复
引用 10 楼 youngc527 的回复:
应该是你的代码其他地方的问题。 我现在就用的这个配置,小米,联想都测似过,没有问题的。
百思不得其姐。 我还有两部测试手机,一部是 HTC,一部是大显,没问题。另外有一个同事的小米2也没问题。如果是代码有问题,应该都通不过。 据我同事说,可能是 MTK 的就有问题,具体还没有证实。
Darcy杨 2014-09-24
  • 打赏
  • 举报
回复
应该是你的代码其他地方的问题。 我现在就用的这个配置,小米,联想都测似过,没有问题的。
里沃特 2014-09-24
  • 打赏
  • 举报
回复
引用 8 楼 youngc527 的回复:

		int sampleRate = 44100;
		int channel = AudioFormat.CHANNEL_IN_MONO;
		int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
		int bufferSize = 4 * AudioRecord.getMinBufferSize(sampleRate, channel, audioFormat);

		return new AudioRecord(AudioSource.CAMCORDER, sampleRate, channel, audioFormat, bufferSize);
注意在AndroidManifest.xml里添加录音权限,并且检查下权限是否可用(比如被管理软件禁止等)。如果再不行,就换个手机吧。 sampleRate只有44100是API级别被保证支持的
44100 也测试过,buffersize*10 也测试过,主要是有比较多的手机会有这个问题,在我们公司内部就发现 联想和小米,软件是做给客户用的,另外别人的 App 却又没问题。我怀疑是不是它在 JNI 层做了什么处理,貌似它使用了 VOIP 协议。
里沃特 2014-09-22
  • 打赏
  • 举报
回复
引用 1 楼 lilidejing 的回复:
不清楚,帮你顶一下
谢谢。
里沃特 2014-09-22
  • 打赏
  • 举报
回复
引用 2 楼 lovelife_821106 的回复:
new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize*10);
谢谢,不过+100,*10,*2 都试过还是不行。
rover11 2014-09-22
  • 打赏
  • 举报
回复
不清楚,俺们用的 MediaRecorder
lovelife_821106 2014-09-22
  • 打赏
  • 举报
回复
new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, bufferSize*10);
新靖界 2014-09-20
  • 打赏
  • 举报
回复
不清楚,帮你顶一下

80,349

社区成员

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

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