【问题标题】:In Matlab, how can I sync audio with a plot?在 Matlab 中,如何将音频与绘图同步?
【发布时间】:2012-10-10 17:34:10
【问题描述】:

我正在使用[y, Fs, nbits, opts] = wavread(filename) 读取波形文件。接下来我plot(t, y)t = 0:1/Fs:(length(y)-1)/Fs。我通过sound(y, Fs) 播放 wav。我的问题是,有没有办法在情节中显示某种标记,与来自 wav 的音频同步?我希望在通过在情节中移动的标记观察情节中相应声音的位置的同时收听音频。

【问题讨论】:

    标签: matlab audio callback playback audio-player


    【解决方案1】:

    以下是具有良好同步性的解决方案。这很有效,因为audioplayer 对象正在启动更新播放头位置的回调。这是调用脚本。 . .

    fs = 44100;
    durT = 3; %seconds
    durS = fs*durT; %samples
    x = randn(durS, 1);
    
    dt = 1/fs;
    tAxis = dt:dt:durT;
    
    frameRate = 25; %fps
    frameT = 1/frameRate;
    
    mag = 5;
    
    figure;
    plot(tAxis, x);
    ylim([-mag mag])
    xlim([0 durT])
    xlabel('Time [s]')
    
    playHeadLoc = 0;
    hold on; ax = plot([playHeadLoc playHeadLoc], [-mag mag], 'r', 'LineWidth', 2);
    
    player = audioplayer(x, fs);
    myStruct.playHeadLoc = playHeadLoc;
    myStruct.frameT = frameT;
    myStruct.ax = ax;
    
    set(player, 'UserData', myStruct);
    set(player, 'TimerFcn', @apCallback);
    set(player, 'TimerPeriod', frameT);
    play(player);
    

    ...这是您可以存储在单独文件中的回调函数...

    function src = apCallback(src, eventdata)
        myStruct = get(src, 'UserData'); %//Unwrap
    
        newPlayHeadLoc = ...
            myStruct.playHeadLoc + ...
            myStruct.frameT;
        set(myStruct.ax, 'Xdata', [newPlayHeadLoc newPlayHeadLoc])
    
        myStruct.playHeadLoc = newPlayHeadLoc;
        set(src, 'UserData', myStruct); %//Rewrap
    end
    

    我刚刚将信号设为噪声样本,您可以随意替换它。遗憾的是,audioplayer 对象具有 stopresume 方法,而无法访问当前播放头位置。幸运的是,有一个用户数据属性可以让您随意填写。

    【讨论】:

    • +1 感谢您的帮助。我应该可以稍后再试一试,然后报告我的结果。我认为这对于我正在尝试做的事情应该已经足够好了。您是否尝试过在它们自己的线程中运行这些函数中的每一个?实际上,如果没有额外的工具箱,我不确定线程​​是否可用。
    • 即使使用并行处理工具箱,您也无法像其他通用语言那样对线程进行精细控制。
    • srceventdata 自动传递。我做回调更新srcmathworks.co.uk/help/matlab/creating_plots/…
    • 只要 apCallback 在路径上,主脚本应该可以在命令行或任何文件中运行。很高兴你成功了。
    • 尝试播放阻止而不是播放,看看会发生什么
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    相关资源
    最近更新 更多