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
兄弟,可以将文件导出并使用 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中,录音录制的文件无法播放可能由以下原因导致:
-
文件损坏:录音过程中设备异常或存储介质问题可能导致文件损坏,无法正常播放。
-
编码格式不兼容:录音文件采用的编码格式可能不被当前播放器支持,需确认文件格式是否与播放器兼容。
-
权限问题:录音或播放时未获取足够的系统权限,可能导致文件无法正常生成或播放。
-
存储路径错误:录音文件可能未保存到指定路径,或路径被误删,导致无法找到文件。
-
系统BUG:鸿蒙Next系统可能存在录音功能相关的BUG,导致文件生成或播放异常。
-
硬件故障:麦克风或音频处理模块故障可能导致录音文件无效,无法播放。
-
文件扩展名错误:录音文件扩展名可能被错误修改,导致播放器无法识别。
以上为可能导致录音文件无法播放的常见原因。
在HarmonyOS鸿蒙Next中,如果录音文件无法播放,可能是以下原因之一:
-
文件损坏:录音过程中意外中断或存储空间不足导致文件损坏。
-
编码格式不兼容:录音文件的编码格式可能不被当前播放器支持。
-
权限问题:应用可能没有获取到读取或播放录音文件的权限。
-
存储路径错误:文件可能未正确保存或被移动至其他路径。
建议检查存储空间、确保应用权限、尝试使用其他播放器,或重新录制音频文件。

