2010-12-28 3 views
1

질문은 제목에 명시된 바와 같습니다.원본과 동일한 속도로 샘플 오디오 파일을 재생하는 방법은 무엇입니까?

n 번째 포인트마다 차례로 나오는 오디오 신호를 데시 메이트 한 후에 n 배율로 오디오 클립의 속도를 높입니다. 데시 메이트 된 원본 클립의 시간 길이가 같아야합니다. 나머지 포인트를 두 번 각 새로운 죽였다 클립 이후 원래 다음 배 짧은 :

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 피아노를 죽였다.

두 클립을 나란히 비교할 수 있기를 바랍니다. 당신이 audioplayer을 wavplay 사용하고, 또는 뭔가 다른이 격감 신호를 재생 http://www.4shared.com/audio/11xvNmkd/piano.html

답변

1

: 여기

오디오 파일입니까? 명시 적으로 샘플 주파수를 지정하고 있습니까?

이 함수는 샘플 빈도를 매개 변수 중 하나로 사용합니다 (두 번째 매개 변수). 데시 메이트 할 때 샘플 빈도를 줄이면 그에 따라 해당 매개 변수를 업데이트해야합니다. 또한

에는 데이터를 플로팅 상태이면해야 :

  • 는 대응 x 축 입력을 제공하는 (N으로 데시 경우) 원본 데이터에

    1. 플롯 N 배만큼의 포인트 - I 추천 여기서 maxT는 플롯하려는 최대 시간이고, 업데이트 된 F를 사용하면 # 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') 
    

    파일에서 샘플의 절반을 제거 했으므로 원본과 동일한 기간 동안 다시 재생하려면 재생 빈도를 초당 샘플 수의 절반으로 설정해야합니다.

    관련 문제