回答編集履歴
2
意図通りの音を出す方法
test
CHANGED
@@ -38,4 +38,14 @@
|
|
38
38
|
|
39
39
|
|
40
40
|
|
41
|
+
逆に、意図通りの周波数変化:`f(t)`となる音を出すには、
|
41
42
|
|
43
|
+
`f(t)`の積分`F(t)`を計算して、
|
44
|
+
|
45
|
+
`sin(2π*F(t))`とすれば良いことがわかります
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
1
瞬時周波数の求め方
test
CHANGED
@@ -1,3 +1,41 @@
|
|
1
1
|
bufを書き出してみました(図は最後の方だけ)
|
2
2
|
|
3
3
|
![イメージ説明](d1d8f2300c51cef1382fc2257efc6cf3.png)
|
4
|
+
|
5
|
+
|
6
|
+
|
7
|
+
これ見ればわかるように最後の方で周波数が0になります。
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
ということは、そもそも根本的に、
|
12
|
+
|
13
|
+
質問文にあるようなアルゴリズムで886から443Hzに変化する音は作れません。
|
14
|
+
|
15
|
+
|
16
|
+
|
17
|
+
というのも、音の瞬間的な周波数(瞬時周波数)は音の波形が
|
18
|
+
|
19
|
+
`sin(2π*φ(t))`で表せるとき、
|
20
|
+
|
21
|
+
`dφ/dt`で表せます。
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
単純に、`sin(2π*f(t)*t)`だから`f(t)`が今の周波数になるわけじゃないです。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
これに基づいて計算すると、
|
30
|
+
|
31
|
+
今回の波形の瞬時周波数は
|
32
|
+
|
33
|
+
`fs + 2*(fe-fs)*t/T`となり、(t=0~T)
|
34
|
+
|
35
|
+
t=Tのとき
|
36
|
+
|
37
|
+
2*fe-f0 = 2*443 - 883 =0となります。
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
|