From 19a4b820c470d3124afe00471d4fe091d92a00dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?kleines=20Filmr=C3=B6llchen?= Date: Fri, 6 May 2022 22:14:16 +0200 Subject: [PATCH] LibAudio+LibDSP: Switch samples to 32-bit float instead of 64-bit float This has been overkill from the start, and it has been bugging me for a long time. With this change, we're probably a bit slower on most platforms but save huge amounts of space with all in-memory sample datastructures. --- .../Applications/Piano/AudioPlayerLoop.cpp | 2 +- .../AlbumCoverVisualizationWidget.h | 2 +- .../SoundPlayer/BarsVisualizationWidget.cpp | 30 +- .../SoundPlayer/BarsVisualizationWidget.h | 8 +- .../Applications/SoundPlayer/SampleWidget.cpp | 2 +- .../Applications/SoundPlayer/SampleWidget.h | 2 +- .../SoundPlayer/VisualizationWidget.h | 12 +- Userland/Libraries/LibAudio/FlacLoader.cpp | 4 +- Userland/Libraries/LibAudio/MP3Loader.cpp | 90 ++-- Userland/Libraries/LibAudio/MP3Loader.h | 10 +- Userland/Libraries/LibAudio/MP3Tables.h | 418 +++++++++--------- Userland/Libraries/LibAudio/MP3Types.h | 6 +- Userland/Libraries/LibAudio/Sample.h | 44 +- Userland/Libraries/LibDSP/FFT.h | 12 +- Userland/Libraries/LibDSP/MDCT.h | 6 +- Userland/Libraries/LibDSP/Window.h | 10 +- 16 files changed, 329 insertions(+), 329 deletions(-) diff --git a/Userland/Applications/Piano/AudioPlayerLoop.cpp b/Userland/Applications/Piano/AudioPlayerLoop.cpp index 06abd53b0d..801179177f 100644 --- a/Userland/Applications/Piano/AudioPlayerLoop.cpp +++ b/Userland/Applications/Piano/AudioPlayerLoop.cpp @@ -19,7 +19,7 @@ static FixedArray music_samples_to_buffer(Vector& { FixedArray samples = MUST(FixedArray::try_create(music_samples.size())); for (size_t i = 0; i < music_samples.size(); ++i) - samples[i] = { static_cast(music_samples[i].left) / AK::NumericLimits::max(), static_cast(music_samples[i].right) / AK::NumericLimits::max() }; + samples[i] = { static_cast(music_samples[i].left) / AK::NumericLimits::max(), static_cast(music_samples[i].right) / AK::NumericLimits::max() }; return samples; } diff --git a/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.h b/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.h index 904dd35976..48aeb357ba 100644 --- a/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.h +++ b/Userland/Applications/SoundPlayer/AlbumCoverVisualizationWidget.h @@ -18,7 +18,7 @@ public: void start_new_file(StringView) override; private: - void render(GUI::PaintEvent&, FixedArray const&) override { } + void render(GUI::PaintEvent&, FixedArray const&) override { } void paint_event(GUI::PaintEvent&) override; AlbumCoverVisualizationWidget() = default; ErrorOr> get_album_cover(StringView const filename); diff --git a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp index c8ffa9608e..cf9af8f782 100644 --- a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp +++ b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.cpp @@ -15,7 +15,7 @@ #include #include -void BarsVisualizationWidget::render(GUI::PaintEvent& event, FixedArray const& samples) +void BarsVisualizationWidget::render(GUI::PaintEvent& event, FixedArray const& samples) { GUI::Frame::paint_event(event); GUI::Painter painter(*this); @@ -30,44 +30,44 @@ void BarsVisualizationWidget::render(GUI::PaintEvent& event, FixedArray for (size_t i = 0; i < fft_size / 2; i++) m_fft_samples[i + fft_size / 2] = samples[i] * m_fft_window[i + fft_size / 2]; - AK::TypedTransfer::copy(m_previous_samples.data(), samples.data(), samples.size()); + AK::TypedTransfer::copy(m_previous_samples.data(), samples.data(), samples.size()); LibDSP::fft(m_fft_samples.span(), false); - Array groups {}; + Array groups {}; if (m_logarithmic_spectrum) { - auto const log_bar_size = static_cast(bar_count) / AK::log2(fft_size); + auto const log_bar_size = static_cast(bar_count) / AK::log2(fft_size); for (size_t i = 0; i < bar_count; ++i) { - auto const bar_start = i == 0 ? 0 : static_cast(floor(AK::pow(2., static_cast(i) / log_bar_size))); - auto const bar_end = clamp(static_cast(floor(AK::pow(2., static_cast(i + 1) / log_bar_size))), bar_start + 1, cutoff); + auto const bar_start = i == 0 ? 0 : static_cast(floor(AK::pow(2.f, static_cast(i) / log_bar_size))); + auto const bar_end = clamp(static_cast(floor(AK::pow(2.f, static_cast(i + 1) / log_bar_size))), bar_start + 1, cutoff); auto const values_in_bar = bar_end - bar_start; for (size_t sample_index = bar_start; sample_index < bar_start + values_in_bar; sample_index++) { - double const magnitude = m_fft_samples[sample_index].magnitude(); + float const magnitude = m_fft_samples[sample_index].magnitude(); groups[i] += magnitude; } - groups[i] /= static_cast(values_in_bar); + groups[i] /= static_cast(values_in_bar); } } else { static constexpr size_t values_per_bar = (fft_size / 2) / bar_count; for (size_t i = 0; i < fft_size / 2; i += values_per_bar) { - double const magnitude = m_fft_samples[i].magnitude(); + float const magnitude = m_fft_samples[i].magnitude(); groups[i / values_per_bar] = magnitude; for (size_t j = 0; j < values_per_bar; j++) { - double const magnitude = m_fft_samples[i + j].magnitude(); + float const magnitude = m_fft_samples[i + j].magnitude(); groups[i / values_per_bar] += magnitude; } groups[i / values_per_bar] /= values_per_bar; } } - double const max_peak_value = AK::sqrt(static_cast(fft_size * 2)); + float const max_peak_value = AK::sqrt(static_cast(fft_size * 2)); for (size_t i = 0; i < bar_count; i++) { groups[i] = AK::log(groups[i] + 1) / AK::log(max_peak_value); if (m_adjust_frequencies) - groups[i] *= 1 + 2.0 * (static_cast(i) - static_cast(bar_count / 3)) / static_cast(bar_count); + groups[i] *= 1 + 2.0f * (static_cast(i) - bar_count / 3.0f) / static_cast(bar_count); } int const horizontal_margin = 30; @@ -77,8 +77,8 @@ void BarsVisualizationWidget::render(GUI::PaintEvent& event, FixedArray int const max_height = frame_inner_rect().height() - top_vertical_margin; int current_xpos = horizontal_margin; for (size_t g = 0; g < bar_count; g++) { - m_gfx_falling_bars[g] = AK::min(clamp(max_height - (int)(groups[g] * max_height * 0.8), 0, max_height), m_gfx_falling_bars[g]); - painter.fill_rect(Gfx::Rect(current_xpos, max_height - (int)(groups[g] * max_height * 0.8), pixel_per_group_width, (int)(groups[g] * max_height * 0.8)), Gfx::Color::from_rgb(0x95d437)); + m_gfx_falling_bars[g] = AK::min(clamp(max_height - static_cast(groups[g] * static_cast(max_height) * 0.8f), 0, max_height), m_gfx_falling_bars[g]); + painter.fill_rect(Gfx::Rect(current_xpos, max_height - static_cast(groups[g] * static_cast(max_height) * 0.8f), pixel_per_group_width, static_cast(groups[g] * max_height * 0.8f)), Gfx::Color::from_rgb(0x95d437)); painter.fill_rect(Gfx::Rect(current_xpos, m_gfx_falling_bars[g], pixel_per_group_width, 2), Gfx::Color::White); current_xpos += pixel_per_group_width + pixels_inbetween_groups; m_gfx_falling_bars[g] += 3; @@ -102,7 +102,7 @@ BarsVisualizationWidget::BarsVisualizationWidget() logarithmic_spectrum_action->set_checked(true); m_context_menu->add_action(logarithmic_spectrum_action); - m_fft_window = LibDSP::Window::hann(); + m_fft_window = LibDSP::Window::hann(); // As we use full-overlapping windows, the passed-in data is only half the size of one FFT operation. MUST(set_render_sample_count(fft_size / 2)); diff --git a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.h b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.h index 1857fd1d3c..363a51e4d6 100644 --- a/Userland/Applications/SoundPlayer/BarsVisualizationWidget.h +++ b/Userland/Applications/SoundPlayer/BarsVisualizationWidget.h @@ -22,7 +22,7 @@ public: private: BarsVisualizationWidget(); - void render(GUI::PaintEvent&, FixedArray const&) override; + void render(GUI::PaintEvent&, FixedArray const&) override; void context_menu_event(GUI::ContextMenuEvent& event) override; static constexpr size_t fft_size = 512; @@ -30,9 +30,9 @@ private: // Things become weird near the Nyquist limit. Just don't use that FFT data. static constexpr size_t cutoff = fft_size - 32; - Array, fft_size> m_fft_samples {}; - Array m_fft_window {}; - Array m_previous_samples {}; + Array, fft_size> m_fft_samples {}; + Array m_fft_window {}; + Array m_previous_samples {}; Array m_gfx_falling_bars {}; bool m_is_using_last; bool m_adjust_frequencies; diff --git a/Userland/Applications/SoundPlayer/SampleWidget.cpp b/Userland/Applications/SoundPlayer/SampleWidget.cpp index 9517c45771..2db1e88130 100644 --- a/Userland/Applications/SoundPlayer/SampleWidget.cpp +++ b/Userland/Applications/SoundPlayer/SampleWidget.cpp @@ -14,7 +14,7 @@ SampleWidget::SampleWidget() MUST(set_render_sample_count(512)); } -void SampleWidget::render(GUI::PaintEvent& event, FixedArray const& samples) +void SampleWidget::render(GUI::PaintEvent& event, FixedArray const& samples) { GUI::Frame::paint_event(event); GUI::Painter painter(*this); diff --git a/Userland/Applications/SoundPlayer/SampleWidget.h b/Userland/Applications/SoundPlayer/SampleWidget.h index 019880b966..1fe4675983 100644 --- a/Userland/Applications/SoundPlayer/SampleWidget.h +++ b/Userland/Applications/SoundPlayer/SampleWidget.h @@ -17,5 +17,5 @@ public: private: SampleWidget(); - virtual void render(GUI::PaintEvent&, FixedArray const& samples) override; + virtual void render(GUI::PaintEvent&, FixedArray const& samples) override; }; diff --git a/Userland/Applications/SoundPlayer/VisualizationWidget.h b/Userland/Applications/SoundPlayer/VisualizationWidget.h index 9261c76ae5..82f7306744 100644 --- a/Userland/Applications/SoundPlayer/VisualizationWidget.h +++ b/Userland/Applications/SoundPlayer/VisualizationWidget.h @@ -17,7 +17,7 @@ class VisualizationWidget : public GUI::Frame { C_OBJECT_ABSTRACT(VisualizationWidget) public: - virtual void render(GUI::PaintEvent&, FixedArray const& samples) = 0; + virtual void render(GUI::PaintEvent&, FixedArray const& samples) = 0; void set_buffer(FixedArray const& buffer) { @@ -28,7 +28,7 @@ public: m_sample_buffer.resize(buffer.size()); for (size_t i = 0; i < buffer.size(); i++) - m_sample_buffer.data()[i] = (buffer[i].left + buffer[i].right) / 2.; + m_sample_buffer.data()[i] = (buffer[i].left + buffer[i].right) / 2.f; m_frame_count = 0; } @@ -55,7 +55,7 @@ public: if (buffer_position + m_render_buffer.size() >= m_sample_buffer.size()) buffer_position = m_sample_buffer.size() - m_render_buffer.size(); - AK::TypedTransfer::copy(m_render_buffer.data(), m_sample_buffer.span().slice(buffer_position).data(), m_render_buffer.size()); + AK::TypedTransfer::copy(m_render_buffer.data(), m_sample_buffer.span().slice(buffer_position).data(), m_render_buffer.size()); render(event, m_render_buffer); } @@ -70,7 +70,7 @@ public: ErrorOr set_render_sample_count(size_t count) { - auto new_buffer = TRY(FixedArray::try_create(count)); + auto new_buffer = TRY(FixedArray::try_create(count)); m_render_buffer.swap(new_buffer); return {}; } @@ -79,8 +79,8 @@ public: protected: int m_samplerate; size_t m_frame_count; - Vector m_sample_buffer; - FixedArray m_render_buffer; + Vector m_sample_buffer; + FixedArray m_render_buffer; static constexpr size_t REFRESH_TIME_MILLISECONDS = 30; diff --git a/Userland/Libraries/LibAudio/FlacLoader.cpp b/Userland/Libraries/LibAudio/FlacLoader.cpp index f479ccec5a..6b08455b4c 100644 --- a/Userland/Libraries/LibAudio/FlacLoader.cpp +++ b/Userland/Libraries/LibAudio/FlacLoader.cpp @@ -134,7 +134,7 @@ MaybeLoaderError FlacLoaderPlugin::parse_header() ++total_meta_blocks; } - dbgln_if(AFLACLOADER_DEBUG, "Parsed FLAC header: blocksize {}-{}{}, framesize {}-{}, {}Hz, {}bit, {} channels, {} samples total ({:.2f}s), MD5 {}, data start at {:x} bytes, {} headers total (skipped {})", m_min_block_size, m_max_block_size, is_fixed_blocksize_stream() ? " (constant)" : "", m_min_frame_size, m_max_frame_size, m_sample_rate, pcm_bits_per_sample(m_sample_format), m_num_channels, m_total_samples, static_cast(m_total_samples) / static_cast(m_sample_rate), md5_checksum, m_data_start_location, total_meta_blocks, total_meta_blocks - meta_blocks_parsed); + dbgln_if(AFLACLOADER_DEBUG, "Parsed FLAC header: blocksize {}-{}{}, framesize {}-{}, {}Hz, {}bit, {} channels, {} samples total ({:.2f}s), MD5 {}, data start at {:x} bytes, {} headers total (skipped {})", m_min_block_size, m_max_block_size, is_fixed_blocksize_stream() ? " (constant)" : "", m_min_frame_size, m_max_frame_size, m_sample_rate, pcm_bits_per_sample(m_sample_format), m_num_channels, m_total_samples, static_cast(m_total_samples) / static_cast(m_sample_rate), md5_checksum, m_data_start_location, total_meta_blocks, total_meta_blocks - meta_blocks_parsed); return {}; } @@ -402,7 +402,7 @@ MaybeLoaderError FlacLoaderPlugin::next_frame(Span target_vector) VERIFY(left.size() == right.size() && left.size() == m_current_frame->sample_count); - double sample_rescale = static_cast(1 << (pcm_bits_per_sample(m_current_frame->bit_depth) - 1)); + float sample_rescale = static_cast(1 << (pcm_bits_per_sample(m_current_frame->bit_depth) - 1)); dbgln_if(AFLACLOADER_DEBUG, "Sample rescaled from {} bits: factor {:.1f}", pcm_bits_per_sample(m_current_frame->bit_depth), sample_rescale); // zip together channels diff --git a/Userland/Libraries/LibAudio/MP3Loader.cpp b/Userland/Libraries/LibAudio/MP3Loader.cpp index b8fc92c949..b41b447141 100644 --- a/Userland/Libraries/LibAudio/MP3Loader.cpp +++ b/Userland/Libraries/LibAudio/MP3Loader.cpp @@ -316,7 +316,7 @@ ErrorOr MP3LoaderPlugin::read_frame_data(MP3::Header block_type = MP3::BlockType::Normal; } - Array output; + Array output; transform_samples_to_time(granule.samples, i, output, block_type); int const subband_index = i / 18; @@ -333,7 +333,7 @@ ErrorOr MP3LoaderPlugin::read_frame_data(MP3::Header } } - Array in_samples; + Array in_samples; for (size_t channel_index = 0; channel_index < frame.header.channel_count(); channel_index++) { for (size_t granule_index = 0; granule_index < 2; granule_index++) { auto& granule = frame.channels[channel_index].granules[granule_index]; @@ -399,11 +399,11 @@ MaybeLoaderError MP3LoaderPlugin::read_side_information(MP3::MP3Frame& frame) } // From ISO/IEC 11172-3 (2.4.3.4.7.1) -Array MP3LoaderPlugin::calculate_frame_exponents(MP3::MP3Frame const& frame, size_t granule_index, size_t channel_index) +Array MP3LoaderPlugin::calculate_frame_exponents(MP3::MP3Frame const& frame, size_t granule_index, size_t channel_index) { - Array exponents; + Array exponents; - auto fill_band = [&exponents](double exponent, size_t start, size_t end) { + auto fill_band = [&exponents](float exponent, size_t start, size_t end) { for (size_t j = start; j <= end; j++) { exponents[j] = exponent; } @@ -413,13 +413,13 @@ Array MP3LoaderPlugin::calculate_frame_exponents(MP3::MP3Frame cons auto const& granule = frame.channels[channel_index].granules[granule_index]; auto const scale_factor_bands = get_scalefactor_bands(granule, frame.header.samplerate); - double const scale_factor_multiplier = granule.scalefac_scale ? 1 : 0.5; + float const scale_factor_multiplier = granule.scalefac_scale ? 1 : 0.5; int const gain = granule.global_gain - 210; if (granule.block_type != MP3::BlockType::Short) { for (size_t band_index = 0; band_index < 22; band_index++) { - double const exponent = gain / 4.0 - (scale_factor_multiplier * (channel.scale_factors[band_index] + granule.preflag * MP3::Tables::Pretab[band_index])); - fill_band(AK::pow(2.0, exponent), scale_factor_bands[band_index].start, scale_factor_bands[band_index].end); + float const exponent = gain / 4.0f - (scale_factor_multiplier * (channel.scale_factors[band_index] + granule.preflag * MP3::Tables::Pretab[band_index])); + fill_band(AK::pow(2.0, exponent), scale_factor_bands[band_index].start, scale_factor_bands[band_index].end); } } else { size_t band_index = 0; @@ -427,27 +427,27 @@ Array MP3LoaderPlugin::calculate_frame_exponents(MP3::MP3Frame cons if (granule.mixed_block_flag) { while (sample_count < 36) { - double const exponent = gain / 4.0 - (scale_factor_multiplier * (channel.scale_factors[band_index] + granule.preflag * MP3::Tables::Pretab[band_index])); - fill_band(AK::pow(2.0, exponent), scale_factor_bands[band_index].start, scale_factor_bands[band_index].end); + float const exponent = gain / 4.0f - (scale_factor_multiplier * (channel.scale_factors[band_index] + granule.preflag * MP3::Tables::Pretab[band_index])); + fill_band(AK::pow(2.0, exponent), scale_factor_bands[band_index].start, scale_factor_bands[band_index].end); sample_count += scale_factor_bands[band_index].width; band_index++; } } - double const gain0 = (gain - 8 * granule.sub_block_gain[0]) / 4.0; - double const gain1 = (gain - 8 * granule.sub_block_gain[1]) / 4.0; - double const gain2 = (gain - 8 * granule.sub_block_gain[2]) / 4.0; + float const gain0 = (gain - 8 * granule.sub_block_gain[0]) / 4.0; + float const gain1 = (gain - 8 * granule.sub_block_gain[1]) / 4.0; + float const gain2 = (gain - 8 * granule.sub_block_gain[2]) / 4.0; while (sample_count < 576 && band_index < scale_factor_bands.size()) { - double const exponent0 = gain0 - (scale_factor_multiplier * channel.scale_factors[band_index + 0]); - double const exponent1 = gain1 - (scale_factor_multiplier * channel.scale_factors[band_index + 1]); - double const exponent2 = gain2 - (scale_factor_multiplier * channel.scale_factors[band_index + 2]); + float const exponent0 = gain0 - (scale_factor_multiplier * channel.scale_factors[band_index + 0]); + float const exponent1 = gain1 - (scale_factor_multiplier * channel.scale_factors[band_index + 1]); + float const exponent2 = gain2 - (scale_factor_multiplier * channel.scale_factors[band_index + 2]); - fill_band(AK::pow(2.0, exponent0), scale_factor_bands[band_index + 0].start, scale_factor_bands[band_index + 0].end); + fill_band(AK::pow(2.0, exponent0), scale_factor_bands[band_index + 0].start, scale_factor_bands[band_index + 0].end); sample_count += scale_factor_bands[band_index + 0].width; - fill_band(AK::pow(2.0, exponent1), scale_factor_bands[band_index + 1].start, scale_factor_bands[band_index + 1].end); + fill_band(AK::pow(2.0, exponent1), scale_factor_bands[band_index + 1].start, scale_factor_bands[band_index + 1].end); sample_count += scale_factor_bands[band_index + 1].width; - fill_band(AK::pow(2.0, exponent2), scale_factor_bands[band_index + 2].start, scale_factor_bands[band_index + 2].end); + fill_band(AK::pow(2.0, exponent2), scale_factor_bands[band_index + 2].start, scale_factor_bands[band_index + 2].end); sample_count += scale_factor_bands[band_index + 2].width; band_index += 3; @@ -542,10 +542,10 @@ MaybeLoaderError MP3LoaderPlugin::read_huffman_data(MP3::MP3Frame& frame, InputB size_t const region1_start = is_short_granule ? 36 : scale_factor_bands[scale_factor_band_index1].start; size_t const region2_start = is_short_granule ? 576 : scale_factor_bands[scale_factor_band_index2].start; - auto requantize = [](int const sample, double const exponent) -> double { + auto requantize = [](int const sample, float const exponent) -> float { int const sign = sample < 0 ? -1 : 1; int const magnitude = AK::abs(sample); - return sign * AK::pow(static_cast(magnitude), 4 / 3.0) * exponent; + return sign * AK::pow(static_cast(magnitude), 4 / 3.0) * exponent; }; size_t count = 0; @@ -663,7 +663,7 @@ MaybeLoaderError MP3LoaderPlugin::read_huffman_data(MP3::MP3Frame& frame, InputB void MP3LoaderPlugin::reorder_samples(MP3::Granule& granule, u32 sample_rate) { - double tmp[576] = {}; + float tmp[576] = {}; size_t band_index = 0; size_t subband_index = 0; @@ -715,7 +715,7 @@ void MP3LoaderPlugin::process_stereo(MP3::MP3Frame& frame, size_t granule_index) auto& granule_left = frame.channels[0].granules[granule_index]; auto& granule_right = frame.channels[1].granules[granule_index]; - auto get_last_nonempty_band = [](Span samples, Span bands) -> size_t { + auto get_last_nonempty_band = [](Span samples, Span bands) -> size_t { size_t last_nonempty_band = 0; for (size_t i = 0; i < bands.size(); i++) { @@ -734,20 +734,20 @@ void MP3LoaderPlugin::process_stereo(MP3::MP3Frame& frame, size_t granule_index) }; auto process_ms_stereo = [&](MP3::Tables::ScaleFactorBand const& band) { - double const SQRT_2 = AK::sqrt(2.0); + float const SQRT_2 = AK::sqrt(2.0); for (size_t i = band.start; i <= band.end; i++) { - double const m = granule_left.samples[i]; - double const s = granule_right.samples[i]; + float const m = granule_left.samples[i]; + float const s = granule_right.samples[i]; granule_left.samples[i] = (m + s) / SQRT_2; granule_right.samples[i] = (m - s) / SQRT_2; } }; - auto process_intensity_stereo = [&](MP3::Tables::ScaleFactorBand const& band, double intensity_stereo_ratio) { + auto process_intensity_stereo = [&](MP3::Tables::ScaleFactorBand const& band, float intensity_stereo_ratio) { for (size_t i = band.start; i <= band.end; i++) { - double const sample_left = granule_left.samples[i]; - double const coeff_l = intensity_stereo_ratio / (1 + intensity_stereo_ratio); - double const coeff_r = 1 / (1 + intensity_stereo_ratio); + float const sample_left = granule_left.samples[i]; + float const coeff_l = intensity_stereo_ratio / (1 + intensity_stereo_ratio); + float const coeff_r = 1 / (1 + intensity_stereo_ratio); granule_left.samples[i] = sample_left * coeff_l; granule_right.samples[i] = sample_left * coeff_r; } @@ -777,39 +777,39 @@ void MP3LoaderPlugin::process_stereo(MP3::MP3Frame& frame, size_t granule_index) process_ms_stereo(scale_factor_bands[band_index]); continue; } - double const intensity_stereo_ratio = AK::tan(intensity_stereo_position * AK::Pi / 12); + float const intensity_stereo_ratio = AK::tan(intensity_stereo_position * AK::Pi / 12); process_intensity_stereo(scale_factor_bands[band_index], intensity_stereo_ratio); } } -void MP3LoaderPlugin::transform_samples_to_time(Array const& input, size_t input_offset, Array& output, MP3::BlockType block_type) +void MP3LoaderPlugin::transform_samples_to_time(Array const& input, size_t input_offset, Array& output, MP3::BlockType block_type) { if (block_type == MP3::BlockType::Short) { size_t const N = 12; - Array temp_out; - Array temp_in; + Array temp_out; + Array temp_in; for (size_t k = 0; k < N / 2; k++) temp_in[k] = input[input_offset + 3 * k + 0]; - s_mdct_12.transform(temp_in, Span(temp_out).slice(0, N)); + s_mdct_12.transform(temp_in, Span(temp_out).slice(0, N)); for (size_t i = 0; i < N; i++) temp_out[i + 0] *= MP3::Tables::WindowBlockTypeShort[i]; for (size_t k = 0; k < N / 2; k++) temp_in[k] = input[input_offset + 3 * k + 1]; - s_mdct_12.transform(temp_in, Span(temp_out).slice(12, N)); + s_mdct_12.transform(temp_in, Span(temp_out).slice(12, N)); for (size_t i = 0; i < N; i++) temp_out[i + 12] *= MP3::Tables::WindowBlockTypeShort[i]; for (size_t k = 0; k < N / 2; k++) temp_in[k] = input[input_offset + 3 * k + 2]; - s_mdct_12.transform(temp_in, Span(temp_out).slice(24, N)); + s_mdct_12.transform(temp_in, Span(temp_out).slice(24, N)); for (size_t i = 0; i < N; i++) temp_out[i + 24] *= MP3::Tables::WindowBlockTypeShort[i]; - Span idmct1 = Span(temp_out).slice(0, 12); - Span idmct2 = Span(temp_out).slice(12, 12); - Span idmct3 = Span(temp_out).slice(24, 12); + Span idmct1 = Span(temp_out).slice(0, 12); + Span idmct2 = Span(temp_out).slice(12, 12); + Span idmct3 = Span(temp_out).slice(24, 12); for (size_t i = 0; i < 6; i++) output[i] = 0; for (size_t i = 6; i < 12; i++) @@ -824,7 +824,7 @@ void MP3LoaderPlugin::transform_samples_to_time(Array const& input, output[i] = 0; } else { - s_mdct_36.transform(Span(input).slice(input_offset, 18), output); + s_mdct_36.transform(Span(input).slice(input_offset, 18), output); for (size_t i = 0; i < 36; i++) { switch (block_type) { case MP3::BlockType::Normal: @@ -845,7 +845,7 @@ void MP3LoaderPlugin::transform_samples_to_time(Array const& input, } // ISO/IEC 11172-3 (Figure A.2) -void MP3LoaderPlugin::synthesis(Array& V, Array& samples, Array& result) +void MP3LoaderPlugin::synthesis(Array& V, Array& samples, Array& result) { for (size_t i = 1023; i >= 64; i--) { V[i] = V[i - 64]; @@ -854,12 +854,12 @@ void MP3LoaderPlugin::synthesis(Array& V, Array& sampl for (size_t i = 0; i < 64; i++) { V[i] = 0; for (size_t k = 0; k < 32; k++) { - double const N = MP3::Tables::SynthesisSubbandFilterCoefficients[i][k]; + float const N = MP3::Tables::SynthesisSubbandFilterCoefficients[i][k]; V[i] += N * samples[k]; } } - Array U; + Array U; for (size_t i = 0; i < 8; i++) { for (size_t j = 0; j < 32; j++) { U[i * 64 + j] = V[i * 128 + j]; @@ -867,7 +867,7 @@ void MP3LoaderPlugin::synthesis(Array& V, Array& sampl } } - Array W; + Array W; for (size_t i = 0; i < 512; i++) { W[i] = U[i] * MP3::Tables::WindowSynthesis[i]; } diff --git a/Userland/Libraries/LibAudio/MP3Loader.h b/Userland/Libraries/LibAudio/MP3Loader.h index bc88a4e7dc..925dc9a9df 100644 --- a/Userland/Libraries/LibAudio/MP3Loader.h +++ b/Userland/Libraries/LibAudio/MP3Loader.h @@ -47,17 +47,17 @@ private: MaybeLoaderError read_side_information(MP3::MP3Frame&); ErrorOr read_scale_factors(MP3::MP3Frame&, InputBitStream& reservoir, size_t granule_index, size_t channel_index); MaybeLoaderError read_huffman_data(MP3::MP3Frame&, InputBitStream& reservoir, size_t granule_index, size_t channel_index, size_t granule_bits_read); - static AK::Array calculate_frame_exponents(MP3::MP3Frame const&, size_t granule_index, size_t channel_index); + static AK::Array calculate_frame_exponents(MP3::MP3Frame const&, size_t granule_index, size_t channel_index); static void reorder_samples(MP3::Granule&, u32 sample_rate); static void reduce_alias(MP3::Granule&, size_t max_subband_index = 576); static void process_stereo(MP3::MP3Frame&, size_t granule_index); - static void transform_samples_to_time(Array const& input, size_t input_offset, Array& output, MP3::BlockType block_type); - static void synthesis(Array& V, Array& samples, Array& result); + static void transform_samples_to_time(Array const& input, size_t input_offset, Array& output, MP3::BlockType block_type); + static void synthesis(Array& V, Array& samples, Array& result); static Span get_scalefactor_bands(MP3::Granule const&, int samplerate); AK::Vector> m_seek_table; - AK::Array, 32>, 2> m_last_values {}; - AK::Array, 2> m_synthesis_buffer {}; + AK::Array, 32>, 2> m_last_values {}; + AK::Array, 2> m_synthesis_buffer {}; static LibDSP::MDCT<36> s_mdct_36; static LibDSP::MDCT<12> s_mdct_12; diff --git a/Userland/Libraries/LibAudio/MP3Tables.h b/Userland/Libraries/LibAudio/MP3Tables.h index 0e773f95f5..f138946636 100644 --- a/Userland/Libraries/LibAudio/MP3Tables.h +++ b/Userland/Libraries/LibAudio/MP3Tables.h @@ -33,7 +33,7 @@ Array ScalefacCompressSlen2 { { 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, Array Pretab { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 } }; // ISO/IEC 11172-3 (Table B.9) -Array AliasReductionCoefficients { +Array AliasReductionCoefficients { -0.6, -0.535, -0.33, @@ -45,27 +45,27 @@ Array AliasReductionCoefficients { }; // This is using the cs[i] formula taken from ISO/IEC 11172-3 (below Table B.9) -Array AliasReductionCs { { - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[0], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[1], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[2], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[3], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[4], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[5], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[6], 2.0)), - 1.0 / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[7], 2.0)), +Array AliasReductionCs { { + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[0], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[1], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[2], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[3], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[4], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[5], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[6], 2.0)), + 1.0f / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[7], 2.0)), } }; // This is using the ca[i] formula taken from ISO/IEC 11172-3 (below Table B.9) -Array AliasReductionCa { { - AliasReductionCoefficients[0] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[0], 2.0)), - AliasReductionCoefficients[1] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[1], 2.0)), - AliasReductionCoefficients[2] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[2], 2.0)), - AliasReductionCoefficients[3] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[3], 2.0)), - AliasReductionCoefficients[4] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[4], 2.0)), - AliasReductionCoefficients[5] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[5], 2.0)), - AliasReductionCoefficients[6] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[6], 2.0)), - AliasReductionCoefficients[7] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[7], 2.0)), +Array AliasReductionCa { { + AliasReductionCoefficients[0] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[0], 2.0)), + AliasReductionCoefficients[1] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[1], 2.0)), + AliasReductionCoefficients[2] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[2], 2.0)), + AliasReductionCoefficients[3] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[3], 2.0)), + AliasReductionCoefficients[4] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[4], 2.0)), + AliasReductionCoefficients[5] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[5], 2.0)), + AliasReductionCoefficients[6] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[6], 2.0)), + AliasReductionCoefficients[7] / AK::sqrt(1 + AK::pow(AliasReductionCoefficients[7], 2.0)), } }; struct ScaleFactorBand { @@ -146,77 +146,77 @@ constexpr auto ScaleFactorBandLong44100 = MakeLongScaleFactorBandArray { 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10, 12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, 0 }>(); // ISO/IEC 11172-3 (2.4.3.4.10.3 a) -Array WindowBlockTypeNormal { { - AK::sin(AK::Pi / 36 * (0 + 0.5)), - AK::sin(AK::Pi / 36 * (1 + 0.5)), - AK::sin(AK::Pi / 36 * (2 + 0.5)), - AK::sin(AK::Pi / 36 * (3 + 0.5)), - AK::sin(AK::Pi / 36 * (4 + 0.5)), - AK::sin(AK::Pi / 36 * (5 + 0.5)), - AK::sin(AK::Pi / 36 * (6 + 0.5)), - AK::sin(AK::Pi / 36 * (7 + 0.5)), - AK::sin(AK::Pi / 36 * (8 + 0.5)), - AK::sin(AK::Pi / 36 * (9 + 0.5)), - AK::sin(AK::Pi / 36 * (10 + 0.5)), - AK::sin(AK::Pi / 36 * (11 + 0.5)), - AK::sin(AK::Pi / 36 * (12 + 0.5)), - AK::sin(AK::Pi / 36 * (13 + 0.5)), - AK::sin(AK::Pi / 36 * (14 + 0.5)), - AK::sin(AK::Pi / 36 * (15 + 0.5)), - AK::sin(AK::Pi / 36 * (16 + 0.5)), - AK::sin(AK::Pi / 36 * (17 + 0.5)), - AK::sin(AK::Pi / 36 * (18 + 0.5)), - AK::sin(AK::Pi / 36 * (19 + 0.5)), - AK::sin(AK::Pi / 36 * (20 + 0.5)), - AK::sin(AK::Pi / 36 * (21 + 0.5)), - AK::sin(AK::Pi / 36 * (22 + 0.5)), - AK::sin(AK::Pi / 36 * (23 + 0.5)), - AK::sin(AK::Pi / 36 * (24 + 0.5)), - AK::sin(AK::Pi / 36 * (25 + 0.5)), - AK::sin(AK::Pi / 36 * (26 + 0.5)), - AK::sin(AK::Pi / 36 * (27 + 0.5)), - AK::sin(AK::Pi / 36 * (28 + 0.5)), - AK::sin(AK::Pi / 36 * (29 + 0.5)), - AK::sin(AK::Pi / 36 * (30 + 0.5)), - AK::sin(AK::Pi / 36 * (31 + 0.5)), - AK::sin(AK::Pi / 36 * (32 + 0.5)), - AK::sin(AK::Pi / 36 * (33 + 0.5)), - AK::sin(AK::Pi / 36 * (34 + 0.5)), - AK::sin(AK::Pi / 36 * (35 + 0.5)), +Array WindowBlockTypeNormal { { + AK::sin(AK::Pi / 36 * (0 + 0.5f)), + AK::sin(AK::Pi / 36 * (1 + 0.5f)), + AK::sin(AK::Pi / 36 * (2 + 0.5f)), + AK::sin(AK::Pi / 36 * (3 + 0.5f)), + AK::sin(AK::Pi / 36 * (4 + 0.5f)), + AK::sin(AK::Pi / 36 * (5 + 0.5f)), + AK::sin(AK::Pi / 36 * (6 + 0.5f)), + AK::sin(AK::Pi / 36 * (7 + 0.5f)), + AK::sin(AK::Pi / 36 * (8 + 0.5f)), + AK::sin(AK::Pi / 36 * (9 + 0.5f)), + AK::sin(AK::Pi / 36 * (10 + 0.5f)), + AK::sin(AK::Pi / 36 * (11 + 0.5f)), + AK::sin(AK::Pi / 36 * (12 + 0.5f)), + AK::sin(AK::Pi / 36 * (13 + 0.5f)), + AK::sin(AK::Pi / 36 * (14 + 0.5f)), + AK::sin(AK::Pi / 36 * (15 + 0.5f)), + AK::sin(AK::Pi / 36 * (16 + 0.5f)), + AK::sin(AK::Pi / 36 * (17 + 0.5f)), + AK::sin(AK::Pi / 36 * (18 + 0.5f)), + AK::sin(AK::Pi / 36 * (19 + 0.5f)), + AK::sin(AK::Pi / 36 * (20 + 0.5f)), + AK::sin(AK::Pi / 36 * (21 + 0.5f)), + AK::sin(AK::Pi / 36 * (22 + 0.5f)), + AK::sin(AK::Pi / 36 * (23 + 0.5f)), + AK::sin(AK::Pi / 36 * (24 + 0.5f)), + AK::sin(AK::Pi / 36 * (25 + 0.5f)), + AK::sin(AK::Pi / 36 * (26 + 0.5f)), + AK::sin(AK::Pi / 36 * (27 + 0.5f)), + AK::sin(AK::Pi / 36 * (28 + 0.5f)), + AK::sin(AK::Pi / 36 * (29 + 0.5f)), + AK::sin(AK::Pi / 36 * (30 + 0.5f)), + AK::sin(AK::Pi / 36 * (31 + 0.5f)), + AK::sin(AK::Pi / 36 * (32 + 0.5f)), + AK::sin(AK::Pi / 36 * (33 + 0.5f)), + AK::sin(AK::Pi / 36 * (34 + 0.5f)), + AK::sin(AK::Pi / 36 * (35 + 0.5f)), } }; // ISO/IEC 11172-3 (2.4.3.4.10.3 b) -AK::Array WindowBlockTypeStart { { - AK::sin(AK::Pi / 36 * (0 + 0.5)), - AK::sin(AK::Pi / 36 * (1 + 0.5)), - AK::sin(AK::Pi / 36 * (2 + 0.5)), - AK::sin(AK::Pi / 36 * (3 + 0.5)), - AK::sin(AK::Pi / 36 * (4 + 0.5)), - AK::sin(AK::Pi / 36 * (5 + 0.5)), - AK::sin(AK::Pi / 36 * (6 + 0.5)), - AK::sin(AK::Pi / 36 * (7 + 0.5)), - AK::sin(AK::Pi / 36 * (8 + 0.5)), - AK::sin(AK::Pi / 36 * (9 + 0.5)), - AK::sin(AK::Pi / 36 * (10 + 0.5)), - AK::sin(AK::Pi / 36 * (11 + 0.5)), - AK::sin(AK::Pi / 36 * (12 + 0.5)), - AK::sin(AK::Pi / 36 * (13 + 0.5)), - AK::sin(AK::Pi / 36 * (14 + 0.5)), - AK::sin(AK::Pi / 36 * (15 + 0.5)), - AK::sin(AK::Pi / 36 * (16 + 0.5)), - AK::sin(AK::Pi / 36 * (17 + 0.5)), +AK::Array WindowBlockTypeStart { { + AK::sin(AK::Pi / 36 * (0 + 0.5f)), + AK::sin(AK::Pi / 36 * (1 + 0.5f)), + AK::sin(AK::Pi / 36 * (2 + 0.5f)), + AK::sin(AK::Pi / 36 * (3 + 0.5f)), + AK::sin(AK::Pi / 36 * (4 + 0.5f)), + AK::sin(AK::Pi / 36 * (5 + 0.5f)), + AK::sin(AK::Pi / 36 * (6 + 0.5f)), + AK::sin(AK::Pi / 36 * (7 + 0.5f)), + AK::sin(AK::Pi / 36 * (8 + 0.5f)), + AK::sin(AK::Pi / 36 * (9 + 0.5f)), + AK::sin(AK::Pi / 36 * (10 + 0.5f)), + AK::sin(AK::Pi / 36 * (11 + 0.5f)), + AK::sin(AK::Pi / 36 * (12 + 0.5f)), + AK::sin(AK::Pi / 36 * (13 + 0.5f)), + AK::sin(AK::Pi / 36 * (14 + 0.5f)), + AK::sin(AK::Pi / 36 * (15 + 0.5f)), + AK::sin(AK::Pi / 36 * (16 + 0.5f)), + AK::sin(AK::Pi / 36 * (17 + 0.5f)), 1, 1, 1, 1, 1, 1, - AK::sin(AK::Pi / 12 * (24 - 18 + 0.5)), - AK::sin(AK::Pi / 12 * (25 - 18 + 0.5)), - AK::sin(AK::Pi / 12 * (26 - 18 + 0.5)), - AK::sin(AK::Pi / 12 * (27 - 18 + 0.5)), - AK::sin(AK::Pi / 12 * (28 - 18 + 0.5)), - AK::sin(AK::Pi / 12 * (29 - 18 + 0.5)), + AK::sin(AK::Pi / 12 * (24 - 18 + 0.5f)), + AK::sin(AK::Pi / 12 * (25 - 18 + 0.5f)), + AK::sin(AK::Pi / 12 * (26 - 18 + 0.5f)), + AK::sin(AK::Pi / 12 * (27 - 18 + 0.5f)), + AK::sin(AK::Pi / 12 * (28 - 18 + 0.5f)), + AK::sin(AK::Pi / 12 * (29 - 18 + 0.5f)), 0, 0, 0, @@ -226,89 +226,89 @@ AK::Array WindowBlockTypeStart { { } }; // ISO/IEC 11172-3 (2.4.3.4.10.3 d) -AK::Array WindowBlockTypeShort { { - AK::sin(AK::Pi / 12 * (0 + 0.5)), - AK::sin(AK::Pi / 12 * (1 + 0.5)), - AK::sin(AK::Pi / 12 * (2 + 0.5)), - AK::sin(AK::Pi / 12 * (3 + 0.5)), - AK::sin(AK::Pi / 12 * (4 + 0.5)), - AK::sin(AK::Pi / 12 * (5 + 0.5)), - AK::sin(AK::Pi / 12 * (6 + 0.5)), - AK::sin(AK::Pi / 12 * (7 + 0.5)), - AK::sin(AK::Pi / 12 * (8 + 0.5)), - AK::sin(AK::Pi / 12 * (9 + 0.5)), - AK::sin(AK::Pi / 12 * (10 + 0.5)), - AK::sin(AK::Pi / 12 * (11 + 0.5)), +AK::Array WindowBlockTypeShort { { + AK::sin(AK::Pi / 12 * (0 + 0.5f)), + AK::sin(AK::Pi / 12 * (1 + 0.5f)), + AK::sin(AK::Pi / 12 * (2 + 0.5f)), + AK::sin(AK::Pi / 12 * (3 + 0.5f)), + AK::sin(AK::Pi / 12 * (4 + 0.5f)), + AK::sin(AK::Pi / 12 * (5 + 0.5f)), + AK::sin(AK::Pi / 12 * (6 + 0.5f)), + AK::sin(AK::Pi / 12 * (7 + 0.5f)), + AK::sin(AK::Pi / 12 * (8 + 0.5f)), + AK::sin(AK::Pi / 12 * (9 + 0.5f)), + AK::sin(AK::Pi / 12 * (10 + 0.5f)), + AK::sin(AK::Pi / 12 * (11 + 0.5f)), - AK::sin(AK::Pi / 12 * (0 + 0.5)), - AK::sin(AK::Pi / 12 * (1 + 0.5)), - AK::sin(AK::Pi / 12 * (2 + 0.5)), - AK::sin(AK::Pi / 12 * (3 + 0.5)), - AK::sin(AK::Pi / 12 * (4 + 0.5)), - AK::sin(AK::Pi / 12 * (5 + 0.5)), - AK::sin(AK::Pi / 12 * (6 + 0.5)), - AK::sin(AK::Pi / 12 * (7 + 0.5)), - AK::sin(AK::Pi / 12 * (8 + 0.5)), - AK::sin(AK::Pi / 12 * (9 + 0.5)), - AK::sin(AK::Pi / 12 * (10 + 0.5)), - AK::sin(AK::Pi / 12 * (11 + 0.5)), + AK::sin(AK::Pi / 12 * (0 + 0.5f)), + AK::sin(AK::Pi / 12 * (1 + 0.5f)), + AK::sin(AK::Pi / 12 * (2 + 0.5f)), + AK::sin(AK::Pi / 12 * (3 + 0.5f)), + AK::sin(AK::Pi / 12 * (4 + 0.5f)), + AK::sin(AK::Pi / 12 * (5 + 0.5f)), + AK::sin(AK::Pi / 12 * (6 + 0.5f)), + AK::sin(AK::Pi / 12 * (7 + 0.5f)), + AK::sin(AK::Pi / 12 * (8 + 0.5f)), + AK::sin(AK::Pi / 12 * (9 + 0.5f)), + AK::sin(AK::Pi / 12 * (10 + 0.5f)), + AK::sin(AK::Pi / 12 * (11 + 0.5f)), - AK::sin(AK::Pi / 12 * (0 + 0.5)), - AK::sin(AK::Pi / 12 * (1 + 0.5)), - AK::sin(AK::Pi / 12 * (2 + 0.5)), - AK::sin(AK::Pi / 12 * (3 + 0.5)), - AK::sin(AK::Pi / 12 * (4 + 0.5)), - AK::sin(AK::Pi / 12 * (5 + 0.5)), - AK::sin(AK::Pi / 12 * (6 + 0.5)), - AK::sin(AK::Pi / 12 * (7 + 0.5)), - AK::sin(AK::Pi / 12 * (8 + 0.5)), - AK::sin(AK::Pi / 12 * (9 + 0.5)), - AK::sin(AK::Pi / 12 * (10 + 0.5)), - AK::sin(AK::Pi / 12 * (11 + 0.5)), + AK::sin(AK::Pi / 12 * (0 + 0.5f)), + AK::sin(AK::Pi / 12 * (1 + 0.5f)), + AK::sin(AK::Pi / 12 * (2 + 0.5f)), + AK::sin(AK::Pi / 12 * (3 + 0.5f)), + AK::sin(AK::Pi / 12 * (4 + 0.5f)), + AK::sin(AK::Pi / 12 * (5 + 0.5f)), + AK::sin(AK::Pi / 12 * (6 + 0.5f)), + AK::sin(AK::Pi / 12 * (7 + 0.5f)), + AK::sin(AK::Pi / 12 * (8 + 0.5f)), + AK::sin(AK::Pi / 12 * (9 + 0.5f)), + AK::sin(AK::Pi / 12 * (10 + 0.5f)), + AK::sin(AK::Pi / 12 * (11 + 0.5f)), } }; // ISO/IEC 11172-3 (2.4.3.4.10.3 c) -AK::Array WindowBlockTypeEnd { { +AK::Array WindowBlockTypeEnd { { 0, 0, 0, 0, 0, 0, - AK::sin(AK::Pi / 12 * (6 - 6 + 0.5)), - AK::sin(AK::Pi / 12 * (7 - 6 + 0.5)), - AK::sin(AK::Pi / 12 * (8 - 6 + 0.5)), - AK::sin(AK::Pi / 12 * (9 - 6 + 0.5)), - AK::sin(AK::Pi / 12 * (10 - 6 + 0.5)), - AK::sin(AK::Pi / 12 * (11 - 6 + 0.5)), + AK::sin(AK::Pi / 12 * (6 - 6 + 0.5f)), + AK::sin(AK::Pi / 12 * (7 - 6 + 0.5f)), + AK::sin(AK::Pi / 12 * (8 - 6 + 0.5f)), + AK::sin(AK::Pi / 12 * (9 - 6 + 0.5f)), + AK::sin(AK::Pi / 12 * (10 - 6 + 0.5f)), + AK::sin(AK::Pi / 12 * (11 - 6 + 0.5f)), 1, 1, 1, 1, 1, 1, - AK::sin(AK::Pi / 36 * (18 + 0.5)), - AK::sin(AK::Pi / 36 * (19 + 0.5)), - AK::sin(AK::Pi / 36 * (20 + 0.5)), - AK::sin(AK::Pi / 36 * (21 + 0.5)), - AK::sin(AK::Pi / 36 * (22 + 0.5)), - AK::sin(AK::Pi / 36 * (23 + 0.5)), - AK::sin(AK::Pi / 36 * (24 + 0.5)), - AK::sin(AK::Pi / 36 * (25 + 0.5)), - AK::sin(AK::Pi / 36 * (26 + 0.5)), - AK::sin(AK::Pi / 36 * (27 + 0.5)), - AK::sin(AK::Pi / 36 * (28 + 0.5)), - AK::sin(AK::Pi / 36 * (29 + 0.5)), - AK::sin(AK::Pi / 36 * (30 + 0.5)), - AK::sin(AK::Pi / 36 * (31 + 0.5)), - AK::sin(AK::Pi / 36 * (32 + 0.5)), - AK::sin(AK::Pi / 36 * (33 + 0.5)), - AK::sin(AK::Pi / 36 * (34 + 0.5)), - AK::sin(AK::Pi / 36 * (35 + 0.5)), + AK::sin(AK::Pi / 36 * (18 + 0.5f)), + AK::sin(AK::Pi / 36 * (19 + 0.5f)), + AK::sin(AK::Pi / 36 * (20 + 0.5f)), + AK::sin(AK::Pi / 36 * (21 + 0.5f)), + AK::sin(AK::Pi / 36 * (22 + 0.5f)), + AK::sin(AK::Pi / 36 * (23 + 0.5f)), + AK::sin(AK::Pi / 36 * (24 + 0.5f)), + AK::sin(AK::Pi / 36 * (25 + 0.5f)), + AK::sin(AK::Pi / 36 * (26 + 0.5f)), + AK::sin(AK::Pi / 36 * (27 + 0.5f)), + AK::sin(AK::Pi / 36 * (28 + 0.5f)), + AK::sin(AK::Pi / 36 * (29 + 0.5f)), + AK::sin(AK::Pi / 36 * (30 + 0.5f)), + AK::sin(AK::Pi / 36 * (31 + 0.5f)), + AK::sin(AK::Pi / 36 * (32 + 0.5f)), + AK::sin(AK::Pi / 36 * (33 + 0.5f)), + AK::sin(AK::Pi / 36 * (34 + 0.5f)), + AK::sin(AK::Pi / 36 * (35 + 0.5f)), } }; // ISO/IEC 11172-3 (Table B.3) -AK::Array WindowSynthesis { +AK::Array WindowSynthesis { 0.000000000, -0.000015259, -0.000015259, -0.000015259, -0.000015259, -0.000015259, -0.000015259, -0.000030518, -0.000030518, -0.000030518, -0.000030518, -0.000045776, -0.000045776, -0.000061035, -0.000061035, -0.000076294, -0.000076294, -0.000091553, -0.000106812, -0.000106812, -0.000122070, -0.000137329, -0.000152588, -0.000167847, @@ -377,71 +377,71 @@ AK::Array WindowSynthesis { // ISO/IEC 11172-3 (2.4.3.2.2) // cos((16 + i) * (2 * k + 1) * pi / 64.0), k=0..31, i=0..63 -Array, 64> SynthesisSubbandFilterCoefficients = { - Array { { 0.7071067811865476, -0.7071067811865475, -0.7071067811865477, 0.7071067811865474, 0.7071067811865477, -0.7071067811865467, -0.7071067811865471, 0.7071067811865466, 0.7071067811865472, -0.7071067811865465, -0.7071067811865474, 0.7071067811865464, 0.7071067811865475, -0.7071067811865464, -0.7071067811865476, 0.7071067811865462, 0.7071067811865476, -0.7071067811865461, -0.7071067811865477, 0.707106781186546, 0.7071067811865503, -0.707106781186546, -0.7071067811865479, 0.7071067811865483, 0.7071067811865505, -0.7071067811865458, -0.707106781186548, 0.7071067811865482, 0.7071067811865507, -0.7071067811865456, -0.7071067811865482, 0.707106781186548 } }, - Array { { 0.6715589548470183, -0.8032075314806448, -0.5141027441932218, 0.9039892931234431, 0.33688985339222005, -0.9700312531945441, -0.14673047445536166, 0.9987954562051724, -0.04906767432741729, -0.9891765099647811, 0.24298017990326243, 0.9415440651830208, -0.42755509343028003, -0.8577286100002726, 0.5956993044924337, 0.7409511253549602, -0.7409511253549589, -0.5956993044924354, 0.8577286100002715, 0.4275550934302851, -0.9415440651830214, -0.24298017990326443, 0.9891765099647806, 0.04906767432742292, -0.9987954562051724, 0.1467304744553596, 0.9700312531945451, -0.3368898533922206, -0.903989293123444, 0.5141027441932186, 0.8032075314806442, -0.6715589548470177 } }, - Array { { 0.6343932841636455, -0.8819212643483549, -0.29028467725446244, 0.9951847266721969, -0.09801714032955997, -0.9569403357322087, 0.47139673682599736, 0.7730104533627377, -0.773010453362737, -0.4713967368259983, 0.9569403357322089, 0.09801714032956282, -0.995184726672197, 0.2902846772544622, 0.8819212643483563, -0.6343932841636443, -0.6343932841636459, 0.8819212643483553, 0.29028467725446433, -0.9951847266721968, 0.09801714032956063, 0.9569403357322086, -0.47139673682599326, -0.7730104533627394, 0.7730104533627351, 0.4713967368259993, -0.9569403357322086, -0.09801714032956038, 0.9951847266721968, -0.2902846772544578, -0.8819212643483568, 0.6343932841636434 } }, - Array { { 0.5956993044924335, -0.9415440651830207, -0.04906767432741803, 0.9700312531945441, -0.5141027441932214, -0.6715589548470181, 0.903989293123443, 0.1467304744553618, -0.9891765099647811, 0.42755509343028014, 0.7409511253549601, -0.8577286100002717, -0.24298017990326395, 0.9987954562051724, -0.33688985339221794, -0.8032075314806458, 0.8032075314806444, 0.33688985339222016, -0.9987954562051723, 0.24298017990326515, 0.8577286100002729, -0.7409511253549561, -0.4275550934302822, 0.9891765099647806, -0.146730474455363, -0.903989293123444, 0.6715589548470151, 0.5141027441932219, -0.9700312531945433, 0.04906767432741926, 0.9415440651830214, -0.5956993044924298 } }, - Array { { 0.5555702330196023, -0.9807852804032304, 0.1950903220161283, 0.8314696123025455, -0.8314696123025451, -0.19509032201612803, 0.9807852804032307, -0.5555702330196015, -0.5555702330196026, 0.9807852804032304, -0.19509032201612858, -0.8314696123025449, 0.8314696123025438, 0.19509032201613036, -0.9807852804032308, 0.5555702330196011, 0.5555702330196061, -0.9807852804032297, 0.19509032201612447, 0.8314696123025471, -0.8314696123025435, -0.19509032201613097, 0.9807852804032309, -0.5555702330196005, -0.5555702330196036, 0.9807852804032302, -0.19509032201612736, -0.8314696123025456, 0.8314696123025451, 0.19509032201612808, -0.9807852804032303, 0.555570233019603 } }, - Array { { 0.5141027441932217, -0.9987954562051724, 0.42755509343028214, 0.5956993044924332, -0.989176509964781, 0.3368898533922202, 0.6715589548470182, -0.9700312531945441, 0.24298017990326243, 0.7409511253549601, -0.9415440651830203, 0.14673047445536033, 0.8032075314806457, -0.9039892931234428, 0.04906767432741668, 0.8577286100002728, -0.8577286100002696, -0.04906767432741925, 0.9039892931234453, -0.8032075314806442, -0.1467304744553664, 0.9415440651830211, -0.740951125354956, -0.24298017990326493, 0.9700312531945451, -0.6715589548470177, -0.3368898533922243, 0.9891765099647811, -0.5956993044924298, -0.42755509343028286, 0.9987954562051726, -0.5141027441932149 } }, - Array { { 0.4713967368259978, -0.9951847266721969, 0.6343932841636456, 0.29028467725446255, -0.9569403357322087, 0.773010453362737, 0.09801714032956081, -0.8819212643483562, 0.8819212643483555, -0.09801714032956124, -0.7730104533627368, 0.9569403357322088, -0.2902846772544621, -0.6343932841636459, 0.9951847266721968, -0.4713967368259935, -0.47139673682599587, 0.9951847266721967, -0.6343932841636466, -0.2902846772544613, 0.9569403357322086, -0.7730104533627373, -0.09801714032956038, 0.881921264348355, -0.8819212643483548, 0.0980171403295599, 0.7730104533627375, -0.9569403357322085, 0.29028467725446083, 0.634393284163647, -0.9951847266721959, 0.47139673682598915 } }, - Array { { 0.4275550934302822, -0.970031253194544, 0.803207531480645, -0.04906767432741754, -0.7409511253549599, 0.989176509964781, -0.5141027441932212, -0.33688985339221955, 0.9415440651830208, -0.8577286100002717, 0.14673047445536033, 0.6715589548470199, -0.9987954562051723, 0.5956993044924335, 0.24298017990326776, -0.9039892931234438, 0.9039892931234441, -0.2429801799032616, -0.5956993044924329, 0.9987954562051726, -0.6715589548470179, -0.14673047445536663, 0.8577286100002731, -0.941544065183021, 0.33688985339221694, 0.5141027441932221, -0.9891765099647817, 0.740951125354958, 0.04906767432741681, -0.8032075314806467, 0.9700312531945422, -0.42755509343028464 } }, - Array { { 0.38268343236508984, -0.9238795325112868, 0.9238795325112865, -0.3826834323650899, -0.38268343236509056, 0.9238795325112867, -0.9238795325112864, 0.38268343236508956, 0.3826834323650909, -0.9238795325112876, 0.9238795325112868, -0.3826834323650892, -0.3826834323650912, 0.9238795325112877, -0.9238795325112854, 0.38268343236508556, 0.3826834323650883, -0.9238795325112865, 0.9238795325112866, -0.3826834323650885, -0.38268343236509195, 0.9238795325112881, -0.9238795325112851, 0.3826834323650849, 0.382683432365089, -0.9238795325112868, 0.9238795325112863, -0.3826834323650813, -0.3826834323650926, 0.9238795325112856, -0.9238795325112849, 0.3826834323650908 } }, - Array { { 0.33688985339222005, -0.8577286100002721, 0.9891765099647809, -0.6715589548470177, 0.04906767432741742, 0.5956993044924335, -0.9700312531945443, 0.9039892931234429, -0.42755509343028003, -0.24298017990326395, 0.8032075314806457, -0.9987954562051723, 0.7409511253549588, -0.1467304744553635, -0.5141027441932244, 0.941544065183021, -0.9415440651830213, 0.5141027441932188, 0.146730474455363, -0.7409511253549584, 0.9987954562051726, -0.8032075314806439, 0.24298017990326443, 0.42755509343028597, -0.9039892931234442, 0.9700312531945441, -0.5956993044924352, -0.04906767432742757, 0.6715589548470239, -0.9891765099647817, 0.8577286100002706, -0.33688985339221944 } }, - Array { { 0.29028467725446233, -0.7730104533627371, 0.9951847266721969, -0.8819212643483548, 0.47139673682599736, 0.09801714032956081, -0.6343932841636456, 0.9569403357322094, -0.9569403357322089, 0.6343932841636444, -0.09801714032956099, -0.47139673682599875, 0.8819212643483564, -0.9951847266721968, 0.7730104533627352, -0.2902846772544582, -0.2902846772544613, 0.7730104533627373, -0.9951847266721972, 0.8819212643483533, -0.4713967368259928, -0.09801714032956063, 0.6343932841636468, -0.9569403357322098, 0.9569403357322074, -0.6343932841636404, 0.09801714032955235, 0.47139673682599387, -0.8819212643483538, 0.9951847266721969, -0.7730104533627365, 0.2902846772544601 } }, - Array { { 0.24298017990326398, -0.6715589548470187, 0.9415440651830209, -0.989176509964781, 0.8032075314806448, -0.4275550934302818, -0.04906767432741852, 0.5141027441932239, -0.8577286100002726, 0.9987954562051724, -0.9039892931234428, 0.5956993044924335, -0.1467304744553635, -0.3368898533922236, 0.7409511253549605, -0.9700312531945442, 0.9700312531945442, -0.740951125354956, 0.33688985339221716, 0.14673047445536325, -0.5956993044924334, 0.9039892931234457, -0.9987954562051722, 0.8577286100002709, -0.5141027441932149, 0.049067674327418764, 0.4275550934302864, -0.8032075314806426, 0.9891765099647812, -0.9415440651830184, 0.6715589548470194, -0.24298017990325993 } }, - Array { { 0.19509032201612833, -0.5555702330196022, 0.8314696123025455, -0.9807852804032307, 0.9807852804032304, -0.831469612302545, 0.5555702330196015, -0.19509032201612858, -0.19509032201613025, 0.5555702330196028, -0.831469612302545, 0.9807852804032309, -0.9807852804032297, 0.8314696123025456, -0.5555702330196007, 0.19509032201612425, 0.1950903220161276, -0.5555702330196036, 0.8314696123025475, -0.9807852804032303, 0.9807852804032301, -0.8314696123025431, 0.555570233019603, -0.1950903220161269, -0.19509032201612497, 0.5555702330196073, -0.8314696123025459, 0.9807852804032298, -0.9807852804032293, 0.8314696123025446, -0.5555702330196052, 0.19509032201612256 } }, - Array { { 0.14673047445536175, -0.4275550934302825, 0.6715589548470188, -0.8577286100002723, 0.9700312531945443, -0.9987954562051724, 0.9415440651830204, -0.8032075314806446, 0.5956993044924337, -0.33688985339221794, 0.04906767432741668, 0.24298017990326776, -0.5141027441932244, 0.7409511253549605, -0.9039892931234439, 0.989176509964781, -0.989176509964781, 0.9039892931234439, -0.7409511253549558, 0.5141027441932183, -0.24298017990326087, -0.04906767432742023, 0.33688985339222133, -0.5956993044924337, 0.8032075314806446, -0.9415440651830204, 0.9987954562051723, -0.9700312531945448, 0.8577286100002668, -0.6715589548470114, 0.4275550934302745, -0.14673047445535428 } }, - Array { { 0.09801714032956077, -0.29028467725446244, 0.471396736825998, -0.6343932841636454, 0.7730104533627377, -0.8819212643483562, 0.9569403357322094, -0.995184726672197, 0.9951847266721968, -0.9569403357322088, 0.8819212643483553, -0.7730104533627375, 0.6343932841636439, -0.47139673682599326, 0.2902846772544615, -0.09801714032955673, -0.09801714032956038, 0.29028467725446505, -0.4713967368259965, 0.6343932841636468, -0.7730104533627399, 0.8819212643483553, -0.9569403357322078, 0.9951847266721968, -0.9951847266721966, 0.9569403357322073, -0.881921264348351, 0.7730104533627387, -0.6343932841636453, 0.47139673682599476, -0.29028467725445634, 0.09801714032955137 } }, - Array { { 0.049067674327418126, -0.1467304744553623, 0.24298017990326423, -0.336889853392221, 0.4275550934302828, -0.5141027441932238, 0.595699304492435, -0.6715589548470199, 0.7409511253549602, -0.8032075314806458, 0.8577286100002728, -0.9039892931234438, 0.941544065183021, -0.9700312531945442, 0.989176509964781, -0.9987954562051724, 0.9987954562051724, -0.989176509964781, 0.9700312531945441, -0.941544065183021, 0.9039892931234437, -0.8577286100002726, 0.8032075314806414, -0.7409511253549601, 0.6715589548470144, -0.5956993044924349, 0.5141027441932174, -0.4275550934302842, 0.3368898533922158, -0.2429801799032666, 0.14673047445535767, -0.049067674327421214 } }, - Array { { 6.123233995736766e-17, -1.8369701987210297e-16, 3.061616997868383e-16, -4.286263797015736e-16, 5.51091059616309e-16, -2.4499125789312946e-15, -9.803364199544708e-16, -2.6948419387607653e-15, -7.354070601250002e-16, -2.939771298590236e-15, -4.904777002955296e-16, -3.1847006584197066e-15, -2.45548340466059e-16, -3.4296300182491773e-15, -6.189806365883577e-19, -3.674559378078648e-15, 2.443103791928823e-16, -3.919488737908119e-15, 4.892397390223529e-16, -4.164418097737589e-15, 7.839596456452825e-15, -4.40934745756706e-15, 9.790984586812941e-16, 2.4511505402044715e-15, 8.329455176111767e-15, -4.899206177226001e-15, 1.4689571783402355e-15, 1.96129182054553e-15, 8.819313895770708e-15, -5.389064896884942e-15, 1.9588158979991767e-15, 1.471433100886589e-15 } }, - Array { { -0.04906767432741801, 0.14673047445536194, -0.2429801799032628, 0.3368898533922202, -0.4275550934302818, 0.5141027441932227, -0.5956993044924338, 0.6715589548470184, -0.7409511253549589, 0.8032075314806444, -0.8577286100002696, 0.9039892931234441, -0.9415440651830213, 0.9700312531945442, -0.989176509964781, 0.9987954562051724, -0.9987954562051724, 0.9891765099647811, -0.9700312531945443, 0.9415440651830214, -0.9039892931234473, 0.8577286100002698, -0.8032075314806426, 0.7409511253549568, -0.6715589548470162, 0.5956993044924314, -0.51410274419322, 0.42755509343028064, -0.336889853392219, 0.24298017990326326, -0.14673047445536155, 0.04906767432741827 } }, - Array { { -0.09801714032956065, 0.29028467725446205, -0.4713967368259975, 0.6343932841636447, -0.773010453362737, 0.8819212643483555, -0.9569403357322089, 0.9951847266721968, -0.995184726672197, 0.9569403357322095, -0.8819212643483565, 0.7730104533627371, -0.634393284163649, 0.4713967368259993, -0.2902846772544615, 0.09801714032956405, 0.0980171403295599, -0.29028467725445756, 0.47139673682599564, -0.6343932841636404, 0.773010453362739, -0.8819212643483545, 0.9569403357322073, -0.9951847266721959, 0.9951847266721969, -0.9569403357322102, 0.8819212643483592, -0.7730104533627362, 0.6343932841636479, -0.47139673682600425, 0.2902846772544601, -0.09801714032956259 } }, - Array { { -0.14673047445536164, 0.42755509343028214, -0.6715589548470177, 0.8577286100002719, -0.9700312531945441, 0.9987954562051724, -0.9415440651830209, 0.8032075314806457, -0.5956993044924354, 0.33688985339222016, -0.04906767432741925, -0.2429801799032616, 0.5141027441932188, -0.740951125354956, 0.9039892931234439, -0.989176509964781, 0.9891765099647811, -0.9039892931234442, 0.7409511253549612, -0.5141027441932254, 0.2429801799032623, 0.04906767432741142, -0.33688985339221944, 0.5956993044924263, -0.8032075314806432, 0.9415440651830218, -0.9987954562051722, 0.9700312531945438, -0.8577286100002759, 0.6715589548470194, -0.42755509343029086, 0.14673047445536544 } }, - Array { { -0.1950903220161282, 0.5555702330196018, -0.8314696123025451, 0.9807852804032304, -0.9807852804032307, 0.8314696123025448, -0.5555702330196027, 0.19509032201613036, 0.19509032201612822, -0.555570233019601, 0.8314696123025456, -0.9807852804032295, 0.9807852804032309, -0.8314696123025455, 0.5555702330196066, -0.19509032201613144, -0.19509032201612714, 0.555570233019603, -0.8314696123025429, 0.9807852804032301, -0.9807852804032304, 0.831469612302544, -0.5555702330196105, 0.19509032201613602, 0.19509032201612256, -0.5555702330195991, 0.8314696123025443, -0.9807852804032305, 0.98078528040323, -0.8314696123025506, 0.5555702330196085, -0.1950903220161336 } }, - Array { { -0.24298017990326387, 0.6715589548470183, -0.9415440651830205, 0.9891765099647811, -0.8032075314806455, 0.4275550934302814, 0.049067674327416926, -0.5141027441932223, 0.8577286100002715, -0.9987954562051723, 0.9039892931234453, -0.5956993044924329, 0.146730474455363, 0.33688985339221716, -0.7409511253549558, 0.9700312531945441, -0.9700312531945443, 0.7409511253549612, -0.33688985339221805, -0.14673047445536205, 0.5956993044924321, -0.9039892931234419, 0.9987954562051726, -0.8577286100002757, 0.5141027441932292, -0.04906767432742855, -0.42755509343028375, 0.8032075314806449, -0.9891765099647807, 0.941544065183022, -0.6715589548470223, 0.24298017990327087 } }, - Array { { -0.29028467725446216, 0.7730104533627367, -0.9951847266721969, 0.8819212643483553, -0.4713967368259983, -0.09801714032956124, 0.6343932841636444, -0.9569403357322088, 0.9569403357322095, -0.6343932841636489, 0.09801714032956356, 0.47139673682599625, -0.8819212643483549, 0.9951847266721968, -0.7730104533627398, 0.2902846772544653, 0.29028467725446083, -0.7730104533627368, 0.9951847266721963, -0.8819212643483538, 0.47139673682600036, 0.09801714032955186, -0.6343932841636453, 0.9569403357322072, -0.9569403357322082, 0.6343932841636479, -0.09801714032956942, -0.47139673682599736, 0.8819212643483522, -0.9951847266721966, 0.773010453362739, -0.2902846772544709 } }, - Array { { -0.33688985339221994, 0.857728610000272, -0.9891765099647811, 0.6715589548470182, -0.04906767432741852, -0.5956993044924338, 0.9700312531945435, -0.9039892931234437, 0.4275550934302851, 0.24298017990326515, -0.8032075314806442, 0.9987954562051726, -0.7409511253549584, 0.14673047445536325, 0.5141027441932183, -0.941544065183021, 0.9415440651830214, -0.5141027441932254, -0.14673047445536205, 0.7409511253549529, -0.9987954562051722, 0.8032075314806449, -0.24298017990327322, -0.4275550934302776, 0.9039892931234431, -0.9700312531945464, 0.5956993044924377, 0.0490676743274173, -0.6715589548470108, 0.9891765099647801, -0.8577286100002726, 0.33688985339223004 } }, - Array { { -0.3826834323650897, 0.9238795325112865, -0.9238795325112867, 0.38268343236509067, 0.38268343236508956, -0.923879532511287, 0.9238795325112876, -0.3826834323650912, -0.382683432365089, 0.9238795325112867, -0.9238795325112865, 0.3826834323650885, 0.3826834323650851, -0.9238795325112851, 0.9238795325112881, -0.3826834323650924, -0.3826834323650813, 0.9238795325112835, -0.9238795325112897, 0.3826834323650962, 0.382683432365084, -0.9238795325112846, 0.9238795325112886, -0.3826834323650935, -0.38268343236508673, 0.9238795325112857, -0.9238795325112874, 0.3826834323650908, 0.38268343236508945, -0.9238795325112868, 0.9238795325112863, -0.38268343236508806 } }, - Array { { -0.42755509343028186, 0.970031253194544, -0.8032075314806454, 0.0490676743274184, 0.7409511253549591, -0.9891765099647809, 0.5141027441932241, 0.33688985339221783, -0.9415440651830214, 0.8577286100002729, -0.1467304744553664, -0.6715589548470179, 0.9987954562051726, -0.5956993044924334, -0.24298017990326087, 0.9039892931234437, -0.9039892931234473, 0.2429801799032623, 0.5956993044924321, -0.9987954562051722, 0.6715589548470242, 0.14673047445536494, -0.8577286100002721, 0.9415440651830218, -0.33688985339222594, -0.5141027441932137, 0.9891765099647812, -0.7409511253549601, -0.04906767432741338, 0.8032075314806403, -0.9700312531945466, 0.427555093430282 } }, - Array { { -0.4713967368259977, 0.9951847266721969, -0.6343932841636454, -0.29028467725446255, 0.9569403357322089, -0.7730104533627368, -0.09801714032956099, 0.8819212643483553, -0.8819212643483565, 0.09801714032956356, 0.7730104533627351, -0.9569403357322097, 0.29028467725446505, 0.6343932841636434, -0.9951847266721972, 0.4713967368259999, 0.47139673682598915, -0.9951847266721966, 0.6343932841636528, 0.2902846772544601, -0.9569403357322062, 0.7730104533627383, 0.09801714032955137, -0.881921264348354, 0.8819212643483594, -0.09801714032956259, -0.7730104533627312, 0.9569403357322094, -0.2902846772544709, -0.6343932841636442, 0.9951847266721977, -0.47139673682601163 } }, - Array { { -0.5141027441932217, 0.9987954562051724, -0.4275550934302827, -0.5956993044924326, 0.9891765099647809, -0.33688985339221983, -0.6715589548470184, 0.9700312531945441, -0.24298017990326443, -0.7409511253549561, 0.9415440651830211, -0.14673047445536663, -0.8032075314806439, 0.9039892931234457, -0.04906767432742023, -0.8577286100002726, 0.8577286100002698, 0.04906767432741142, -0.9039892931234419, 0.8032075314806449, 0.14673047445536494, -0.9415440651830181, 0.7409511253549621, 0.2429801799032628, -0.9700312531945445, 0.6715589548470249, 0.33688985339221483, -0.9891765099647807, 0.5956993044924325, 0.42755509343027315, -0.9987954562051727, 0.5141027441932245 } }, - Array { { -0.555570233019602, 0.9807852804032304, -0.19509032201612803, -0.831469612302545, 0.8314696123025448, 0.19509032201612844, -0.9807852804032303, 0.5555702330196061, 0.5555702330196038, -0.9807852804032302, 0.1950903220161276, 0.8314696123025452, -0.8314696123025456, -0.19509032201612714, 0.9807852804032301, -0.5555702330196102, -0.5555702330196056, 0.9807852804032298, -0.19509032201612544, -0.8314696123025465, 0.8314696123025443, 0.1950903220161293, -0.9807852804032305, 0.5555702330196024, 0.5555702330196015, -0.9807852804032308, 0.19509032201613025, 0.8314696123025438, -0.831469612302547, -0.19509032201612447, 0.9807852804032268, -0.5555702330196183 } }, - Array { { -0.5956993044924334, 0.9415440651830209, 0.04906767432741742, -0.9700312531945441, 0.5141027441932239, 0.6715589548470184, -0.9039892931234437, -0.1467304744553635, 0.9891765099647806, -0.4275550934302822, -0.740951125354956, 0.8577286100002731, 0.24298017990326443, -0.9987954562051722, 0.33688985339222133, 0.8032075314806414, -0.8032075314806426, -0.33688985339221944, 0.9987954562051726, -0.24298017990327322, -0.8577286100002721, 0.7409511253549621, 0.42755509343027404, -0.9891765099647809, 0.14673047445536544, 0.9039892931234398, -0.6715589548470173, -0.5141027441932191, 0.9700312531945459, -0.04906767432741582, -0.9415440651830153, 0.5956993044924388 } }, - Array { { -0.6343932841636454, 0.881921264348355, 0.29028467725446266, -0.9951847266721969, 0.09801714032956282, 0.9569403357322088, -0.47139673682599875, -0.7730104533627375, 0.7730104533627371, 0.47139673682599625, -0.9569403357322097, -0.09801714032955648, 0.9951847266721964, -0.290284677254462, -0.8819212643483513, 0.6343932841636472, 0.6343932841636483, -0.8819212643483573, -0.2902846772544634, 0.9951847266721976, -0.09801714032956209, -0.956940335732206, 0.47139673682600125, 0.7730104533627381, -0.7730104533627412, -0.4713967368259969, 0.9569403357322115, 0.09801714032955722, -0.9951847266721972, 0.2902846772544681, 0.8819212643483483, -0.6343932841636412 } }, - Array { { -0.6715589548470184, 0.8032075314806453, 0.5141027441932213, -0.9039892931234434, -0.33688985339221816, 0.970031253194544, 0.1467304744553601, -0.9987954562051724, 0.04906767432742292, 0.9891765099647806, -0.24298017990326493, -0.941544065183021, 0.42755509343028597, 0.8577286100002709, -0.5956993044924337, -0.7409511253549601, 0.7409511253549568, 0.5956993044924263, -0.8577286100002757, -0.4275550934302776, 0.9415440651830218, 0.2429801799032628, -0.9891765099647809, -0.04906767432742072, 0.998795456205172, -0.1467304744553693, -0.9700312531945426, 0.3368898533922236, 0.9039892931234365, -0.5141027441932339, -0.8032075314806376, 0.671558954847026 } }, - Array { { -0.7071067811865475, 0.7071067811865477, 0.7071067811865466, -0.7071067811865474, -0.7071067811865464, 0.7071067811865476, 0.707106781186546, -0.7071067811865479, -0.7071067811865458, 0.7071067811865507, 0.707106781186548, -0.7071067811865483, -0.7071067811865452, 0.7071067811865511, 0.7071067811865425, -0.7071067811865539, -0.7071067811865498, 0.7071067811865467, 0.707106781186547, -0.7071067811865495, -0.7071067811865442, 0.7071067811865522, 0.7071067811865415, -0.707106781186555, -0.7071067811865487, 0.7071067811865477, 0.707106781186546, -0.7071067811865606, -0.7071067811865432, 0.7071067811865432, 0.7071067811865405, -0.707106781186546 } }, - Array { { -0.7409511253549589, 0.5956993044924332, 0.8577286100002719, -0.4275550934302813, -0.9415440651830203, 0.2429801799032641, 0.9891765099647806, -0.04906767432741925, -0.9987954562051724, -0.146730474455363, 0.9700312531945451, 0.33688985339221694, -0.9039892931234442, -0.5141027441932149, 0.8032075314806446, 0.6715589548470144, -0.6715589548470162, -0.8032075314806432, 0.5141027441932292, 0.9039892931234431, -0.33688985339222594, -0.9700312531945445, 0.14673047445536544, 0.998795456205172, 0.04906767432741681, -0.989176509964782, -0.24298017990326515, 0.9415440651830271, 0.4275550934302855, -0.8577286100002731, -0.595699304492427, 0.7409511253549683 } }, - Array { { -0.773010453362737, 0.471396736825998, 0.9569403357322085, -0.0980171403295627, -0.995184726672197, -0.2902846772544621, 0.8819212643483564, 0.6343932841636439, -0.634393284163649, -0.8819212643483549, 0.29028467725446505, 0.9951847266721964, 0.09801714032955966, -0.9569403357322078, -0.47139673682599215, 0.7730104533627381, 0.7730104533627387, -0.47139673682600386, -0.9569403357322082, 0.09801714032955867, 0.9951847266721977, 0.29028467725445917, -0.8819212643483545, -0.6343932841636388, 0.6343932841636487, 0.8819212643483552, -0.2902846772544578, -0.995184726672195, -0.098017140329546, 0.9569403357322118, 0.4713967368259926, -0.7730104533627378 } }, - Array { { -0.8032075314806448, 0.33688985339222005, 0.9987954562051724, 0.24298017990326243, -0.8577286100002726, -0.7409511253549589, 0.4275550934302851, 0.9891765099647806, 0.1467304744553596, -0.903989293123444, -0.6715589548470177, 0.5141027441932221, 0.9700312531945441, 0.049067674327418764, -0.9415440651830204, -0.5956993044924349, 0.5956993044924314, 0.9415440651830218, -0.04906767432742855, -0.9700312531945464, -0.5141027441932137, 0.6715589548470249, 0.9039892931234398, -0.1467304744553693, -0.989176509964782, -0.42755509343027626, 0.7409511253549631, 0.857728610000262, -0.24298017990326848, -0.9987954562051733, -0.3368898533922167, 0.8032075314806552 } }, - Array { { -0.8314696123025453, 0.19509032201612878, 0.9807852804032307, 0.5555702330196015, -0.5555702330196027, -0.9807852804032303, -0.19509032201612808, 0.8314696123025471, 0.8314696123025455, -0.19509032201613122, -0.9807852804032303, -0.5555702330196002, 0.5555702330196071, 0.9807852804032301, 0.19509032201612303, -0.83146961230255, -0.8314696123025465, 0.19509032201612928, 0.9807852804032313, 0.5555702330195958, -0.5555702330196114, -0.9807852804032304, -0.19509032201612497, 0.8314696123025489, 0.8314696123025397, -0.1950903220161413, -0.9807852804032337, -0.5555702330196093, 0.5555702330195978, 0.9807852804032309, 0.1950903220161269, -0.8314696123025479 } }, - Array { { -0.857728610000272, 0.049067674327418154, 0.9039892931234434, 0.8032075314806447, -0.14673047445536216, -0.9415440651830209, -0.7409511253549563, 0.242980179903268, 0.9700312531945451, 0.6715589548470151, -0.3368898533922243, -0.9891765099647817, -0.5956993044924352, 0.4275550934302864, 0.9987954562051723, 0.5141027441932174, -0.51410274419322, -0.9987954562051722, -0.42755509343028375, 0.5956993044924377, 0.9891765099647812, 0.33688985339221483, -0.6715589548470173, -0.9700312531945426, -0.24298017990326515, 0.7409511253549631, 0.9415440651830211, 0.1467304744553698, -0.8032075314806528, -0.9039892931234407, -0.049067674327418764, 0.8577286100002681 } }, - Array { { -0.8819212643483549, -0.09801714032955997, 0.7730104533627377, 0.9569403357322089, 0.2902846772544622, -0.6343932841636459, -0.9951847266721968, -0.47139673682599326, 0.4713967368259993, 0.9951847266721968, 0.6343932841636434, -0.290284677254462, -0.9569403357322078, -0.7730104533627321, 0.09801714032956502, 0.8819212643483556, 0.8819212643483558, 0.09801714032955137, -0.7730104533627409, -0.9569403357322079, -0.29028467725446244, 0.634393284163654, 0.9951847266721962, 0.4713967368259935, -0.47139673682601163, -0.9951847266721967, -0.634393284163638, 0.29028467725445495, 0.9569403357322098, 0.7730104533627278, -0.0980171403295577, -0.8819212643483589 } }, - Array { { -0.9039892931234433, -0.2429801799032628, 0.5956993044924335, 0.9987954562051724, 0.6715589548470184, -0.14673047445536241, -0.857728610000271, -0.9415440651830213, -0.3368898533922206, 0.5141027441932219, 0.9891765099647811, 0.740951125354958, -0.04906767432742757, -0.8032075314806426, -0.9700312531945448, -0.4275550934302842, 0.42755509343028064, 0.9700312531945438, 0.8032075314806449, 0.0490676743274173, -0.7409511253549601, -0.9891765099647807, -0.5141027441932191, 0.3368898533922236, 0.9415440651830271, 0.857728610000262, 0.1467304744553698, -0.6715589548470129, -0.9987954562051727, -0.595699304492438, 0.24298017990325896, 0.9039892931234415 } }, - Array { { -0.9238795325112867, -0.3826834323650899, 0.38268343236509067, 0.9238795325112875, 0.9238795325112868, 0.3826834323650891, -0.38268343236509145, -0.9238795325112865, -0.9238795325112852, -0.3826834323650883, 0.382683432365089, 0.9238795325112882, 0.9238795325112835, 0.3826834323650908, -0.38268343236509306, -0.9238795325112898, -0.9238795325112873, -0.38268343236508673, 0.3826834323650971, 0.9238795325112862, 0.9238795325112856, 0.3826834323650826, -0.38268343236508806, -0.9238795325112878, -0.9238795325112893, -0.38268343236507857, 0.38268343236509217, 0.9238795325112841, 0.9238795325112822, 0.3826834323650876, -0.38268343236508306, -0.9238795325112912 } }, - Array { { -0.9415440651830207, -0.5141027441932214, 0.1467304744553618, 0.7409511253549601, 0.9987954562051724, 0.8032075314806444, 0.24298017990326515, -0.4275550934302822, -0.903989293123444, -0.9700312531945433, -0.5956993044924298, 0.04906767432741681, 0.6715589548470239, 0.9891765099647812, 0.8577286100002668, 0.3368898533922158, -0.336889853392219, -0.8577286100002759, -0.9891765099647807, -0.6715589548470108, -0.04906767432741338, 0.5956993044924325, 0.9700312531945459, 0.9039892931234365, 0.4275550934302855, -0.24298017990326848, -0.8032075314806528, -0.9987954562051727, -0.7409511253549578, -0.14673047445535137, 0.5141027441932381, 0.9415440651830205 } }, - Array { { -0.9569403357322088, -0.6343932841636448, -0.09801714032955972, 0.4713967368259984, 0.8819212643483563, 0.9951847266721968, 0.7730104533627352, 0.2902846772544615, -0.2902846772544615, -0.7730104533627398, -0.9951847266721972, -0.8819212643483513, -0.47139673682599215, 0.09801714032956502, 0.6343932841636476, 0.9569403357322092, 0.9569403357322092, 0.6343932841636476, 0.09801714032955088, -0.4713967368260047, -0.8819212643483579, -0.9951847266721965, -0.7730104533627352, -0.2902846772544615, 0.2902846772544615, 0.7730104533627352, 0.9951847266721965, 0.8819212643483579, 0.47139673682597966, -0.09801714032957916, -0.6343932841636586, -0.9569403357322133 } }, - Array { { -0.970031253194544, -0.7409511253549593, -0.3368898533922201, 0.14673047445536203, 0.5956993044924352, 0.9039892931234438, 0.9987954562051724, 0.8577286100002712, 0.5141027441932186, 0.04906767432741926, -0.42755509343028286, -0.8032075314806467, -0.9891765099647817, -0.9415440651830184, -0.6715589548470114, -0.2429801799032666, 0.24298017990326326, 0.6715589548470194, 0.941544065183022, 0.9891765099647801, 0.8032075314806403, 0.42755509343027315, -0.04906767432741582, -0.5141027441932339, -0.8577286100002731, -0.9987954562051733, -0.9039892931234407, -0.595699304492438, -0.14673047445535137, 0.33688985339221855, 0.740951125354969, 0.9700312531945446 } }, - Array { { -0.9807852804032304, -0.8314696123025451, -0.5555702330196015, -0.19509032201612858, 0.19509032201613036, 0.5555702330196061, 0.8314696123025471, 0.9807852804032309, 0.9807852804032302, 0.8314696123025451, 0.555570233019603, 0.19509032201613025, -0.19509032201613216, -0.5555702330196105, -0.8314696123025462, -0.980785280403232, -0.9807852804032305, -0.8314696123025421, -0.5555702330196044, -0.19509032201612497, 0.19509032201613746, 0.5555702330196032, 0.8314696123025413, 0.9807852804032302, 0.9807852804032294, 0.8314696123025391, 0.5555702330195881, 0.1950903220161336, -0.1950903220161288, -0.5555702330196076, -0.8314696123025522, -0.9807852804032341 } }, - Array { { -0.989176509964781, -0.9039892931234431, -0.7409511253549592, -0.5141027441932225, -0.24298017990326207, 0.04906767432742268, 0.3368898533922204, 0.5956993044924359, 0.8032075314806442, 0.9415440651830214, 0.9987954562051726, 0.9700312531945422, 0.8577286100002706, 0.6715589548470194, 0.4275550934302745, 0.14673047445535767, -0.14673047445536155, -0.42755509343029086, -0.6715589548470223, -0.8577286100002726, -0.9700312531945466, -0.9987954562051727, -0.9415440651830153, -0.8032075314806376, -0.595699304492427, -0.3368898533922167, -0.049067674327418764, 0.24298017990325896, 0.5141027441932381, 0.740951125354969, 0.9039892931234478, 0.9891765099647819 } }, - Array { { -0.9951847266721968, -0.9569403357322085, -0.8819212643483547, -0.7730104533627357, -0.6343932841636443, -0.4713967368259935, -0.2902846772544582, -0.09801714032955673, 0.09801714032956405, 0.2902846772544653, 0.4713967368259999, 0.6343932841636472, 0.7730104533627381, 0.8819212643483556, 0.9569403357322092, 0.9951847266721969, 0.9951847266721969, 0.9569403357322089, 0.8819212643483554, 0.7730104533627378, 0.6343932841636468, 0.47139673682599953, 0.29028467725445123, 0.09801714032956356, -0.09801714032957136, -0.2902846772544587, -0.4713967368260064, -0.6343932841636418, -0.7730104533627428, -0.8819212643483524, -0.9569403357322113, -0.9951847266721963 } }, - Array { { -0.9987954562051724, -0.989176509964781, -0.9700312531945441, -0.9415440651830203, -0.9039892931234428, -0.8577286100002696, -0.8032075314806442, -0.740951125354956, -0.6715589548470177, -0.5956993044924298, -0.5141027441932149, -0.42755509343028464, -0.33688985339221944, -0.24298017990325993, -0.14673047445535428, -0.049067674327421214, 0.04906767432741827, 0.14673047445536544, 0.24298017990327087, 0.33688985339223004, 0.427555093430282, 0.5141027441932245, 0.5956993044924388, 0.671558954847026, 0.7409511253549683, 0.8032075314806552, 0.8577286100002681, 0.9039892931234415, 0.9415440651830205, 0.9700312531945446, 0.9891765099647819, 0.9987954562051728 } }, - Array { { -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0 } }, - Array { { -0.9987954562051724, -0.9891765099647811, -0.9700312531945443, -0.9415440651830209, -0.9039892931234437, -0.857728610000271, -0.803207531480646, -0.7409511253549584, -0.6715589548470208, -0.5956993044924335, -0.5141027441932254, -0.4275550934302833, -0.33688985339221855, -0.24298017990327322, -0.14673047445536833, -0.0490676743274217, 0.0490676743274173, 0.14673047445536397, 0.24298017990325518, 0.3368898533922144, 0.42755509343027936, 0.5141027441932094, 0.5956993044924357, 0.6715589548470122, 0.7409511253549459, 0.8032075314806435, 0.857728610000265, 0.9039892931234449, 0.9415440651830181, 0.9700312531945394, 0.9891765099647807, 0.9987954562051717 } }, - Array { { -0.9951847266721969, -0.9569403357322087, -0.8819212643483562, -0.7730104533627368, -0.6343932841636459, -0.47139673682599587, -0.2902846772544613, -0.09801714032956038, 0.0980171403295599, 0.29028467725446083, 0.47139673682598915, 0.6343932841636483, 0.7730104533627387, 0.8819212643483558, 0.9569403357322092, 0.9951847266721969, 0.9951847266721969, 0.9569403357322094, 0.8819212643483564, 0.7730104533627393, 0.63439328416366, 0.47139673682599, 0.29028467725445495, 0.0980171403295538, -0.09801714032956649, -0.29028467725446716, -0.47139673682600125, -0.6343932841636479, -0.7730104533627383, -0.8819212643483556, -0.9569403357322089, -0.9951847266721968 } }, - Array { { -0.989176509964781, -0.9039892931234433, -0.74095112535496, -0.514102744193224, -0.2429801799032642, 0.049067674327419986, 0.3368898533922174, 0.5956993044924329, 0.8032075314806417, 0.9415440651830198, 0.9987954562051724, 0.9700312531945453, 0.8577286100002701, 0.6715589548470191, 0.4275550934302873, 0.1467304744553722, -0.14673047445536058, -0.4275550934302767, -0.6715589548470104, -0.857728610000264, -0.9700312531945425, -0.9987954562051722, -0.9415440651830261, -0.8032075314806487, -0.5956993044924309, -0.33688985339223515, -0.049067674327424635, 0.2429801799032666, 0.5141027441932078, 0.7409511253549544, 0.9039892931234444, 0.9891765099647786 } }, - Array { { -0.9807852804032304, -0.8314696123025456, -0.5555702330196026, -0.19509032201613025, 0.19509032201612822, 0.5555702330196038, 0.8314696123025455, 0.9807852804032302, 0.980785280403231, 0.8314696123025477, 0.5555702330196073, 0.1950903220161288, -0.1950903220161192, -0.5555702330195991, -0.8314696123025462, -0.9807852804032291, -0.9807852804032308, -0.8314696123025509, -0.5555702330196061, -0.1950903220161413, 0.19509032201613458, 0.5555702330196003, 0.8314696123025391, 0.9807852804032267, 0.9807852804032304, 0.83146961230255, 0.5555702330196166, 0.19509032201612592, -0.1950903220161221, -0.5555702330195897, -0.8314696123025479, -0.9807852804032297 } }, - Array { { -0.970031253194544, -0.7409511253549599, -0.33688985339221955, 0.14673047445536033, 0.5956993044924335, 0.9039892931234441, 0.9987954562051726, 0.8577286100002731, 0.5141027441932221, 0.04906767432741681, -0.42755509343028464, -0.8032075314806391, -0.9891765099647798, -0.9415440651830229, -0.671558954847022, -0.24298017990326706, 0.2429801799032623, 0.6715589548470184, 0.9415440651830214, 0.9891765099647826, 0.8032075314806505, 0.4275550934302891, -0.049067674327411916, -0.5141027441932179, -0.8577286100002706, -0.9987954562051723, -0.9039892931234431, -0.5956993044924317, -0.14673047445535817, 0.336889853392225, 0.7409511253549447, 0.9700312531945392 } }, - Array { { -0.9569403357322089, -0.6343932841636454, -0.0980171403295627, 0.4713967368259969, 0.8819212643483553, 0.9951847266721967, 0.7730104533627373, 0.29028467725446505, -0.29028467725445756, -0.7730104533627368, -0.9951847266721966, -0.8819212643483573, -0.47139673682600386, 0.09801714032955137, 0.6343932841636476, 0.9569403357322089, 0.9569403357322094, 0.6343932841636487, 0.09801714032956697, -0.47139673682599, -0.8819212643483566, -0.9951847266721981, -0.7730104533627378, -0.2902846772544793, 0.29028467725445684, 0.7730104533627409, 0.9951847266721959, 0.8819212643483543, 0.47139673682601074, -0.0980171403295577, -0.6343932841636305, -0.9569403357322067 } }, - Array { { -0.9415440651830208, -0.514102744193222, 0.14673047445536058, 0.7409511253549589, 0.9987954562051723, 0.8032075314806439, 0.24298017990326823, -0.4275550934302789, -0.9039892931234422, -0.9700312531945444, -0.5956993044924396, 0.04906767432741828, 0.671558954847014, 0.9891765099647812, 0.8577286100002741, 0.3368898533922296, -0.33688985339221805, -0.8577286100002678, -0.989176509964781, -0.6715589548470231, -0.049067674327430505, 0.5956993044924184, 0.9700312531945449, 0.9039892931234444, 0.42755509343028997, -0.24298017990324947, -0.8032075314806324, -0.9987954562051723, -0.7409511253549624, -0.1467304744553727, 0.514102744193207, 0.9415440651830225 } }, - Array { { -0.9238795325112868, -0.38268343236509056, 0.38268343236508956, 0.9238795325112868, 0.9238795325112877, 0.3826834323650883, -0.3826834323650885, -0.9238795325112851, -0.9238795325112868, -0.3826834323650926, 0.3826834323650908, 0.9238795325112833, 0.9238795325112886, 0.38268343236509034, -0.3826834323650799, -0.9238795325112843, -0.9238795325112876, -0.38268343236508806, 0.3826834323650822, 0.9238795325112852, 0.9238795325112867, 0.3826834323650858, -0.38268343236507135, -0.9238795325112807, -0.9238795325112912, -0.38268343236509667, 0.38268343236508673, 0.9238795325112871, 0.9238795325112849, 0.38268343236510755, -0.38268343236507585, -0.9238795325112826 } }, - Array { { -0.9039892931234434, -0.24298017990326348, 0.5956993044924339, 0.9987954562051723, 0.6715589548470174, -0.14673047445536325, -0.8577286100002693, -0.9415440651830225, -0.33688985339222455, 0.5141027441932179, 0.9891765099647803, 0.7409511253549618, -0.04906767432741436, -0.8032075314806429, -0.9700312531945448, -0.42755509343028464, 0.4275550934302798, 0.9700312531945434, 0.8032075314806546, 0.04906767432741974, -0.7409511253549486, -0.9891765099647811, -0.5141027441932347, 0.33688985339221944, 0.9415440651830159, 0.8577286100002721, 0.1467304744553756, -0.6715589548470188, -0.9987954562051731, -0.5956993044924325, 0.24298017990325138, 0.903989293123444 } }, - Array { { -0.881921264348355, -0.09801714032956069, 0.7730104533627358, 0.9569403357322095, 0.29028467725446433, -0.6343932841636466, -0.9951847266721972, -0.4713967368259965, 0.47139673682599564, 0.9951847266721963, 0.6343932841636528, -0.2902846772544634, -0.9569403357322082, -0.7730104533627409, 0.09801714032955088, 0.8819212643483554, 0.8819212643483564, 0.09801714032956697, -0.7730104533627397, -0.9569403357322087, -0.2902846772544653, 0.6343932841636404, 0.9951847266721979, 0.4713967368260099, -0.4713967368259822, -0.9951847266721948, -0.6343932841636426, 0.29028467725446244, 0.9569403357322078, 0.7730104533627414, -0.0980171403295499, -0.8819212643483483 } }, - Array { { -0.8577286100002721, 0.04906767432741742, 0.9039892931234429, 0.8032075314806457, -0.1467304744553635, -0.9415440651830213, -0.7409511253549584, 0.24298017990326443, 0.9700312531945441, 0.6715589548470239, -0.33688985339221944, -0.9891765099647798, -0.5956993044924345, 0.42755509343027404, 0.9987954562051723, 0.5141027441932301, -0.5141027441932191, -0.998795456205173, -0.4275550934302855, 0.5956993044924357, 0.9891765099647838, 0.33688985339223143, -0.6715589548470144, -0.9700312531945436, -0.2429801799032837, 0.7409511253549499, 0.9415440651830231, 0.14673047445536203, -0.8032075314806318, -0.9039892931234499, -0.04906767432742659, 0.8577286100002711 } }, - Array { { -0.8314696123025455, 0.1950903220161272, 0.9807852804032304, 0.5555702330196028, -0.555570233019601, -0.9807852804032302, -0.19509032201613122, 0.8314696123025451, 0.8314696123025477, -0.19509032201611967, -0.9807852804032293, -0.5555702330196048, 0.555570233019602, 0.98078528040323, 0.195090322016137, -0.8314696123025419, -0.831469612302547, 0.19509032201612786, 0.9807852804032281, 0.5555702330195978, -0.5555702330195971, -0.9807852804032339, -0.1950903220161288, 0.8314696123025386, 0.8314696123025425, -0.1950903220161221, -0.980785280403227, -0.5555702330196027, 0.5555702330195922, 0.9807852804032294, 0.19509032201613458, -0.8314696123025354 } }, - Array { { -0.8032075314806449, 0.3368898533922202, 0.9987954562051724, 0.2429801799032641, -0.8577286100002696, -0.7409511253549583, 0.4275550934302822, 0.9891765099647811, 0.14673047445537077, -0.903989293123445, -0.6715589548470162, 0.5141027441932233, 0.9700312531945438, 0.04906767432741827, -0.9415440651830204, -0.5956993044924352, 0.5956993044924306, 0.9415440651830271, -0.0490676743274266, -0.9700312531945459, -0.5141027441932162, 0.6715589548470224, 0.9039892931234415, -0.14673047445536494, -0.9891765099647812, -0.4275550934302811, 0.7409511253549591, 0.8577286100002726, -0.24298017990326182, -0.9987954562051722, -0.33688985339222405, 0.8032075314806417 } }, - Array { { -0.7730104533627371, 0.47139673682599736, 0.9569403357322094, -0.09801714032956099, -0.9951847266721968, -0.2902846772544613, 0.8819212643483533, 0.6343932841636468, -0.6343932841636404, -0.8819212643483538, 0.2902846772544601, 0.9951847266721976, 0.09801714032955867, -0.9569403357322079, -0.4713967368260047, 0.7730104533627378, 0.7730104533627393, -0.47139673682599, -0.9569403357322087, 0.0980171403295421, 0.9951847266721959, 0.29028467725446244, -0.881921264348346, -0.6343932841636533, 0.6343932841636449, 0.8819212643483644, -0.2902846772544521, -0.995184726672197, -0.09801714032958111, 0.9569403357322056, 0.47139673682599953, -0.7730104533627234 } }, - Array { { -0.7409511253549591, 0.5956993044924327, 0.8577286100002725, -0.4275550934302798, -0.9415440651830222, 0.24298017990326493, 0.9891765099647811, -0.049067674327415586, -0.9987954562051722, -0.14673047445536058, 0.9700312531945421, 0.3368898533922222, -0.9039892931234447, -0.5141027441932267, 0.8032075314806446, 0.6715589548470253, -0.6715589548470154, -0.803207531480644, 0.5141027441932153, 0.9039892931234503, -0.33688985339222316, -0.9700312531945453, 0.1467304744553475, 0.9987954562051722, 0.0490676743274217, -0.9891765099647791, -0.24298017990328463, 0.9415440651830201, 0.42755509343029174, -0.857728610000262, -0.5956993044924334, 0.7409511253549532 } }, +Array, 64> SynthesisSubbandFilterCoefficients = { + Array { { 0.7071067811865476, -0.7071067811865475, -0.7071067811865477, 0.7071067811865474, 0.7071067811865477, -0.7071067811865467, -0.7071067811865471, 0.7071067811865466, 0.7071067811865472, -0.7071067811865465, -0.7071067811865474, 0.7071067811865464, 0.7071067811865475, -0.7071067811865464, -0.7071067811865476, 0.7071067811865462, 0.7071067811865476, -0.7071067811865461, -0.7071067811865477, 0.707106781186546, 0.7071067811865503, -0.707106781186546, -0.7071067811865479, 0.7071067811865483, 0.7071067811865505, -0.7071067811865458, -0.707106781186548, 0.7071067811865482, 0.7071067811865507, -0.7071067811865456, -0.7071067811865482, 0.707106781186548 } }, + Array { { 0.6715589548470183, -0.8032075314806448, -0.5141027441932218, 0.9039892931234431, 0.33688985339222005, -0.9700312531945441, -0.14673047445536166, 0.9987954562051724, -0.04906767432741729, -0.9891765099647811, 0.24298017990326243, 0.9415440651830208, -0.42755509343028003, -0.8577286100002726, 0.5956993044924337, 0.7409511253549602, -0.7409511253549589, -0.5956993044924354, 0.8577286100002715, 0.4275550934302851, -0.9415440651830214, -0.24298017990326443, 0.9891765099647806, 0.04906767432742292, -0.9987954562051724, 0.1467304744553596, 0.9700312531945451, -0.3368898533922206, -0.903989293123444, 0.5141027441932186, 0.8032075314806442, -0.6715589548470177 } }, + Array { { 0.6343932841636455, -0.8819212643483549, -0.29028467725446244, 0.9951847266721969, -0.09801714032955997, -0.9569403357322087, 0.47139673682599736, 0.7730104533627377, -0.773010453362737, -0.4713967368259983, 0.9569403357322089, 0.09801714032956282, -0.995184726672197, 0.2902846772544622, 0.8819212643483563, -0.6343932841636443, -0.6343932841636459, 0.8819212643483553, 0.29028467725446433, -0.9951847266721968, 0.09801714032956063, 0.9569403357322086, -0.47139673682599326, -0.7730104533627394, 0.7730104533627351, 0.4713967368259993, -0.9569403357322086, -0.09801714032956038, 0.9951847266721968, -0.2902846772544578, -0.8819212643483568, 0.6343932841636434 } }, + Array { { 0.5956993044924335, -0.9415440651830207, -0.04906767432741803, 0.9700312531945441, -0.5141027441932214, -0.6715589548470181, 0.903989293123443, 0.1467304744553618, -0.9891765099647811, 0.42755509343028014, 0.7409511253549601, -0.8577286100002717, -0.24298017990326395, 0.9987954562051724, -0.33688985339221794, -0.8032075314806458, 0.8032075314806444, 0.33688985339222016, -0.9987954562051723, 0.24298017990326515, 0.8577286100002729, -0.7409511253549561, -0.4275550934302822, 0.9891765099647806, -0.146730474455363, -0.903989293123444, 0.6715589548470151, 0.5141027441932219, -0.9700312531945433, 0.04906767432741926, 0.9415440651830214, -0.5956993044924298 } }, + Array { { 0.5555702330196023, -0.9807852804032304, 0.1950903220161283, 0.8314696123025455, -0.8314696123025451, -0.19509032201612803, 0.9807852804032307, -0.5555702330196015, -0.5555702330196026, 0.9807852804032304, -0.19509032201612858, -0.8314696123025449, 0.8314696123025438, 0.19509032201613036, -0.9807852804032308, 0.5555702330196011, 0.5555702330196061, -0.9807852804032297, 0.19509032201612447, 0.8314696123025471, -0.8314696123025435, -0.19509032201613097, 0.9807852804032309, -0.5555702330196005, -0.5555702330196036, 0.9807852804032302, -0.19509032201612736, -0.8314696123025456, 0.8314696123025451, 0.19509032201612808, -0.9807852804032303, 0.555570233019603 } }, + Array { { 0.5141027441932217, -0.9987954562051724, 0.42755509343028214, 0.5956993044924332, -0.989176509964781, 0.3368898533922202, 0.6715589548470182, -0.9700312531945441, 0.24298017990326243, 0.7409511253549601, -0.9415440651830203, 0.14673047445536033, 0.8032075314806457, -0.9039892931234428, 0.04906767432741668, 0.8577286100002728, -0.8577286100002696, -0.04906767432741925, 0.9039892931234453, -0.8032075314806442, -0.1467304744553664, 0.9415440651830211, -0.740951125354956, -0.24298017990326493, 0.9700312531945451, -0.6715589548470177, -0.3368898533922243, 0.9891765099647811, -0.5956993044924298, -0.42755509343028286, 0.9987954562051726, -0.5141027441932149 } }, + Array { { 0.4713967368259978, -0.9951847266721969, 0.6343932841636456, 0.29028467725446255, -0.9569403357322087, 0.773010453362737, 0.09801714032956081, -0.8819212643483562, 0.8819212643483555, -0.09801714032956124, -0.7730104533627368, 0.9569403357322088, -0.2902846772544621, -0.6343932841636459, 0.9951847266721968, -0.4713967368259935, -0.47139673682599587, 0.9951847266721967, -0.6343932841636466, -0.2902846772544613, 0.9569403357322086, -0.7730104533627373, -0.09801714032956038, 0.881921264348355, -0.8819212643483548, 0.0980171403295599, 0.7730104533627375, -0.9569403357322085, 0.29028467725446083, 0.634393284163647, -0.9951847266721959, 0.47139673682598915 } }, + Array { { 0.4275550934302822, -0.970031253194544, 0.803207531480645, -0.04906767432741754, -0.7409511253549599, 0.989176509964781, -0.5141027441932212, -0.33688985339221955, 0.9415440651830208, -0.8577286100002717, 0.14673047445536033, 0.6715589548470199, -0.9987954562051723, 0.5956993044924335, 0.24298017990326776, -0.9039892931234438, 0.9039892931234441, -0.2429801799032616, -0.5956993044924329, 0.9987954562051726, -0.6715589548470179, -0.14673047445536663, 0.8577286100002731, -0.941544065183021, 0.33688985339221694, 0.5141027441932221, -0.9891765099647817, 0.740951125354958, 0.04906767432741681, -0.8032075314806467, 0.9700312531945422, -0.42755509343028464 } }, + Array { { 0.38268343236508984, -0.9238795325112868, 0.9238795325112865, -0.3826834323650899, -0.38268343236509056, 0.9238795325112867, -0.9238795325112864, 0.38268343236508956, 0.3826834323650909, -0.9238795325112876, 0.9238795325112868, -0.3826834323650892, -0.3826834323650912, 0.9238795325112877, -0.9238795325112854, 0.38268343236508556, 0.3826834323650883, -0.9238795325112865, 0.9238795325112866, -0.3826834323650885, -0.38268343236509195, 0.9238795325112881, -0.9238795325112851, 0.3826834323650849, 0.382683432365089, -0.9238795325112868, 0.9238795325112863, -0.3826834323650813, -0.3826834323650926, 0.9238795325112856, -0.9238795325112849, 0.3826834323650908 } }, + Array { { 0.33688985339222005, -0.8577286100002721, 0.9891765099647809, -0.6715589548470177, 0.04906767432741742, 0.5956993044924335, -0.9700312531945443, 0.9039892931234429, -0.42755509343028003, -0.24298017990326395, 0.8032075314806457, -0.9987954562051723, 0.7409511253549588, -0.1467304744553635, -0.5141027441932244, 0.941544065183021, -0.9415440651830213, 0.5141027441932188, 0.146730474455363, -0.7409511253549584, 0.9987954562051726, -0.8032075314806439, 0.24298017990326443, 0.42755509343028597, -0.9039892931234442, 0.9700312531945441, -0.5956993044924352, -0.04906767432742757, 0.6715589548470239, -0.9891765099647817, 0.8577286100002706, -0.33688985339221944 } }, + Array { { 0.29028467725446233, -0.7730104533627371, 0.9951847266721969, -0.8819212643483548, 0.47139673682599736, 0.09801714032956081, -0.6343932841636456, 0.9569403357322094, -0.9569403357322089, 0.6343932841636444, -0.09801714032956099, -0.47139673682599875, 0.8819212643483564, -0.9951847266721968, 0.7730104533627352, -0.2902846772544582, -0.2902846772544613, 0.7730104533627373, -0.9951847266721972, 0.8819212643483533, -0.4713967368259928, -0.09801714032956063, 0.6343932841636468, -0.9569403357322098, 0.9569403357322074, -0.6343932841636404, 0.09801714032955235, 0.47139673682599387, -0.8819212643483538, 0.9951847266721969, -0.7730104533627365, 0.2902846772544601 } }, + Array { { 0.24298017990326398, -0.6715589548470187, 0.9415440651830209, -0.989176509964781, 0.8032075314806448, -0.4275550934302818, -0.04906767432741852, 0.5141027441932239, -0.8577286100002726, 0.9987954562051724, -0.9039892931234428, 0.5956993044924335, -0.1467304744553635, -0.3368898533922236, 0.7409511253549605, -0.9700312531945442, 0.9700312531945442, -0.740951125354956, 0.33688985339221716, 0.14673047445536325, -0.5956993044924334, 0.9039892931234457, -0.9987954562051722, 0.8577286100002709, -0.5141027441932149, 0.049067674327418764, 0.4275550934302864, -0.8032075314806426, 0.9891765099647812, -0.9415440651830184, 0.6715589548470194, -0.24298017990325993 } }, + Array { { 0.19509032201612833, -0.5555702330196022, 0.8314696123025455, -0.9807852804032307, 0.9807852804032304, -0.831469612302545, 0.5555702330196015, -0.19509032201612858, -0.19509032201613025, 0.5555702330196028, -0.831469612302545, 0.9807852804032309, -0.9807852804032297, 0.8314696123025456, -0.5555702330196007, 0.19509032201612425, 0.1950903220161276, -0.5555702330196036, 0.8314696123025475, -0.9807852804032303, 0.9807852804032301, -0.8314696123025431, 0.555570233019603, -0.1950903220161269, -0.19509032201612497, 0.5555702330196073, -0.8314696123025459, 0.9807852804032298, -0.9807852804032293, 0.8314696123025446, -0.5555702330196052, 0.19509032201612256 } }, + Array { { 0.14673047445536175, -0.4275550934302825, 0.6715589548470188, -0.8577286100002723, 0.9700312531945443, -0.9987954562051724, 0.9415440651830204, -0.8032075314806446, 0.5956993044924337, -0.33688985339221794, 0.04906767432741668, 0.24298017990326776, -0.5141027441932244, 0.7409511253549605, -0.9039892931234439, 0.989176509964781, -0.989176509964781, 0.9039892931234439, -0.7409511253549558, 0.5141027441932183, -0.24298017990326087, -0.04906767432742023, 0.33688985339222133, -0.5956993044924337, 0.8032075314806446, -0.9415440651830204, 0.9987954562051723, -0.9700312531945448, 0.8577286100002668, -0.6715589548470114, 0.4275550934302745, -0.14673047445535428 } }, + Array { { 0.09801714032956077, -0.29028467725446244, 0.471396736825998, -0.6343932841636454, 0.7730104533627377, -0.8819212643483562, 0.9569403357322094, -0.995184726672197, 0.9951847266721968, -0.9569403357322088, 0.8819212643483553, -0.7730104533627375, 0.6343932841636439, -0.47139673682599326, 0.2902846772544615, -0.09801714032955673, -0.09801714032956038, 0.29028467725446505, -0.4713967368259965, 0.6343932841636468, -0.7730104533627399, 0.8819212643483553, -0.9569403357322078, 0.9951847266721968, -0.9951847266721966, 0.9569403357322073, -0.881921264348351, 0.7730104533627387, -0.6343932841636453, 0.47139673682599476, -0.29028467725445634, 0.09801714032955137 } }, + Array { { 0.049067674327418126, -0.1467304744553623, 0.24298017990326423, -0.336889853392221, 0.4275550934302828, -0.5141027441932238, 0.595699304492435, -0.6715589548470199, 0.7409511253549602, -0.8032075314806458, 0.8577286100002728, -0.9039892931234438, 0.941544065183021, -0.9700312531945442, 0.989176509964781, -0.9987954562051724, 0.9987954562051724, -0.989176509964781, 0.9700312531945441, -0.941544065183021, 0.9039892931234437, -0.8577286100002726, 0.8032075314806414, -0.7409511253549601, 0.6715589548470144, -0.5956993044924349, 0.5141027441932174, -0.4275550934302842, 0.3368898533922158, -0.2429801799032666, 0.14673047445535767, -0.049067674327421214 } }, + Array { { 6.123233995736766e-17, -1.8369701987210297e-16, 3.061616997868383e-16, -4.286263797015736e-16, 5.51091059616309e-16, -2.4499125789312946e-15, -9.803364199544708e-16, -2.6948419387607653e-15, -7.354070601250002e-16, -2.939771298590236e-15, -4.904777002955296e-16, -3.1847006584197066e-15, -2.45548340466059e-16, -3.4296300182491773e-15, -6.189806365883577e-19, -3.674559378078648e-15, 2.443103791928823e-16, -3.919488737908119e-15, 4.892397390223529e-16, -4.164418097737589e-15, 7.839596456452825e-15, -4.40934745756706e-15, 9.790984586812941e-16, 2.4511505402044715e-15, 8.329455176111767e-15, -4.899206177226001e-15, 1.4689571783402355e-15, 1.96129182054553e-15, 8.819313895770708e-15, -5.389064896884942e-15, 1.9588158979991767e-15, 1.471433100886589e-15 } }, + Array { { -0.04906767432741801, 0.14673047445536194, -0.2429801799032628, 0.3368898533922202, -0.4275550934302818, 0.5141027441932227, -0.5956993044924338, 0.6715589548470184, -0.7409511253549589, 0.8032075314806444, -0.8577286100002696, 0.9039892931234441, -0.9415440651830213, 0.9700312531945442, -0.989176509964781, 0.9987954562051724, -0.9987954562051724, 0.9891765099647811, -0.9700312531945443, 0.9415440651830214, -0.9039892931234473, 0.8577286100002698, -0.8032075314806426, 0.7409511253549568, -0.6715589548470162, 0.5956993044924314, -0.51410274419322, 0.42755509343028064, -0.336889853392219, 0.24298017990326326, -0.14673047445536155, 0.04906767432741827 } }, + Array { { -0.09801714032956065, 0.29028467725446205, -0.4713967368259975, 0.6343932841636447, -0.773010453362737, 0.8819212643483555, -0.9569403357322089, 0.9951847266721968, -0.995184726672197, 0.9569403357322095, -0.8819212643483565, 0.7730104533627371, -0.634393284163649, 0.4713967368259993, -0.2902846772544615, 0.09801714032956405, 0.0980171403295599, -0.29028467725445756, 0.47139673682599564, -0.6343932841636404, 0.773010453362739, -0.8819212643483545, 0.9569403357322073, -0.9951847266721959, 0.9951847266721969, -0.9569403357322102, 0.8819212643483592, -0.7730104533627362, 0.6343932841636479, -0.47139673682600425, 0.2902846772544601, -0.09801714032956259 } }, + Array { { -0.14673047445536164, 0.42755509343028214, -0.6715589548470177, 0.8577286100002719, -0.9700312531945441, 0.9987954562051724, -0.9415440651830209, 0.8032075314806457, -0.5956993044924354, 0.33688985339222016, -0.04906767432741925, -0.2429801799032616, 0.5141027441932188, -0.740951125354956, 0.9039892931234439, -0.989176509964781, 0.9891765099647811, -0.9039892931234442, 0.7409511253549612, -0.5141027441932254, 0.2429801799032623, 0.04906767432741142, -0.33688985339221944, 0.5956993044924263, -0.8032075314806432, 0.9415440651830218, -0.9987954562051722, 0.9700312531945438, -0.8577286100002759, 0.6715589548470194, -0.42755509343029086, 0.14673047445536544 } }, + Array { { -0.1950903220161282, 0.5555702330196018, -0.8314696123025451, 0.9807852804032304, -0.9807852804032307, 0.8314696123025448, -0.5555702330196027, 0.19509032201613036, 0.19509032201612822, -0.555570233019601, 0.8314696123025456, -0.9807852804032295, 0.9807852804032309, -0.8314696123025455, 0.5555702330196066, -0.19509032201613144, -0.19509032201612714, 0.555570233019603, -0.8314696123025429, 0.9807852804032301, -0.9807852804032304, 0.831469612302544, -0.5555702330196105, 0.19509032201613602, 0.19509032201612256, -0.5555702330195991, 0.8314696123025443, -0.9807852804032305, 0.98078528040323, -0.8314696123025506, 0.5555702330196085, -0.1950903220161336 } }, + Array { { -0.24298017990326387, 0.6715589548470183, -0.9415440651830205, 0.9891765099647811, -0.8032075314806455, 0.4275550934302814, 0.049067674327416926, -0.5141027441932223, 0.8577286100002715, -0.9987954562051723, 0.9039892931234453, -0.5956993044924329, 0.146730474455363, 0.33688985339221716, -0.7409511253549558, 0.9700312531945441, -0.9700312531945443, 0.7409511253549612, -0.33688985339221805, -0.14673047445536205, 0.5956993044924321, -0.9039892931234419, 0.9987954562051726, -0.8577286100002757, 0.5141027441932292, -0.04906767432742855, -0.42755509343028375, 0.8032075314806449, -0.9891765099647807, 0.941544065183022, -0.6715589548470223, 0.24298017990327087 } }, + Array { { -0.29028467725446216, 0.7730104533627367, -0.9951847266721969, 0.8819212643483553, -0.4713967368259983, -0.09801714032956124, 0.6343932841636444, -0.9569403357322088, 0.9569403357322095, -0.6343932841636489, 0.09801714032956356, 0.47139673682599625, -0.8819212643483549, 0.9951847266721968, -0.7730104533627398, 0.2902846772544653, 0.29028467725446083, -0.7730104533627368, 0.9951847266721963, -0.8819212643483538, 0.47139673682600036, 0.09801714032955186, -0.6343932841636453, 0.9569403357322072, -0.9569403357322082, 0.6343932841636479, -0.09801714032956942, -0.47139673682599736, 0.8819212643483522, -0.9951847266721966, 0.773010453362739, -0.2902846772544709 } }, + Array { { -0.33688985339221994, 0.857728610000272, -0.9891765099647811, 0.6715589548470182, -0.04906767432741852, -0.5956993044924338, 0.9700312531945435, -0.9039892931234437, 0.4275550934302851, 0.24298017990326515, -0.8032075314806442, 0.9987954562051726, -0.7409511253549584, 0.14673047445536325, 0.5141027441932183, -0.941544065183021, 0.9415440651830214, -0.5141027441932254, -0.14673047445536205, 0.7409511253549529, -0.9987954562051722, 0.8032075314806449, -0.24298017990327322, -0.4275550934302776, 0.9039892931234431, -0.9700312531945464, 0.5956993044924377, 0.0490676743274173, -0.6715589548470108, 0.9891765099647801, -0.8577286100002726, 0.33688985339223004 } }, + Array { { -0.3826834323650897, 0.9238795325112865, -0.9238795325112867, 0.38268343236509067, 0.38268343236508956, -0.923879532511287, 0.9238795325112876, -0.3826834323650912, -0.382683432365089, 0.9238795325112867, -0.9238795325112865, 0.3826834323650885, 0.3826834323650851, -0.9238795325112851, 0.9238795325112881, -0.3826834323650924, -0.3826834323650813, 0.9238795325112835, -0.9238795325112897, 0.3826834323650962, 0.382683432365084, -0.9238795325112846, 0.9238795325112886, -0.3826834323650935, -0.38268343236508673, 0.9238795325112857, -0.9238795325112874, 0.3826834323650908, 0.38268343236508945, -0.9238795325112868, 0.9238795325112863, -0.38268343236508806 } }, + Array { { -0.42755509343028186, 0.970031253194544, -0.8032075314806454, 0.0490676743274184, 0.7409511253549591, -0.9891765099647809, 0.5141027441932241, 0.33688985339221783, -0.9415440651830214, 0.8577286100002729, -0.1467304744553664, -0.6715589548470179, 0.9987954562051726, -0.5956993044924334, -0.24298017990326087, 0.9039892931234437, -0.9039892931234473, 0.2429801799032623, 0.5956993044924321, -0.9987954562051722, 0.6715589548470242, 0.14673047445536494, -0.8577286100002721, 0.9415440651830218, -0.33688985339222594, -0.5141027441932137, 0.9891765099647812, -0.7409511253549601, -0.04906767432741338, 0.8032075314806403, -0.9700312531945466, 0.427555093430282 } }, + Array { { -0.4713967368259977, 0.9951847266721969, -0.6343932841636454, -0.29028467725446255, 0.9569403357322089, -0.7730104533627368, -0.09801714032956099, 0.8819212643483553, -0.8819212643483565, 0.09801714032956356, 0.7730104533627351, -0.9569403357322097, 0.29028467725446505, 0.6343932841636434, -0.9951847266721972, 0.4713967368259999, 0.47139673682598915, -0.9951847266721966, 0.6343932841636528, 0.2902846772544601, -0.9569403357322062, 0.7730104533627383, 0.09801714032955137, -0.881921264348354, 0.8819212643483594, -0.09801714032956259, -0.7730104533627312, 0.9569403357322094, -0.2902846772544709, -0.6343932841636442, 0.9951847266721977, -0.47139673682601163 } }, + Array { { -0.5141027441932217, 0.9987954562051724, -0.4275550934302827, -0.5956993044924326, 0.9891765099647809, -0.33688985339221983, -0.6715589548470184, 0.9700312531945441, -0.24298017990326443, -0.7409511253549561, 0.9415440651830211, -0.14673047445536663, -0.8032075314806439, 0.9039892931234457, -0.04906767432742023, -0.8577286100002726, 0.8577286100002698, 0.04906767432741142, -0.9039892931234419, 0.8032075314806449, 0.14673047445536494, -0.9415440651830181, 0.7409511253549621, 0.2429801799032628, -0.9700312531945445, 0.6715589548470249, 0.33688985339221483, -0.9891765099647807, 0.5956993044924325, 0.42755509343027315, -0.9987954562051727, 0.5141027441932245 } }, + Array { { -0.555570233019602, 0.9807852804032304, -0.19509032201612803, -0.831469612302545, 0.8314696123025448, 0.19509032201612844, -0.9807852804032303, 0.5555702330196061, 0.5555702330196038, -0.9807852804032302, 0.1950903220161276, 0.8314696123025452, -0.8314696123025456, -0.19509032201612714, 0.9807852804032301, -0.5555702330196102, -0.5555702330196056, 0.9807852804032298, -0.19509032201612544, -0.8314696123025465, 0.8314696123025443, 0.1950903220161293, -0.9807852804032305, 0.5555702330196024, 0.5555702330196015, -0.9807852804032308, 0.19509032201613025, 0.8314696123025438, -0.831469612302547, -0.19509032201612447, 0.9807852804032268, -0.5555702330196183 } }, + Array { { -0.5956993044924334, 0.9415440651830209, 0.04906767432741742, -0.9700312531945441, 0.5141027441932239, 0.6715589548470184, -0.9039892931234437, -0.1467304744553635, 0.9891765099647806, -0.4275550934302822, -0.740951125354956, 0.8577286100002731, 0.24298017990326443, -0.9987954562051722, 0.33688985339222133, 0.8032075314806414, -0.8032075314806426, -0.33688985339221944, 0.9987954562051726, -0.24298017990327322, -0.8577286100002721, 0.7409511253549621, 0.42755509343027404, -0.9891765099647809, 0.14673047445536544, 0.9039892931234398, -0.6715589548470173, -0.5141027441932191, 0.9700312531945459, -0.04906767432741582, -0.9415440651830153, 0.5956993044924388 } }, + Array { { -0.6343932841636454, 0.881921264348355, 0.29028467725446266, -0.9951847266721969, 0.09801714032956282, 0.9569403357322088, -0.47139673682599875, -0.7730104533627375, 0.7730104533627371, 0.47139673682599625, -0.9569403357322097, -0.09801714032955648, 0.9951847266721964, -0.290284677254462, -0.8819212643483513, 0.6343932841636472, 0.6343932841636483, -0.8819212643483573, -0.2902846772544634, 0.9951847266721976, -0.09801714032956209, -0.956940335732206, 0.47139673682600125, 0.7730104533627381, -0.7730104533627412, -0.4713967368259969, 0.9569403357322115, 0.09801714032955722, -0.9951847266721972, 0.2902846772544681, 0.8819212643483483, -0.6343932841636412 } }, + Array { { -0.6715589548470184, 0.8032075314806453, 0.5141027441932213, -0.9039892931234434, -0.33688985339221816, 0.970031253194544, 0.1467304744553601, -0.9987954562051724, 0.04906767432742292, 0.9891765099647806, -0.24298017990326493, -0.941544065183021, 0.42755509343028597, 0.8577286100002709, -0.5956993044924337, -0.7409511253549601, 0.7409511253549568, 0.5956993044924263, -0.8577286100002757, -0.4275550934302776, 0.9415440651830218, 0.2429801799032628, -0.9891765099647809, -0.04906767432742072, 0.998795456205172, -0.1467304744553693, -0.9700312531945426, 0.3368898533922236, 0.9039892931234365, -0.5141027441932339, -0.8032075314806376, 0.671558954847026 } }, + Array { { -0.7071067811865475, 0.7071067811865477, 0.7071067811865466, -0.7071067811865474, -0.7071067811865464, 0.7071067811865476, 0.707106781186546, -0.7071067811865479, -0.7071067811865458, 0.7071067811865507, 0.707106781186548, -0.7071067811865483, -0.7071067811865452, 0.7071067811865511, 0.7071067811865425, -0.7071067811865539, -0.7071067811865498, 0.7071067811865467, 0.707106781186547, -0.7071067811865495, -0.7071067811865442, 0.7071067811865522, 0.7071067811865415, -0.707106781186555, -0.7071067811865487, 0.7071067811865477, 0.707106781186546, -0.7071067811865606, -0.7071067811865432, 0.7071067811865432, 0.7071067811865405, -0.707106781186546 } }, + Array { { -0.7409511253549589, 0.5956993044924332, 0.8577286100002719, -0.4275550934302813, -0.9415440651830203, 0.2429801799032641, 0.9891765099647806, -0.04906767432741925, -0.9987954562051724, -0.146730474455363, 0.9700312531945451, 0.33688985339221694, -0.9039892931234442, -0.5141027441932149, 0.8032075314806446, 0.6715589548470144, -0.6715589548470162, -0.8032075314806432, 0.5141027441932292, 0.9039892931234431, -0.33688985339222594, -0.9700312531945445, 0.14673047445536544, 0.998795456205172, 0.04906767432741681, -0.989176509964782, -0.24298017990326515, 0.9415440651830271, 0.4275550934302855, -0.8577286100002731, -0.595699304492427, 0.7409511253549683 } }, + Array { { -0.773010453362737, 0.471396736825998, 0.9569403357322085, -0.0980171403295627, -0.995184726672197, -0.2902846772544621, 0.8819212643483564, 0.6343932841636439, -0.634393284163649, -0.8819212643483549, 0.29028467725446505, 0.9951847266721964, 0.09801714032955966, -0.9569403357322078, -0.47139673682599215, 0.7730104533627381, 0.7730104533627387, -0.47139673682600386, -0.9569403357322082, 0.09801714032955867, 0.9951847266721977, 0.29028467725445917, -0.8819212643483545, -0.6343932841636388, 0.6343932841636487, 0.8819212643483552, -0.2902846772544578, -0.995184726672195, -0.098017140329546, 0.9569403357322118, 0.4713967368259926, -0.7730104533627378 } }, + Array { { -0.8032075314806448, 0.33688985339222005, 0.9987954562051724, 0.24298017990326243, -0.8577286100002726, -0.7409511253549589, 0.4275550934302851, 0.9891765099647806, 0.1467304744553596, -0.903989293123444, -0.6715589548470177, 0.5141027441932221, 0.9700312531945441, 0.049067674327418764, -0.9415440651830204, -0.5956993044924349, 0.5956993044924314, 0.9415440651830218, -0.04906767432742855, -0.9700312531945464, -0.5141027441932137, 0.6715589548470249, 0.9039892931234398, -0.1467304744553693, -0.989176509964782, -0.42755509343027626, 0.7409511253549631, 0.857728610000262, -0.24298017990326848, -0.9987954562051733, -0.3368898533922167, 0.8032075314806552 } }, + Array { { -0.8314696123025453, 0.19509032201612878, 0.9807852804032307, 0.5555702330196015, -0.5555702330196027, -0.9807852804032303, -0.19509032201612808, 0.8314696123025471, 0.8314696123025455, -0.19509032201613122, -0.9807852804032303, -0.5555702330196002, 0.5555702330196071, 0.9807852804032301, 0.19509032201612303, -0.83146961230255, -0.8314696123025465, 0.19509032201612928, 0.9807852804032313, 0.5555702330195958, -0.5555702330196114, -0.9807852804032304, -0.19509032201612497, 0.8314696123025489, 0.8314696123025397, -0.1950903220161413, -0.9807852804032337, -0.5555702330196093, 0.5555702330195978, 0.9807852804032309, 0.1950903220161269, -0.8314696123025479 } }, + Array { { -0.857728610000272, 0.049067674327418154, 0.9039892931234434, 0.8032075314806447, -0.14673047445536216, -0.9415440651830209, -0.7409511253549563, 0.242980179903268, 0.9700312531945451, 0.6715589548470151, -0.3368898533922243, -0.9891765099647817, -0.5956993044924352, 0.4275550934302864, 0.9987954562051723, 0.5141027441932174, -0.51410274419322, -0.9987954562051722, -0.42755509343028375, 0.5956993044924377, 0.9891765099647812, 0.33688985339221483, -0.6715589548470173, -0.9700312531945426, -0.24298017990326515, 0.7409511253549631, 0.9415440651830211, 0.1467304744553698, -0.8032075314806528, -0.9039892931234407, -0.049067674327418764, 0.8577286100002681 } }, + Array { { -0.8819212643483549, -0.09801714032955997, 0.7730104533627377, 0.9569403357322089, 0.2902846772544622, -0.6343932841636459, -0.9951847266721968, -0.47139673682599326, 0.4713967368259993, 0.9951847266721968, 0.6343932841636434, -0.290284677254462, -0.9569403357322078, -0.7730104533627321, 0.09801714032956502, 0.8819212643483556, 0.8819212643483558, 0.09801714032955137, -0.7730104533627409, -0.9569403357322079, -0.29028467725446244, 0.634393284163654, 0.9951847266721962, 0.4713967368259935, -0.47139673682601163, -0.9951847266721967, -0.634393284163638, 0.29028467725445495, 0.9569403357322098, 0.7730104533627278, -0.0980171403295577, -0.8819212643483589 } }, + Array { { -0.9039892931234433, -0.2429801799032628, 0.5956993044924335, 0.9987954562051724, 0.6715589548470184, -0.14673047445536241, -0.857728610000271, -0.9415440651830213, -0.3368898533922206, 0.5141027441932219, 0.9891765099647811, 0.740951125354958, -0.04906767432742757, -0.8032075314806426, -0.9700312531945448, -0.4275550934302842, 0.42755509343028064, 0.9700312531945438, 0.8032075314806449, 0.0490676743274173, -0.7409511253549601, -0.9891765099647807, -0.5141027441932191, 0.3368898533922236, 0.9415440651830271, 0.857728610000262, 0.1467304744553698, -0.6715589548470129, -0.9987954562051727, -0.595699304492438, 0.24298017990325896, 0.9039892931234415 } }, + Array { { -0.9238795325112867, -0.3826834323650899, 0.38268343236509067, 0.9238795325112875, 0.9238795325112868, 0.3826834323650891, -0.38268343236509145, -0.9238795325112865, -0.9238795325112852, -0.3826834323650883, 0.382683432365089, 0.9238795325112882, 0.9238795325112835, 0.3826834323650908, -0.38268343236509306, -0.9238795325112898, -0.9238795325112873, -0.38268343236508673, 0.3826834323650971, 0.9238795325112862, 0.9238795325112856, 0.3826834323650826, -0.38268343236508806, -0.9238795325112878, -0.9238795325112893, -0.38268343236507857, 0.38268343236509217, 0.9238795325112841, 0.9238795325112822, 0.3826834323650876, -0.38268343236508306, -0.9238795325112912 } }, + Array { { -0.9415440651830207, -0.5141027441932214, 0.1467304744553618, 0.7409511253549601, 0.9987954562051724, 0.8032075314806444, 0.24298017990326515, -0.4275550934302822, -0.903989293123444, -0.9700312531945433, -0.5956993044924298, 0.04906767432741681, 0.6715589548470239, 0.9891765099647812, 0.8577286100002668, 0.3368898533922158, -0.336889853392219, -0.8577286100002759, -0.9891765099647807, -0.6715589548470108, -0.04906767432741338, 0.5956993044924325, 0.9700312531945459, 0.9039892931234365, 0.4275550934302855, -0.24298017990326848, -0.8032075314806528, -0.9987954562051727, -0.7409511253549578, -0.14673047445535137, 0.5141027441932381, 0.9415440651830205 } }, + Array { { -0.9569403357322088, -0.6343932841636448, -0.09801714032955972, 0.4713967368259984, 0.8819212643483563, 0.9951847266721968, 0.7730104533627352, 0.2902846772544615, -0.2902846772544615, -0.7730104533627398, -0.9951847266721972, -0.8819212643483513, -0.47139673682599215, 0.09801714032956502, 0.6343932841636476, 0.9569403357322092, 0.9569403357322092, 0.6343932841636476, 0.09801714032955088, -0.4713967368260047, -0.8819212643483579, -0.9951847266721965, -0.7730104533627352, -0.2902846772544615, 0.2902846772544615, 0.7730104533627352, 0.9951847266721965, 0.8819212643483579, 0.47139673682597966, -0.09801714032957916, -0.6343932841636586, -0.9569403357322133 } }, + Array { { -0.970031253194544, -0.7409511253549593, -0.3368898533922201, 0.14673047445536203, 0.5956993044924352, 0.9039892931234438, 0.9987954562051724, 0.8577286100002712, 0.5141027441932186, 0.04906767432741926, -0.42755509343028286, -0.8032075314806467, -0.9891765099647817, -0.9415440651830184, -0.6715589548470114, -0.2429801799032666, 0.24298017990326326, 0.6715589548470194, 0.941544065183022, 0.9891765099647801, 0.8032075314806403, 0.42755509343027315, -0.04906767432741582, -0.5141027441932339, -0.8577286100002731, -0.9987954562051733, -0.9039892931234407, -0.595699304492438, -0.14673047445535137, 0.33688985339221855, 0.740951125354969, 0.9700312531945446 } }, + Array { { -0.9807852804032304, -0.8314696123025451, -0.5555702330196015, -0.19509032201612858, 0.19509032201613036, 0.5555702330196061, 0.8314696123025471, 0.9807852804032309, 0.9807852804032302, 0.8314696123025451, 0.555570233019603, 0.19509032201613025, -0.19509032201613216, -0.5555702330196105, -0.8314696123025462, -0.980785280403232, -0.9807852804032305, -0.8314696123025421, -0.5555702330196044, -0.19509032201612497, 0.19509032201613746, 0.5555702330196032, 0.8314696123025413, 0.9807852804032302, 0.9807852804032294, 0.8314696123025391, 0.5555702330195881, 0.1950903220161336, -0.1950903220161288, -0.5555702330196076, -0.8314696123025522, -0.9807852804032341 } }, + Array { { -0.989176509964781, -0.9039892931234431, -0.7409511253549592, -0.5141027441932225, -0.24298017990326207, 0.04906767432742268, 0.3368898533922204, 0.5956993044924359, 0.8032075314806442, 0.9415440651830214, 0.9987954562051726, 0.9700312531945422, 0.8577286100002706, 0.6715589548470194, 0.4275550934302745, 0.14673047445535767, -0.14673047445536155, -0.42755509343029086, -0.6715589548470223, -0.8577286100002726, -0.9700312531945466, -0.9987954562051727, -0.9415440651830153, -0.8032075314806376, -0.595699304492427, -0.3368898533922167, -0.049067674327418764, 0.24298017990325896, 0.5141027441932381, 0.740951125354969, 0.9039892931234478, 0.9891765099647819 } }, + Array { { -0.9951847266721968, -0.9569403357322085, -0.8819212643483547, -0.7730104533627357, -0.6343932841636443, -0.4713967368259935, -0.2902846772544582, -0.09801714032955673, 0.09801714032956405, 0.2902846772544653, 0.4713967368259999, 0.6343932841636472, 0.7730104533627381, 0.8819212643483556, 0.9569403357322092, 0.9951847266721969, 0.9951847266721969, 0.9569403357322089, 0.8819212643483554, 0.7730104533627378, 0.6343932841636468, 0.47139673682599953, 0.29028467725445123, 0.09801714032956356, -0.09801714032957136, -0.2902846772544587, -0.4713967368260064, -0.6343932841636418, -0.7730104533627428, -0.8819212643483524, -0.9569403357322113, -0.9951847266721963 } }, + Array { { -0.9987954562051724, -0.989176509964781, -0.9700312531945441, -0.9415440651830203, -0.9039892931234428, -0.8577286100002696, -0.8032075314806442, -0.740951125354956, -0.6715589548470177, -0.5956993044924298, -0.5141027441932149, -0.42755509343028464, -0.33688985339221944, -0.24298017990325993, -0.14673047445535428, -0.049067674327421214, 0.04906767432741827, 0.14673047445536544, 0.24298017990327087, 0.33688985339223004, 0.427555093430282, 0.5141027441932245, 0.5956993044924388, 0.671558954847026, 0.7409511253549683, 0.8032075314806552, 0.8577286100002681, 0.9039892931234415, 0.9415440651830205, 0.9700312531945446, 0.9891765099647819, 0.9987954562051728 } }, + Array { { -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0 } }, + Array { { -0.9987954562051724, -0.9891765099647811, -0.9700312531945443, -0.9415440651830209, -0.9039892931234437, -0.857728610000271, -0.803207531480646, -0.7409511253549584, -0.6715589548470208, -0.5956993044924335, -0.5141027441932254, -0.4275550934302833, -0.33688985339221855, -0.24298017990327322, -0.14673047445536833, -0.0490676743274217, 0.0490676743274173, 0.14673047445536397, 0.24298017990325518, 0.3368898533922144, 0.42755509343027936, 0.5141027441932094, 0.5956993044924357, 0.6715589548470122, 0.7409511253549459, 0.8032075314806435, 0.857728610000265, 0.9039892931234449, 0.9415440651830181, 0.9700312531945394, 0.9891765099647807, 0.9987954562051717 } }, + Array { { -0.9951847266721969, -0.9569403357322087, -0.8819212643483562, -0.7730104533627368, -0.6343932841636459, -0.47139673682599587, -0.2902846772544613, -0.09801714032956038, 0.0980171403295599, 0.29028467725446083, 0.47139673682598915, 0.6343932841636483, 0.7730104533627387, 0.8819212643483558, 0.9569403357322092, 0.9951847266721969, 0.9951847266721969, 0.9569403357322094, 0.8819212643483564, 0.7730104533627393, 0.63439328416366, 0.47139673682599, 0.29028467725445495, 0.0980171403295538, -0.09801714032956649, -0.29028467725446716, -0.47139673682600125, -0.6343932841636479, -0.7730104533627383, -0.8819212643483556, -0.9569403357322089, -0.9951847266721968 } }, + Array { { -0.989176509964781, -0.9039892931234433, -0.74095112535496, -0.514102744193224, -0.2429801799032642, 0.049067674327419986, 0.3368898533922174, 0.5956993044924329, 0.8032075314806417, 0.9415440651830198, 0.9987954562051724, 0.9700312531945453, 0.8577286100002701, 0.6715589548470191, 0.4275550934302873, 0.1467304744553722, -0.14673047445536058, -0.4275550934302767, -0.6715589548470104, -0.857728610000264, -0.9700312531945425, -0.9987954562051722, -0.9415440651830261, -0.8032075314806487, -0.5956993044924309, -0.33688985339223515, -0.049067674327424635, 0.2429801799032666, 0.5141027441932078, 0.7409511253549544, 0.9039892931234444, 0.9891765099647786 } }, + Array { { -0.9807852804032304, -0.8314696123025456, -0.5555702330196026, -0.19509032201613025, 0.19509032201612822, 0.5555702330196038, 0.8314696123025455, 0.9807852804032302, 0.980785280403231, 0.8314696123025477, 0.5555702330196073, 0.1950903220161288, -0.1950903220161192, -0.5555702330195991, -0.8314696123025462, -0.9807852804032291, -0.9807852804032308, -0.8314696123025509, -0.5555702330196061, -0.1950903220161413, 0.19509032201613458, 0.5555702330196003, 0.8314696123025391, 0.9807852804032267, 0.9807852804032304, 0.83146961230255, 0.5555702330196166, 0.19509032201612592, -0.1950903220161221, -0.5555702330195897, -0.8314696123025479, -0.9807852804032297 } }, + Array { { -0.970031253194544, -0.7409511253549599, -0.33688985339221955, 0.14673047445536033, 0.5956993044924335, 0.9039892931234441, 0.9987954562051726, 0.8577286100002731, 0.5141027441932221, 0.04906767432741681, -0.42755509343028464, -0.8032075314806391, -0.9891765099647798, -0.9415440651830229, -0.671558954847022, -0.24298017990326706, 0.2429801799032623, 0.6715589548470184, 0.9415440651830214, 0.9891765099647826, 0.8032075314806505, 0.4275550934302891, -0.049067674327411916, -0.5141027441932179, -0.8577286100002706, -0.9987954562051723, -0.9039892931234431, -0.5956993044924317, -0.14673047445535817, 0.336889853392225, 0.7409511253549447, 0.9700312531945392 } }, + Array { { -0.9569403357322089, -0.6343932841636454, -0.0980171403295627, 0.4713967368259969, 0.8819212643483553, 0.9951847266721967, 0.7730104533627373, 0.29028467725446505, -0.29028467725445756, -0.7730104533627368, -0.9951847266721966, -0.8819212643483573, -0.47139673682600386, 0.09801714032955137, 0.6343932841636476, 0.9569403357322089, 0.9569403357322094, 0.6343932841636487, 0.09801714032956697, -0.47139673682599, -0.8819212643483566, -0.9951847266721981, -0.7730104533627378, -0.2902846772544793, 0.29028467725445684, 0.7730104533627409, 0.9951847266721959, 0.8819212643483543, 0.47139673682601074, -0.0980171403295577, -0.6343932841636305, -0.9569403357322067 } }, + Array { { -0.9415440651830208, -0.514102744193222, 0.14673047445536058, 0.7409511253549589, 0.9987954562051723, 0.8032075314806439, 0.24298017990326823, -0.4275550934302789, -0.9039892931234422, -0.9700312531945444, -0.5956993044924396, 0.04906767432741828, 0.671558954847014, 0.9891765099647812, 0.8577286100002741, 0.3368898533922296, -0.33688985339221805, -0.8577286100002678, -0.989176509964781, -0.6715589548470231, -0.049067674327430505, 0.5956993044924184, 0.9700312531945449, 0.9039892931234444, 0.42755509343028997, -0.24298017990324947, -0.8032075314806324, -0.9987954562051723, -0.7409511253549624, -0.1467304744553727, 0.514102744193207, 0.9415440651830225 } }, + Array { { -0.9238795325112868, -0.38268343236509056, 0.38268343236508956, 0.9238795325112868, 0.9238795325112877, 0.3826834323650883, -0.3826834323650885, -0.9238795325112851, -0.9238795325112868, -0.3826834323650926, 0.3826834323650908, 0.9238795325112833, 0.9238795325112886, 0.38268343236509034, -0.3826834323650799, -0.9238795325112843, -0.9238795325112876, -0.38268343236508806, 0.3826834323650822, 0.9238795325112852, 0.9238795325112867, 0.3826834323650858, -0.38268343236507135, -0.9238795325112807, -0.9238795325112912, -0.38268343236509667, 0.38268343236508673, 0.9238795325112871, 0.9238795325112849, 0.38268343236510755, -0.38268343236507585, -0.9238795325112826 } }, + Array { { -0.9039892931234434, -0.24298017990326348, 0.5956993044924339, 0.9987954562051723, 0.6715589548470174, -0.14673047445536325, -0.8577286100002693, -0.9415440651830225, -0.33688985339222455, 0.5141027441932179, 0.9891765099647803, 0.7409511253549618, -0.04906767432741436, -0.8032075314806429, -0.9700312531945448, -0.42755509343028464, 0.4275550934302798, 0.9700312531945434, 0.8032075314806546, 0.04906767432741974, -0.7409511253549486, -0.9891765099647811, -0.5141027441932347, 0.33688985339221944, 0.9415440651830159, 0.8577286100002721, 0.1467304744553756, -0.6715589548470188, -0.9987954562051731, -0.5956993044924325, 0.24298017990325138, 0.903989293123444 } }, + Array { { -0.881921264348355, -0.09801714032956069, 0.7730104533627358, 0.9569403357322095, 0.29028467725446433, -0.6343932841636466, -0.9951847266721972, -0.4713967368259965, 0.47139673682599564, 0.9951847266721963, 0.6343932841636528, -0.2902846772544634, -0.9569403357322082, -0.7730104533627409, 0.09801714032955088, 0.8819212643483554, 0.8819212643483564, 0.09801714032956697, -0.7730104533627397, -0.9569403357322087, -0.2902846772544653, 0.6343932841636404, 0.9951847266721979, 0.4713967368260099, -0.4713967368259822, -0.9951847266721948, -0.6343932841636426, 0.29028467725446244, 0.9569403357322078, 0.7730104533627414, -0.0980171403295499, -0.8819212643483483 } }, + Array { { -0.8577286100002721, 0.04906767432741742, 0.9039892931234429, 0.8032075314806457, -0.1467304744553635, -0.9415440651830213, -0.7409511253549584, 0.24298017990326443, 0.9700312531945441, 0.6715589548470239, -0.33688985339221944, -0.9891765099647798, -0.5956993044924345, 0.42755509343027404, 0.9987954562051723, 0.5141027441932301, -0.5141027441932191, -0.998795456205173, -0.4275550934302855, 0.5956993044924357, 0.9891765099647838, 0.33688985339223143, -0.6715589548470144, -0.9700312531945436, -0.2429801799032837, 0.7409511253549499, 0.9415440651830231, 0.14673047445536203, -0.8032075314806318, -0.9039892931234499, -0.04906767432742659, 0.8577286100002711 } }, + Array { { -0.8314696123025455, 0.1950903220161272, 0.9807852804032304, 0.5555702330196028, -0.555570233019601, -0.9807852804032302, -0.19509032201613122, 0.8314696123025451, 0.8314696123025477, -0.19509032201611967, -0.9807852804032293, -0.5555702330196048, 0.555570233019602, 0.98078528040323, 0.195090322016137, -0.8314696123025419, -0.831469612302547, 0.19509032201612786, 0.9807852804032281, 0.5555702330195978, -0.5555702330195971, -0.9807852804032339, -0.1950903220161288, 0.8314696123025386, 0.8314696123025425, -0.1950903220161221, -0.980785280403227, -0.5555702330196027, 0.5555702330195922, 0.9807852804032294, 0.19509032201613458, -0.8314696123025354 } }, + Array { { -0.8032075314806449, 0.3368898533922202, 0.9987954562051724, 0.2429801799032641, -0.8577286100002696, -0.7409511253549583, 0.4275550934302822, 0.9891765099647811, 0.14673047445537077, -0.903989293123445, -0.6715589548470162, 0.5141027441932233, 0.9700312531945438, 0.04906767432741827, -0.9415440651830204, -0.5956993044924352, 0.5956993044924306, 0.9415440651830271, -0.0490676743274266, -0.9700312531945459, -0.5141027441932162, 0.6715589548470224, 0.9039892931234415, -0.14673047445536494, -0.9891765099647812, -0.4275550934302811, 0.7409511253549591, 0.8577286100002726, -0.24298017990326182, -0.9987954562051722, -0.33688985339222405, 0.8032075314806417 } }, + Array { { -0.7730104533627371, 0.47139673682599736, 0.9569403357322094, -0.09801714032956099, -0.9951847266721968, -0.2902846772544613, 0.8819212643483533, 0.6343932841636468, -0.6343932841636404, -0.8819212643483538, 0.2902846772544601, 0.9951847266721976, 0.09801714032955867, -0.9569403357322079, -0.4713967368260047, 0.7730104533627378, 0.7730104533627393, -0.47139673682599, -0.9569403357322087, 0.0980171403295421, 0.9951847266721959, 0.29028467725446244, -0.881921264348346, -0.6343932841636533, 0.6343932841636449, 0.8819212643483644, -0.2902846772544521, -0.995184726672197, -0.09801714032958111, 0.9569403357322056, 0.47139673682599953, -0.7730104533627234 } }, + Array { { -0.7409511253549591, 0.5956993044924327, 0.8577286100002725, -0.4275550934302798, -0.9415440651830222, 0.24298017990326493, 0.9891765099647811, -0.049067674327415586, -0.9987954562051722, -0.14673047445536058, 0.9700312531945421, 0.3368898533922222, -0.9039892931234447, -0.5141027441932267, 0.8032075314806446, 0.6715589548470253, -0.6715589548470154, -0.803207531480644, 0.5141027441932153, 0.9039892931234503, -0.33688985339222316, -0.9700312531945453, 0.1467304744553475, 0.9987954562051722, 0.0490676743274217, -0.9891765099647791, -0.24298017990328463, 0.9415440651830201, 0.42755509343029174, -0.857728610000262, -0.5956993044924334, 0.7409511253549532 } }, }; } diff --git a/Userland/Libraries/LibAudio/MP3Types.h b/Userland/Libraries/LibAudio/MP3Types.h index a705b4a357..d86e51d5a9 100644 --- a/Userland/Libraries/LibAudio/MP3Types.h +++ b/Userland/Libraries/LibAudio/MP3Types.h @@ -61,9 +61,9 @@ struct Header { }; struct Granule { - Array samples; - Array, 32> filter_bank_input; - Array, 18> pcm; + Array samples; + Array, 32> filter_bank_input; + Array, 18> pcm; u32 part_2_3_length; u32 big_values; u32 global_gain; diff --git a/Userland/Libraries/LibAudio/Sample.h b/Userland/Libraries/LibAudio/Sample.h index 209e0c840a..91ff28f909 100644 --- a/Userland/Libraries/LibAudio/Sample.h +++ b/Userland/Libraries/LibAudio/Sample.h @@ -15,9 +15,9 @@ using AK::Exponentials::exp; using AK::Exponentials::log; // Constants for logarithmic volume. See Sample::linear_to_log // Corresponds to 60dB -constexpr double DYNAMIC_RANGE = 1000; -constexpr double VOLUME_A = 1 / DYNAMIC_RANGE; -double const VOLUME_B = log(DYNAMIC_RANGE); +constexpr float DYNAMIC_RANGE = 1000; +constexpr float VOLUME_A = 1 / DYNAMIC_RANGE; +float const VOLUME_B = log(DYNAMIC_RANGE); // A single sample in an audio buffer. // Values are floating point, and should range from -1.0 to +1.0 @@ -25,14 +25,14 @@ struct Sample { constexpr Sample() = default; // For mono - constexpr explicit Sample(double left) + constexpr explicit Sample(float left) : left(left) , right(left) { } // For stereo - constexpr Sample(double left, double right) + constexpr Sample(float left, float right) : left(left) , right(right) { @@ -65,27 +65,27 @@ struct Sample { // - Linear: 0.0 to 1.0 // - Logarithmic: 0.0 to 1.0 - ALWAYS_INLINE double linear_to_log(double const change) const + ALWAYS_INLINE float linear_to_log(float const change) const { // TODO: Add linear slope around 0 return VOLUME_A * exp(VOLUME_B * change); } - ALWAYS_INLINE double log_to_linear(double const val) const + ALWAYS_INLINE float log_to_linear(float const val) const { // TODO: Add linear slope around 0 return log(val / VOLUME_A) / VOLUME_B; } - ALWAYS_INLINE Sample& log_multiply(double const change) + ALWAYS_INLINE Sample& log_multiply(float const change) { - double factor = linear_to_log(change); + float factor = linear_to_log(change); left *= factor; right *= factor; return *this; } - ALWAYS_INLINE Sample log_multiplied(double const volume_change) const + ALWAYS_INLINE Sample log_multiplied(float const volume_change) const { Sample new_frame { left, right }; new_frame.log_multiply(volume_change); @@ -93,33 +93,33 @@ struct Sample { } // Constant power panning - ALWAYS_INLINE Sample& pan(double const position) + ALWAYS_INLINE Sample& pan(float const position) { - double const pi_over_2 = AK::Pi * 0.5; - double const root_over_2 = AK::sqrt(2.0) * 0.5; - double const angle = position * pi_over_2 * 0.5; - double s, c; - AK::sincos(angle, s, c); + float const pi_over_2 = AK::Pi * 0.5f; + float const root_over_2 = AK::sqrt(2.0) * 0.5f; + float const angle = position * pi_over_2 * 0.5f; + float s, c; + AK::sincos(angle, s, c); left *= root_over_2 * (c - s); right *= root_over_2 * (c + s); return *this; } - ALWAYS_INLINE Sample panned(double const position) const + ALWAYS_INLINE Sample panned(float const position) const { Sample new_sample { left, right }; new_sample.pan(position); return new_sample; } - constexpr Sample& operator*=(double const mult) + constexpr Sample& operator*=(float const mult) { left *= mult; right *= mult; return *this; } - constexpr Sample operator*(double const mult) const + constexpr Sample operator*(float const mult) const { return { left * mult, right * mult }; } @@ -130,7 +130,7 @@ struct Sample { right += other.right; return *this; } - constexpr Sample& operator+=(double other) + constexpr Sample& operator+=(float other) { left += other; right += other; @@ -142,8 +142,8 @@ struct Sample { return { left + other.left, right + other.right }; } - double left { 0 }; - double right { 0 }; + float left { 0 }; + float right { 0 }; }; } diff --git a/Userland/Libraries/LibDSP/FFT.h b/Userland/Libraries/LibDSP/FFT.h index faf0af84c0..22e6041b93 100644 --- a/Userland/Libraries/LibDSP/FFT.h +++ b/Userland/Libraries/LibDSP/FFT.h @@ -12,7 +12,7 @@ namespace LibDSP { -constexpr void fft(Span> sample_data, bool invert = false) +constexpr void fft(Span> sample_data, bool invert = false) { int n = sample_data.size(); @@ -27,13 +27,13 @@ constexpr void fft(Span> sample_data, bool invert = false) } for (int len = 2; len <= n; len <<= 1) { - double ang = 2 * AK::Pi / len * (invert ? -1 : 1); - Complex wlen = Complex::from_polar(1., ang); + float ang = 2 * AK::Pi / static_cast(len * (invert ? -1 : 1)); + Complex wlen = Complex::from_polar(1.f, ang); for (int i = 0; i < n; i += len) { - Complex w = { 1., 0. }; + Complex w = { 1., 0. }; for (int j = 0; j < len / 2; j++) { - Complex u = sample_data[i + j]; - Complex v = sample_data[i + j + len / 2] * w; + Complex u = sample_data[i + j]; + Complex v = sample_data[i + j + len / 2] * w; sample_data[i + j] = u + v; sample_data[i + j + len / 2] = u - v; w *= wlen; diff --git a/Userland/Libraries/LibDSP/MDCT.h b/Userland/Libraries/LibDSP/MDCT.h index 940013498b..53643239d5 100644 --- a/Userland/Libraries/LibDSP/MDCT.h +++ b/Userland/Libraries/LibDSP/MDCT.h @@ -19,12 +19,12 @@ public: { for (size_t n = 0; n < N; n++) { for (size_t k = 0; k < N / 2; k++) { - m_phi[n][k] = AK::cos(AK::Pi / (2 * N) * (2 * n + 1 + N / 2.0) * (2 * k + 1)); + m_phi[n][k] = AK::cos(AK::Pi / (2 * N) * (2 * static_cast(n) + 1 + N / 2.0f) * static_cast(2 * k + 1)); } } } - void transform(Span data, Span output) + void transform(Span data, Span output) { assert(N == 2 * data.size()); assert(N == output.size()); @@ -37,7 +37,7 @@ public: } private: - Array, N> m_phi; + Array, N> m_phi; }; } diff --git a/Userland/Libraries/LibDSP/Window.h b/Userland/Libraries/LibDSP/Window.h index ef014514f3..6ca47b17d6 100644 --- a/Userland/Libraries/LibDSP/Window.h +++ b/Userland/Libraries/LibDSP/Window.h @@ -27,17 +27,17 @@ public: constexpr static FixedArray blackman_harris(size_t size) { return make_window(size, calculate_blackman_harris); } private: - constexpr static double calculate_hann(size_t index, size_t size) + constexpr static float calculate_hann(size_t index, size_t size) { - return 0.5 * (1 - AK::cos((2 * AK::Pi * index) / (size - 1))); + return 0.5f * (1 - AK::cos((2 * AK::Pi * index) / (size - 1))); } - constexpr static double calculate_hamming(size_t index, size_t size) + constexpr static float calculate_hamming(size_t index, size_t size) { - return 0.54 - 0.46 * AK::cos((2 * AK::Pi * index) / (size - 1)); + return 0.54f - 0.46f * AK::cos((2 * AK::Pi * index) / (size - 1)); } - constexpr static double calculate_blackman_harris(size_t index, size_t size) + constexpr static float calculate_blackman_harris(size_t index, size_t size) { T const a0 = 0.35875; T const a1 = 0.48829;