LoginSignup
1
1

More than 1 year has passed since last update.

コードで作ろう良いキック

Posted at

導入

私事ですが、最近作曲にハマっていて電子音楽とか作っています。いわゆるEDMみたいな、そういうやつですね。電子音楽をやっている人は大抵サンプルパックを漁ってるんですが、なぜかっていうと電子音楽はサンプルを使いまくって成り立ってるからです。スネアやキックはほとんどサンプルが使われていますね。ところで、サンプルパックを漁る以外にもシンセサイザーでこれらの音を作ることが出来て、例えばノイズの音量を急激に下げるとスネアの音みたいになったり、正弦波の音程を急激に下げるとキックの音みたいになります。正弦波の音程を下げるくらいならプログラミング出来そうですね!という訳でコードからキックを生成したいと思います。

キックとは

ドラムの一番大きいやつをイメージして頂けると良いかなと思います。下でドンドンいってるやつですね。

下の画像の様に、音程を急激に下げるとキックの音が人工的に合成できます。

スクリーンショット 2022-12-21 112931.png

技術選定

Pythonで音声を扱えることは知っていたのですが、動的型の言語は好きじゃないのでC#を検討しました。
調べてみると、どうやらC#はwavファイルのサポートが薄く、ヘッダーから実装する必要がありそうだったのでkotlinを選択しました。
kotlin(Java)はwavファイルの出力をサポートしているみたいなので安心ですね。

実装

下のサイトを参考に、とりあえず矩形波を出力してみます。
https://mocha-java.com/create-square-wave-1/
https://www.youfit.co.jp/archives/1418

出来ました。

スクリーンショット 2022-12-21 113915.png

バイナリエディタでみると以下のようになっています。かわいいですね。
FF7Fの連続が波形の上半分にあたり、0180の連続が下半分にあたります。wavファイルは符号付きintでデータを表しているので最大値はFFFFではないんですね。(一敗)

スクリーンショット 2022-12-21 114100.png

改造して正弦波を出力します。

スクリーンショット 2022-12-21 114603.png

周波数を段階的に落としていきます。
スクリーンショット 2022-12-21 114621.png

周波数の繋ぎ目が尖ってしまってるので、周波数を変える時に前の位相(Θ)からスタートします。

スクリーンショット 2022-12-21 114636.png

音量も変化させます。
スクリーンショット 2022-12-21 114727.png

やや繋ぎ目が尖っていますが、完成です。

完成!

繋ぎ目のノイズが気になりますが、気にしたら負けです。

コード

1
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
1
1