Как я могу получить в файл WAV, чтобы изменить частоту дискретизации?
У меня есть файл wav, загруженный в MATLAB, и я вижу его частоту дискретизации. Все, что мне нужно сделать, это изменить это 1 число. Все остальное в файле останется неизменным. (Результирующий звук будет воспроизводиться с другой скоростью, но будет иметь идентичный массив образцов данных.)
Причина, по которой мне нужно это сделать, заключается в том, что MATLAB, кажется, взбешен, когда я говорю, чтобы он открывал что-то сэмплированное в любом другом месте, кроме 8k. Все, что мне нужно для MATLAB - это редактирование файла, так что частота дискретизации действительно не имеет значения, так как я верну ее обратно в файл wav, когда закончу. Поэтому мне нужно либо иметь возможность изменить значение в wav-файле, в котором хранится частота дискретизации, либо заставить MATLAB изменить частоту дискретизации, которую он предпочитает, с 8 КБ до частоты дискретизации, на которой были записаны мои файлы.
3 ответа
Если вы просто хотите изменить частоту дискретизации, вот код, но это исказит исходный файл WAV. Если вы уменьшите частоту дискретизации, ритм и музыка будут очень медленными.
Code:
[y, fs, nbits]=wavread('stego_lab');
fs2=11025;
wavwrite(y,fs2,nbits,'stego2_lab.wav');
sound(y,fs2,nbits)
Вы можете услышать это, но образцы останутся прежними. Надеюсь, поможет.
Существует инструмент SOX, который должен помочь вам в этом отношении, и он доступен практически на любой платформе - http://sox.sourceforge.net/
Также есть libsndrate, libsamplerate, libsndfile и другие, которые также могут иметь исполняемые файлы.
Попробуйте это решение
[x,fs] = wavread('infile.wav');
<br>[p,q] = rat(16000/fs) % to convert to 16k sample rate</br>
<br>y = resample(x,p,q); % signal package require
wavwrite(x,16000,'outfile.wav');