日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙開(kāi)發(fā)實(shí)戰(zhàn):【音頻組件】

jf_46214456 ? 來(lái)源:jf_46214456 ? 作者:jf_46214456 ? 2024-03-15 15:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

簡(jiǎn)介

音頻組件用于實(shí)現(xiàn)音頻相關(guān)的功能,包括音頻播放,錄制,音量管理和設(shè)備管理。

圖 1 音頻組件架構(gòu)圖

基本概念

  • 采樣

采樣是指將連續(xù)時(shí)域上的模擬信號(hào)按照一定的時(shí)間間隔采樣,獲取到離散時(shí)域上離散信號(hào)的過(guò)程。

  • 采樣率

采樣率為每秒從連續(xù)信號(hào)中提取并組成離散信號(hào)的采樣次數(shù),單位用赫茲(Hz)來(lái)表示。通常人耳能聽(tīng)到頻率范圍大約在20Hz~20kHz之間的聲音。常用的音頻采樣頻率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

  • 聲道

聲道是指聲音在錄制或播放時(shí)在不同空間位置采集或回放的相互獨(dú)立的音頻信號(hào),所以聲道數(shù)也就是聲音錄制時(shí)的音源數(shù)量或回放時(shí)相應(yīng)的揚(yáng)聲器數(shù)量。

  • 音頻幀

音頻數(shù)據(jù)是流式的,本身沒(méi)有明確的一幀幀的概念,在實(shí)際的應(yīng)用中,為了音頻算法處理/傳輸?shù)姆奖?,一般約定俗成取2.5ms~60ms為單位的數(shù)據(jù)量為一幀音頻。這個(gè)時(shí)間被稱(chēng)之為“采樣時(shí)間”,其長(zhǎng)度沒(méi)有特別的標(biāo)準(zhǔn),它是根據(jù)編解碼器和具體應(yīng)用的需求來(lái)決定的。

  • PCM

PCM(Pulse Code Modulation),即脈沖編碼調(diào)制,是一種將模擬信號(hào)數(shù)字化的方法,是將時(shí)間連續(xù)、取值連續(xù)的模擬信號(hào)轉(zhuǎn)換成時(shí)間離散、抽樣值離散的數(shù)字信號(hào)的過(guò)程。

目錄

倉(cāng)目錄結(jié)構(gòu)如下:

/foundation/multimedia/audio_standard  # 音頻組件業(yè)務(wù)代碼
├── frameworks                         # 框架代碼
│   ├── native                         # 內(nèi)部接口實(shí)現(xiàn)
│   └── js                             # 外部接口實(shí)現(xiàn)
│       └── napi                       # napi 外部接口實(shí)現(xiàn)
├── interfaces                         # 接口代碼
│   ├── inner_api                      # 內(nèi)部接口
│   └── kits                           # 外部接口
├── sa_profile                         # 服務(wù)配置文件
├── services                           # 服務(wù)代碼
├── LICENSE                            # 證書(shū)文件
└── bundle.json                        # 編譯文件

使用說(shuō)明

音頻播放

可以使用此倉(cāng)庫(kù)內(nèi)提供的接口將音頻數(shù)據(jù)轉(zhuǎn)換為音頻模擬信號(hào),使用輸出設(shè)備播放音頻信號(hào),以及管理音頻播放任務(wù)。以下步驟描述了如何使用 AudioRenderer 開(kāi)發(fā)音頻播放功能:

  1. 使用 Create 接口和所需流類(lèi)型來(lái)獲取 AudioRenderer 實(shí)例。
    AudioStreamType streamType = STREAM_MUSIC; // 流類(lèi)型示例
    std::unique_ptr< AudioRenderer > audioRenderer = AudioRenderer::Create(streamType);
    
  2. (可選)靜態(tài)接口 GetSupportedFormats (), GetSupportedChannels (), GetSupportedEncodingTypes (), GetSupportedSamplingRates () 可用于獲取支持的參數(shù)。
  3. 準(zhǔn)備設(shè)備,調(diào)用實(shí)例的 SetParams
    AudioRendererParams rendererParams;
    rendererParams.sampleFormat = SAMPLE_S16LE;
    rendererParams.sampleRate = SAMPLE_RATE_44100;
    rendererParams.channelCount = STEREO;
    rendererParams.encodingType = ENCODING_PCM;
    
    audioRenderer- >SetParams(rendererParams);
    
  4. (可選)使用 audioRenderer-> GetParams (rendererParams) 來(lái)驗(yàn)證 SetParams。
  5. (可選)使用 SetAudioEffectModeGetAudioEffectMode 接口來(lái)設(shè)置和獲取當(dāng)前音頻流的音效模式。
    AudioEffectMode effectMode = EFFECT_DEFAULT;
    int32_t result = audioRenderer- >SetAudioEffectMode(effectMode);
    AudioEffectMode mode = audioRenderer- >GetAudioEffectMode();
    
  6. AudioRenderer 實(shí)例調(diào)用 audioRenderer-> Start () 函數(shù)來(lái)啟動(dòng)播放任務(wù)。
  7. 使用 GetBufferSize 接口獲取要寫(xiě)入的緩沖區(qū)長(zhǎng)度。
    audioRenderer- >GetBufferSize(bufferLen);
    
  8. 從源(例如音頻文件)讀取要播放的音頻數(shù)據(jù)并將其傳輸?shù)阶止?jié)流中。重復(fù)調(diào)用Write函數(shù)寫(xiě)入渲染數(shù)據(jù)。
    bytesToWrite = fread(buffer, 1, bufferLen, wavFile);
    while ((bytesWritten < bytesToWrite) && ((bytesToWrite - bytesWritten) > minBytes)) {
        bytesWritten += audioRenderer- >Write(buffer + bytesWritten, bytesToWrite - bytesWritten);
        if (bytesWritten < 0)
            break;
    }
    
  9. 調(diào)用audioRenderer-> Drain ()來(lái)清空播放流。
  10. 調(diào)用audioRenderer-> Stop ()來(lái)停止輸出。
  11. 播放任務(wù)完成后,調(diào)用AudioRenderer實(shí)例的audioRenderer-> Release ()函數(shù)來(lái)釋放資源。

以上提供了基本音頻播放使用場(chǎng)景。

  1. 使用 audioRenderer->SetVolume(float) 和 audioRenderer->GetVolume() 來(lái)設(shè)置和獲取當(dāng)前音頻流音量, 可選范圍為 0.0 到 1.0。

音頻錄制

可以使用此倉(cāng)庫(kù)內(nèi)提供的接口,讓?xiě)?yīng)用程序可以完成使用輸入設(shè)備進(jìn)行聲音錄制,將語(yǔ)音轉(zhuǎn)換為音頻數(shù)據(jù),并管理錄制的任務(wù)。以下步驟描述了如何使用 AudioCapturer 開(kāi)發(fā)音頻錄制功能:

  1. 使用Create接口和所需流類(lèi)型來(lái)獲取 AudioCapturer 實(shí)例。
    AudioStreamType streamType = STREAM_MUSIC;
    std::unique_ptr< AudioCapturer > audioCapturer = AudioCapturer::Create(streamType);
    
  2. (可選)靜態(tài)接口 GetSupportedFormats (), GetSupportedChannels (), GetSupportedEncodingTypes (), GetSupportedSamplingRates () 可用于獲取支持的參數(shù)。
  3. 準(zhǔn)備設(shè)備,調(diào)用實(shí)例的 SetParams
    AudioCapturerParams capturerParams;
    capturerParams.sampleFormat = SAMPLE_S16LE;
    capturerParams.sampleRate = SAMPLE_RATE_44100;
    capturerParams.channelCount = STEREO;
    capturerParams.encodingType = ENCODING_PCM;
    
    audioCapturer- >SetParams(capturerParams);
    
  4. (可選)使用 audioCapturer-> GetParams (capturerParams) 來(lái)驗(yàn)證 SetParams()。
  5. AudioCapturer 實(shí)例調(diào)用 AudioCapturer-> Start () 函數(shù)來(lái)啟動(dòng)錄音任務(wù)。
  6. 使用 GetBufferSize 接口獲取要寫(xiě)入的緩沖區(qū)長(zhǎng)度。
    audioCapturer- >GetBufferSize(bufferLen);
    
  7. 讀取錄制的音頻數(shù)據(jù)并將其轉(zhuǎn)換為字節(jié)流。重復(fù)調(diào)用read函數(shù)讀取數(shù)據(jù)直到主動(dòng)停止。
    // set isBlocking = true/false for blocking/non-blocking read
    bytesRead = audioCapturer- >Read(*buffer, bufferLen, isBlocking);
    while (numBuffersToCapture) {
        bytesRead = audioCapturer- >Read(*buffer, bufferLen, isBlockingRead);
        if (bytesRead <= 0) {
            break;
        } else if (bytesRead > 0) {
            fwrite(buffer, size, bytesRead, recFile); // example shows writes the recorded data into a file
            numBuffersToCapture--;
        }
    }
    
  8. (可選)audioCapturer-> Flush () 來(lái)清空錄音流緩沖區(qū)。
  9. AudioCapturer 實(shí)例調(diào)用 audioCapturer-> Stop () 函數(shù)停止錄音。
  10. 錄音任務(wù)完成后,調(diào)用 AudioCapturer 實(shí)例的 audioCapturer-> Release () 函數(shù)釋放資源。

音頻管理

可以使用 [ audio_system_manager.h ]內(nèi)的接口來(lái)控制音量和設(shè)備。

  1. 使用 GetInstance 接口獲取 AudioSystemManager 實(shí)例.
    AudioSystemManager *audioSystemMgr = AudioSystemManager::GetInstance();
    

音量控制

  1. 使用 GetMaxVolumeGetMinVolume 接口去查詢(xún)音頻流支持的最大和最小音量等級(jí),在此范圍內(nèi)設(shè)置音量。
    AudioVolumeType streamType = AudioVolumeType::STREAM_MUSIC;
    int32_t maxVol = audioSystemMgr- >GetMaxVolume(streamType);
    int32_t minVol = audioSystemMgr- >GetMinVolume(streamType);
    
  2. 使用 SetVolumeGetVolume 接口來(lái)設(shè)置和獲取指定音頻流的音量等級(jí)。
    int32_t result = audioSystemMgr- >SetVolume(streamType, 10);
    int32_t vol = audioSystemMgr- >GetVolume(streamType);
    
  3. 使用 SetMuteIsStreamMute 接口來(lái)設(shè)置和獲取指定音頻流的靜音狀態(tài)。
    int32_t result = audioSystemMgr- >SetMute(streamType, true);
    bool isMute = audioSystemMgr- >IsStreamMute(streamType);
    
  4. 使用 SetRingerModeGetRingerMode 接口來(lái)設(shè)置和獲取鈴聲模式。參考在 [ audio_info.h ]定義的 AudioRingerMode 枚舉來(lái)獲取支持的鈴聲模式。
    int32_t result = audioSystemMgr- >SetRingerMode(RINGER_MODE_SILENT);
    AudioRingerMode ringMode = audioSystemMgr- >GetRingerMode();
    
  5. 使用 SetMicrophoneMuteIsMicrophoneMute 接口來(lái)設(shè)置和獲取麥克風(fēng)的靜音狀態(tài)。
    int32_t result = audioSystemMgr- >SetMicrophoneMute(true);
    bool isMicMute = audioSystemMgr- >IsMicrophoneMute();
    

設(shè)備控制

  1. 使用 GetDevices , deviceType_deviceRole_ 接口來(lái)獲取音頻輸入輸出設(shè)備信息。 內(nèi)定義的DeviceFlag, DeviceType 和 DeviceRole 枚舉。
    DeviceFlag deviceFlag = OUTPUT_DEVICES_FLAG;
    vector< sptr< AudioDeviceDescriptor >> audioDeviceDescriptors
        = audioSystemMgr- >GetDevices(deviceFlag);
    sptr< AudioDeviceDescriptor > audioDeviceDescriptor = audioDeviceDescriptors[0];
    cout < < audioDeviceDescriptor- >deviceType_;
    cout < < audioDeviceDescriptor- >deviceRole_;
    
  2. 使用 SetDeviceActiveIsDeviceActive 接口去激活/去激活音頻設(shè)備和獲取音頻設(shè)備激活狀態(tài)。
    ActiveDeviceType deviceType = SPEAKER;
    int32_t result = audioSystemMgr- >SetDeviceActive(deviceType, true);
    bool isDevActive = audioSystemMgr- >IsDeviceActive(deviceType);
    
  3. 提供其他用途的接口如 IsStreamActive , SetAudioParameter and GetAudioParameter
  4. 應(yīng)用程序可以使用 AudioManagerNapi::On注冊(cè)系統(tǒng)音量的更改。 在此,如果應(yīng)用程序監(jiān)聽(tīng)到系統(tǒng)音量更改的事件,就會(huì)用以下參數(shù)通知應(yīng)用程序: volumeType : 更改的系統(tǒng)音量的類(lèi)型 volume : 當(dāng)前的音量等級(jí) updateUi : 是否需要顯示變化詳細(xì)信息。(如果音量被增大/減小,將updateUi標(biāo)志設(shè)置為true,在其他情況下,updateUi設(shè)置為false)。
const audioManager = audio.getAudioManager();

export default {
  onCreate() {
    audioManager.on('volumeChange', (volumeChange) == > {
      console.info('volumeType = '+volumeChange.volumeType);
      console.info('volume = '+volumeChange.volume);
      console.info('updateUi = '+volumeChange.updateUi);
    }
  }
}

音頻場(chǎng)景

  1. 使用 SetAudioScenegetAudioScene 接口去更改和檢查音頻策略。
    int32_t result = audioSystemMgr- >SetAudioScene(AUDIO_SCENE_PHONE_CALL);
    AudioScene audioScene = audioSystemMgr- >GetAudioScene();
    

有關(guān)支持的音頻場(chǎng)景,請(qǐng)參閱 AudioScene 中的枚舉[ audio_info.h ]

音頻流管理

可以使用[ audio_stream_manager.h ]提供的接口用于流管理功能。

  1. 使用 GetInstance 接口獲得 AudioSystemManager 實(shí)例。
    AudioStreamManager *audioStreamMgr = AudioStreamManager::GetInstance();
    
  2. 使用 RegisterAudioRendererEventListener 為渲染器狀態(tài)更改注冊(cè)偵聽(tīng)器。渲染器狀態(tài)更改回調(diào),該回調(diào)將在渲染器流狀態(tài)更改時(shí)調(diào)用, 通過(guò)重寫(xiě) AudioRendererStateChangeCallback 類(lèi)中的函數(shù) OnRendererStateChange 。
    const int32_t clientPid;
    
    class RendererStateChangeCallback : public AudioRendererStateChangeCallback {
    public:
        RendererStateChangeCallback = default;
        ~RendererStateChangeCallback = default;
    void OnRendererStateChange(
        const std::vector< std::unique_ptr< AudioRendererChangeInfo >> &audioRendererChangeInfos) override
    {
        cout< "OnRendererStateChange entered"<
    
  3. 使用 RegisterAudioCapturerEventListener 為捕獲器狀態(tài)更改注冊(cè)偵聽(tīng)器。 捕獲器狀態(tài)更改回調(diào),該回調(diào)將在捕獲器流狀態(tài)更改時(shí)調(diào)用, 通過(guò)重寫(xiě) AudioCapturerStateChangeCallback 類(lèi)中的函數(shù) OnCapturerStateChange 。
    const int32_t clientPid;
    
    class CapturerStateChangeCallback : public AudioCapturerStateChangeCallback {
    public:
        CapturerStateChangeCallback = default;
        ~CapturerStateChangeCallback = default;
    void OnCapturerStateChange(
        const std::vector< std::unique_ptr< AudioCapturerChangeInfo >> &audioCapturerChangeInfos) override
    {
        cout< "OnCapturerStateChange entered"<
    
  4. 使用 GetCurrentRendererChangeInfos 獲取所有當(dāng)前正在運(yùn)行的流渲染器信息,包括clientuid、sessionid、renderinfo、renderstate和輸出設(shè)備詳細(xì)信息。
    std::vector< std::unique_ptr< AudioRendererChangeInfo >> audioRendererChangeInfos;
    int32_t currentRendererChangeInfo = audioStreamMgr- >GetCurrentRendererChangeInfos(audioRendererChangeInfos);
    
  5. 使用 GetCurrentCapturerChangeInfos 獲取所有當(dāng)前正在運(yùn)行的流捕獲器信息,包括clientuid、sessionid、capturerInfo、capturerState和輸入設(shè)備詳細(xì)信息。
    std::vector< std::unique_ptr< AudioCapturerChangeInfo >> audioCapturerChangeInfos;
    int32_t currentCapturerChangeInfo = audioStreamMgr- >GetCurrentCapturerChangeInfos(audioCapturerChangeInfos);
    
  6. 使用 IsAudioRendererLowLatencySupported 檢查低延遲功能是否支持。
    const AudioStreamInfo &audioStreamInfo;
    bool isLatencySupport = audioStreamMgr- >IsAudioRendererLowLatencySupported(audioStreamInfo);
    
  7. 使用 GetEffectInfoArray 接口查詢(xún)指定[ StreamUsage ]下可以支持的音效模式。
    AudioSceneEffectInfo audioSceneEffectInfo;
    int32_t status = audioStreamMgr- >GetEffectInfoArray(audioSceneEffectInfo,streamUsage);
    

JavaScript 用法:

JavaScript應(yīng)用可以使用系統(tǒng)提供的音頻管理接口,來(lái)控制音量和設(shè)備。
請(qǐng)參考 [ js-apis-audio.md ]來(lái)獲取音量和設(shè)備管理相關(guān)JavaScript接口的用法。

藍(lán)牙SCO呼叫

可以使用提供的接口 [ audio_bluetooth_manager.h ] 實(shí)現(xiàn)同步連接導(dǎo)向鏈路(SCO)的藍(lán)牙呼叫。

  1. 為監(jiān)聽(tīng)SCO狀態(tài)更改,您可以使用 OnScoStateChanged .
const BluetoothRemoteDevice &device;
int state;
void OnScoStateChanged(const BluetoothRemoteDevice &device, int state);
  1. (可選) 靜態(tài)接口 RegisterBluetoothScoAgListener (), UnregisterBluetoothScoAgListener (), 可用于注冊(cè)藍(lán)牙SCO的偵聽(tīng)器。

支持設(shè)備

以下是音頻子系統(tǒng)支持的設(shè)備類(lèi)型列表。

  1. USB Type-C Headset
    數(shù)字耳機(jī),包括自己的DAC數(shù)模轉(zhuǎn)換器)和作為耳機(jī)一部分的放大器。

  2. WIRED Headset
    模擬耳機(jī)內(nèi)部不包含任何DAC。它可以有3.5mm插孔或不帶DAC的C型插孔。

  3. Bluetooth Headset
    藍(lán)牙A2DP(高級(jí)音頻分配模式)耳機(jī),用于無(wú)線(xiàn)傳輸音頻。

  4. Internal Speaker and MIC
    支持內(nèi)置揚(yáng)聲器和麥克風(fēng),并將分別用作播放和錄制的默認(rèn)設(shè)備。

    審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 音頻
    +關(guān)注

    關(guān)注

    31

    文章

    3234

    瀏覽量

    86433
  • 模擬信號(hào)
    +關(guān)注

    關(guān)注

    8

    文章

    1236

    瀏覽量

    54822
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    3039

    瀏覽量

    46216
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    M4-R1 開(kāi)源鴻蒙(OpenHarmory)開(kāi)發(fā)板丨串口調(diào)試助手實(shí)戰(zhàn)案例

    支持與高集成度設(shè)計(jì),成為開(kāi)發(fā)者體驗(yàn)與學(xué)習(xí)鴻蒙系統(tǒng)的理想平臺(tái)。無(wú)論是智慧家居、教學(xué)實(shí)驗(yàn),還是設(shè)備通信,M4-R1都能提供穩(wěn)定可靠的開(kāi)發(fā)環(huán)境。本次分享的實(shí)戰(zhàn)案例——串口
    的頭像 發(fā)表于 12-31 11:16 ?9311次閱讀
    M4-R1 開(kāi)源<b class='flag-5'>鴻蒙</b>(OpenHarmory)<b class='flag-5'>開(kāi)發(fā)</b>板丨串口調(diào)試助手<b class='flag-5'>實(shí)戰(zhàn)</b>案例

    蜻蜓FM開(kāi)源“SmartXPlayer”音頻播放組件,打造鴻蒙多端音頻播放新引擎

    近日,由蜻蜓FM研發(fā)的音頻播放組件“SmartXPlayer”正式開(kāi)源并上線(xiàn) OpenHarmony 三方庫(kù)中心倉(cāng)。作為一款專(zhuān)為鴻蒙多端場(chǎng)景打造的音頻播放引擎,SmartXPlayer
    的頭像 發(fā)表于 07-21 16:31 ?790次閱讀
    蜻蜓FM開(kāi)源“SmartXPlayer”<b class='flag-5'>音頻</b>播放<b class='flag-5'>組件</b>,打造<b class='flag-5'>鴻蒙</b>多端<b class='flag-5'>音頻</b>播放新引擎

    【HarmonyOS 5】鴻蒙頁(yè)面和組件生命周期函數(shù)

    【HarmonyOS 5】鴻蒙頁(yè)面和組件生命周期函數(shù) ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類(lèi)應(yīng)用 (金融理財(cái)
    的頭像 發(fā)表于 07-11 18:24 ?1212次閱讀

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐

    【HarmonyOS 5】金融應(yīng)用開(kāi)發(fā)鴻蒙組件實(shí)踐 ##鴻蒙開(kāi)發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##
    的頭像 發(fā)表于 07-11 18:20 ?1168次閱讀
    【HarmonyOS 5】金融應(yīng)用<b class='flag-5'>開(kāi)發(fā)</b><b class='flag-5'>鴻蒙</b><b class='flag-5'>組件</b>實(shí)踐

    鴻蒙5開(kāi)發(fā)寶藏案例分享---一多開(kāi)發(fā)實(shí)例(音樂(lè))

    各位開(kāi)發(fā)者小伙伴們好呀!今天咱們來(lái)點(diǎn)硬核干貨!最近在鴻蒙文檔中心挖到一座“金礦”——官方竟然暗藏了100+實(shí)戰(zhàn)案例,從分布式架構(gòu)到交互動(dòng)效優(yōu)化應(yīng)有盡有!這些案例不僅藏著華為工程師的私房技巧,還直接
    的頭像 發(fā)表于 06-30 11:54 ?879次閱讀

    鴻蒙5開(kāi)發(fā)寶藏案例分享---Swiper組件性能優(yōu)化實(shí)戰(zhàn)

    鴻蒙寶藏:Swiper組件性能優(yōu)化實(shí)戰(zhàn),告別卡頓丟幀! 大家好!最近在鴻蒙開(kāi)發(fā)時(shí),偶然發(fā)現(xiàn)了官方文檔里埋藏的 性能優(yōu)化寶藏案例 ,尤其是&l
    發(fā)表于 06-12 17:53

    鴻蒙5開(kāi)發(fā)寶藏案例分享---瀑布流優(yōu)化實(shí)戰(zhàn)分享

    鴻蒙瀑布流性能優(yōu)化實(shí)戰(zhàn):告別卡頓的寶藏指南! 大家好!最近在鴻蒙文檔里挖到一個(gè) 性能優(yōu)化寶藏庫(kù) ,原來(lái)官方早就準(zhǔn)備好了各種場(chǎng)景的最佳實(shí)踐!今天重點(diǎn)分享「瀑布流加載慢丟幀」的解決方案,附完整代碼解析
    發(fā)表于 06-12 17:41

    鴻蒙5開(kāi)發(fā)寶藏案例分享---Web加載時(shí)延優(yōu)化解析

    鴻蒙開(kāi)發(fā)寶藏:Web加載完成時(shí)延優(yōu)化實(shí)戰(zhàn) 大家好呀!今天在翻鴻蒙開(kāi)發(fā)者文檔時(shí),發(fā)現(xiàn)了一個(gè)隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多
    發(fā)表于 06-12 17:11

    鴻蒙5開(kāi)發(fā)寶藏案例分享---性能優(yōu)化案例解析

    鴻蒙性能優(yōu)化寶藏指南:實(shí)戰(zhàn)工具與代碼案例解析 大家好呀!今天在翻鴻蒙開(kāi)發(fā)者文檔時(shí),意外挖到一個(gè) 性能優(yōu)化寶藏庫(kù) ——原來(lái)官方早就提供了超多實(shí)用工具和案例,但很多小伙伴可能沒(méi)發(fā)現(xiàn)!這篇就
    發(fā)表于 06-12 16:36

    鴻蒙5開(kāi)發(fā)寶藏案例分享---埋點(diǎn)開(kāi)發(fā)實(shí)戰(zhàn)指南

    鴻蒙埋點(diǎn)開(kāi)發(fā)寶藏指南:官方案例實(shí)戰(zhàn)解析,輕松搞定數(shù)據(jù)追蹤! 大家好呀!我是HarmonyOS開(kāi)發(fā)路上的探索者。最近在折騰應(yīng)用埋點(diǎn)時(shí),意外發(fā)現(xiàn)了鴻蒙
    發(fā)表于 06-12 16:30

    鴻蒙5開(kāi)發(fā)寶藏案例分享---切面編程實(shí)戰(zhàn)揭秘

    鴻蒙切面編程(AOP)實(shí)戰(zhàn)指南:隱藏的寶藏功能大揭秘! 大家好!今天在翻鴻蒙開(kāi)發(fā)者文檔時(shí),意外發(fā)現(xiàn)了官方埋藏的「切面編程」寶藏案例!實(shí)際開(kāi)發(fā)
    發(fā)表于 06-12 16:21

    鴻蒙5開(kāi)發(fā)寶藏案例分享---應(yīng)用架構(gòu)實(shí)戰(zhàn)技巧

    大家好! 今天咱們聊聊鴻蒙開(kāi)發(fā)中那些“官方文檔提了但實(shí)際開(kāi)發(fā)難找”的架構(gòu)設(shè)計(jì)技巧。結(jié)合官方文檔,我會(huì)用 真實(shí)代碼案例+通俗講解 ,幫你把分層架構(gòu)和線(xiàn)程通信落地到項(xiàng)目里,告別“理論會(huì)了,代碼不會(huì)
    發(fā)表于 06-12 16:14

    鴻蒙5開(kāi)發(fā)寶藏案例分享---Pura X開(kāi)發(fā)案例分享

    ?** 鴻蒙寶藏案例分享:Pura X 外屏開(kāi)發(fā)實(shí)戰(zhàn)解析** 大家好!我是你們的鴻蒙開(kāi)發(fā)小伙伴。今天在翻閱官方文檔時(shí),意外發(fā)現(xiàn)了華為藏著的\
    發(fā)表于 06-12 11:47

    HarmonyOS實(shí)戰(zhàn)組件化項(xiàng)目搭建

    前言 鴻蒙應(yīng)用開(kāi)發(fā)已經(jīng)成為互聯(lián)網(wǎng)新的風(fēng)口,開(kāi)發(fā)鴻蒙軟件已經(jīng)成為今年工作的核心目標(biāo)。在軟件開(kāi)發(fā)過(guò)程中,對(duì)于復(fù)雜度較大,功能較多的軟件都會(huì)采用
    的頭像 發(fā)表于 06-09 14:58 ?822次閱讀
    HarmonyOS<b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>組件</b>化項(xiàng)目搭建

    鴻蒙5開(kāi)發(fā)寶藏案例分享---一多分欄開(kāi)發(fā)實(shí)踐

    ?【HarmonyOS開(kāi)發(fā)者的寶藏指南】一次搞定多設(shè)備分欄布局,原來(lái)還能這么玩! 大家好呀!今天在鴻蒙社區(qū)挖到一個(gè)超實(shí)用的大寶藏——原來(lái)官方早就藏了一堆分欄布局的實(shí)戰(zhàn)案例!作為被多端適配折磨
    發(fā)表于 06-03 12:03
    商城县| 千阳县| 同仁县| 师宗县| 桐梓县| 霍林郭勒市| 芜湖县| 白水县| 长宁区| 万盛区| 邵东县| 兰西县| 博兴县| 盐亭县| 云安县| 舟曲县| 浪卡子县| 灯塔市| 济源市| 林州市| 广西| 噶尔县| 读书| 安宁市| 马山县| 苍南县| 芜湖市| 分宜县| 龙口市| 萝北县| 米林县| 宕昌县| 天柱县| 田东县| 铜陵市| 荔波县| 双流县| 吉林省| 新安县| 永寿县| 永登县|