【问题标题】:How to modify an audio signal on the fly?如何即时修改音频信号?
【发布时间】:2021-08-06 19:06:54
【问题描述】:

我目前正在编写一个应用程序,其目标是生成音频正弦波,使频率随时间增加或减少。 然而,用户应该能够使用向上和向下键来抵消这种漂移。 例如:如果频率随着时间的推移而减少,用户应该能够按向上键动态增加频率。

问题是我找不到任何有关如何处理此类事情的信息。我一直在使用soundsc(audio, fs) 函数,它允许以给定的采样率播放声音,但我总是必须先创建正弦波,然后再将其输入到函数中,这样就没有动态变化的空间了.

是否可以在 Matlab 中执行此操作?如果是这样,什么功能可以让你做到这一点?如果没有这个功能,我该怎么做?

如果你想看一下,这是我当前的代码:

% soundTesting.m

fs = 16000;
s = generateWave(400, 1, fs, 5);
t = generateTarget(800, 1, fs, 5, 0.5);
audio = [s; t]';
% Playing audio in stereo with target audio on the right speaker and drifting sine wave on the left
% Note that for now the sine wave is not drifting at all.
soundsc(audio, fs);

%generateWave.m

function wave = generateWave(frequency, amplitude, fs, length)
    ts = 1 / fs;
    t = 0 : ts : length;
    wave = amplitude * sin(2 * pi * frequency * t);
end

%generateTarget.m

function target = generateTarget(frequency, amplitude, fs, length, span)
    wave = generateWave(frequency, amplitude, fs, length);
    target = zeros(size(wave));
    for i = 1 : length - 1
        % Every second, emit the target sound for span seconds.
        target(i * fs : i * fs + int32(span * fs)) = wave(i * fs : i * fs + int32(span * fs));
    end
end

非常感谢。

【问题讨论】:

  • 也许听一个按键,如果按下向上/向下键,创建一个新音频,停止当前音频并播放新音频?虽然不确定它听起来是否流畅,但值得一试
  • 是的,这确实是我将探索的解决方案,非常感谢。 :) 但也许有一种更简单/更内置的方式,所以如果有人知道它,我将非常感激!

标签: matlab audio dynamic signal-processing


【解决方案1】:

您需要使用某种缓冲音频输出,这样您就可以将一个样本块传递到缓冲区中,并且它们将由一个具有正确时间的单独任务提供给输出。

如果您的许可证包含音频工具箱,请查看 Mathworks 页面 here。如果没有,您可以从 MATLAB 文件交换中尝试 this

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 2013-07-14
    • 1970-01-01
    相关资源
    最近更新 更多