HarmonyOS 鸿蒙Next 语音录制audio.AudioCapturer对象不能正常被创建

发布于 1周前 作者 ionicwang 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 语音录制audio.AudioCapturer对象不能正常被创建
在页面的aboutToAppear()中使用audio.createAudioCapturer()创建audio.AudioCapturer对象,在页面的aboutToDisappear()中释放audio.AudioCapturer对象。

问题:在页面第一次打开时audio.AudioCapturer对象不能被正常创建,将页面退出后重新进入,
audio.AudioCapturer对象可以被正常创建

//配置音频采集参数并创建AudioCapturer实例

static async init(): Promise<void> {
  RecordManager.audioCapturer2 = await audio.createAudioCapturer(RecordManager.audioCapturerOptions)
  if (RecordManager.audioCapturer2 !== undefined) {
  YTLog.info('调试-Invoke createAudioCapturer succeeded.');
  RecordManager.onReadData()
}
}

async aboutToAppear(): Promise<void>{
  await RecordManager.init() //打开采集器
}
2 回复
import { audio } from '@kit.AudioKit';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';

  // 使用UIExtensionAbility:将common.UIAbilityContext 替换为common.UIExtensionContext
  reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): void {
    let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
    // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
    atManager.requestPermissionsFromUser(context, permissions).then(async (data) => {
      let grantStatus: Array<number> = data.authResults;
      let length: number = grantStatus.length;
      for (let i = 0; i < length; i++) {
        if (grantStatus[i] === 0) {
          // 用户授权,可以继续访问目标操作
          await this.init() //打开采集器
        } else {
          // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
          return;
        }
      }
      // 授权成功
    }).catch((err: BusinessError) => {
      console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
    })
  }

  //配置音频采集参数并创建AudioCapturer实例
   async init(): Promise<void> {

    let audioStreamInfo: audio.AudioStreamInfo = {
      samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000, // 采样率
      channels: audio.AudioChannel.CHANNEL_2, // 通道
      sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE, // 采样格式
      encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW // 编码格式
    };

    let audioCapturerInfo: audio.AudioCapturerInfo = {
      source: audio.SourceType.SOURCE_TYPE_MIC,
      capturerFlags: 0
    };

    let audioCapturerOptions: audio.AudioCapturerOptions = {
      streamInfo: audioStreamInfo,
      capturerInfo: audioCapturerInfo
    };

    audio.createAudioCapturer(audioCapturerOptions, (err, data) => {
      if (err) {
        console.error(`Invoke createAudioCapturer failed, code is ${err.code}, message is ${err.message}`);
      } else {
        console.info('Invoke createAudioCapturer succeeded.');
        let audioCapturer = data;
      }
    });
  }

  async aboutToAppear(): Promise<void>{
    const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
    this.reqPermissionsFromUser(permissions, context);
  }
  build() {
    RelativeContainer() {
      Text(this.message)
        .id('HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(async ()=>{
          await this.init() //打开采集器
        })
    }
    .height('100%')
    .width('100%')
  }
}

针对您提到的HarmonyOS鸿蒙Next系统中,语音录制功能中audio.AudioCapturer对象无法正常被创建的问题,这通常与权限配置、系统API使用不当或设备兼容性有关。以下是一些可能的排查方向:

  1. 权限检查:确保您的应用已在config.json中正确声明了录音权限(如ohos.permission.RECORD_AUDIO),并在运行时请求了这些权限。

  2. API调用:验证audio.AudioCapturer的创建代码是否符合最新的API文档规范,包括参数设置和异常处理。

  3. 设备兼容性:检查您的代码是否考虑了不同设备的硬件差异和系统版本差异,特别是在鸿蒙系统的不同版本间可能存在API行为的变化。

  4. 日志分析:查看系统日志和应用日志,寻找与AudioCapturer创建失败相关的错误信息,这有助于定位问题根源。

  5. 官方文档与示例:参考华为官方文档和开发者社区中的示例代码,确保您的实现方式符合最佳实践。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部