我正在使用MATLAB工具从音频WAV文件中提取静音部分。从音频中提取静音部分后,我想将新音频另存为WAV文件。 对于此过程,我使用“ audiowrite”功能。但是,程序通过以下消息警告我:
警告:写入文件时会剪切数据。
我试图用单个文件格式(32位)添加'BitsPerSample'值,并且我不采用这种方式从程序中获取消息。我保存了32位音频文件,但WAV文件应为16位。
如何解决此问题?
audiowrite(filename,y,fs,'BitsPerSample',32);
注意:我也对数据进行了归一化,问题是相同的。
感谢您的帮助!
更新:
我想将音频样本标准化为均值0和标准偏差或方差1。因此,我使用z得分标准化技术。
同样,y/max(abs(y))
方法是-1和1之间的归一化数据。但是,均值和方差分别不等于0和1。这些技术是用不同方式归一化的数据。
实际上,我的问题是,如何使用z分数归一化技术保存样本而不进行数据裁剪?
答案 0 :(得分:0)
Matlab的audiowrite
对不同的数据类型使用不同的规范化。因此,如果要获取16位音频wav文件,则应将数据标准化为[-32768,32767]
范围,然后将数据转换为int16
类型:
y_normalized = intmax('int16') * y/(max(abs(y))*1.001);
audiowrite(filename, int16(y_normalized), fs)
类似地,对于float,您应该将数据标准化为[-1,+1]
范围:
y_normalized = y/(max(abs(y)));
audiowrite(filename, y_normalized, fs)