Как я могу войти в файл wav, чтобы изменить частоту дискретизации?

У меня есть файл wav, загруженный в MATLAB, и я вижу его частоту дискретизации. Все, что мне нужно сделать, это изменить этот 1 номер. Все остальное в файле останется без изменений. (Полученный звук будет воспроизводиться с другой скоростью, но будет иметь идентичный массив семпловых данных.)

Причина, по которой мне нужно это сделать, заключается в том, что MATLAB, кажется, сходит с ума, когда я говорю ему открыть что-то, взятое с разрешением, отличным от 8k. Все, для чего мне нужен MATLAB, — это редактирование файла, поэтому частота дискретизации на самом деле не имеет значения, так как я верну его в wav-файл, когда закончу. Поэтому мне нужно либо иметь возможность изменить значение в файле wav, в котором хранится частота дискретизации, либо заставить MATLAB изменить частоту дискретизации, которую он предпочитает, с 8k на частоту дискретизации, с которой были записаны мои файлы.


person user1123936    schedule 24.06.2012    source источник
comment
См. этот (почти идентичный) вопрос: avp.stackexchange .com/questions/4260/   -  person mola    schedule 24.06.2012


Ответы (3)


если вы просто хотите изменить частоту дискретизации, вот код, но он исказит исходный файл wav. Если вы уменьшите частоту дискретизации, бит и музыка будут очень медленными.

Code:
    [y, fs, nbits]=wavread('stego_lab');
    fs2=11025;
    wavwrite(y,fs2,nbits,'stego2_lab.wav');
    sound(y,fs2,nbits)

вы можете услышать это, но сэмплы останутся прежними. Надеюсь, поможет.

person user1398405    schedule 24.06.2012

Существует инструмент SOX, который должен помочь вам в этом отношении, и он доступен практически на любой платформе — http://sox.sourceforge.net

Также есть libsndrate, libsamplerate, libsndfile и другие, у которых тоже могут быть исполняемые файлы.

person malkia    schedule 24.06.2012

Попробуйте это решение

[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');
person harish    schedule 07.05.2016