numpy 为什么我的函数不能正确地交错多个波形文件?

ikfrs5lh  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(121)

我正在尝试使用JavaScript中的Wavefile库将一个交错Wav文件数据的函数从Python翻译成JavaScript。我对该函数的翻译交错了文件,但没有输出正确的Wav文件。
下面是我的代码:

function load_to_buffer_arrays(list_of_files) {
  const output_data = [];
  const raw_data_array = [];
  const num_files = list_of_files.length;
  for (let i = 0; i < num_files; i++) {
    const file = list_of_files[i];
    try {
      const buffer = fs.readFileSync(file);
      const wav_temp = new WaveFile(buffer);
      raw_data_array.push(wav_temp.getSamples(false, Int16Array));
    } catch (err) {
      console.error(err);
    }
  }
  const num_samples = raw_data_array[0].length;
  for (let j = 0; j < num_samples; j++) {
    for (let i = 0; i < num_files; i++) {
      let sample = raw_data_array[i][j];
      output_data.push(sample);
    }
  }
  return output_data;
}

下面是Python代码:

def load_to_buffer_arrays(list_of_files):
    """Load files to buffer arrays and interleave the data into one single entity and pass it back"""
    raw_data_array = []
    for i, file in enumerate(list_of_files):
        sound_file = AudioSegment.from_file(file)
        sound_samples = sound_file.get_array_of_samples()
        raw_data_array.append(sound_samples)
    output_data = []
    number_of_files = len(list_of_files)
    length_of_one_raw_data = len(raw_data_array[0])
    for i in range(0, length_of_one_raw_data):
        for j in range(0,number_of_files):
            sample = raw_data_array[j][i]
            output_data.append(sample)
    return output_data

Intended Output:My Output:

hjzp0vay

hjzp0vay1#

Python使用array.array类来存储每个文件的原始样本数据,在JS中,我们使用的是Int16Array,虽然它是正确的,但并不是创建一个数组来存储每个文件的样本数据,而是将dir中每个文件的相同样本数据推送到raw_data_array数组。
您需要为每个文件创建一个新的Int16Array,并将其推入raw_data_array

raw_data_array.push(new Int16Array(wav_temp.getSamples(false, Int16Array)));

相关问题