Как я могу сохранить аудио WAV файл без отсечения данных? - PullRequest
0 голосов
/ 05 сентября 2018

Я использую инструмент MATLAB для извлечения части тишины из аудио WAV-файлов. После извлечения части тишины из аудио я хочу сохранить новое аудио в виде файла WAV. Для этого процесса я использую функцию «аудиозапись». Однако программа предупреждает меня следующим сообщением:

Предупреждение: данные обрезаются при записи файла.

Я пытался добавить значение 'BitsPerSample' в одном формате файла (32 бита), и я не получаю сообщение от программы таким образом. Я сохранил аудиофайлы с 32-битной версией, но файлы WAV должны быть 16-битными.

Как я могу исправить эту проблему?

audiowrite(filename,y,fs,'BitsPerSample',32);

Примечание: я также нормализовал данные и проблема та же.

Спасибо за вашу помощь!

UPDATE:

Я хочу нормализовать аудиосэмплы как среднее значение 0 и стандартное отклонение или дисперсию 1. Таким образом, я использую метод нормализации z-показателя. Также метод y/max(abs(y)) нормализует данные между -1 и 1. Однако среднее значение и дисперсия не равны 0 и 1 соответственно. Эти методы являются нормированными данными по-разному.

На самом деле, мой вопрос заключается в том, как я могу сохранить выборки с помощью метода нормализации z-оценки без обрезки данных?

1 Ответ

0 голосов
/ 06 сентября 2018

Matlab's 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)
...