проблема с функцией Wavread - PullRequest
       0

проблема с функцией Wavread

1 голос
/ 03 ноября 2010

Я написал программу, которая записывает мой голос, пишет его, а затем воспроизводит его

Fs=11025;
y= wavrecord(2*Fs,Fs,'int16');
wavwrite(y,Fs,'t1.wav');
wavplay(y);

Я слышал мой голос ясно затем я хочу написать другую программу, которая читает этот файл и воспроизводит его

y=wavread('t1.wav');
wavplay(y);

когда я запускаю вторую программу, я не слышу, как мой голос звучит

так как я могу прочитать файл wav и затем воспроизвести его без проблем?

Ответы [ 2 ]

1 голос
/ 04 ноября 2010

Используемый вами wavwrite может предполагать, что входящий y имеет диапазон [-1 +1]. Попробуйте нормализовать y перед звонком wavwrite

y_float = double(y)/2^15; %% Normalize int16(y) by 2^15
wavwrite(y_float,Fs, 't1.wav');

В случае, если что-то идет не так с wavplay чтением с плавающей запятой y_float, вы можете преобразовать сигнал обратного считывания из плавающей запятой в int16 снова:

y_float_readback = wavread('t1.wav');
y_int16_readback = int16(y_float_readback*2^15);
wavplay(y_int16_readback);

Вы можете сравнить y_int16_readback с оригинальным y. Они должны быть идентичны.

0 голосов
/ 03 ноября 2010

Этот скрипт работает абсолютно нормально для меня, используя последнюю версию Matlab. Я слышал чистый звук, используя ваши 1-й и 2-й фрагменты кода.

Одна вещь, которую я заметил, это то, что вы записываете y как тип 'int16', а затем сохраняете его в файл wav. Когда вы загружаете файл wav с помощью wavread, по умолчанию y сохраняется в рабочей области matlab как данные с плавающей запятой двойной точности. Если вы хотите, чтобы y был загружен в том же формате, в котором вы его сохранили, попробуйте следующее.

y=wavread('t1.wav','native');
wavplay(y);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...