Commit graph

724 commits

Author SHA1 Message Date
dvdsk
f3a1966348
symphonia throws error if duration is unknown and seek is beyond source length 2023-10-13 15:45:40 +02:00
dvdsk
5de73833a9
finishes doc for sink::try_seek 2023-10-13 15:45:40 +02:00
dvdsk
2b39d27aaf
adds total_duration() impl to SymphoniaDecoder, makes seek saturating at source end if total_duration known 2023-10-13 15:45:40 +02:00
dvdsk
8416210628
adds test verifying correct seek position after seek 2023-10-13 15:45:40 +02:00
dvdsk
10262f8134
removes can_seek in favor of rolling back seek operations (requires PR #510) 2023-10-13 15:45:40 +02:00
dvdsk
5d44bfe636
fixes symphonia seek beyond end of file returning an error 2023-10-13 15:45:40 +02:00
dvdsk
ebebe88339
turns SeekNotSupported into a SeekError 2023-10-13 15:45:40 +02:00
dvdsk
eb22ec5dac
refactor tests, add seek beyond stream test 2023-10-13 15:45:40 +02:00
dvdsk
9a4dcb0c41
add can_seek method to source
document why Sink::can_seek does not exist
2023-10-13 15:45:27 +02:00
dvdsk
d8a8be4a2f
add seek for lewton 2023-10-13 15:45:27 +02:00
dvdsk
a3c55b8337
fixes symphonia seek div by zero 2023-10-13 15:45:27 +02:00
dvdsk
e1092f712d
refactors seek test, now covers all decoders/formats 2023-10-13 15:45:27 +02:00
David Kleingeld
961c3efbb0
Fix seeking for mix source
add todo about can_seek to mix

Co-authored-by: naglis <827324+naglis@users.noreply.github.com>
2023-10-13 15:45:07 +02:00
dvdsk
5b933d7af1
refactors seektest and adds more formats 2023-10-13 15:45:07 +02:00
dvdsk
1f3f36a4c8
removes default try_seek impl, impl try_seek for decoders + refactors decoderimpl a bit 2023-10-13 15:45:06 +02:00
dvdsk
202687b934
adds try_seek for sink and all sources 2023-10-13 15:44:43 +02:00
dvdsk
745db82876
removes SeekableSource adds failable try_seek to Source 2023-10-13 15:44:43 +02:00
dvdsk
d47842fe57
remove seek trait from source mods, added it to symphonia decoder, renamed the trait to SeekableSource 2023-10-13 15:44:43 +02:00
dskleingeld
204a3f89c9
switch to fork for cpal 2023-10-13 15:44:43 +02:00
dskleingeld
023e833b01
request pos now uses mutable self 2023-10-13 15:44:43 +02:00
dskleingeld
fafe4ba1af
seek implemented through SourceExt trait 2023-10-13 15:44:43 +02:00
BOB450
eda5934a20
Replace minimp3 with minimp3_fixed witch fixes a vital security flaw (#504)
See https://rustsec.org/packages/slice-deque.html and #456
2023-07-26 00:21:03 +02:00
hinto-janai
9674ea56cf
queue: add crossbeam-channel feature flag (#500) 2023-05-25 10:25:00 +02:00
Jamie Hardt
17e2d4773b Missed one rustfmt 2023-05-23 12:35:00 -07:00
Jamie Hardt
aae35abcac Did rustfmt 2023-05-23 12:26:57 -07:00
Jamie Hardt
fe912a829e Added linear gain filter 2023-05-23 12:15:12 -07:00
Benjins-automation
8f949a81c8
Upgrade plain-HTTP links to HTTPS in Cargo.toml files (#498)
Co-authored-by: Benji Smith <6193112+Benjins@users.noreply.github.com>
2023-05-21 08:02:32 +02:00
Starua
023ee21e21
Fix Sink skip apis (#494)
* Call `Sink::clear`/`Sink::skip_one` on an empty `Sink` will permanently skip any `Source` append to it
* Call `Sink::clear` on an non-empty `Sink` can't reset it's length().
2023-04-28 12:53:31 +02:00
Ando “Thor” Nando
65d4dd3bdc
fmt: ubuntu workflow fix (#495) 2023-04-28 12:41:36 +02:00
myyrakle
5e034a2908
fix: index out of bound (#487) 2023-04-02 05:23:56 +02:00
Zachary Churchill
3d1a5ac54c
add EmptyCallback source (#430)
Co-authored-by: est31 <est31@users.noreply.github.com>
2023-03-11 20:51:03 +01:00
Joe Clay
d5b9ae3467 Release 0.17.1 2023-02-25 20:45:30 +01:00
Joe Clay
4e123a6366 Disable Symphonia default features 2023-02-25 20:45:30 +01:00
ivakam
e9a85ec254
Implement clear() and skip_one() functionality (continuation of #287) (#442)
* Clear and Skip functionality added

Added a clear() and skip_one() method to the Sink impl

* Use one lock for clear

Return the length in the queue clear function so that we don't have to get a lock twice.

* Rework skip to mark all sources as skippable


---------

Co-authored-by: Nathan Abel <abel8706@kettering.edu>
Co-authored-by: Ivar Kamsvåg <ivaka037@student.liu.se>
Co-authored-by: est31 <est31@users.noreply.github.com>
2023-02-19 13:46:18 +01:00
est31
56360d789c
Release 0.17.0 (#480) 2023-02-17 22:42:40 +01:00
est31
7b65d2fdd9
Edition 2021 (#479) 2023-02-17 22:14:05 +01:00
Jayden Dumouchel
44b92d43e9
Fix Sink playback after stop (#464)
Addressing issues #462 and #315 and #171

Given how the sink's queue is drained on stop I made some modifications in sink.append(). I added a check to ensure the sink was flushed completely (not sure this is necessary? I think it is, to avoid race conditions) and to restart the sink on append (when stopped.)

I added a test demonstrating correctness, as well as performing some trials on my own.
2023-02-17 21:12:32 +01:00
François
0c0e086b6a
update cpal to 0.15 (#478) 2023-02-17 13:05:23 +01:00
Johannes Hackel
317ec569fe
Support ADPCM formats in WAV files (#469) 2023-01-25 10:32:46 +01:00
Noah Bennett
18911085a7
Add dynamic mixer example (#467)
This example plays a C Major 6th chord by adding four sources, sine waves frequencies of C, E, G, and A, to a `DynamicMixerController`, and appends its respective `DynamicMixer` to a sink.
2023-01-11 18:32:39 +01:00
dis-da-moe
268dddae64
Force queue to play sources on frame boundaries (#455)
As I understand it, this is the issue:
  
     * Previously, when a queue has `keep_alive_if_empty` set to true, and it becomes empty, then it will push a silence lasting 10ms onto the queue.
 
     * This is an issue because `current_frame_len` would have returned the worst case, `512`, and the silence lasts less than that.
 
     * This means that unless the source is added immediately to the queue, and so a silence is never played, then the first actual source could start playing at a frame that is not aligned to its channels, or play at the wrong sample rate.
 
     * This is only determined by when the source is added to the queue after its initialization. This explains why the issue was inconsistent, as it relied on the speed of execution of code which is basically random.

Solution
 
     * Change the functionality of `Zero` to add a method to create a silence with a certain number of frames.
 
     * Replace the 10ms silence with a silence the length of `THRESHOLD`
 
     * Change queue's `current_frame_len` to return `THRESHOLD` if a silence will be played next.
2022-11-23 01:36:57 +01:00
Vitaliy
8efccbbf39
Enable gapless playback (#454) 2022-11-19 14:00:18 +01:00
Sergey "Shnatsel" Davidoff
92142b1a0c
Default to pure-Rust Symphonia for MP3 decoding (#453)
* Default to symphonia-mp3 over minimp3

* Update documentation to state that MP3 is decoded by Symphonia
2022-11-12 05:08:36 +01:00
Ando “Thor” Nando
70c80462e6
Create an OutputStream from a Device and SupportedStreamConfig (#445)
* Create an OutputStream from a Device and SupportedStreamConfig

* Refactor `try_from_device` and add more doc comments
2022-10-06 02:43:17 +02:00
David
e7faaf7506
Release version 0.16.0 (#441)
* Bump version to 0.15.1

* Update CHANGELOG.md

* Update Cargo.toml

* Update CHANGELOG.md
2022-09-14 14:43:27 +02:00
harudagondi
61367c92df
Update cpal to 0.14 (#435) 2022-08-27 15:17:01 +02:00
Anatol Ulrich
55d957f8b4
always seek to start in mp3::is_mp3() (#424) 2022-04-03 11:14:19 +02:00
Alejandro Perea
69a7f416a7
Move sound to assets/; Exclude it from package (#421)
* Move sound to `assets/`; Exclude it from package

* Exclude tests from package
2022-03-26 20:15:18 +01:00
Dimitris Apostolou
0356d810c9
Fix typos (#417) 2022-02-19 17:30:56 +01:00
Gavyn Riebau
b56de697c1 Remove debug_assert which was triggering unnecessary panic
When playing an mp3 on Windows in debug mode, sometimes
self.next_frame() is not empty in SampleRateConverter, leading to a
panic

See issue: #229
2022-02-18 01:19:35 +01:00