matlab - 如何在没有数据剪辑的情况下保存音频 wav 文件?
问题描述
我正在使用 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 分数归一化技术保存样本而不进行数据裁剪?
解决方案
Matlabaudiowrite
对不同的数据类型使用不同的规范化。因此,如果您想获得 16 位音频 wav 文件,您应该将数据标准化为[-32768,32767]
范围并将数据转换为int16
类型:
y_normalized = intmax('int16') * y/(max(abs(y))*1.001);
audiowrite(filename, int16(y_normalized), fs)
同样,对于浮点数,您应该将数据标准化为[-1,+1]
范围:
y_normalized = y/(max(abs(y)));
audiowrite(filename, y_normalized, fs)
推荐阅读
- cassandra - 如何对 Apache Cassandra 支持的 Janusgraph 数据库进行备份和恢复?
- quic - HTTP/3 及其影响
- java - AOP 切入点仅适用于带注释的方法
- azure-machine-learning-service - POST 请求失败,大数据发送到部署在 Azure 容器上的模型
- c++ - C++中从客户端到服务器的数据传输问题
- anaconda - Windows 10:Jupyter 笔记本未启动
- xcode - 如何在同一个项目中添加两个不同的苹果开发者账号?
- node.js - 无法将 unlink 或 unlinkSync 与 socket.io 一起使用
- sharepoint - 在 Sharepoint 2016 中更改主页的名称
- javascript - 在将 DynamoDb 放入 node.js lambda 后合并异步 http 请求函数的问题