Skip to content

Commit 64ba915

Browse files
authored
Fix some silly issues =) (#50)
# Objective - Fix #49 - Fix #17 - Fix #46 - Fix #47
1 parent 2c4cb3a commit 64ba915

File tree

6 files changed

+73
-23
lines changed

6 files changed

+73
-23
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Bevy Oddio
22

3-
[![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-main-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking) ![Crates.io](https://img.shields.io/crates/d/bevy_oddio) ![Crates.io](https://img.shields.io/crates/l/bevy_oddio) ![Crates.io](https://img.shields.io/crates/v/bevy_oddio) ![docs.rs](https://img.shields.io/docsrs/bevy_oddio) [![CI](https://github.com/harudagondi/bevy_oddio/actions/workflows/rust.yml/badge.svg)](https://github.com/harudagondi/bevy_oddio/actions/workflows/rust.yml)
3+
[![Bevy tracking](https://img.shields.io/badge/Bevy%20tracking-main-lightblue)](https://github.com/bevyengine/bevy/blob/main/docs/plugins_guidelines.md#main-branch-tracking) [![Crates.io](https://img.shields.io/crates/d/bevy_oddio)](https://crates.io/crates/bevy_oddio) ![Crates.io](https://img.shields.io/crates/l/bevy_oddio) ![Crates.io](https://img.shields.io/crates/v/bevy_oddio) [![docs.rs](https://img.shields.io/docsrs/bevy_oddio)](https://docs.rs/bevy_oddio/latest/bevy_oddio/) [![CI](https://github.com/harudagondi/bevy_oddio/actions/workflows/rust.yml/badge.svg)](https://github.com/harudagondi/bevy_oddio/actions/workflows/rust.yml)
44

55
A third party Bevy plugin that integrates [`oddio`] into [Bevy].
66

examples/gain.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,10 @@ fn change_volume(
5555
mut sinks: ResMut<Assets<AudioSink<SineWithGain>>>,
5656
time: Res<Time>,
5757
) {
58-
let sink = match sinks.get_mut(&sink_handle.0) {
59-
Some(sink) => sink,
60-
None => return,
61-
};
58+
let Some(sink) = sinks.get_mut(&sink_handle.0) else { return };
6259

6360
let factor = (time.elapsed_seconds_wrapped().sin() + 1.0) / 2.0;
6461

6562
sink.control::<oddio::Gain<_>, _>()
66-
.set_amplitude_ratio(factor as f32);
63+
.set_amplitude_ratio(factor);
6764
}

examples/spatial_2d.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,13 +81,10 @@ fn change_velocity(
8181
) {
8282
let mut emitter = query.single_mut();
8383

84-
let normalized_time = time.elapsed_seconds_wrapped().sin() as f32 * 5.0;
84+
let normalized_time = time.elapsed_seconds_wrapped().sin() * 5.0;
8585
let delta = time.delta_seconds();
8686

87-
let sink = match sinks.get_mut(&sink.0) {
88-
Some(sink) => sink,
89-
None => return,
90-
};
87+
let Some(sink) = sinks.get_mut(&sink.0) else { return };
9188

9289
let prev_pos = emitter.translation;
9390
let position = Vec3::new(normalized_time, prev_pos.y, prev_pos.z);

examples/spatial_3d.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,14 +105,11 @@ fn change_velocity(
105105
) {
106106
let mut emitter = query.single_mut();
107107

108-
let x = time.elapsed_seconds_wrapped().sin() as f32 * 3.0;
109-
let z = time.elapsed_seconds_wrapped().cos() as f32 * 3.0;
108+
let x = time.elapsed_seconds_wrapped().sin() * 3.0;
109+
let z = time.elapsed_seconds_wrapped().cos() * 3.0;
110110
let delta = time.delta_seconds();
111111

112-
let sink = match sinks.get_mut(&sink.0) {
113-
Some(sink) => sink,
114-
None => return,
115-
};
112+
let Some(sink) = sinks.get_mut(&sink.0) else { return };
116113

117114
let prev_pos = emitter.translation;
118115
let position = Vec3::new(x, prev_pos.y, z);

examples/stop.rs

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
use bevy::{
2+
prelude::{
3+
App, Assets, Commands, Deref, Handle, Input, KeyCode, Res, ResMut, Resource, StartupStage,
4+
},
5+
DefaultPlugins,
6+
};
7+
use bevy_oddio::{
8+
builtins::sine::{self, Sine},
9+
output::AudioSink,
10+
Audio, AudioPlugin,
11+
};
12+
use oddio::Sample;
13+
14+
fn main() {
15+
App::new()
16+
.add_plugins(DefaultPlugins)
17+
.add_plugin(AudioPlugin)
18+
.add_startup_system(init_assets)
19+
.add_startup_system_to_stage(StartupStage::PostStartup, play_sine)
20+
.add_system(get_input)
21+
.run();
22+
}
23+
24+
#[derive(Resource, Deref)]
25+
struct SineHandle(Handle<Sine>);
26+
#[derive(Resource)]
27+
struct SineSink(Handle<AudioSink<Sine>>);
28+
29+
fn init_assets(mut commands: Commands, mut assets: ResMut<Assets<Sine>>) {
30+
let handle = assets.add(Sine);
31+
commands.insert_resource(SineHandle(handle));
32+
}
33+
34+
fn play_sine(
35+
mut commands: Commands,
36+
mut audio: ResMut<Audio<Sample, Sine>>,
37+
sine: Res<SineHandle>,
38+
) {
39+
// Note is in A4.
40+
let handle = audio.play(sine.clone(), sine::Settings::new(0.0, 440.0));
41+
commands.insert_resource(SineSink(handle));
42+
}
43+
44+
fn get_input(
45+
keys: Res<Input<KeyCode>>,
46+
sink: Res<SineSink>,
47+
mut sinks: ResMut<Assets<AudioSink<Sine>>>,
48+
) {
49+
let Some(sink) = sinks.get_mut(&sink.0) else { return };
50+
51+
let control = sink.control::<oddio::Stop<_>, _>();
52+
53+
if keys.just_pressed(KeyCode::Space) {
54+
if control.is_paused() {
55+
control.resume();
56+
} else {
57+
control.pause();
58+
}
59+
}
60+
}

src/lib.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,9 @@
55

66
//! A plugin that integrates [`oddio`] with [`bevy`].
77
//!
8-
//! Note that audio must have two channels or it will not work.
9-
//! Thus, non-wav files are more likely to break.
8+
//! There is an issue with loading audio files.
109
//!
11-
//! See [`#1`](https://github.com/harudagondi/bevy_oddio/issues/1).
10+
//! See [`#4`](https://github.com/harudagondi/bevy_oddio/issues/4).
1211
1312
use std::{collections::VecDeque, marker::PhantomData, sync::Arc};
1413

@@ -18,7 +17,7 @@ use bevy::{
1817
reflect::TypeUuid,
1918
};
2019
use frames::{FromFrame, Mono, Stereo};
21-
use oddio::{Frame, Frames, FramesSignal, Sample, Seek, Signal, SpatialOptions};
20+
use oddio::{Frame, Frames, FramesSignal, Gain, Sample, Seek, Signal, SpatialOptions, Speed};
2221

2322
pub use oddio;
2423
use output::{
@@ -139,10 +138,10 @@ pub trait ToSignal {
139138

140139
impl<F: Frame + Send + Sync + Copy> ToSignal for AudioSource<F> {
141140
type Settings = f64;
142-
type Signal = FramesSignal<F>;
141+
type Signal = Gain<Speed<FramesSignal<F>>>;
143142

144143
fn to_signal(&self, settings: Self::Settings) -> Self::Signal {
145-
FramesSignal::new(self.frames.clone(), settings)
144+
Gain::new(Speed::new(FramesSignal::new(self.frames.clone(), settings)))
146145
}
147146
}
148147

0 commit comments

Comments
 (0)