我正在尝试使用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
1条答案
按热度按时间hjzp0vay1#
Python使用
array.array
类来存储每个文件的原始样本数据,在JS中,我们使用的是Int16Array
,虽然它是正确的,但并不是创建一个数组来存储每个文件的样本数据,而是将dir中每个文件的相同样本数据推送到raw_data_array
数组。您需要为每个文件创建一个新的
Int16Array
,并将其推入raw_data_array
。