【发布时间】: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