Использование sound
вы не имеете реальный шанс сделать это, но с помощью audioplayer
класса вы можете сделать это:
function syncPlayerDemo()
%some example music
load handel;
%set up audio player
player = audioplayer(y, Fs);
[samples,channels]=size(y);
%calculate timeline
t=linspace(0,1/Fs*(samples-1),samples);
%initialize full plot, update will only move the visible area using xlim
h=plot(t,y);
%set up callback to update every <TimerPeriod> s
[email protected];
player.TimerPeriod=0.1;
player.playblocking()
end
function timerFcn(source,data)
%an area of length <area> s will be visible
area=1;
position=(source.CurrentSample-1)/source.SampleRate;
%move visible area, current position is in the center
set(gca,'XLim',[position-area/2,position+area/2]);
%used a waitbar for testing, might be commented in
%waitbar(source.CurrentSample/source.TotalSamples);
end
Качество этого графика может быть дополнительно увеличено с использованием графика, который автоматически перемещается в сторону, используя timerFcn
только для повторной синхронизации.
Ваша попытка не нарисовать ничего. Это просто чтение в файле, воспроизведение его и очистка памяти, необходимой для чтения в звуке. Правильно ли я понимаю вас, что вы хотите, чтобы амплитуда wav-файла была построена по мере воспроизведения звука? Это будет очень сложно, особенно потому, что вы не можете синхронизировать, где сейчас воспроизводится звук, где вы должны обновлять и рисовать фигуру. Это не может быть сделано ИМХО. – rayryeng
@rayryeng, есть ли способ реализовать это с небольшой задержкой, поэтому, хотя он не полностью синхронизирован, что ближайший способ я могу достичь этого? – Techno04335