HarmonyOS鸿蒙Next中如何使用audio.AudioCapturer录制得到的buffer转成mp3格式然后写入文件里面

发布于 1周前 作者 yuanlaile 来自 鸿蒙OS

HarmonyOS鸿蒙Next中如何使用audio.AudioCapturer录制得到的buffer转成mp3格式然后写入文件里面 请问如何使用audio.AudioCapturer录制得到的buffer转成mp3格式然后写入文件里面,官方文档的看不太懂,还有一个三方库里面好像也不行,哪位大佬可以帮忙给个小demo吗?

5 回复

更多关于HarmonyOS鸿蒙Next中如何使用audio.AudioCapturer录制得到的buffer转成mp3格式然后写入文件里面的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我需要用audio.AudioCapturer这个录制,因为我还要拿音频的实时帧,而AudioRecorder做不到这个,

在HarmonyOS鸿蒙Next中,使用audio.AudioCapturer录制音频数据后,可以通过以下步骤将录制的buffer转换为MP3格式并写入文件:

  1. 初始化AudioCapturer:首先,使用audio.AudioCapturer进行音频录制,获取原始PCM格式的音频数据。

  2. 创建音频编码器:使用media.AudioEncoder创建一个MP3编码器,设置编码格式为MP3,并配置相关参数如采样率、比特率等。

  3. 编码音频数据:将AudioCapturer录制的PCM数据通过AudioEncoder进行编码,得到MP3格式的音频数据。

  4. 写入文件:使用fileio模块创建一个文件,将编码后的MP3数据写入该文件。

示例代码如下:

import audio from '@ohos.multimedia.audio';
import media from '@ohos.multimedia.media';
import fileio from '@ohos.fileio';

// 1. 初始化AudioCapturer
let audioCapturer = 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
  }
});

// 2. 创建MP3编码器
let audioEncoder = media.createAudioEncoder({
  format: media.AudioFormat.AAC_LC,
  sampleRate: 44100,
  bitRate: 128000,
  channelCount: 2
});

// 3. 编码音频数据并写入文件
let filePath = 'path/to/output.mp3';
let file = fileio.openSync(filePath, fileio.OpenMode.READ_WRITE | fileio.OpenMode.CREATE);

audioCapturer.start();
audioEncoder.start();

audioCapturer.on('data', (buffer) => {
  let encodedBuffer = audioEncoder.encode(buffer);
  fileio.writeSync(file.fd, encodedBuffer);
});

// 停止录制和编码
audioCapturer.stop();
audioEncoder.stop();
fileio.closeSync(file.fd);

在HarmonyOS鸿蒙Next中,使用audio.AudioCapturer录制音频后,可以通过以下步骤将buffer转换为MP3格式并写入文件:

  1. 录制音频:使用AudioCapturer录制音频数据,获取PCM格式的buffer。
  2. 编码为MP3:使用第三方库(如LAME)将PCM buffer编码为MP3格式。
  3. 写入文件:将编码后的MP3数据写入文件。

示例代码:

import audio from '@ohos.multimedia.audio';
import fs from '@ohos.file.fs';

// 初始化AudioCapturer
let audioCapturer = new audio.AudioCapturer();

// 开始录制
audioCapturer.start();

// 获取PCM数据
let buffer = await audioCapturer.read();

// 使用LAME等库将PCM编码为MP3
let mp3Buffer = lameEncode(buffer);

// 写入文件
let filePath = 'path/to/output.mp3';
fs.writeFileSync(filePath, mp3Buffer);

// 停止录制
audioCapturer.stop();

注意:具体实现可能依赖第三方库,需根据项目需求集成。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!