HarmonyOS 鸿蒙Next 使用audioRenderer播放rawfile文件夹下pcm文件出现杂音且误播其他音频文件原因待查
HarmonyOS 鸿蒙Next 使用audioRenderer播放rawfile文件夹下pcm文件出现杂音且误播其他音频文件原因待查
写死固定播放rawfile/wave目录下的文件结果把上一层rawfile下的文件也播放了。我没查到原因,希望大家帮我看看
export class AudioRender {
static renderModel: audio.AudioRenderer
static audiostreamInfo: audio.AudioStreamInfo = {
samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_8000,
channels: audio.AudioChannel.CHANNEL_1,
sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_S16LE,
encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW
}
static audiorenderInfo: audio.AudioRendererInfo = {
usage: audio.StreamUsage.STREAM_USAGE_VOICE_ASSISTANT,
rendererFlags: 0
}
static audioRenderOptions: audio.AudioRendererOptions = {
streamInfo: this.audiostreamInfo,
rendererInfo: this.audiorenderInfo
}
// static renderFile: fileIo.File
static renderFile: resourceManager.RawFileDescriptor
static maxSize: number = 0
static renderSize: number = 0
static async init(){
AudioRender.renderModel = await audio.createAudioRenderer(AudioRender.audioRenderOptions)
let buffer = AudioRender.renderModel.getBufferSizeSync()
AudioRender.renderModel.on(‘writeData’, (buffer: ArrayBuffer)=>{
if(AudioRender.renderFile){
fileIo.readSync(AudioRender.renderFile.fd, buffer, {
offset: AudioRender.renderSize,
length:buffer.byteLength
})
AudioRender.renderSize += buffer.byteLength
}
console.log(‘fd:’+AudioRender.renderFile.fd.toString())
if(AudioRender.renderSize>=AudioRender.maxSize){
fileIo.closeSync(AudioRender.renderFile.fd)
AudioRender.stop()
}
})
}
static start(filePath: string){
AudioRender.renderModel.stop()
// AudioRender.renderFile = fileIo.openSync(filePath, fileIo.OpenMode.READ_WRITE)
AudioRender.renderFile = getContext().resourceManager.getRawFdSync(‘wave/beijing.wav’)
AudioRender.maxSize = AudioRender.renderFile.length
// AudioRender.maxSize = fileIo.statSync(AudioRender.renderFile.fd).size
AudioRender.renderModel.start()
}
static async stop(){
if(AudioRender.renderModel && AudioRender.renderModel.state===audio.AudioState.STATE_RUNNING){
AudioRender.renderModel.stop()
// AudioRender.renderModel.release()
AudioRender.maxSize = 0
AudioRender.renderSize = 0
}
}
}
4 回复
上午看到你自己找到问题了?现在还有问题吗?
有问题,已经提交工单了。
好嘞
针对您提出的HarmonyOS 鸿蒙Next使用audioRenderer播放rawfile文件夹下pcm文件出现杂音且误播其他音频文件的问题,可能的原因及解决方案如下:
- 音频参数不匹配:请确保AudioRenderer的音频流参数(如采样率、声道数、采样格式等)与pcm文件的实际参数完全一致。参数不匹配可能导致音频解码错误,从而产生杂音。
- 文件路径问题:检查文件路径是否正确指向目标pcm文件。如果路径错误或包含歧义(如路径中包含通配符或指向多个文件),可能导致播放错误的音频文件。
- 资源管理:确保在播放过程中,没有其他进程或线程同时访问或修改目标pcm文件。文件被占用可能导致播放异常。
如果上述建议均无法解决问题,请检查AudioRenderer的API使用是否正确,以及是否有最新的系统更新或补丁可能影响音频播放功能。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。