HarmonyOS鸿蒙Next中分享AudioCapturer采集的录音
HarmonyOS鸿蒙Next中分享AudioCapturer采集的录音 在分享AudioCapturer采集的录音的时候,分享过后无法播放录音
let contexts = getContext(this).getApplicationContext();
let path = contexts.filesDir;
// const filePath = path + `/${item.recordingSong}.mp3`;
const contextFaker: Context = getContext(this);
const filePath = path + `${item.recordingSong}.mp3`;
// let filePath = contextFaker.filesDir + '/exampleVideo.mp4';//路径
/** Solution 1 */
const resourceMgr: resourceManager.ResourceManager = contextFaker.resourceManager;
const fileData: Uint8Array = await resourceMgr.getMediaContent($r('app.media.app_icon'));
this.thumbnailBuffer = fileData;
/** Solution 2 */
// let thumbnailPath = contextFaker.filesDir + '/exampleImage.jpg'; //图片路径
// const imageSource: image.ImageSource = image.createImageSource(thumbnailPath);
// const imagePacker: image.ImagePacker = image.createImagePacker();
// const buffer: ArrayBuffer = await imagePacker.packToData(imageSource, {
// format: 'image/jpeg',
// quality: 30,
// });
// this.thumbnailBuffer = new Uint8Array(buffer);
// let utdTypeId = utd.getUniformDataTypeByFilenameExtension('.mp3', utd.UniformDataType.MP3);
// let utdTypeId = utd.getUniformDataTypeByFilenameExtension('.mp3', utd.UniformDataType.MP3);
let shareData: systemShare.SharedData = new systemShare.SharedData({
utd: utd.UniformDataType.PCM,
// utd: utdTypeId,
uri: fileUri.getUriFromPath(filePath),
title: '111',
description: `${item.recordingSong}`,
thumbnail: this.thumbnailBuffer,
});
let controller: systemShare.ShareController = new systemShare.ShareController(shareData);
const callback = () => {
// Log.info('HuaweiShare_ dismiss run');
console.log('-=-=:HuaweiShare_ dismiss run')
promptAction.showToast({ message: 'Share panel disappeared' });
};
controller.on('dismiss', callback);
// controller.off('dismiss', callback);
console.log(`-=-=:dismiss', callback`)
let context = getContext(this) as common.UIAbilityContext;
controller.show(context, {
previewMode: this.videoPreviewMode === 0 ? systemShare.SharePreviewMode.DEFAULT : systemShare.SharePreviewMode.DETAIL
}).then(() => {
// logger.info('HuaweiShare_ show');
console.log(`-=-=:HuaweiShare_ show`)
}).catch((error: BusinessError) => {
// logger.error(`HuaweiShare_ show error. Code: ${error.code}, message: ${error.message}`);
console.log(`HuaweiShare_ show error. Code: ${error.code}, message: ${error.message}`)
});
更多关于HarmonyOS鸿蒙Next中分享AudioCapturer采集的录音的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
你好,请问是在使用audioCapturer.start开始录音完成后,无法播放吗?
有没有对应报错信息呢?如果有麻烦补充一下,另外可以检查一下有没有申请MICROPHONE权限。比如:
```javascript
onWindowStageCreate(windowStage: window.WindowStage) {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
let atManager = abilityAccessCtrl.createAtManager();
atManager.requestPermissionsFromUser(this.context, ['ohos.permission.MICROPHONE']).then((data) => {
console.info('data:' + JSON.stringify(data));
console.info('data permissions:' + data.permissions);
console.info('data authResults:' + data.authResults);
}).catch((err) => {
console.info('data:' + JSON.stringify(err));
});
windowStage.loadContent('pages/Index', (err, data) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
})
}
我这边是可以录音,这段录音也可以播放,但是分享出去的那段录音无法播放,
这段分享出来的录音,无法在手机里面播放,
分享是怎么分享的?
在HarmonyOS鸿蒙Next中,分享通过AudioCapturer
采集的录音数据可以通过以下步骤实现:
-
初始化AudioCapturer:首先,使用
AudioCapturer
类初始化音频采集器,配置参数如采样率、声道数、音频格式等。 -
采集音频数据:启动
AudioCapturer
后,通过read
方法从音频硬件中读取数据,数据存储在缓冲区中。 -
处理音频数据:对采集到的音频数据进行必要的处理,如编码、压缩等。
-
保存音频文件:将处理后的音频数据保存为文件,如WAV、MP3等格式。
-
分享音频文件:使用HarmonyOS的分享功能,通过
Intent
将音频文件分享到其他应用或设备。可以使用Share
API,指定文件URI和分享类型。
示例代码如下:
import audio from '@ohos.multimedia.audio';
import fileio from '@ohos.fileio';
import featureAbility from '@ohos.ability.featureAbility';
// 初始化AudioCapturer
let audioCapturer = new audio.AudioCapturer({
audioStreamInfo: {
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
}
});
// 启动采集
audioCapturer.start();
// 读取音频数据
let bufferSize = 4096;
let buffer = new ArrayBuffer(bufferSize);
audioCapturer.read(buffer, bufferSize, false);
// 保存为文件
let filePath = '/data/storage/el2/base/cache/audio.wav';
let fd = fileio.openSync(filePath, 0o102, 0o666);
fileio.writeSync(fd, buffer);
fileio.closeSync(fd);
// 分享文件
let intent = {
action: 'ohos.intent.action.SEND',
uri: 'file://' + filePath,
type: 'audio/wav'
};
featureAbility.startAbility(intent);
// 停止采集
audioCapturer.stop();
在HarmonyOS鸿蒙Next中,使用AudioCapturer
采集音频数据后,可以通过File
类将数据写入文件进行保存,或者通过Intent
分享到其他应用。首先,确保权限已获取,然后使用AudioCapturer
采集音频数据。采集完成后,将数据写入文件,并通过Intent
设置文件URI,调用startActivity
进行分享。具体实现需参考HarmonyOS API文档和开发指南。