溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

《IT藍(lán)豹》吹雪花demo,學(xué)習(xí)android傳感器

發(fā)布時(shí)間:2020-07-16 00:40:03 來源:網(wǎng)絡(luò) 閱讀:252 作者:楊光成 欄目:移動(dòng)開發(fā)

吹雪花demo,學(xué)習(xí)android傳感器

吹雪花demo,學(xué)習(xí)android傳感器,嘴巴對(duì)著手機(jī)底部吹一下就會(huì)出現(xiàn)飄著雪花效果。
算是學(xué)習(xí)android傳感器效果。本例子主要是通過android.media.AudioRecord來錄音實(shí)現(xiàn)效果
主要實(shí)現(xiàn)類如下:
public class RecordThread extends Thread {
    private AudioRecord audioRecord;
    private int bufferSize = 100;
    // 設(shè)置音頻采樣率,44100是目前的標(biāo)準(zhǔn),但是某些設(shè)備仍然支持22050,16000,11025
    private static int SAMPLE_RATE_IN_HZ = 44100;
    private Handler handler;
    private int what;

    private boolean stop = false;

    // 到達(dá)該值之后 觸發(fā)事件
    private static int BLOW_BOUNDARY = 40;

    public RecordThread(Handler handler, int what) {
        super();
        bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,
                AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT);
        // 設(shè)置音頻的錄制的聲道CHANNEL_IN_STEREO為雙聲道,CHANNEL_CONFIGURATION_MONO為單聲道
        // 音頻數(shù)據(jù)格式:PCM 16位每個(gè)樣本。保證設(shè)備支持。PCM 8位每個(gè)樣本。不一定能得到設(shè)備支持。
        audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
                SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                AudioFormat.ENCODING_PCM_16BIT, bufferSize);
        this.handler = handler;
        this.what = what;
    }
    
    public void stopRecord()
    {
        stop = true;
    }
    public boolean getRecordStatus()
    {
        return stop;
    }

    @Override
    public void run() {
        System.out.println("RUN");
        stop = false;
        try {
            audioRecord.startRecording();
            // 用于讀取的 buffer
            byte[] buffer = new byte[bufferSize];

            int total = 0;
            int number = 0;
            while (!stop) {
                number++;
                sleep(8);
                long currenttime = System.currentTimeMillis();
                int r = audioRecord.read(buffer, 0, bufferSize) + 1;// 讀取到的數(shù)據(jù)
                int v = 0;
                for (int i = 0; i < buffer.length; i++) {
                    v += Math.abs(buffer[i]);//取絕對(duì)值,因?yàn)榭赡転樨?fù)
                }
                int value = Integer.valueOf(v / r);//算得當(dāng)前所有值的平均值
                System.out.println("value:" + value);
                total = total + value;
                long endtime = System.currentTimeMillis();
                long time = endtime - currenttime;
                //如果時(shí)間大于100毫秒并且次數(shù)多于5次
                if (time >= 100 || number > 5) {
                    int tmp = total / number;
                    total = 0;
                    number = 0;
                    //聲音的大小達(dá)到一定的值
                    if (tmp > BLOW_BOUNDARY) {
                        // 發(fā)送消息通知到界面 觸發(fā)動(dòng)畫
                        // 利用傳入的handler 給界面發(fā)送通知
                        handler.sendEmptyMessage(what);
                        number = 1;
                        time = 1;
                    }
                }

            }
            audioRecord.stop();
            audioRecord.release();
            bufferSize = 100;

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

運(yùn)行效果:

  • 《IT藍(lán)豹》吹雪花demo,學(xué)習(xí)android傳感器

相關(guān)代碼

  • 吹雪花demo,學(xué)習(xí)android傳感器

  • 高仿淘寶和聚美優(yōu)品商城詳情頁實(shí)現(xiàn)

  • ViewPage滑動(dòng)加載大圖和點(diǎn)擊關(guān)注效果

  • AVLoadingIndicatorView各種加載效果

  • MeiTuanRefreshListView高仿美團(tuán)下拉刷新

  • 完整閱讀軟件客戶端app

  • LearnHut_android 學(xué)習(xí)客戶端源碼

  • AutoHomeRefreshListView仿汽車之家下拉刷新

  • PercentageBar自定義動(dòng)態(tài)柱形圖

  • Hide-Music-Player 一個(gè)完整的音樂播放器


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI