android audiorecord初始化失败相关资料收集_weixin_30532369的博客-程序员宅基地

技术标签: 移动开发  

We're also struggling with audio recording on some Samsung Android Devices. Unfortunately it seems to be very broken, as even different revisions of the same phone model are behaving differently with the same codebase.

Here are my current findings, hoping you find something useful:

1. Broken Initialization:

Unfortunately, the strategy you are using to query for valid recording configurations will fail at least on Samsung Galaxy Young and Ace models running Android 2.3 The problem is that some invalid AudioRecord configurations instead of simply failing, will completely brick the audio capture subsystem if tried. You'll need to reset the phone to recover from this state.

2. Inconsistent Sampling-Rate support along revisions of same phone model

On an older Galaxy Ace Phone, recording @ 11025Hz, 16-bit mono will succeed. On newer Ace revisions, this AudioRecord configuration will be accepted as valid, but the resulting recording will be distorted, with a "chipmunk" effect. A very popular guitar tuner app that has hardcoded this sampling rate is failing to give proper tuning readings on these phones precisely because of this problem!

3. Extremely low volume audio capture on some configurations.

In Galaxy Young and Galaxy Ace, recording from the mic or default audio source @ 44,100Hz (the supposedly canonical rate where everything should work fine) produces an undistorted, but extremely low-volume recording. I haven't found yet a way to fix this other than software amplification (which is the equivalent of magnifying a very low res image, with the consecuent "jageddnes" of the result).

4. Failure to support the canonical 44,100Hz sampling rate on every audio capture source.

In Galaxy Young and Galaxy Ace, recording from the Camcorder source fails @ 44,100Hz. (again, the configuration will be accepted as valid) producing complete garbage. However, recording @ 8,000Hz, 16,000Hz and 48,000Hz works fine and produces a recording with very acceptable volume levels. What is frustrating is that according to the Android documentation, 44,100Hz is a sampling rate all devices SHOULD support.

5. OpenSL does not fix any of the problems reported.

Working with the NDK and OpenSL produces the same described results. It seems that the AudioRecorder class is simply wrapping calls to OpenSL, and the problem is either hardware based, or buried at a lower-level tier in the kernel code.

This situation is very unfortunately indeed, as these models are becoming very popular - at least in Mexico.

Good luck - and please report if you had better luck working with these phones. =)

 

 

一种通用的初始化audiorecord的方式:

private static int[] mSampleRates = new int[] { 8000, 11025, 22050, 44100 }; 

 public AudioRecord findAudioRecord() {

     for ( int rate: mSampleRates) {
         for ( short audioFormat:  new  short[] {
            AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT
        }) {
             for ( short channelConfig:  new  short[] {
                AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO
            }) {
                 try {
                    Log.i("vipul", "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: " + channelConfig);
                     int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);

                     if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {
                         //  check if we can instantiate and have a success
                        AudioRecord recorder =  new AudioRecord(
                        AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                         if (recorder.getState() == AudioRecord.STATE_INITIALIZED)  return recorder;
                    }
                }  catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
     return  null;
}

转载于:https://www.cnblogs.com/binfenworld/p/3337027.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30532369/article/details/98431669

智能推荐

tcpdump使用(linux)_Lishuang.Lou的博客-程序员宅基地

tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具。tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是

原生js获取当前时间_一只快乐的小猴子的博客-程序员宅基地

function getdate(){ const dt = new Date(); const y = dt.getFullYear(); const m = dt.getMonth() + 1; const d = dt.getDate(); const hh = dt.getHours().toString().padStart(2, 0);...

使用tensorflow训练模型时可能出现nan的几种情况_diebiao6526的博客-程序员宅基地

最近在做基于MTCNN的人脸识别和检测的项目,在训练模型的过程中总是会不定时地出现损失值为nan的情况,Debug了好久终于找到了问题所在,这里总结以下可能出现nan的几种情况:1、在分类问题中,我们经常使用到交叉熵损失函数,需要注意的是:由于交叉熵损失函数里有对数计算,因此对数的真数部分不能为0,所以我们在计算计算交叉熵时需要给这个真数部分限定一个范围,否则会出现数值下溢的问题,我...

Linux也需要GALGAME:wine跑GALGAME测试_iteye_20271的博客-程序员宅基地

先扫盲:介绍wine: http://baike.baidu.com/view/126772.htm乌班图 Ubuntu:http://baike.baidu.com/view/4236.htmVMware: http://baike.baidu.com/view/301083.htm先说几个废话:这个IT 世界被分为几大厨:windows 厨 Linux厨 MAC...

十进制任意整数类型向常见数值类型进制转换的通用办法_weixin_30740581的博客-程序员宅基地

一个十进制数字转换成任意的其它常用进制(比如二进制或者八进制,十六进制……)。通常我们可以使用Convert.ToString的一个重载函数去完成:http://msdn.microsoft.com/zh-cn/library/8s62fh68.aspx(具体代码和函数体声明,请看给出的MSDN例子)。现在有客户提出一个问题:你那个Convert只能够接受byte,int或者lo...

vector数组的初始化_悲伤且秃驴的博客-程序员宅基地_vector一维数组初始化

1.已知元素的初始化vector a={1,2,3,4,5};2.需要输入元素的初始化(1)先将vector中所有元素初始化为0vector a(n)或vector a(n,0)#include<iostream>#include<vector>using namespace std;int main(){ int n; cin >&...

随便推点

Mybatis练习中的错误记录_请问你是水呢的博客-程序员宅基地

一、在用动态sql语句的模糊查询的时候,运行时报异常,但是看sql语句也没问题猜测有可能时因为sql语句的判定条件出错就对sql语句进行了修改,换了一种写法,但是同样的意思这会运行就不报错了。后来进行分析发现,可能是因为,参数的原因,如果parameterType是基本数据类型,则两种写法都可以,如果是传了一个对象,则有可能报错,不是一定会报错。   ...

linux pci 扩展usb,PCI USB卡 USB2.0卡 PCI扩展卡 PCI转4USB口 VIA转换卡USB扩展卡_weixin_39949889的博客-程序员宅基地

产品名称:USB2.0 PCI扩展卡 4口 PCI USB扩展卡 USB转PCI卡主芯片:VIA芯片产品介绍:1、数据传输率可达1.5/12/480Mbps2、符合OHCI 1.0a标准3、符合EHCI标准4、5个USB端口可处理高速(480Mbps),全速(12Mbps)和低速(1.5Mbps)5、32位33MHz主机介面符合Revision 2.2标准6、支持PCI-Bus Power Man...

嵌入式软件学习方法 嵌入式软件知识_weixin_33796205的博客-程序员宅基地

目前嵌入式软件的学习主要主要面向的几个操作系统是,Linux,WINCE、VxWorks等等。其中Linux是开源免费的,而且其源代码是开放的,更加适合我们学习嵌入式软件。下面我们介绍一下嵌入式软件学习的学习方法。嵌入式软件学习方法 嵌入式软件知识1、基础知识目的:能看懂硬件工作原理,但重点在嵌入式软件,特别是操作系统级软件,那将是我...

矩阵、欧拉角、轴-角对、四元数随笔_weixin_30585437的博客-程序员宅基地

一、矩阵在 3D 游戏中,可以使用矩阵来表示一个物体的旋转。1) 优点:个人认为,理解起来最为直观。像现成的DXSDK库中也提供了十分完善的相关接口一个矩阵即可表示多种变换的组合2) 缺点:每次计算都会产生误差,因此,需要经常规范化。耗的内存较多些。二、欧拉角欧拉角指的是:以世界坐标系为参考坐标系(一定记住是世界坐标系),使...

selenium之unittest框架为项目添加测试报告:htmltestrunner_py3_吃喝玩乐秀起来的博客-程序员宅基地

先把这个包下载下来:链接: https://github.com/search?q=HTMLTestRunner_PY3.下载后HTMLTestRunner_PY3.py放到python安装目录/Lib下,如我的路径为:C:\Users\XXX\AppData\Local\Programs\Python\Python36\Lib代码:from HTMLTestRunner_PY3 import HTMLTestRunner比如test.py文件运行后的报告import unittestf

《游戏设计艺术(第2版)》——学习笔记(9)第9章 游戏为玩家而生_王大翔啊的博客-程序员宅基地

《游戏设计艺术》学习笔记(9)第9章 游戏为玩家而生爱因斯坦的小提琴设身处地人群特征媒体排斥女性吗男性玩家喜欢在游戏中看到的五件事女性玩家喜欢在游戏中看到的五件事心理特征勒布朗的游戏乐趣分类巴特尔的玩家类型分类更多的乐趣:更多第9章 游戏为玩家而生爱因斯坦的小提琴       爱因斯坦有一次被当地的一家小型机构邀请参加一场午宴。本来...