getRecorderManager录出的pcm文件声音完全不对,全是杂音

小程序开发相关产品技术讨论,包括面板、智能小程序、React Native、Ray跨端框架、Panel SDK、微信小程序、小程序开发工具(IDE)及其他开发技术相关等话题


智能小程序开发者
Posts: 200

https://developer.work.weixin.qq.com/do ... 5%E5%8F%A3

Code: Select all

uploadFile({
            url: 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=xxxx&type=file',
            filePath: recordPath,
            name: 'media',
            header: {
              'Content-Type': 'multipart/form-data',
            },
            formData: {
              filename: 'aa.pcm',
            },
            success(res) {
              console.log('upload success', res)
            },
            failure(res) {
              console.log('upload error', res)
            },
            complete() {
              console.log('upload complete')
            },
          })

你好,我使用了企业微信的接口进行测试,接口文档如上,提供参考。 需根据服务端对应参数进行修改。


Tags:
15919961853
Posts: 14

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

Code: Select all

let uploadFileTask = uploadFile({
    url:"https://drinksmart.haers.com:8011/api/AiBigModel/GetAudio",
    filePath:audioPath,
    name:"file",
    header:{
        'Content-Type': 'multipart/form-data',
    },
    formData: {
        filename: 'record.pcm',
    },
    complete:()=>{console.log("上传完成....")},
    success:(res)=>{
        console.log("上传完结果:",res) //res会返回字段FileUrl,表示上传后pcm的下载路径,可以下载下来对比
    },
    fail:(res)=>{
        console.log("uploadFile fail:",res)
    },
})

uploadFileTask.onProgressUpdate((param)=>{
    console.log("onProgressUpdate param:",param)
})
uploadFileTask.onHeadersReceived((param)=>{
    console.log("onHeadersReceived param:",param)
})

用上面代码,iOS可以上传了,iOS的onProgressUpdate、onHeadersReceived回调正常。
但是Android还是上传上去的pcm全是杂音,Android的onProgressUpdate、onHeadersReceived里面根本就不回调,uploadFile的success回调里面,服务器会返回上传pcm的下载地址(FileUrl字段),可以下载下来帮忙分析一下

智能小程序开发者
Posts: 200

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

归纳为两个问题:

  1. 安卓onProgressUpdate,onHeadersReceived 不回调。
  2. 安卓pcm本地播放ok,但是上传后下载播放全是杂音。
    3.iOSpcm本地播放无声音,上传后下载播放是正常的吗?
15919961853
Posts: 14

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

对。
ios 本地虽然播放没有声音,下载下来播放声音是正常的。

可以将https://github.com/Tuya-Community/tuya-miniapp-demo/blob/test/record/recorderManager/src/pages/Recorder/index.tsx里面的代码替换成下面代码,下面代码播放完成后,会自动上传到服务器,控制台可以看到服务器的pcm下载地址

Code: Select all

import { Button, View, getRecorderManager, authorize, createInnerAudioContext,uploadFile } from '@ray-js/ray'
import React, { FC, useRef, useEffect, useState } from 'react'
import styles from './index.module.less'

let tempFilePath = ""
const Home: FC = () => {
  const recorder = useRef()
  const audioContext = useRef(null)
  const [recordPath, setRecordPath] = useState('')

  useEffect(() => {
    audioContext.current = createInnerAudioContext({
      success: function (res) {
        console.log('createInnerAudioContext success', res)

    audioContext.current.onTimeUpdate((res) => {
      // console.log("onTimeUpdate callback", res);
    })
  },
  fail: function (res) {
    console.log('createInnerAudioContext fail', res)
  },
  complete: function () {
    console.log('createInnerAudioContext complete')
  },
})
  }, [])

  const start = () => {
    authorize({
      scope: 'scope.record',
      success(res) {
        // 先做监听
        // @ts-ignore
        recorder.current = getRecorderManager({
          success(res) {
            
console.log('getRecorderManager success ==>', res) }, // @ts-ignore fail(params) { console.log('getRecorderManager fail ==>', params) }, }) // @ts-ignore recorder.current.start({ sampleRate: 16000, //采样率 numberOfChannels: 1, //单声道 frameSize: 1024 * 1024, //帧大小 format: 'pcm', success(res) { console.log('start =-----------=>', res) tempFilePath = res.tempFilePath if (res && res.tempFilePath) { setRecordPath(tempFilePath) } }, fail(params) { console.log('start fail ==>', params) }, }) }, }) } const pause = () => { // @ts-ignore recorder.current.pause({ success(res) { console.log('pause ==>', res) }, fail(params) { console.log('pause fail ==>', params) }, }) } const resume = () => { // @ts-ignore recorder.current.resume({ success(res) { console.log('resume ==>', res) }, fail(params) { console.log('resume fail ==>', params) }, }) } const stop = () => { recorder.current && // @ts-ignore recorder.current.stop({ success(res) { console.log('stop ==>', res) if (res && res.tempFilePath) { setRecordPath(res.tempFilePath) } }, fail(params) { console.log('stop fail ==>', params) }, }) } const uploadAudio = (audioPath)=>{ console.log("开始上传文件,audioPath:"+audioPath) let uploadFileTask = uploadFile({ //url:HttpHost+"/api/AiBigModel/GetAudio", url:"https://drinksmart.haers.com:8011/api/AiBigModel/GetAudio", filePath:audioPath, name:"file", header:{ 'Content-Type': 'multipart/form-data', }, formData: { filename: 'record.pcm', }, complete:()=>{ console.log("上传完成....") }, success:(res)=>{ console.log("上传成功:",res) }, fail:(res)=>{ console.log("uploadFile fail:",res) }, }) uploadFileTask.onProgressUpdate((param)=>{ console.log("onProgressUpdate param:",param) }) uploadFileTask.onHeadersReceived((param)=>{ console.log("onHeadersReceived param:",param) }) } const playAudio = () => { console.log('playAudio recordPath', recordPath) audioContext.current.play({ // src: 'https://images.tuyacn.com/rms-static/4681f900-9fa4-11ee-af19-cfa45f6de59e-1703123840144.mp3?tyName=2.mp3', src: recordPath, startTime: 0, loop: false, playbackRate: 1, volume: 1, success: function (res) { console.log(`audio play success`, res) uploadAudio(recordPath) }, fail: function (res) { console.log(`audio play fail`, res) }, complete: function (res) { console.log(`audio play complete`, res) }, }) } return ( <View className={styles['container']}> <Button className={styles['btn']} onClick={start}> 点击开始录音 </Button> <Button className={styles['btn']} onClick={pause}> 点击暂停录音 </Button> <Button className={styles['btn']} onClick={resume}> 点击继续录音 </Button> <Button className={styles['btn']} onClick={stop}> 点击关闭录音 </Button> <Button className={styles['btn']} onClick={playAudio}> 播放保存的录音 </Button> </View> ) } export default Home
智能小程序开发者
Posts: 200

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

你好,我试了一下你这个代码,上传的录音,iOS也无法播放,能否提供一个你上传完成的录音地址:
我的录音播放地址为:你试试我这个地址,你那里 iOS是否能播放 https://drinksmart.haers.com:8011/uploa ... 06c93e.pcm

15919961853
Posts: 14

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

上面pcm文件的声音和波形都是正常的
用Cool Edit Pro播放,播放前:选择16K采样率、单声道、16bit

智能小程序开发者
Posts: 200

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

我上传的音频,你安卓和iOS都能播放的?你播放不需要在小程序中播放吗。

15919961853
Posts: 14

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

不需要在小程序里面播放,但是pcm文件里面的声音一定要正常,服务器需要识别出里面内容。
下面我昨天上传的pcm文件,Android波形、声音完全不对,全是杂音,没法播放;ios可以正常播放
ios录音:https://drinksmart.haers.com:8011/_Fram ... 4a99828c9c
Android录音:https://drinksmart.haers.com:8011/_Fram ... d05992d6ad

智能小程序开发者
Posts: 200

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

明白了,我们客户端看一下

15919961853
Posts: 14

Re: getRecorderManager录出的pcm文件声音完全不对,全是杂音

有结果了吗

Post Reply