MATLABとのシンプルな音楽プログラムの書き方

一部の人々は言う:子供たちに加えて、MATLAB、他の意志を。
そして、音楽を作成するためにそれを使うのか?
答えはイエスである
我々はDO RE MI聞いたことがあるかを知るために必要なすべての最初に、それをどうやっているのですか?その違いは何ですか?
音楽「の波の」当然、異なる周波数のノートを発行することができ、異なる周波数をシミュレートするために、正弦波を重畳することができ、我々はただで結合された正弦関数のシリーズを生成するためにMATLABを使用して、組み込みのMATLAB **サウンド()**関数がすることができます。
トーンとテンポによって主に構成される音楽は、音楽機能は、2つの入力、即ち、トーン(トーン)を必要とビート(リズム)は
今の機能モジュールを与えられている:
、第2のサンプリング周波数でサンプリング周波数、一般的なデフォルト8192HzのFsは、
linspace (A、B、C)を均一BおよびC配列に生成する機能は、
異なるトーン周波数に対応freqsアレイは、唯一の共通単純性を示しています。
注意:遊びの周波数は、サンプリング周波数と一致する必要があります!
スケール周波数テーブル

function y = gen_wave( tone, rythm )
%UNTITLED2 音乐函数 对应music2
%   音调 拍
    Fs = 8192;
    freqs = [523, 587, 659, 698, 783, 880, 988];
    x = linspace(0, 2 * pi * rythm, floor(Fs * rythm));
    y = sin(freqs(tone) * x);
end


以下の主な機能を実行するための新しいコードは音が発せられるようにしてください。

Fs = 8192; 
y=[];
y = gen_wave(1,1);
sound(y,Fs);

実行が**プロット()**関数サウンドイメージを描くことができるで完了され、以下に示すように
行う
拡大した後、非常に緻密分かるある:
増幅した後、
第一に、それは見ることができ、増幅後、値が連続していない場合、音声が一定となっています、我々はそれが崩壊するためにバックで関数yを掛けたので、音の減少一貫していないと押されたとき、私たちは実際に、ピアノの音は、経時的に追跡、ちょうど最大であるべきで、コードは次のとおりです。

function y = gen_wave( tone, rythm )

%   音调 拍
    Fs = 8192;
    freqs = [523, 587, 659, 698, 783, 880, 988];
    x = linspace(0, 2 * pi * rythm, floor(Fs * rythm));
   y = sin(freqs(tone) * x) .*(1- x/(rythm * 2 *pi));
    
end

再実行DOトーン、および得られた画像を描画:
DO減衰
拡大された断片は、
ここに画像を挿入説明
振動が減衰することが分かるが、当然のことながら、指数関数的減衰関数を乗算され、これは、よりリアルなサウンドが得られます。
そして、我々はそのような「などの音楽の完全な音楽、見つけることができますリトルスター
リトルスター表記
我々は表記に従ったこの曲に代わって音楽の配列を生成することができますが、以下のように、コードは次のとおりです。

Fs = 8192;
y=[];
music = [1,1,5,5,6,6,5,...
         4,4,3,3,2,2,1,...
         5,5,4,4,3,3,2,...
         5,5,4,4,3,3,2,...
         1,1,5,5,6,6,5,...
         4,4,3,3,2,2,1];
music_length = length(music(:));

y1 = gen_wave(1,1);
y2 = gen_wave(2,1);
y3 = gen_wave(3,1);
y4 = gen_wave(4,1);
y5 = gen_wave(5,1);
y6 = gen_wave(6,1);
y7 = gen_wave(7,1);

for i = 1:1:music_length
    if music(i) == 1
        y=[y,y1];
        
    elseif music(i) == 2
        y=[y,y2];
        
    elseif music(i) == 3
        y=[y,y3];
        
    elseif music(i) == 4
        y=[y,y4];
        
    elseif music(i) == 5
        y=[y,y5];
        
    elseif music(i) == 6
        y=[y,y6];
        
    elseif music(i) == 7
        y=[y,y7];    
    end
end

sound(y, Fs);

配列をトラバースすることにより音楽、サブルーチン、私たちはそのスケールの配列を生成して、音ができます()プレイします。

あなたはそれのポイントのように、便利と感じた場合は、O(∩_∩)O笑〜

リリース元の2件の記事 ウォンの賞賛5 ビュー618

おすすめ

転載: blog.csdn.net/qq_40608730/article/details/104845590