2010-12-28 7 views
1

質問はタイトルに記載されています。サンプリングされたオーディオファイルをオリジナルと同じ速度で再生するにはどうすればよいですか?

n番目のポイントを取るオーディオ信号をデシメートした後、それをn倍にスピードアップします。デシメートされた元のクリップの時間長さを同じにしたい。残りの点のダブル各新しい間引きクリップ以来のオリジナルその後、2倍短いです:

HERESに私のコードは、分析とは

[piano,fs]=wavread('piano.wav'); % loads piano 
play=piano(:,1); % Renames the file as "play" 

t = linspace(0,time,length(play));   % Time vector 
x = play; 
y = decimate(x,2); 

stem(x(1:30)), axis([0 30 -2 2]) % Original signal 
title('Original Signal') 
figure 
stem(y(1:30))      % Decimated signal 
title('Decimated Signal') 

%changes the sampling rate 

fs1 = fs/2; 
fs2 = fs/3; 
fs3 = fs/4; 
fs4 = fs*2; 
fs5 = fs*3; 
fs6 = fs*4; 

wavwrite(y,fs,'PianoDecimation'); 

可能な解決策は.WAVピアノを間引き。

2つのクリップを並べて比較できるようにしたいだけです。 http://www.4shared.com/audio/11xvNmkd/piano.html

答えて

1

あなたは間引き信号を再生するために関数wavplay、audioplayer、または何か他のものを使用しています:ここ

は、オーディオファイルのですか?明示的にサンプル周波数を指定していますか?

この関数は、サンプルの頻度をパラメータの1つ(2番目のパラメータ)として使用します。デシメートするとサンプルの周波数が下がるので、それに応じてパラメータを更新する必要があります。あなたがデータをプロットしているとき

はまた、あなたがすべき:

  1. プロットN倍に元のデータに多くのポイント(Nで間引く)
  2. は、対応するx軸入力を提供 - 私はお勧めしますここで、maxTはプロットしたい最大時間であり、更新されたFsを使用すれば#1になり、時間ステップが大きくなります(tを転置することを確かめます)。t =(1/Fs:1/Fs:maxT)あなたのシグナルと一致しない場合)

私はchirを演奏する例を追加しましたpとデシメーションされたチャープ(このチャープは標準のMATLABインストールの一部です)。私は間違ったバージョンを増幅した。経過時間が(等プロセッサ負荷の変動内で)同等であることTICとTOCショー - など、これもdecim = 3のために働くことに注意:

 
load chirp 

inWav = y; 
inFs = Fs; 

decim = 2; 

outWav = decimate(inWav,decim); 
outFs = inFs/decim; 

tic, wavplay(inWav,inFs),toc 
pause(0.2) 
tic,wavplay(outWav*decim^2,outFs),toc 

機能本当に台無し「デシメート」チャープ音(サンプルレートはそれほど高い頻度ではありません)が、このようなものを表示しようとしています。

+0

.wavファイルは私のmatlabフォルダに保存されています。これは再生中のファイルです。 wavwrite(y、fs、 'PianoDecimation'); 。私はちょうど私のオリジナルと同じ長さにしたいです。 – Andrew

+0

私がしなければならないのは、wavwrite(y、fs/2、 'PianoDecimation')です。 ? – Andrew

+0

私はあなたの質問を誤解しているかもしれません。あなたの質問は、 "どのようにデシメーションの後にwavファイルを書くのですか?" helpfileに示されているように、コマンドのwavwrite(y、Fs、filename)形式を使用したいとします。上記の私の例では、MATLABの組み込みwavplayを使ってサウンドファイルを再生しています。 – sage

2

@ sageの回答には良い情報がたくさんありますが、質問には、最後の行を次のように変更するだけで簡単です:

wavplay(y,fs/2,'PianoDecimation') 

ファイル内のサンプルの半分を削除しました。元の時間と同じ時間に再生するには、再生頻度を1秒あたりのサンプル数の半分に設定する必要があります。

関連する問題