recoder.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. var audio_context;
  2. var recorder;
  3. function startUserMedia(stream) {
  4. var input = audio_context.createMediaStreamSource(stream);
  5. recorder = new Recorder(input);
  6. }
  7. function startRecording(button) {
  8. recorder && recorder.record();
  9. // button.disabled = true;
  10. // button.nextElementSibling.disabled = false;
  11. }
  12. function stopRecording(button) {
  13. recorder && recorder.stop();
  14. // button.disabled = true;
  15. // button.previousElementSibling.disabled = false;
  16. createAudioDom();
  17. recorder.clear();
  18. }
  19. function voiceInit() {
  20. console.log("run init")
  21. try {
  22. // webkit shim
  23. window.AudioContext = window.AudioContext || window.webkitAudioContext;
  24. navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;
  25. window.URL = window.URL || window.webkitURL;
  26. audio_context = new AudioContext;
  27. console.log('Audio context set up.');
  28. console.log('navigator.getUserMedia ' + (navigator.getUserMedia ? 'available.' : 'not present!'));
  29. } catch (e) {
  30. console.log("err", e)
  31. // layer.msg('No web audio support in this browser!');
  32. }
  33. navigator.getUserMedia({audio: true}, startUserMedia, function (e) {
  34. console.log('No live audio input: ' + e);
  35. // layer.msg('浏览器未找到麦克风');
  36. });
  37. };
  38. function createAudioDom() {
  39. // recorder && recorder.exportWAV(function (blob) {
  40. // var url = URL.createObjectURL(blob);
  41. // var au = document.createElement('audio');
  42. // au.controls = true;
  43. // au.src = url;
  44. // document.body.appendChild(au);
  45. // });
  46. }
  47. function wavUpload() {
  48. try {
  49. recorder && recorder.stop();
  50. createAudioDom();
  51. recorder && recorder.exportWAV(function (wav_file) {
  52. console.log("wav_file", wav_file);
  53. if (wav_file.size < 1000) {
  54. layer.msg("录音失败,请重试");
  55. recodeTime = 0;
  56. return false;
  57. }
  58. var formdata = new FormData(); // form 表单 {key:value}
  59. formdata.append("voiceFile", wav_file); // form input type="file"
  60. formdata.append("accessToken", accessToken);
  61. formdata.append("deviceSerial", deviceSerial);
  62. formdata.append("channelNo", channelNo);
  63. padding = true;
  64. $.ajax({
  65. url: "/api/lapp/voice/sendonce",
  66. type: 'post',
  67. processData: false,
  68. contentType: false,
  69. data: formdata,
  70. dataType: 'json',
  71. success: function (data) {
  72. console.log(data);
  73. if (data.code == '200') {
  74. countTime('sub', recodeTime + 2); // 延时
  75. } else if (data.code == "111001") {
  76. return false;
  77. } else {
  78. if (recodeTime !== 0) { // 仅需提示过短外其他错误
  79. layer.msg(data.msg || '发送失败,请稍后再试')
  80. }
  81. }
  82. //ocument.getElementById("player").src = "/get_audio/" + data.filename;
  83. padding = false;
  84. recodeTime = 0;
  85. },
  86. error: function (err) {
  87. console.log("err", err);
  88. padding = false;
  89. recodeTime = 0;
  90. layer.msg("网络异常,请稍后再试");
  91. }
  92. })
  93. });
  94. recorder && recorder.clear();
  95. } catch (err) {
  96. console.log(err);
  97. }
  98. }