Pull out the audio mixing code from desktop and add it to core.
This will allow other backends to use it (such as the web audio
backend) to get consistent audio across all platforms.
It was initialized on a separate thread since 6178dd9ef1,
as a workaround for Windows.
But now thanks to https://github.com/RustAudio/cpal/pull/597, this
is no longer needed, and cpal can be initialized on the same thread
as before.
When reading an SWF, search for FileAttributes and
SetBackgroundColor and return this along with the header data
because it's useful (in particular, the AS3 flag).
Toss out any shared objects that contain ".." in the name
to avoid accessing files outside of the Ruffle data directory.
The DiskStorageBackend also will fail any requests with a ".."
component as an extra precaution.
Fixes#3961.
Also, prefix the shared object name with # if it contains a
slash, (e.g. `#mygame/foo`). This matches Flash's directory
structure and makes it easier to transfer saved data to Ruffle.
This adds two optional parameters, --width and --height, which
allow the user to specify a desired physical window width and
height to be used. If only one of the two parameters is present,
the other will be deduced from it and the movie's aspect ratio.
If neither are present, the window's size is set to the movie's
logical size, in accordance with the behaviour before this change.
* #[derive(Collect)] should be before #[collect]
* Replace redunant `&buf[..]` with `buf`
* Changes most cases of UPPERCase to UpperCase
* Allow upper_case_acronym on most SWF types, as they are from
SWF spec/more annoying to change.
It might not succeed.
This unwrap crashes the newgrounds Meat Boy flash on desktop.
Instead, use unwrap_or_default with an empty path. This will cause
the read to fail, but it's better than crashing the whole program.
The points in an SWF sound envelope are always in 44.1KHz. The
desktop audio backend would end up using this points in the sound's
sample rate, often causing the envelope to be delayed.
Now the envelope is applied after resampling, and the positions
are scaled based on the output sample rate.
This unifies the code path for event sounds and stream sounds.
Both `AudioBackend::start_stream` and `start_sound` return a
`SoundHandle`. `stop_stream` is removed (`stop_sound` can be
used for both cases).
Also removes references to `CharacterId` from the `AudioBackend`
(instead, an increasing ID is returned to identiy streams while
loading).
Add an AudioManager struct to handle this list of actively playing
sounds. This will maintain information for each sound instance,
such as the owning display object, AVM1 object, etc.
This will allow us to implement the awkward AVM1 Sound API in a
fairly backend-agnostic way.
Basically just copied from what alacritty is doing:
530de00049/alacritty/src/main.rs
There are two functional changes:
- When launching normally, you no longer see a console window quickly flashing
- When launching via. console, the program is detached (but still logs to the console)