GithubHelp home page GithubHelp logo

benzleung / benz-amr-recorder Goto Github PK

View Code? Open in Web Editor NEW
322.0 322.0 99.0 4.69 MB

Play, record, reformat AMR audio

Home Page: https://benzleung.github.io/benz-amr-recorder/demo.html

License: MIT License

HTML 0.82% JavaScript 99.18%

benz-amr-recorder's People

Contributors

benzleung avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

benz-amr-recorder's Issues

benz-amr-recorder如何重新初始化

有这样简单的需求,通过不同的url播放不同的arm文件,但是benz-amr-recorder已经痛殴url初始化了。无法再次初始化,不能实现类似音乐播放切换音乐的效果

小程序无法使用

image
image
如图 New对象的时候报错

代码是 let soundInstance = new BenzAMRRecorder();
然后报错
TypeError: Cannot read property 'AudioContext' of undefined
at BenzAMRRecorder.js?t=wechat&s=1612677238981&v=6bc5d1f35f8f610d9ca7773c0ee5478b:290
at BenzAMRRecorder.js?t=wechat&s=1612677238981&v=6bc5d1f35f8f610d9ca7773c0ee5478b:2
at BenzAMRRecorder.js?t=wechat&s=1612677238981&v=6bc5d1f35f8f610d9ca7773c0ee5478b:5
at require (VM5786 WAService.js:2)
at VM5786 WAService.js:2
at index.js? [sm]:6
at require (VM5786 WAService.js:2)
at :996:9
at doWhenAllScriptLoaded (:1175:21)
at Object.scriptLoaded (:1195:5)

vue使用标签引用法不生效

image
1,<script type="text/javascript" src="./BenzAMRRecorder.min.js"></script>这种方式引入后,无法使用new BenzAMRRecorder()
2,但是var BenzAMRRecorder = require('benz-amr-recorder')这种方式可以正常使用
3,另外,非vue项目,在原生html页面使用script标签引用可以正常使用

请大佬们指点迷津

在react中使用报错

    const BenzAMRRecorder = require('benz-amr-recorder')

         <Button
          onClick={() => {
            var amr = new BenzAMRRecorder()
            amr
              .initWithUrl(
                'https://static.tuputech.com/api/image/original/cloud-api/storage-0831/2019-08-01/10/5d0b3fb7a9fe1ca9c4f20707/15646272568190.2911486649597441.amr'
              )
              .then(function () {
                amr.play()
              })
            amr.onEnded(function () {
              console.log('object')
              alert('播放完毕')
            })
          }}
        >
          点播放
        </Button>

会发送请求 拿到数据 可是amr.play()不会执行 报错

Uncaught TypeError: Cannot read property 'slice' of null
    at parseJSFunc (808055f6-876e-418e-aad5-6bdc5a02d6ca:602)
    at 808055f6-876e-418e-aad5-6bdc5a02d6ca:614
    at 808055f6-876e-418e-aad5-6bdc5a02d6ca:669
    at 808055f6-876e-418e-aad5-6bdc5a02d6ca:30010

好像是AMR报错

        function parseJSFunc(jsfunc) {
          var parsed = jsfunc.toString().match(sourceRegex).slice(1);  // 这句报错
          return {
            arguments: parsed[0],
            body: parsed[1],
            returnValue: parsed[2]
          };
        }

如果播amr 正播放呢,我把这个页面销毁了,音频还在播放bug

如果播amr 正播放呢,我把这个页面销毁了,音频还在播放,除非我F5 刷新页面,
有没有别的处理方式,比如可以在 页面关闭时候调用amr 对象的 destroy() 方法类似的逻辑呢
或者有别的方法吗?

  // 我先定义了一个这个,用来接受 amr 对象
  const audioRef = useRef(); //audio标签Ref

  // 定义 amr 并 赋值给 audioRef.current
  const armOptions = {
      src: audioInfo.src,
      isloop: loop,
  };
  const amr = initArmObj(callBack, armOptions);
  audioRef.current = amr;

  // 当页面销毁时候手动置空
 
  useEffect(() => {
        return (() => {
            // 如果是amr 类型文件,存在一直播放bug
            if (ext === 'amr') {
                audioRef.current.stop();
            }

            // 销毁音频组件
            audioRef.current = null;
        });
    }, [ext]);
 
 

经常性不能录音

长按调initWithRecord方法进行初始化,在then回调里面调startRecord方法进行录音,大概过了5,6秒结束,经常性会出现无录音的情况,此时BenzAmrRecord对象如下。版本:1.1.3

_blob: Blob {size: 6, type: "audio/amr"}
_isInit: true
_isInitRecorder: true
_isPaused: false
_isPlaying: false
_onAutoEnded: null
_onCancelRecord: ƒ ()
_onEndCallback: ƒ ()
_onEnded: null
_onFinishRecord: ƒ ()
_onPause: null
_onPlay: null
_onResume: null
_onStartRecord: ƒ ()
_onStop: null
_pauseTime: 0
_playEmpty: ƒ ()
_rawData: Uint8Array(6) [35, 33, 65, 77, 82, 10]
_recorderControl: RecorderControl {_recorderStream: null, _recorderStreamSourceNode: MediaStreamAudioSourceNode, _recorder: null, _isRecording: false, _curSourceNode: AudioBufferSourceNode}
_runAMRWorker: ƒ (msg, resolve)
_samples: Float32Array []
_startCtxTime: 0
__proto__: Object

最小化文件BenzAMRRecorder.min.js无法正常使用

提示this.te 不是个函数,检查了min文件发现,是把_playEmpty()函数替换成了te,但是_defineProperty仍然注册为_playEmpty,所以报错。
另外我尝试把this.te手动替换成this._playEmpty,这个错误就跳过去了,但是仍然有其他报错,所以这个min文件根本无法运行,能否重新打包?

请问如何在播放过程中点击按钮切换播放文件

您好!我在做一个聊天室,可能一个音频文件还没播放结束就会点击另外一条语音,播放另外一条文件,请问如何实现?
如果我使用
amr.initWithUrl('new file url.amr').then(function() {
amr.play();
});
amr.onEnded(function() {
alert('播放完毕');
})
就报错说arm已存在,如果我使用

var amr = new BenzAMRRecorder();
amr.initWithUrl('path/to/voice.amr').then(function() {
amr.play();
});
amr.onEnded(function() {
alert('播放完毕');
})
重新new 实例化一个,就提示arm不存在,好像new 下一行不能紧接着使用initWithUrl方法,请问如何处理比较好?能不能我个changeUrl方法呢

点击当前音频的播放按钮可以控制播放和暂停;

为什么我现在控制不了暂停

state ={
isPlay: false
}
  playAmrFile(url) {
    this.setState({
      isPlay: !this.state.isPlay
    }, () => {
      amr = new BenzAMRRecorder();
      amr.initWithUrl(url).then( () => {
        if(this.state.isPlay){
          amr.playOrPauseOrResume();
        } else {
          amr.stop()
        }
      });
    })
  }

android 上报错执行ffmpeg没权限

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963)
Caused by: java.lang.IllegalStateException: convert amr to mp3 error:
at it.sauronsoftware.jave.AudioUtils.convert(AudioUtils.java:60)
at it.sauronsoftware.jave.AudioUtils.amrToMp3(AudioUtils.java:34)
at com.example.salemen.Recording.PhoneCallReceiver.amrToMp3(PhoneCallReceiver.java:317)
at com.example.salemen.Recording.PhoneCallReceiver.onOutgoingCallEnded(PhoneCallReceiver.java:208)
at com.example.salemen.Recording.PhoneCallReceiver.onReceive(PhoneCallReceiver.java:100)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3793)
at android.app.ActivityThread.-wrap18(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2100) 
at android.os.Handler.dispatchMessage(Handler.java:109) 
at android.os.Looper.loop(Looper.java:166) 
at android.app.ActivityThread.main(ActivityThread.java:7555) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963) 
Caused by: it.sauronsoftware.jave.EncoderException: java.io.IOException: Cannot run program "/data/user/0/com.example.salemen/cache/jave-1/ffmpeg": error=13, Permission denied
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:830)
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:712)
at it.sauronsoftware.jave.AudioUtils.convert(AudioUtils.java:58)
at it.sauronsoftware.jave.AudioUtils.amrToMp3(AudioUtils.java:34) 
at com.example.salemen.Recording.PhoneCallReceiver.amrToMp3(PhoneCallReceiver.java:317) 
at com.example.salemen.Recording.PhoneCallReceiver.onOutgoingCallEnded(PhoneCallReceiver.java:208) 
at com.example.salemen.Recording.PhoneCallReceiver.onReceive(PhoneCallReceiver.java:100) 
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3793) 
at android.app.ActivityThread.-wrap18(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2100) 
at android.os.Handler.dispatchMessage(Handler.java:109) 
at android.os.Looper.loop(Looper.java:166) 
at android.app.ActivityThread.main(ActivityThread.java:7555) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963) 
Caused by: java.io.IOException: Cannot run program "/data/user/0/com.example.salemen/cache/jave-1/ffmpeg": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:692)
at java.lang.Runtime.exec(Runtime.java:560)
at it.sauronsoftware.jave.FFMPEGExecutor.execute(FFMPEGExecutor.java:105)
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:828)
at it.sauronsoftware.jave.Encoder.encode(Encoder.java:712) 
at it.sauronsoftware.jave.AudioUtils.convert(AudioUtils.java:58) 
at it.sauronsoftware.jave.AudioUtils.amrToMp3(AudioUtils.java:34) 
at com.example.salemen.Recording.PhoneCallReceiver.amrToMp3(PhoneCallReceiver.java:317) 
at com.example.salemen.Recording.PhoneCallReceiver.onOutgoingCallEnded(PhoneCallReceiver.java:208) 
at com.example.salemen.Recording.PhoneCallReceiver.onReceive(PhoneCallReceiver.java:100) 
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3793) 
at android.app.ActivityThread.-wrap18(Unknown Source:0) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2100) 
at android.os.Handler.dispatchMessage(Handler.java:109) 
at android.os.Looper.loop(Looper.java:166) 
at android.app.ActivityThread.main(ActivityThread.java:7555) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:469) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:963) 
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.(UNIXProcess.java:133)
at java.lang.ProcessImpl.start(ProcessImpl.java:128)

播放音乐切换控制问题

@BenzLeung 感谢回复,音乐切换有两个细节问题
场景是这样的:我有多个播放按钮是异步获取音乐的url, 但是我只能播放某一个音乐:

  1. 点击当前音乐的播放按钮可以控制播放和暂停;
    2.点击别的音乐播放按钮需要停止之前的音乐并播放当前的音乐。
    直接new 对象的方式无法实现相互控制。

遇到amr音频时,当xhr.response返回的是audio/amr-wb时decode 解析报错,audio/amr 解析正常

如题,经过查阅,audio/amr-wb是宽带,audio/amr后者是窄带
AMR NB的语音带宽范围:300-3400Hz,8KHz采样
AMR WB的语音带宽范围: 50-7000Hz,16KHz采样
有没有什么比较好的处理方法呢?

以及,如果我想在源码基础上做一些更改,请问,哪些文件是必要的? 和demo.html 同级的 BenzAMRRecorder.js 我拿出来过,但是报了特别多的语法错误

ios9不兼容

大佬, ios9这个插件会引起js加载的时候就报错
报这个错
SyntaxError: Unexpected identifier 'ctx'

我们开发的时候没有使用里面的录音功能,录音我们用的是微信的sdk,我们只用了里面的amr读取播放,大佬,能不能将功能拆分开哦?

手机上的录音文件转码失败

手机上的录音文件无法播放
53:1 Uncaught (in promise) DOMException: Unable to decode audio data
BenzAMRRecorder.js:30746 Uncaught (in promise) Error: Failed to decode.

[该录音为系统自动通话录音

initWithUrl一个amr链接报错_typeof is not defined

Uncaught ReferenceError: _typeof is not defined
at Object.open (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2)
at Object.createStandardStreams (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2)
at Object.init (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2)
at 8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2
at callRuntimeCallbacks (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2)
at ensureInitRuntime (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:2)
at doRun (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:6)
at run (8e8bdf9e-d4c0-4737-bebc-063804e23f6b:6)
at 8e8bdf9e-d4c0-4737-bebc-063804e23f6b:6
at 8e8bdf9e-d4c0-4737-bebc-063804e23f6b:6

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.