有没有HarmonyOS鸿蒙Next录音转MP3的demo
有没有HarmonyOS鸿蒙Next录音转MP3的demo 有没有哪位可以提供一个录音转MP3的demo
3 回复
import { media } from '@kit.MediaKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';
import { LengthMetrics, promptAction } from '@kit.ArkUI';
import fs from '@ohos.file.fs';
let avRecorder: media.AVRecorder;
let file: fs.File | undefined = undefined
media.createAVRecorder().then((recorder: media.AVRecorder) => {
avRecorder = recorder;
promptAction.showToast({
message: "创建成功"
})
// 状态上报回调函数
avRecorder.on('stateChange', (state: media.AVRecorderState, reason: media.StateChangeReason) => {
console.log(`current state is ${state}`);
// 用户可以在此补充状态发生切换后想要进行的动作
})
// 错误上报回调函数
avRecorder.on('error', (err: BusinessError) => {
console.error(`avRecorder failed, code is ${err.code}, message is ${err.message}`);
})
}, (error: BusinessError) => {
console.error(`createAVRecorder failed`);
})
function reqPermissionsFromUser(permissions: Array<Permissions>, context: common.UIAbilityContext): Promise<boolean> {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
return new Promise((resolve, reject) => {
// requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
let grantStatus: Array<number> = data.authResults;
let length: number = grantStatus.length;
for (let i = 0; i < length; i++) {
if (grantStatus[i] === 0) {
// 用户授权,可以继续访问目标操作
resolve(true)
return
} else {
// 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
resolve(false)
return;
}
}
// 授权成功
}).catch((err: BusinessError) => {
console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
reject(false)
return
})
})
}
@Component
export struct AudioCaptureToMp3 {
async aboutToAppear() {
const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];
// 授权
const context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
let result = await reqPermissionsFromUser(permissions, context);
if (!result) {
console.error('result is null')
return
}
}
build() {
Flex({ wrap: FlexWrap.Wrap, space: { main: LengthMetrics.vp(5), cross: LengthMetrics.vp(5) } }) {
Button("prepare").onClick(async (event: ClickEvent) => {
// 新建并打开文件
let path = `${getContext().cacheDir}/${Math.random()}.mp3`
file = fs.openSync(path, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
let avProfile: media.AVRecorderProfile = {
audioBitrate: 100000, // 音频比特率
audioChannels: 2, // 音频声道数
audioCodec: media.CodecMimeType.AUDIO_MP3, // 音频编码格式,当前只支持aac
audioSampleRate: 48000, // 音频采样率
fileFormat: media.ContainerFormatType.CFT_MP3, // 封装格式,当前只支持m4a
}
let avConfig: media.AVRecorderConfig = {
audioSourceType: media.AudioSourceType.AUDIO_SOURCE_TYPE_MIC, // 音频输入源,这里设置为麦克风
profile: avProfile,
url: `fd://${file.fd}`, // 参考应用文件访问与管理中的开发示例获取创建的音频文件fd填入此处
}
avRecorder.prepare(avConfig).then(() => {
console.log('Invoke prepare succeeded.');
promptAction.showToast({
message: "prepare成功"
})
}, (err: BusinessError) => {
console.error(`Invoke prepare failed, code is ${err.code}, message is ${err.message}`);
})
})
Button("start").onClick((event: ClickEvent) => {
avRecorder.start().then(() => {
console.log('start succeeded.');
promptAction.showToast({
message: "start成功"
})
})
})
Button("stop").onClick((event: ClickEvent) => {
avRecorder.stop().then(() => {
console.log('stop succeeded.');
promptAction.showToast({
message: "stop成功"
})
fs.closeSync(file)
})
})
}
}
}
更多关于有没有HarmonyOS鸿蒙Next录音转MP3的demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
目前HarmonyOS鸿蒙Next提供了丰富的多媒体处理能力,支持音频录制和格式转换。要实现录音转MP3的功能,可以通过调用AudioCapturer
进行音频录制,然后使用AudioEncoder
将录制的音频数据编码为MP3格式。以下是一个简单的示例代码框架:
import audio from '@ohos.multimedia.audio';
import media from '@ohos.multimedia.media';
// 创建AudioCapturer实例
let audioCapturer = audio.createAudioCapturer();
// 配置音频参数
let audioCapturerOptions = {
streamType: audio.StreamType.STREAM_TYPE_MUSIC,
sampleRate: 44100,
channels: audio.AudioChannel.CHANNEL_2,
format: audio.AudioFormat.FORMAT_PCM_16BIT
};
// 初始化AudioCapturer
audioCapturer.init(audioCapturerOptions);
// 创建AudioEncoder实例
let audioEncoder = media.createAudioEncoder();
// 配置编码器参数
let audioEncoderOptions = {
codec: media.CodecMimeType.AUDIO_MPEG, // 指定编码格式为MP3
sampleRate: 44100,
channelCount: 2,
bitRate: 128000,
format: media.AudioFormat.AUDIO_MP3
};
// 初始化AudioEncoder
audioEncoder.init(audioEncoderOptions);
// 开始录制和编码
audioCapturer.start();
audioEncoder.start();
// 处理录制的音频数据
audioCapturer.on('dataAvailable', (buffer) => {
audioEncoder.pushBuffer(buffer);
});
// 停止录制和编码
audioCapturer.stop();
audioEncoder.stop();
// 释放资源
audioCapturer.release();
audioEncoder.release();
这个示例展示了如何使用HarmonyOS的API实现录音并转换为MP3格式。具体实现时,需要根据实际需求调整参数和处理逻辑。
目前HarmonyOS(鸿蒙Next)尚未提供官方的录音转MP3的Demo。但你可以通过以下步骤实现录音并转换为MP3:
- 使用AudioCapturer进行录音:通过HarmonyOS的AudioCapturer API捕获音频数据。
- 编码为MP3格式:使用第三方音频编码库(如LAME)将PCM格式的音频数据编码为MP3。
- 保存文件:将编码后的MP3数据写入文件。
由于HarmonyOS的生态仍在发展,建议关注官方文档或社区获取最新支持。