0

问题描述

我是用js实现了简单的采集录音数据进行改造,把采样的数据的偶数位挤压在一起作为输出数据,这样就会导致时长减少了一半。

问题出现的环境背景及自己尝试过哪些方法

找了网上的文章都是说不同的场景有不同的补码算法,但没有说过一个,我根本不知道怎样才能补码成功啊。

我尝试了各种补码方式,可是我搞不懂为什么补上之后又会没有声音了,搞不懂outputData[sample] 与inputData[sample*2]到底是一个怎样的对应关系才能达到我想要的效果呢。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

var scriptNode = audioctx.createScriptProcessor(4096, 1, 1);

scriptNode.onaudioprocess = function(audioProcessingEvent) {
var inputBuffer = audioProcessingEvent.inputBuffer;
var outputBuffer = audioProcessingEvent.outputBuffer;
for (var channel = 0; channel < outputBuffer.numberOfChannels; channel++) {
    var inputData = inputBuffer.getChannelData(channel);
    var outputData = outputBuffer.getChannelData(channel);
    // Loop through the 4096 samples
    for (var sample = 0; sample < inputBuffer.length; sample++) {
      if(sample%2==0){
           outputData[sample] = inputData[sample*2];}
       else{
           outputData[sample] = inputData[(sample-1)*2];
      }
    }
  }
}

你期待的结果是什么?实际看到的错误信息又是什么?

希望大佬们能解释一下outputData到底该填什么样的数据才能达到效果呢,只要能听到小黄人声音保证同样的音频时长就行,感谢🙏

lipten 42
2019-06-24 提问
1 个回答
0

已采纳

看了你的问题和评论之后,你的实际需求在音频处理被叫做声音基频的修改。

基频的修改在音频处理里是一个很基本的问题,但是没有太简单的方法。常用的比如 PSOLA ,但是需要先做基频的提取,实现起来并不那么简单。

另外插一句,我以前看过汤姆猫的变声结果,它其实没有改基频,而只是将声音通过了一个滤波器。这个实现起来就简单多了,前提是你得知道怎么设计滤波器。

撰写答案

推广链接