关于 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 我都测试过了,都不行。手机也重启过了还不行。

不知道有没有高手知道这方面的问题,请赐教。
...全文
2241 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,471

社区成员

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

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