2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MATLABで音楽作成 ドレミファソラシド

Last updated at Posted at 2024-10-10

MATLAB Shorts Mini Hackというコンテストに参加しています.
その一作品として,簡単な音楽を作成してみました.mp4

この記事では,ドレミファソラシドが流れる音の作り方を紹介します.

プログラムと解説

プログラムは,以下の通りです.言語はMATLABです.

createAudio.m
function createAudio()
    Fs = 44100;              % サンプリング周波数 (44.1 kHz)
    duration = 0.49;         % 各音の持続時間 (秒)
    t = 0 : 1/Fs : duration; % 時間ベクトル
    
    frequencies = [ 
        261.626     % C4 ド
        293.665     % D4 レ
        329.628     % E4 ミ
        349.228     % F4 ファ
        391.995     % G4 ソ
        440.000     % A4 ラ
        493.883     % B4 シ
        523.251     % C4 ド
    ];
    
    d = Fs * 0.01; % フェードおよび休止の持続時間 (秒)
    fade = linspace(1, 0, d);

    sounds = [];
    for fr = frequencies'
        sound = 0.5 * sin(2 * pi * fr * t);              % 音量0.5
        sound(1:d) = sound(1:d) .* flip(fade);           % フェードイン
        sound(end-d+1:end) = sound(end-d+1:end) .* fade; % フェードアウト
        sounds = [sounds, sound, zeros(1, d)];           % 音の結合
    end
    audiowrite('audio.wav', repmat(sounds, 1, 3), Fs);
end

サンプリング周波数は,一般的な設定である44.1kHzです.
各音を0.49秒流し,休止時間を0.01秒挟んだ後に次の音が鳴る設定です.
ドレミファソラシドを3週する,$0.5\times8\times3=12$秒の音を生成しています.

必要な音は,周波数で記述する必要があります.そして,sin波で音を表現します.
音の始まり/終わりの0.01秒は,徐々に音が大きくなる/小さくなるようにします.
音を徐々に変化させるフェードが無いと,「ブツ」というノイズ音が出てしまいます.

以下の音声を聞き比べると,フェードの必要性が良くわかります.

最後に,audiowrite関数を利用し,オーディオファイルを出力します.

終わりに

30行程度で簡単に音を作成できるのは,少し意外でした.
コンテスト期間中に,もう少し複雑な音にも挑戦してみたいと思います.

今回,記事中で簡単に音を再生できるようにするため,YouTubeを利用しました.
Qiitaに動画ファイル,音声ファイルを埋め込みできたら良いなと思いました.

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?