自动判断mic设备

主要从3个方面判断,振幅,信噪比和输出频率
MediaPlayer mMediaPlayer;
Visualizer  mVisualizer;
OnDataCaptureListener captureDataLister;
static final SampleRate, IgnoreHZ, mOldMaxValue, fSourceSoundHz, TolerantRate, SNRPassPercentage;
public void playTrackToVisualizer(String paramString){
    mMediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(paramString));
    mVisualizer = new Visualizer(mMediaPlayer.getAudioSessionId());
    mVisualizer.setDataCaptureListener(this.captureDataLister, Visualizer.getMaxCaptureRate(), true, true);
    mVisualizer.setEnabled(true);
    mMediaPlayer.start();
}

captureDataLister = new Visualizer.OnDataCaptureListener()
{
      public void onFftDataCapture(Visualizer paramAnonymousVisualizer, byte[] paramAnonymousArrayOfByte, int paramAnonymousInt)
      {
        mMap.put(countFftDataCapture, paramAnonymousArrayOfByte);
        countFftDataCapture++;
      }


      public void onWaveFormDataCapture(Visualizer paramAnonymousVisualizer, byte[] paramAnonymousArrayOfByte, int paramAnonymousInt)
      {
         int m;
         for(int i = 0; i < paramAnonymousArrayOfByte.length; i++){
             m = max(m, paramAnonymousArrayOfByte[i], mOldMaxValue)
         }
         mAmplitudeMap.put(countFftDataCapture, paramAnonymousArrayOfByte);
         countAmplitudeDataCapture++;        
      }
};
  
public void generateFFTData(int paramInt, byte[] paramArrayOfByte)
{
	byte[] arrayOfByte = new byte[paramArrayOfByte.length];
	for (int i = 0; i < paramArrayOfByte.length; i++)
	{
	  paramArrayOfByte[i] = ((byte)checkIgnoreHZ(i, paramArrayOfByte, SampleRate, IgnoreHZ));
	  arrayOfByte[i] = 0;
	}
	for (int j = 1; j < paramArrayOfByte.length - 1; j++)
	  arrayOfByte[j] = Math.hypot(paramArrayOfByte[j], paramArrayOfByte[(j + 1)]);
  	mFFTMap.put(paramInt, arrayOfByte);
}

public float calculateFourierKHZ(int paramInt1, int paramInt2)
{
	return 1000.0F * (paramInt1 / (paramInt2 / 1000000.0F));
}

public float checkIgnoreHZ(int paramInt1, byte[] paramArrayOfByte, int paramInt2, float paramFloat)
{
	return (calculateFourierKHZ(paramInt1, paramInt2) < paramFloat) ? 0.0F : paramInt1;
}

public boolean checkAmplitude(){
    int j;
    for(int i = 0; i < mAmplitudeMap.size(); i++)
         j += mAmplitudeMap.get(i);
      j = j / this.mAmplitudeMap.size();
	mAmplitudeResult = j;
    if( j < MiniAmplitude)
        return false;
    return true;
}

public double checkFFTData(){
	int number = 0;
	double d;
	double af;
    for(int i = 0; i < mMap.size(); i++){
        byte[] arrayOfByte = mMap.get(i);
        generateFFTData(i, arrayOfByte);
        for (int k = 0; k < arrayOfByte.length ; k++)
             arrayOfByte[k] = checkIgnoreHZ(k, arrayOfByte, SampleRate, IgnoreHZ));   
        int n = arrayOfByte[1];
        int p;
        for(int k = 1; k < arrayOfByte.length; k ++){
		    if( n < Math.hypot(arrayOfByte[k], arrayOfByte[(k + 1)])){
				n = Math.hypot(arrayOfByte[k], arrayOfByte[(k + 1)]);
				p = k;
		    }
        }
        double d1 = (fSourceSoundHz + TolerantRate) / 1000.0F * (SampleRate / 1000000.0D);
        double d2 = (fSourceSoundHz  - TolerantRate) / 1000.0F * (SampleRate / 1000000.0D); 
        if( p >= d1 && p <=d2){
            number++;
			d +=p;
			af = (int)d/number;	
        }
    }
	
	return 1000.0D * (af / (SampleRate / 1000000.0));
}

public boolean checkFrequency()
{
	double d = checkFFTData();
	if ((d > fSourceSoundHz - TolerantRate) && (d < fSourceSoundHz + TolerantRate)){
		mFrequencyResult = fSourceSoundHz;
		return true;
	}
	else{
		mFrequencyResult = d;
		return false;
	}
}

public boolean analysisSNR()
{
    HashMap localHashMap1 = new HashMap();
    HashMap localHashMap2 = new HashMap();
    int i = 0;
    HashMap localHashMap3 = new HashMap();
    float f3;
	for (int j = 0; j < mFFTMap.size(); j++)
	{
		f3 = 0.0F;
		int i3 = 0;
		byte[] arrayOfByte = mFFTMap.get(j);
		int[] arrayOfInt = new int[arrayOfByte.length];
		float[] arrayOfFloat = new float[arrayOfByte.length];

		for (int i = 0; i < arrayOfByte.length; i++)
		{
			arrayOfInt[i] = i;
			arrayOfFloat[i] = arrayOfByte[i];
		}

		for (int i = 0; i < arrayOfByte.length - 9; i++)
		{
			float f7 = arrayOfFloat[i];
			float f8 = arrayOfFloat[(i + 1)];
			float f9 = arrayOfFloat[(i + 2)];
			float f10 = arrayOfFloat[(i + 3)];
			float f11 = arrayOfFloat[(i + 4)];
			float f12 = arrayOfFloat[(i + 5)];
			float f13 = arrayOfFloat[(i + 6)];
			float f14 = arrayOfFloat[(i + 7)];
			float f15 = arrayOfFloat[(i + 8)];
			if ((f11 > f7) && (f11 > f8) && (f11 > f9) && (f11 > f10) && (f11 > f12) && (f11 > f13) && (f11 > f14) && (f11 > f15))
			{
				localHashMap1.put(i3, (i + 4));
				localHashMap2.put(i3, f11);
				i3++;
				f3 = (float)(f3 + Math.pow(f11, 2.0D));
			}
		}

		float f4 = 0;
		for(int i = 0; i < localHashMap2.size(); i++){
			f4 = Math.max(f4, localHashMap2.get(i));
		}
		float f5 = f3 - Math.pow(f4, 2.0D);
		float f6 = 10.0D * Math.log10(f3 / f5);
		localHashMap3.put(Integer.valueOf(i), Float.valueOf(f6));
		i++;
		localHashMap1.clear();
		localHashMap2.clear();
    }

	int m = 0;
    int n = 0;
    float f1 = 0.0F;
    for(int i = 0; i < localHashMap3.size(); i++)
    {
		if(localHashMap3.get(i) < SNRRate)
			m++;
		else{
			f1 += localHashMap3.get(i);
			n++;
		}
	}

    mSNRResult = f1 / localHashMap3.size();
    localHashMap3.clear();

    if (n / (n + m) > SNRPassPercentage)
		return true;
	else
		return false;
}


内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值