我希望能够将两个向量作为MATLAB中函数的输入,使得第一个具有我想要播放的所有频率,第二个具有每个音符的相应持续时间。到目前为止我所拥有的是:
%% Initialize
clear; format short e;
%% Possible Notes
octave = [55 110 220 440 880];
for k = 1:length(octave)
pause = 0;
A(k) = octave(k);
As(k) = octave(k).*2^(1/12);
B(k) = octave(k).*2^(2/12);
C(k) = octave(k).*2^(3/12);
Cs(k) = octave(k).*2^(4/12);
D(k) = octave(k).*2^(5/12);
Ds(k) = octave(k).*2^(6/12);
E(k) = octave(k).*2^(7/12);
F(k) = octave(k).*2^(8/12);
Fs(k) = octave(k).*2^(9/12);
G(k) = octave(k).*2^(10/12);
Gs(k) = octave(k).*2^(11/12);
end
%% Notes and Durations
Notes = [D(2) D(3) D(2) D(2) C(3) D(2) D(2) A(3) A(2) ...
A(2) G(2) A(2) A(2) F(3) Fs(3) D(2)];
Times = [1/4 1/4 1/5 1/5 1/4 1/5 1/5 1/4 1/5 ...
1/5 1/4 1/5 1/5 1/4 1/8 1/4];
%% Play the Song
playSong(Notes, Times);
我在'playSong'功能中有以下内容:
function [song] = playSong(freqs, times)
fs = 44600;
makeNote = @(freq, time) cos(2*pi*[1:time]/fs * freq);
song = []
%% For Loop
for k = 1:length(freqs)
% make the song somehow
end
sound(song, fs)
end
我一直在研究如何创建我要播放的声音矢量,但似乎无法弄清楚如何去做。有谁知道我怎么会这样做?
答案 0 :(得分:4)
(a)您可以使用sound
或soundsc
将信号数据的矢量\矩阵转换为声音。
(b)如果您想使用声卡生成音频和,您有一个32位版本的MATLAB和数据采集工具箱,请参阅here示例如何使用它。
(c)您可以使用audiorecorder
将音频录制到音频对象,然后使用'audioplayer'
在所有这些选项中,您有几个关于如何实现和播放笔记的示例。