国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

HarmonyOS 錄音與音頻播放

系統 OpenHarmony
錄音和音頻播放在app中是一個很常見的功能,本文將介紹在HarmonyOS 如何使用錄音和音頻播放功能。

[[410205]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

引言

錄音和音頻播放在app中是一個很常見的功能,本文將介紹在HarmonyOS 如何使用錄音和音頻播放功能。

功能介紹

1.錄音

1.1 使用錄音前需要先申請錄音權限

在 config.json文件中添加權限聲明

  1. "reqPermissions": [     
  2.      { 
  3.        "name""ohos.permission.MICROPHONE"
  4.        "reason""the app need microphone"
  5.        "usedScene": { 
  6.          "ability": [ 
  7.            "com.iflytek.demo.MainAbility" 
  8.          ], 
  9.          "when""always" 
  10.        } 
  11.      } 
  12.    ] 

然后在MainAbility中動態申請麥克風權限

  1. private void requestPermission() { 
  2.         if (verifySelfPermission("ohos.permission.MICROPHONE") != IBundleManager.PERMISSION_GRANTED) { 
  3.             // 應用未被授予權限 
  4.             if (canRequestPermission("ohos.permission.MICROPHONE")) { 
  5.                 // 是否可以申請彈框授權(首次申請或者用戶未選擇禁止且不再提示) 
  6.                 requestPermissionsFromUser(new String[]{"ohos.permission.MICROPHONE"}, REQUEST_MICROPHONE); 
  7.             } else { 
  8.                 // 顯示應用需要權限的理由,提示用戶進入設置授權 
  9.             } 
  10.         } else { 
  11.             // 權限已被授予 
  12.         } 
  13.     } 
  14.  
  15.     /** 
  16.      * 權限回調 
  17.      */ 
  18.     @Override 
  19.     public void onRequestPermissionsFromUserResult(int requestCode, 
  20.                                                    String[] permissions, 
  21.                                                    int[] grantResults) { 
  22.         switch (requestCode) { 
  23.             case REQUEST_MICROPHONE: { 
  24.                 // 匹配requestPermissions的requestCode 
  25.                 if (grantResults.length > 0 && grantResults[0] == IBundleManager.PERMISSION_GRANTED) { 
  26.                     // 權限被授予 
  27.                     // 注意:因時間差導致接口權限檢查時有無權限,所以對那些因無權限而拋異常的接口進行異常捕獲處理 
  28.                     AppLog.e("MainAbility""已經獲取到錄音權限"); 
  29.                 } else { 
  30.                     // 權限被拒絕 
  31.                     AppLog.e("MainAbility""錄音權限被拒絕"); 
  32.                 } 
  33.             } 
  34.         } 
  35.     } 

1.2 錄音功能使用的是 AudioCapturer類,主要接口如下:

初始化AudioCapturer,先通過 AudioStreamInfo設置錄音音頻基本參數,再通過AudioCapturerInfo設置錄音源等信息。

  1. /** 
  2.     * 創建默認的錄音對象 
  3.     */ 
  4.    public void initConfig() { 
  5.  
  6.        if (audioCapturer != null && audioCapturer.getState() != AudioCapturer.State.STATE_STOPPED) { 
  7.            audioCapturer.release(); 
  8.        } 
  9.        audioCapturer = null
  10.        AudioStreamInfo audioStreamInfo = new AudioStreamInfo.Builder() 
  11.                // 音頻采樣率 16000 
  12.                .sampleRate(AUDIO_SAMPLE_RATE) 
  13.                // 錄音數據格式 16-bit PCM 
  14.                .encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT) 
  15.                // 聲道設置 單聲道 
  16.                .channelMask(AudioStreamInfo.ChannelMask.CHANNEL_IN_MONO) 
  17.                .build(); 
  18.        AudioCapturerInfo audioCapturerInfo = new AudioCapturerInfo.Builder() 
  19.                .audioStreamInfo(audioStreamInfo) 
  20.                // 錄音源 
  21.                .audioInputSource(AudioCapturerInfo.AudioInputSource.AUDIO_INPUT_SOURCE_MIC) 
  22.                .build(); 
  23.        audioCapturer = new AudioCapturer(audioCapturerInfo); 
  24.        bufferSizeInBytes = AudioCapturer.getMinBufferSize(AUDIO_SAMPLE_RATE, 1, 2); 
  25.    } 

開始錄音,通過 audioCapturer.read() 獲取音頻。

  1. /** 
  2.     * 開始錄音 
  3.     * 
  4.     * @param listener 音頻流的監聽回調 
  5.     */ 
  6.    public void startRecord(final RecordListener listener) { 
  7.        if (audioCapturer.getState() == AudioCapturer.State.STATE_UNINITIALIZED) { 
  8.            throw new IllegalStateException("AudioCapturer need init first"); 
  9.        } 
  10.        if (isRecording()) { 
  11.            throw new IllegalStateException("AudioCapturer is in recording now"); 
  12.        } 
  13.        // 開始錄音 
  14.        audioCapturer.start(); 
  15.        final byte[] audioData = new byte[bufferSizeInBytes]; 
  16.        while (isRecording()) { 
  17.            int size = audioCapturer.read(audioData, 0, bufferSizeInBytes); 
  18.            if (size > 0 && listener != null) { 
  19.                if (size == bufferSizeInBytes) { 
  20.                    // 通過回掉回傳錄音數據 
  21.                    listener.onRead(audioData); 
  22.                } else { 
  23.                    // 通過回掉回傳錄音數據 
  24.                    final byte[] copy = new byte[size]; 
  25.                    System.arraycopy(audioData, 0, copy, 0, size); 
  26.                    listener.onRead(copy); 
  27.                } 
  28.            } 
  29.        } 
  30.        if (finishCallBack != null) { 
  31.            finishCallBack.onFinish(); 
  32.        } 
  33.    } 

停止錄音

  1. /** 
  2.     * 停止錄音 
  3.     */ 
  4.    public synchronized void stopRecord() { 
  5.        if (isRecording()) { 
  6.            audioCapturer.stop(); 
  7.        } 
  8.    } 
  9.  
  10.    /** 
  11.     * 釋放資源 
  12.     */ 
  13.    public synchronized void release() { 
  14.        if (audioCapturer != null) { 
  15.            audioCapturer.release(); 
  16.            audioCapturer = null
  17.        } 
  18.    } 

2. 音頻播放

HarmonyOS 中,播放音頻主要有 AudioRenderer 、Player 、SoundPlayer 3個類

AudioRenderer 用于播放pcm音頻流

Player 主要用于播放mp3、m4a等格式的音頻

SoundPlayer 用于播放短音頻

2.1 AudioRenderer播放pcm音頻

  1. /** 
  2.     * 播放pcm 
  3.     * 
  4.     * @param file pcm文件 
  5.     */ 
  6.    private void playPcm(File file) { 
  7.        if (file == null || !file.exists()) { 
  8.            showToast("文件不存在"); 
  9.            return
  10.        } 
  11.        AudioStreamInfo streamInfo = new AudioStreamInfo.Builder() 
  12.                // 16kHz 
  13.                .sampleRate(16000) 
  14.                // 混音 
  15.                .audioStreamFlag(AudioStreamInfo.AudioStreamFlag.AUDIO_STREAM_FLAG_MAY_DUCK) 
  16.                // 16-bit PCM 
  17.                .encodingFormat(AudioStreamInfo.EncodingFormat.ENCODING_PCM_16BIT) 
  18.                // 單聲道輸出 
  19.                .channelMask(AudioStreamInfo.ChannelMask.CHANNEL_OUT_MONO) 
  20.                // 媒體類音頻 
  21.                .streamUsage(AudioStreamInfo.StreamUsage.STREAM_USAGE_MEDIA) 
  22.                .build(); 
  23.  
  24.        AudioRendererInfo audioRendererInfo = new AudioRendererInfo.Builder().audioStreamInfo(streamInfo) 
  25.                // pcm格式的輸出流 
  26.                .audioStreamOutputFlag(AudioRendererInfo.AudioStreamOutputFlag.AUDIO_STREAM_OUTPUT_FLAG_DIRECT_PCM) 
  27.                .bufferSizeInBytes(1280) 
  28.                // false表示分段傳輸buffer并播放,true表示整個音頻流一次性傳輸到HAL層播放 
  29.                .isOffload(false
  30.                .build(); 
  31.  
  32.        AudioRenderer renderer = new AudioRenderer(audioRendererInfo, AudioRenderer.PlayMode.MODE_STREAM); 
  33.        renderer.start(); 
  34.        try { 
  35.            FileInputStream inputStream = new FileInputStream(file); 
  36.            byte[] temp = new byte[1280]; 
  37.            while (inputStream.available() > temp.length) { 
  38.                int read = inputStream.read(temp); 
  39.                // 寫入pcm到播放器 
  40.                renderer.write(temp, 0, read); 
  41.            } 
  42.        } catch (Exception e) { 
  43.            e.printStackTrace(); 
  44.        } 
  45.  
  46.    } 

2.2 Player 播放mp3

  1. /** 
  2.     * 播放音頻 
  3.     * 
  4.     * @param file 源文件位置 
  5.     */ 
  6.    private void playMp3(File file) { 
  7.        try { 
  8.            player = new Player(getContext()); 
  9.            FileInputStream in = new FileInputStream(file); 
  10.            // 從輸入流獲取FD對象 
  11.            FileDescriptor fd = in.getFD(); 
  12.            player.setSource(new Source(fd)); 
  13.            player.prepare(); 
  14.            player.play(); 
  15.        } catch (Exception e) { 
  16.            e.printStackTrace(); 
  17.        } 
  18.    } 

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2011-07-18 15:32:14

iPhone 錄音 播放

2009-09-03 13:50:31

AudacityRHEL5源碼編譯

2011-07-27 09:50:31

iPhone AVAudioPla 音頻

2011-08-08 18:19:09

iPhone音頻播放

2011-08-02 16:58:15

iPhone AVAudioPla 音頻播放

2011-09-05 18:08:01

MTK音頻播放器

2024-04-23 08:24:05

音頻Android播放

2022-04-12 11:07:11

Hi3861鴻蒙操作系統

2016-12-21 16:42:15

androidmediaplayer

2023-09-20 11:53:23

2012-06-04 13:44:08

2021-10-04 18:53:01

Linux 5.16 USB 音頻驅動補丁

2015-09-01 17:19:02

Chrome音頻

2015-06-16 10:27:13

iOSAndroid音頻

2021-01-19 13:30:52

Linux播放器互聯網

2023-08-16 08:00:39

API網頁端音頻錄制

2015-09-16 16:38:10

QmmpWinampUbuntu

2012-12-24 09:04:04

iOSUnity3D

2018-06-06 15:49:06

FPGA音頻處理器

2022-07-01 17:06:49

Fractio鴻蒙
點贊
收藏

51CTO技術棧公眾號

国产精品网红直播| 日本韩国福利视频| 欧美3p在线观看| 亚洲天堂第一页| 污污网站在线看| 日本韩国欧美一区| 最后生还者第二季在线观看| 日本一区二区视频在线观看| 亚洲中文字幕无码一区二区三区| 老司机午夜精品视频在线观看| 91欧美精品成人综合在线观看| 久久精彩免费视频| 91最新在线视频| 在线观看成人免费视频| 中文字幕在线免费专区| 亚洲老司机在线| 自拍偷拍一区二区三区四区| 久久久久久久综合色一本| 极品粉嫩国产18尤物| 国产成人精品免费视频网站| 久久久成人精品一区二区三区| 免费成人小视频| 日韩高清a**址| 91av久久| 日韩av中文字幕在线免费观看| 爱看av在线入口| fc2成人免费人成在线观看播放| 亚洲aⅴ天堂av在线电影软件| 丝袜美腿高跟呻吟高潮一区| 一卡二卡3卡四卡高清精品视频| 捆绑调教美女网站视频一区| 国产大尺度在线观看| 成人av先锋影音| 热久久精品国产| 国产精品久久久久久久蜜臀| 狠狠干婷婷色| 欧美日韩另类视频| 欧美一区二区三区在线观看免费| 日韩女优毛片在线| 在线成人视屏 | 欧美日韩激情美女| 97视频在线观看网站| 日韩成人黄色av| 国产精品欧美一区二区三区不卡| 国内精品一区二区三区| 一区二区三区四区电影| 色之综合天天综合色天天棕色| 国产河南妇女毛片精品久久久 | 在线一区二区三区精品| 欧美久久久久中文字幕| 自拍偷拍亚洲视频| 欧美亚洲另类激情另类| 日韩一级不卡| 国产精品无码人妻一区二区在线| 亚洲三级在线看| 欧美日韩在线资源| 日韩在线观看你懂的| 日韩免费看片| 杨幂一区欧美专区| 国产精品午夜电影| 欧美精品在线一区| 国产精品77777| 天堂影视av| 亚洲精品一区二区三区99| 大地资源高清播放在线观看 | 国产精品久久久久久久久妇女| 久久久久久欧美精品色一二三四 | 一区二区日韩av| 日本在线观看视频| 日韩一区在线视频| 国内成人在线| 国模精品一区二区三区色天香| 国产精品99久久久久久动医院| 男同互操gay射视频在线看| 亚洲影视在线播放| 亚洲美女炮图| 成人黄色中文字幕| 国产精品系列在线观看| 男人天堂v视频| 亚洲天堂成人在线视频| 日韩在线高清| 草草视频在线免费观看| 欧美性猛交一区二区三区精品| 91精品福利观看| 欧美成人免费在线| 亚洲美女屁股眼交3| 欧美黑人疯狂性受xxxxx野外| 国产精品丝袜白浆摸在线| 成人av电影在线观看| 在线a免费看| 国产不卡av在线| 成人午夜看片网址| 蜜桃av在线免费观看| 国产成人精品久久久| 激情文学综合插| 成人高潮成人免费观看| 91精品国产91久久| 国产一区二三区好的| 久久国产精品一区| 国产精品一区二区三区久久| 久久这里只精品最新地址| 免费av不卡在线观看| 亚洲一区二区久久久久久| 欧美国产日韩一二三区| 高清不卡av| 日本高清一区| 色噜噜夜夜夜综合网| 欧美色女视频| av在线天天| 欧美激情va永久在线播放| 国产伦精品一区二区三区免费迷| 成年人黄视频在线观看| 国产精品播放| 日本久久一区二区三区| 欧美大人香蕉在线| 黑巨人与欧美精品一区 | 亚洲深夜视频| 日韩欧美精品一区二区| 欧美精品久久一区| 亚洲国产激情| 欧美日韩在线精品一区二区三区| 亚洲制服丝袜av| 久久九九热re6这里有精品| 欧美一级片中文字幕| 久久精品福利视频| 波多野结衣中文一区| 日韩欧美另类一区二区| 老汉色影院首页| 亚洲美女精品久久| 国内精品国产三级国产a久久| 成人bbav| 国产激情片在线观看| 亚洲深夜福利在线| 成人动漫中文字幕| 日韩欧美中文在线观看| 日本特黄a级片| 欧美日韩国产页| 婷婷亚洲综合| 精品亚洲综合| 国产精品一区二区不卡视频| 精品视频一区 二区 三区| 国产日韩免费| 国产第一页在线| 国产乱人伦精品一区二区三区| 亚洲美女性生活视频| 波多野结衣中文字幕一区二区三区 | 日本一卡二卡四卡精品 | 久久99视频| 亚在线播放中文视频| 99久久久精品免费观看国产| 色成人在线视频| 视频一区二区中文字幕| 成人午夜视屏| 青青草精品视频在线观看| 国产精品夫妻激情| 欧美日韩和欧美的一区二区| 美女国产一区二区三区| 日韩有码欧美| 成人观看视频| 国产女主播一区二区| 日韩精品极品视频免费观看| 久久精品视频一区| 生活片a∨在线观看| 欧美精品久久| 亚洲午夜精品久久久久久久久久久久| 99视频超级精品| 欧美一级精品片在线看| 第一页在线观看| 成年丰满熟妇午夜免费视频 | www.欧美日本韩国| 免费高清一区二区三区| 97香蕉超级碰碰久久免费软件| 国产精品久久久免费| 国产在线88av| 在线观看国产中文字幕| 成人三级在线| 在线观看视频亚洲| 一个色在线综合| 青椒成人免费视频| 凹凸成人在线| dy888亚洲精品一区二区三区| 成年人免费在线播放| 成人免费视频网| 亚洲激情视频网| 亚洲女人的天堂| 久久婷婷亚洲| www国产精品| h片在线免费| 国产精品三级a三级三级午夜| 欧美污视频久久久| 国内精品模特av私拍在线观看| 欧美日韩在线精品一区二区三区激情| 国产精品一区二区黑丝| 大色综合视频网站在线播放| 91桃色在线观看| 日本在线中文电影| 日韩 欧美 视频| 黄色99视频| 国产精品ⅴa在线观看h| 最近2019中文字幕一页二页|