Answers inline:
On 3/29/19 7:54 PM, Akhilesh Venkatasubramanian wrote:
Hi Josh,
We went ahead to try to implement the function and are facing some issues
and your insight will be helpful.
1. We have implemented the function here:
https://github.com/JHBalaji/media/blob/master/audio/src/param.rs#L419-L434
<
https://github.com/JHBalaji/media/blob/master/audio/src/param.rs#L419-L434
.
A) Can you check if our implementation of interpolating between v[k]
and
v[k+1] is correct? If not, can you give us a heads up as to how to
proceed?
It took me a while to step through it and convince myself that it made
sense, but I think it's right. I'll probably ask one of our Web Audio
experts to double-check it. The naming of x1/x2 and y1/y2 did not help
me; I would suggest using names like v_k and v_k_next as well as time_k
and time_k_next to improve readability.
The above code does give out a few errors as below:
Compiling servo-media-audio v0.1.0
(/Users/akhilesh/Desktop/media/audio)
error[E0277]: cannot subtract `block::Tick` from `f32`
--> audio/src/param.rs:432:37
|
432 | *value = (y1 * (x2 - current_tick) + y2 *
(current_tick - x1)) / (x2 - x1) as f32;
| ^ no implementation for `f32 -
block::Tick`
|
= help: the trait `std::ops::Sub<block::Tick>` is not implemented
for
`f32`
error[E0277]: cannot subtract `f32` from `block::Tick`
--> audio/src/param.rs:432:74
|
432 | *value = (y1 * (x2 - current_tick) + y2 *
(current_tick - x1)) / (x2 - x1) as f32;
|
^ no implementation for `block::Tick - f32`
|
= help: the trait `std::ops::Sub<f32>` is not implemented for
`block::Tick`
error: aborting due to 2 previous errors
I was not able to subtract current_tick from the value instance I
generated
to keep track of the expected time for v[k] and v[k+1]. Can you give me
some pointers as to how I can fix the same?
You can find the documentation for block::Tick at
https://doc.servo.org/servo_media_audio/block/struct.Tick.html . If you
click the "Show Declaration", you will see that it wraps a u64 value,
which you can retrieve with `current_tick.0` and can then cast to f32.
B) Should we declare the values vector and duration also somewhere else
in
the program or are the changes made by me enough to handle the function?
2. There was one more modification I had to make to make the code compile
till the previous point. In L259
<https://github.com/JHBalaji/media/blob/master/audio/src/param.rs#L259>
and
L271, if I also had the Copy trait called then it shows the error posted
below, which I believe is because of the values vector in the
SetValueCurveAtTime function. Can I just remove the copy trait or is
there
any other modification that I have to make?
error[E0204]: the trait `Copy` may not be implemented for this type
--> audio/src/param.rs:259:17
|
259 | #[derive(Clone, Copy, PartialEq, Debug)]
| ^^^^
...
266 | SetValueCurveAtTime(Vec<f32>, Tick, /* duration */ f64),
| -------- this field does not implement
`Copy`
error[E0204]: the trait `Copy` may not be implemented for this type
--> audio/src/param.rs:271:17
|
271 | #[derive(Clone, Copy, PartialEq, Debug)]
| ^^^^
...
278 | SetValueCurveAtTime(Vec<f32>, f64, /* duration */ f64),
| -------- this field does not implement
`Copy`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0204`.
error: Could not compile `servo-media-audio`.
This was apparently a problem for the group which worked with the
Oscillator node last semester and they weren't able to implement the
custom
method
<
https://github.com/servo/media/blob/master/audio/src/oscillator_node.rs#L150
because they weren't able to solve this issue and when I spoke to one
person he said that removing the copy trait started showing up more
errors
later. Can you give us your take on this?
Removing the Copy trait is fine. Any code that relies on it can have an
explicit `.clone()` added to it and it should compile.
Cheers,
Josh
_______________________________________________
dev-servo mailing list
dev-servo@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-servo