diff --git a/core/room.py b/core/room.py index 5251e2d..8311ef8 100644 --- a/core/room.py +++ b/core/room.py @@ -6,7 +6,7 @@ from .soundnode import * TAU = 2 * math.pi 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: @@ -25,6 +25,8 @@ class Room: self.left_sink = SoundNode('LEFT', self) self.right_sink = SoundNode('RIGHT', self) + self.sine_multiplier = TAU / self.sample_rate + def set_bit_depth(self, bit_depth): self.bit_depth = bit_depth @@ -53,7 +55,6 @@ class Room: wav.setnchannels(2) wav.setsampwidth(int(self.bit_depth / 8.0)) - wav.setsampwidth(3) wav.setframerate(self.sample_rate) frames = [] @@ -63,8 +64,8 @@ class Room: for t in range(start_t, end_t): - if t%1000 == 0: - print(t) + #№if t%1000 == 0: + # print(t) f = self.lowest_freq left_total_amp = 0 diff --git a/core/soundnode.py b/core/soundnode.py index 6461887..5056e69 100644 --- a/core/soundnode.py +++ b/core/soundnode.py @@ -34,12 +34,12 @@ class SoundNode: 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): dist = self.distance_to_node(node, t) 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) \ No newline at end of file diff --git a/test.py b/test.py index e218749..8c98213 100644 --- a/test.py +++ b/test.py @@ -1,9 +1,10 @@ from core.room import Room from core.soundnode import SoundNode +import math R = Room() 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): @@ -15,8 +16,8 @@ class SineNode(SoundNode): def frequency_max_rel_amp(self, f, t): - if f == self.freq: - return self.volume + if (f > self.freq-20) and (f < self.freq+20): + return self.volume*0.05*math.sin(f) return 0 @@ -25,4 +26,4 @@ sn = SineNode(440, R) R.link_wire(sn, R.left_sink) R.link_wire(sn, R.right_sink) -R.record('test5.wav', 0, 2) \ No newline at end of file +R.record('test5.wav', 0, 6) \ No newline at end of file