HarmonyOS鸿蒙Next中录音录制的文件无法播放

HarmonyOS鸿蒙Next中录音录制的文件无法播放 实现录制wav格式音频文件。录制成功后导出来却无法播放。 请问是否是因为录制的实际上是PCM文件需要加上wav的头?还是其他什么原因?

录制代码如下:

import audio from '@ohos.multimedia.audio';
import fs from '@ohos.file.fs';
import { BusinessError } from '@ohos.base';
import { Permission } from '../../utils/Permission';

export default class AudioRecord {
  static readonly instance = new AudioRecord();
  private audioCapturer?: audio.AudioCapturer;
  private readDataCallback?: (buffer: ArrayBuffer) => void;
  private filePath = '';

  private constructor() {
  }

  async prepare(fileDir = `${getContext().cacheDir}`, fileName = 'crm_temp_audio.mp3') {
    return Permission.checkAndRequestPermissions('ohos.permission.MICROPHONE').then(async (permissionsGrant) => {
      if (!permissionsGrant) {
        return;
      }

      if (this.audioCapturer) {
        await this.release();
      }

      if (!fs.accessSync(fileDir)) {
        fs.mkdirSync(fileDir, true);
      }

      const filePath = `${fileDir}/${fileName}`;
      if (fs.accessSync(filePath)) {
        fs.unlinkSync(filePath);
      }

      let bufferSize = 0;
      this.readDataCallback = (buffer: ArrayBuffer) => {
        let file = fs.openSync(filePath, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
        fs.writeSync(file.fd, buffer, {
          offset: bufferSize, length: buffer.byteLength
        });
        bufferSize += buffer.byteLength;
      };

      return audio.createAudioCapturer({
        streamInfo: {
          samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_44100,
          channels: audio.AudioChannel.CHANNEL_2,
          sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
          encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
        },
        capturerInfo: {
          source: audio.SourceType.SOURCE_TYPE_MIC,
          capturerFlags: 0
        },
      }).then((audioCapturer) => {
        this.filePath = filePath;
        this.audioCapturer = audioCapturer;
        this.audioCapturer.on('readData', this.readDataCallback);
      }).catch((err: BusinessError) => {
        console.error(`AudioCapturer Created : ERROR : ${err}`);
      });
    });
  }

  start() {
    this.audioCapturer?.start((err: BusinessError) => {
      if (err) {
        console.error('Capturer start failed.');
      } else {
        console.info('Capturer start success.');
      }
    });
  }

  stop() {
    this.audioCapturer?.stop().then(() => {
      console.info('AudioFrameworkRecLog: ---------STOP RECORD---------');
      console.info('AudioFrameworkRecLog: Capturer stopped: SUCCESS');
      if ((this.audioCapturer!.state == audio.AudioState.STATE_STOPPED)) {
        console.info('AudioFrameworkRecLog: State is Stopped:');
      }
    }).catch((err: BusinessError) => {
      console.error(`AudioFrameworkRecLog: Capturer stop: ERROR: ${err}`);
    });
  }

  release() {
    this.audioCapturer?.off('readData', (data: ArrayBuffer) => {
      console.info(`read data: ${data}`);
    });
    return this.audioCapturer?.release().then(() => {
      console.info('AudioFrameworkRecLog: ---------RELEASE RECORD---------');
      console.info('AudioFrameworkRecLog: Capturer release : SUCCESS');
      console.info(`AudioFrameworkRecLog: AudioCapturer : STATE : ${this.audioCapturer!.state}`);
      this.audioCapturer = undefined;
      return this.filePath;
    }).catch((err: BusinessError) => {
      console.error(`AudioFrameworkRecLog: Capturer stop: ERROR: ${err}`);
      this.audioCapturer = undefined;
      return '';
    });
  }
}

更多关于HarmonyOS鸿蒙Next中录音录制的文件无法播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

兄弟,可以将文件导出并使用 pcm 转换 wav 或 mp3 工具,来验证录制是否有问题;

还有个PCM转mp3或wav格式的库,看能不能用的上:https://gitee.com/openharmony-sig/ohos_ijkplayer

更多关于HarmonyOS鸿蒙Next中录音录制的文件无法播放的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,录音录制的文件无法播放可能由以下原因导致:

  1. 文件损坏:录音过程中设备异常或存储介质问题可能导致文件损坏,无法正常播放。

  2. 编码格式不兼容:录音文件采用的编码格式可能不被当前播放器支持,需确认文件格式是否与播放器兼容。

  3. 权限问题:录音或播放时未获取足够的系统权限,可能导致文件无法正常生成或播放。

  4. 存储路径错误:录音文件可能未保存到指定路径,或路径被误删,导致无法找到文件。

  5. 系统BUG:鸿蒙Next系统可能存在录音功能相关的BUG,导致文件生成或播放异常。

  6. 硬件故障:麦克风或音频处理模块故障可能导致录音文件无效,无法播放。

  7. 文件扩展名错误:录音文件扩展名可能被错误修改,导致播放器无法识别。

以上为可能导致录音文件无法播放的常见原因。

在HarmonyOS鸿蒙Next中,如果录音文件无法播放,可能是以下原因之一:

  1. 文件损坏:录音过程中意外中断或存储空间不足导致文件损坏。

  2. 编码格式不兼容:录音文件的编码格式可能不被当前播放器支持。

  3. 权限问题:应用可能没有获取到读取或播放录音文件的权限。

  4. 存储路径错误:文件可能未正确保存或被移动至其他路径。

建议检查存储空间、确保应用权限、尝试使用其他播放器,或重新录制音频文件。

回到顶部