working sine
This commit is contained in:
parent
b20299ff78
commit
1b96f75fec
3 changed files with 12 additions and 10 deletions
|
|
@ -6,7 +6,7 @@ from .soundnode import *
|
||||||
TAU = 2 * math.pi
|
TAU = 2 * math.pi
|
||||||
|
|
||||||
def stb(i: int) -> bytes:
|
def stb(i: int) -> bytes:
|
||||||
return i.to_bytes(3, byteorder='big', signed=True)
|
return i.to_bytes(3, byteorder='little', signed=True)
|
||||||
|
|
||||||
class Room:
|
class Room:
|
||||||
|
|
||||||
|
|
@ -25,6 +25,8 @@ class Room:
|
||||||
self.left_sink = SoundNode('LEFT', self)
|
self.left_sink = SoundNode('LEFT', self)
|
||||||
self.right_sink = SoundNode('RIGHT', self)
|
self.right_sink = SoundNode('RIGHT', self)
|
||||||
|
|
||||||
|
self.sine_multiplier = TAU / self.sample_rate
|
||||||
|
|
||||||
def set_bit_depth(self, bit_depth):
|
def set_bit_depth(self, bit_depth):
|
||||||
|
|
||||||
self.bit_depth = bit_depth
|
self.bit_depth = bit_depth
|
||||||
|
|
@ -53,7 +55,6 @@ class Room:
|
||||||
|
|
||||||
wav.setnchannels(2)
|
wav.setnchannels(2)
|
||||||
wav.setsampwidth(int(self.bit_depth / 8.0))
|
wav.setsampwidth(int(self.bit_depth / 8.0))
|
||||||
wav.setsampwidth(3)
|
|
||||||
wav.setframerate(self.sample_rate)
|
wav.setframerate(self.sample_rate)
|
||||||
|
|
||||||
frames = []
|
frames = []
|
||||||
|
|
@ -63,8 +64,8 @@ class Room:
|
||||||
|
|
||||||
for t in range(start_t, end_t):
|
for t in range(start_t, end_t):
|
||||||
|
|
||||||
if t%1000 == 0:
|
#№if t%1000 == 0:
|
||||||
print(t)
|
# print(t)
|
||||||
f = self.lowest_freq
|
f = self.lowest_freq
|
||||||
|
|
||||||
left_total_amp = 0
|
left_total_amp = 0
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ class SoundNode:
|
||||||
|
|
||||||
def amp_at_tick(self, f, t):
|
def amp_at_tick(self, f, t):
|
||||||
|
|
||||||
return self.room.max_amp * self.frequency_max_rel_amp(f, t) * math.sin(TAU * f * t/float(self.room.sample_rate))
|
return self.room.max_amp * self.frequency_max_rel_amp(f, t) * math.sin(self.room.sine_multiplier * f * t)
|
||||||
|
|
||||||
def amp_at_tick_by_air(self, f, t, node):
|
def amp_at_tick_by_air(self, f, t, node):
|
||||||
|
|
||||||
dist = self.distance_to_node(node, t)
|
dist = self.distance_to_node(node, t)
|
||||||
t = t - ((self.room.speed_of_sound*dist)/float(self.room.sample_rate))
|
t = t - ((self.room.speed_of_sound*dist)/float(self.room.sample_rate))
|
||||||
|
|
||||||
return self.room.max_amp * self.frequency_max_rel_amp(f, t) * math.sin(TAU * f * t/float(self.room.sample_rate))
|
return self.room.max_amp * self.frequency_max_rel_amp(f, t) * math.sin(self.room.sine_multiplier * f * t)
|
||||||
|
|
||||||
9
test.py
9
test.py
|
|
@ -1,9 +1,10 @@
|
||||||
from core.room import Room
|
from core.room import Room
|
||||||
from core.soundnode import SoundNode
|
from core.soundnode import SoundNode
|
||||||
|
import math
|
||||||
|
|
||||||
R = Room()
|
R = Room()
|
||||||
R.left_sink.start_location = (-1, 0, 0)
|
R.left_sink.start_location = (-1, 0, 0)
|
||||||
R.right_sink.start_location = (2, 0, 0)
|
R.right_sink.start_location = (1, 0, 0)
|
||||||
|
|
||||||
class SineNode(SoundNode):
|
class SineNode(SoundNode):
|
||||||
|
|
||||||
|
|
@ -15,8 +16,8 @@ class SineNode(SoundNode):
|
||||||
|
|
||||||
def frequency_max_rel_amp(self, f, t):
|
def frequency_max_rel_amp(self, f, t):
|
||||||
|
|
||||||
if f == self.freq:
|
if (f > self.freq-20) and (f < self.freq+20):
|
||||||
return self.volume
|
return self.volume*0.05*math.sin(f)
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
@ -25,4 +26,4 @@ sn = SineNode(440, R)
|
||||||
R.link_wire(sn, R.left_sink)
|
R.link_wire(sn, R.left_sink)
|
||||||
R.link_wire(sn, R.right_sink)
|
R.link_wire(sn, R.right_sink)
|
||||||
|
|
||||||
R.record('test5.wav', 0, 2)
|
R.record('test5.wav', 0, 6)
|
||||||
Loading…
Add table
Reference in a new issue