use approx::assert_relative_eq;
use pacmog::{
AudioFormat, PcmPlayer, PcmReader,
imaadpcm::{I1F15, ImaAdpcmPlayer},
};
static SINEWAVE: [f64; 3000] = [
0f64,
0.05130394241132398f64,
0.10243773963885304f64,
0.1532318242075301f64,
0.20351771765647064f64,
0.25312870121232495f64,
0.3019002009284367f64,
0.34967047163886616f64,
0.3962811281848155f64,
0.44157755711510865f64,
0.48540958071922374f64,
0.5276317757631479f64,
0.568104164083731f64,
0.6066925047632196f64,
0.6432688253556823f64,
0.6777118468681508f64,
0.7099073024964747f64,
0.7397484688517476f64,
0.7671363784508769f64,
0.7919801384524394f64,
0.8141974087604645f64,
0.8337145613923618f64,
0.850466733601563f64,
0.864398465349234f64,
0.875463539936346f64,
0.8836253027395313f64,
0.8888565549657984f64,
0.8911400848789572f64,
0.8904682959411214f64,
0.8868433130579937f64,
0.8802773013147204f64,
0.8707919347494668f64,
0.8584186619666295f64,
0.8431985998915512f64,
0.8251822150346657f64,
0.8044291641235698f64,
0.7810083472256659f64,
0.7549974296443794f64,
0.7264826825512306f64,
0.6955586642499793f64,
0.6623278483181271f64,
0.6269005704842747f64,
0.5893942317884836f64,
0.5499332454596334f64,
0.5086485056889962f64,
0.46567685640381107f64,
0.4211609053380349f64,
0.375248200631383f64,
0.32809101833875853f64,
0.27984580464250586f64,
0.2306724852580571f64,
0.18073418654005866f64,
0.13019650504603614f64,
0.07922704935360213f64,
0.02799483911056229f64,
-0.023330206270519342f64,
-0.07457788184287496f64,
-0.12557823499228893f64,
-0.17616211990467953f64,
-0.2261617885554974f64,
-0.2754114186159861f64,
-0.32374768452158964f64,
-0.3710102886983778f64,
-0.4170424662281511f64,
-0.4616915957588295f64,
-0.5048095979242723f64,
-0.5462534400093819f64,
-0.5858856937378512f64,
-0.6235749868146248f64,
-0.6591962685391126f64,
-0.6926313941542572f64,
-0.7237694967050324f64,
-0.752507305774298f64,
-0.7787495193412983f64,
-0.8024091225175172f64,
-0.823407653159891f64,
-0.8416754674840211f64,
-0.8571520056773875f64,
-0.8697858450219901f64,
-0.8795352311207755f64,
-0.8863677060391384f64,
-0.8902606395313476f64,
-0.8912011759179032f64,
-0.8891861809628939f64,
-0.8842222949966401f64,
-0.8763259860383358f64,
-0.8655234966734064f64,
-0.8518505784402963f64,
-0.8353525980757529f64,
-0.8160843250242575f64,
-0.7941096127021693f64,
-0.7695013453750829f64,
-0.7423411194219732f64,
-0.7127189777219823f64,
-0.6807332502864921f64,
-0.6464899699100558f64,
-0.6101026596798277f64,
-0.5716920142397082f64,
-0.5313854748092028f64,
-0.4893165917117118f64,
-0.44562502437453f64,
-0.40045558512128065f64,
-0.35395807980398786f64,
-0.30628672345400837f64,
-0.25759960905560586f64,
-0.20805818960018616f64,
-0.15782678670185332f64,
-0.10707196640635971f64,
-0.055962054446992475f64,
-0.004666553140567428f64,
0.046644422625627596f64,
0.09780071065195123f64,
0.14863265174378384f64,
0.19897168111594676f64,
0.2486508343028684f64,
0.2975053912706255f64,
0.3453732748367621f64,
0.39209580766794644f64,
0.43751800445450456f64,
0.48148923594345266f64,
0.5238636273583162f64,
0.5645007489934832f64,
0.6032657224594896f64,
0.6400300972066209f64,
0.6746719036475554f64,
0.7070761843837895f64,
0.737135578554706f64,
0.7647503749602165f64,
0.7898289901645444f64,
0.8122882341094383f64,
0.8320535757273839f64,
0.8490595679227452f64,
0.8632497944491215f64,
0.8745771355225608f64,
0.8830040865574144f64,
0.8885025987984095f64,
0.8910545574244328f64,
0.8906514628126744f64,
0.8872946430291981f64,
0.8809952007062997f64,
0.8717741192877907f64,
0.8596618380478592f64,
0.8446986239495671f64,
0.8269340935410667f64,
0.8064271598329593f64,
0.7832458198077237f64,
0.7574668888065044f64,
0.7291760005291107f64,
0.698466810194379f64,
0.6654413132760278f64,
0.6302089424177345f64,
0.5928865674331347f64,
0.5535979640793974f64,
0.5124734421987264f64,
0.46964936761457776f64,
0.4252677637118402f64,
0.37947580677173115f64,
0.3324253744293345f64,
0.2842724878858542f64,
0.23517686036615193f64,
0.18530129948901888f64,
0.13481121588273168f64,
0.08387403883598425f64,
0.03265870831261842f64,
-0.01866493263860049f64,
-0.06992667575073949f64,
-0.12095651196677523f64,
-0.17158520582816664f64,
-0.22164487650375803f64,
-0.27096948917422264f64,
-0.3193954526617916f64,
-0.3667622037793221f64,
-0.4129126057501165f64,
-0.45769369192491827f64,
-0.5009568251498397f64,
-0.5425586539739279f64,
-0.5823611657718075f64,
-0.6202322976540701f64,
-0.6560465739389847f64,
-0.6896851061524982f64,
-0.7210364429905162f64,
-0.74999651719626f64,
-0.7764693361546208f64,
-0.8003671412600866f64,
-0.8216105672846699f64,
-0.8401292798496192f64,
-0.8558618160574906f64,
-0.8687559563506456f64,
-0.878768990124465f64,
-0.8858677688499899f64,
-0.890028599828638f64,
-0.8912378305412708f64,
-0.8894913705444111f64,
-0.8847950102060982f64,
-0.8771643675832451f64,
-0.8666247290537114f64,
-0.8532110493163024f64,
-0.8369677920228425f64,
-0.817948876655532f64,
-0.7962173066684487f64,
-0.7718451694875492f64,
-0.744913370897455f64,
-0.7155111038150272f64,
-0.6837359545346517f64,
-0.6496933183791711f64,
-0.6134960278413863f64,
-0.5752641932161296f64,
-0.5351245651285532f64,
-0.4932102689209169f64,
-0.4496602734261621f64,
-0.40461904567073553f64,
-0.3582359665255207f64,
-0.3106648526020552f64,
-0.2620634515874261f64,
-0.2125929508598263f64,
-0.16241741970080778f64,
-0.11170325150753453f64,
-0.060618632566357f64,
-0.009332978454776191f64,
0.04198362789650973f64,
0.09316099897160006f64,
0.14402941539788164f64,
0.19442017294323902f64,
0.24416616769516397f64,
0.293102427287181f64,
0.3410666222042821f64,
0.38789972981595866f64,
0.43344641951536017f64,
0.47755566362968366f64,
0.5200811358399928f64,
0.5608818220916074f64,
0.5998224190139229f64,
0.6367737854628714f64,
0.6716134206247059f64,
0.7042256765065692f64,
0.734502501653491f64,
0.7623434411483867f64,
0.7876561678384842f64,
0.8103567479485361f64,
0.8303698535713896f64,
0.8476291876491279f64,
0.8620774308504265f64,
0.8736667196743377f64,
0.8823586464502892f64,
0.8881243124607274f64,
0.8909446466769726f64,
0.8908102463912914f64,
0.8877216428301095f64,
0.8816890355407985f64,
0.872732398636962f64,
0.8608814276757917f64,
0.8461754865354258f64,
0.8286633418017364f64,
0.8084030034004005f64,
0.7854617245969014f64,
0.7599155770153876f64,
0.7318492912707449f64,
0.701355885110099f64,
0.6685365040448875f64,
0.6335000494923618f64,
0.5963627006718046f64,
0.5572475427460313f64,
0.5162843543308203f64,
0.4736090231458445f64,
0.4293629882269246f64,
0.3836930274354585f64,
0.3367506199867112f64,
0.2886914152233884f64,
0.23967480763449678f64,
0.1898633392256145f64,
0.13942222141510857f64,
0.0885187307640756f64,
0.037321677749916154f64,
-0.013999147701246982f64,
-0.06527354396281115f64,
-0.11633146877610141f64,
-0.1670036036784477f64,
-0.21712189519010594f64,
-0.26652012256250046f64,
-0.3150344821272922f64,
-0.36250405211950093f64,
-0.4087714301492163f64,
-0.4536831980247199f64,
-0.49709034673362623f64,
-0.5388489935985566f64,
-0.5788205947677103f64,
-0.6168726623705381f64,
-0.6528788707630283f64,
-0.6867199596126297f64,
-0.7182836276529669f64,
-0.7474651701555507f64,
-0.7741679039109187f64,
-0.7983031672286354f64,
-0.8197909574090028f64,
-0.8385600369883455f64,
-0.8545481462295813f64,
-0.8677022687354335f64,
-0.8779787376937166f64,
-0.8853435014905481f64,
-0.8897721768329925f64,
-0.89125004874906f64,
-0.8897721768329925f64,
-0.8853435014905481f64,
-0.8779787376937166f64,
-0.8677022687354335f64,
-0.8545481462295813f64,
-0.8385600369883455f64,
-0.8197909574090028f64,
-0.7983031672286354f64,
-0.7741679039109187f64,
-0.7474651701555507f64,
-0.7182836276529669f64,
-0.6867199596126297f64,
-0.6528788707630283f64,
-0.6168726623705381f64,
-0.5788205947677103f64,
-0.5388489935985566f64,
-0.49709034673362623f64,
-0.4536831980247199f64,
-0.4087714301492163f64,
-0.36250405211950093f64,
-0.3150344821272922f64,
-0.26652012256250046f64,
-0.21712189519010594f64,
-0.1670036036784477f64,
-0.11633146877610141f64,
-0.06527354396281115f64,
-0.013999147701246982f64,
0.037321677749916154f64,
0.0885187307640756f64,
0.13942222141510857f64,
0.1898633392256145f64,
0.23967480763449678f64,
0.2886914152233884f64,
0.3367506199867112f64,
0.3836930274354585f64,
0.4293629882269246f64,
0.4736090231458445f64,
0.5162843543308203f64,
0.5572475427460313f64,
0.5963627006718046f64,
0.6335000494923618f64,
0.6685365040448875f64,
0.701355885110099f64,
0.7318492912707449f64,
0.7599155770153876f64,
0.7854617245969014f64,
0.8084030034004005f64,
0.8286633418017364f64,
0.8461754865354258f64,
0.8608814276757917f64,
0.872732398636962f64,
0.8816890355407985f64,
0.8877216428301095f64,
0.8908102463912914f64,
0.8909446466769726f64,
0.8881243124607274f64,
0.8823586464502892f64,
0.8736667196743377f64,
0.8620774308504265f64,
0.8476291876491279f64,
0.8303698535713896f64,
0.8103567479485361f64,
0.7876561678384842f64,
0.7623434411483867f64,
0.734502501653491f64,
0.7042256765065692f64,
0.6716134206247059f64,
0.6367737854628714f64,
0.5998224190139229f64,
0.5608818220916074f64,
0.5200811358399928f64,
0.47755566362968366f64,
0.43344641951536017f64,
0.38789972981595866f64,
0.3410666222042821f64,
0.293102427287181f64,
0.24416616769516397f64,
0.19442017294323902f64,
0.14402941539788164f64,
0.09316099897160006f64,
0.04198362789650973f64,
-0.009332978454776191f64,
-0.060618632566357f64,
-0.11170325150753453f64,
-0.16241741970080778f64,
-0.2125929508598263f64,
-0.2620634515874261f64,
-0.3106648526020552f64,
-0.3582359665255207f64,
-0.40461904567073553f64,
-0.4496602734261621f64,
-0.4932102689209169f64,
-0.5351245651285532f64,
-0.5752641932161296f64,
-0.6134960278413863f64,
-0.6496933183791711f64,
-0.6837359545346517f64,
-0.7155111038150272f64,
-0.744913370897455f64,
-0.7718451694875492f64,
-0.7962173066684487f64,
-0.817948876655532f64,
-0.8369677920228425f64,
-0.8532110493163024f64,
-0.8666247290537114f64,
-0.8771643675832451f64,
-0.8847950102060982f64,
-0.8894913705444111f64,
-0.8912378305412708f64,
-0.890028599828638f64,
-0.8858677688499899f64,
-0.878768990124465f64,
-0.8687559563506456f64,
-0.8558618160574906f64,
-0.8401292798496192f64,
-0.8216105672846699f64,
-0.8003671412600866f64,
-0.7764693361546208f64,
-0.74999651719626f64,
-0.7210364429905162f64,
-0.6896851061524982f64,
-0.6560465739389847f64,
-0.6202322976540701f64,
-0.5823611657718075f64,
-0.5425586539739279f64,
-0.5009568251498397f64,
-0.45769369192491827f64,
-0.4129126057501165f64,
-0.3667622037793221f64,
-0.3193954526617916f64,
-0.27096948917422264f64,
-0.22164487650375803f64,
-0.17158520582816664f64,
-0.12095651196677523f64,
-0.06992667575073949f64,
-0.01866493263860049f64,
0.03265870831261842f64,
0.08387403883598425f64,
0.13481121588273168f64,
0.18530129948901888f64,
0.23517686036615193f64,
0.2842724878858542f64,
0.3324253744293345f64,
0.37947580677173115f64,
0.4252677637118402f64,
0.46964936761457776f64,
0.5124734421987264f64,
0.5535979640793974f64,
0.5928865674331347f64,
0.6302089424177345f64,
0.6654413132760278f64,
0.698466810194379f64,
0.7291760005291107f64,
0.7574668888065044f64,
0.7832458198077237f64,
0.8064271598329593f64,
0.8269340935410667f64,
0.8446986239495671f64,
0.8596618380478592f64,
0.8717741192877907f64,
0.8809952007062997f64,
0.8872946430291981f64,
0.8906514628126744f64,
0.8910545574244328f64,
0.8885025987984095f64,
0.8830040865574144f64,
0.8745771355225608f64,
0.8632497944491215f64,
0.8490595679227452f64,
0.8320535757273839f64,
0.8122882341094383f64,
0.7898289901645444f64,
0.7647503749602165f64,
0.737135578554706f64,
0.7070761843837895f64,
0.6746719036475554f64,
0.6400300972066209f64,
0.6032657224594896f64,
0.5645007489934832f64,
0.5238636273583162f64,
0.48148923594345266f64,
0.43751800445450456f64,
0.39209580766794644f64,
0.3453732748367621f64,
0.2975053912706255f64,
0.2486508343028684f64,
0.19897168111594676f64,
0.14863265174378384f64,
0.09780071065195123f64,
0.046644422625627596f64,
-0.004666553140567428f64,
-0.055962054446992475f64,
-0.10707196640635971f64,
-0.15782678670185332f64,
-0.20805818960018616f64,
-0.25759960905560586f64,
-0.30628672345400837f64,
-0.35395807980398786f64,
-0.40045558512128065f64,
-0.44562502437453f64,
-0.4893165917117118f64,
-0.5313854748092028f64,
-0.5716920142397082f64,
-0.6101026596798277f64,
-0.6464899699100558f64,
-0.6807332502864921f64,
-0.7127189777219823f64,
-0.7423411194219732f64,
-0.7695013453750829f64,
-0.7941096127021693f64,
-0.8160843250242575f64,
-0.8353525980757529f64,
-0.8518505784402963f64,
-0.8655234966734064f64,
-0.8763259860383358f64,
-0.8842222949966401f64,
-0.8891861809628939f64,
-0.8912011759179032f64,
-0.8902606395313476f64,
-0.8863677060391384f64,
-0.8795352311207755f64,
-0.8697858450219901f64,
-0.8571520056773875f64,
-0.8416754674840211f64,
-0.823407653159891f64,
-0.8024091225175172f64,
-0.7787495193412983f64,
-0.752507305774298f64,
-0.7237694967050324f64,
-0.6926313941542572f64,
-0.6591962685391126f64,
-0.6235749868146248f64,
-0.5858856937378512f64,
-0.5462534400093819f64,
-0.5048095979242723f64,
-0.4616915957588295f64,
-0.4170424662281511f64,
-0.3710102886983778f64,
-0.32374768452158964f64,
-0.2754114186159861f64,
-0.2261617885554974f64,
-0.17616211990467953f64,
-0.12557823499228893f64,
-0.07457788184287496f64,
-0.023330206270519342f64,
0.02799483911056229f64,
0.07922704935360213f64,
0.13019650504603614f64,
0.18073418654005866f64,
0.2306724852580571f64,
0.27984580464250586f64,
0.32809101833875853f64,
0.375248200631383f64,
0.4211609053380349f64,
0.46567685640381107f64,
0.5086485056889962f64,
0.5499332454596334f64,
0.5893942317884836f64,
0.6269005704842747f64,
0.6623278483181271f64,
0.6955586642499793f64,
0.7264826825512306f64,
0.7549974296443794f64,
0.7810083472256659f64,
0.8044291641235698f64,
0.8251822150346657f64,
0.8431985998915512f64,
0.8584186619666295f64,
0.8707919347494668f64,
0.8802773013147204f64,
0.8868433130579937f64,
0.8904682959411214f64,
0.8911400848789572f64,
0.8888565549657984f64,
0.8836253027395313f64,
0.875463539936346f64,
0.864398465349234f64,
0.850466733601563f64,
0.8337145613923618f64,
0.8141974087604645f64,
0.7919801384524394f64,
0.7671363784508769f64,
0.7397484688517476f64,
0.7099073024964747f64,
0.6777118468681508f64,
0.6432688253556823f64,
0.6066925047632196f64,
0.568104164083731f64,
0.5276317757631479f64,
0.48540958071922374f64,
0.44157755711510865f64,
0.3962811281848155f64,
0.34967047163886616f64,
0.3019002009284367f64,
0.25312870121232495f64,
0.20351771765647064f64,
0.1532318242075301f64,
0.10243773963885304f64,
0.05130394241132398f64,
-0.0000000000000019657430864223707f64,
-0.05130394241132398f64,
-0.10243773963885304f64,
-0.1532318242075301f64,
-0.20351771765647064f64,
-0.25312870121232495f64,
-0.3019002009284367f64,
-0.34967047163886616f64,
-0.3962811281848155f64,
-0.44157755711510865f64,
-0.48540958071922374f64,
-0.5276317757631479f64,
-0.568104164083731f64,
-0.6066925047632196f64,
-0.6432688253556823f64,
-0.6777118468681508f64,
-0.7099073024964747f64,
-0.7397484688517476f64,
-0.7671363784508769f64,
-0.7919801384524394f64,
-0.8141974087604645f64,
-0.8337145613923618f64,
-0.850466733601563f64,
-0.864398465349234f64,
-0.875463539936346f64,
-0.8836253027395313f64,
-0.8888565549657984f64,
-0.8911400848789572f64,
-0.8904682959411214f64,
-0.8868433130579937f64,
-0.8802773013147204f64,
-0.8707919347494668f64,
-0.8584186619666295f64,
-0.8431985998915512f64,
-0.8251822150346657f64,
-0.8044291641235698f64,
-0.7810083472256659f64,
-0.7549974296443794f64,
-0.7264826825512306f64,
-0.6955586642499793f64,
-0.6623278483181271f64,
-0.6269005704842747f64,
-0.5893942317884836f64,
-0.5499332454596334f64,
-0.5086485056889962f64,
-0.46567685640381107f64,
-0.4211609053380349f64,
-0.375248200631383f64,
-0.32809101833875853f64,
-0.27984580464250586f64,
-0.2306724852580571f64,
-0.18073418654005866f64,
-0.13019650504603614f64,
-0.07922704935360213f64,
-0.02799483911056229f64,
0.023330206270519342f64,
0.07457788184287496f64,
0.12557823499228893f64,
0.17616211990467953f64,
0.2261617885554974f64,
0.2754114186159861f64,
0.32374768452158964f64,
0.3710102886983778f64,
0.4170424662281511f64,
0.4616915957588295f64,
0.5048095979242723f64,
0.5462534400093819f64,
0.5858856937378512f64,
0.6235749868146248f64,
0.6591962685391126f64,
0.6926313941542572f64,
0.7237694967050324f64,
0.752507305774298f64,
0.7787495193412983f64,
0.8024091225175172f64,
0.823407653159891f64,
0.8416754674840211f64,
0.8571520056773875f64,
0.8697858450219901f64,
0.8795352311207755f64,
0.8863677060391384f64,
0.8902606395313476f64,
0.8912011759179032f64,
0.8891861809628939f64,
0.8842222949966401f64,
0.8763259860383358f64,
0.8655234966734064f64,
0.8518505784402963f64,
0.8353525980757529f64,
0.8160843250242575f64,
0.7941096127021693f64,
0.7695013453750829f64,
0.7423411194219732f64,
0.7127189777219823f64,
0.6807332502864921f64,
0.6464899699100558f64,
0.6101026596798277f64,
0.5716920142397082f64,
0.5313854748092028f64,
0.4893165917117118f64,
0.44562502437453f64,
0.40045558512128065f64,
0.35395807980398786f64,
0.30628672345400837f64,
0.25759960905560586f64,
0.20805818960018616f64,
0.15782678670185332f64,
0.10707196640635971f64,
0.055962054446992475f64,
0.004666553140567428f64,
-0.046644422625627596f64,
-0.09780071065195123f64,
-0.14863265174378384f64,
-0.19897168111594676f64,
-0.2486508343028684f64,
-0.2975053912706255f64,
-0.3453732748367621f64,
-0.39209580766794644f64,
-0.43751800445450456f64,
-0.48148923594345266f64,
-0.5238636273583162f64,
-0.5645007489934832f64,
-0.6032657224594896f64,
-0.6400300972066209f64,
-0.6746719036475554f64,
-0.7070761843837895f64,
-0.737135578554706f64,
-0.7647503749602165f64,
-0.7898289901645444f64,
-0.8122882341094383f64,
-0.8320535757273839f64,
-0.8490595679227452f64,
-0.8632497944491215f64,
-0.8745771355225608f64,
-0.8830040865574144f64,
-0.8885025987984095f64,
-0.8910545574244328f64,
-0.8906514628126744f64,
-0.8872946430291981f64,
-0.8809952007062997f64,
-0.8717741192877907f64,
-0.8596618380478592f64,
-0.8446986239495671f64,
-0.8269340935410667f64,
-0.8064271598329593f64,
-0.7832458198077237f64,
-0.7574668888065044f64,
-0.7291760005291107f64,
-0.698466810194379f64,
-0.6654413132760278f64,
-0.6302089424177345f64,
-0.5928865674331347f64,
-0.5535979640793974f64,
-0.5124734421987264f64,
-0.46964936761457776f64,
-0.4252677637118402f64,
-0.37947580677173115f64,
-0.3324253744293345f64,
-0.2842724878858542f64,
-0.23517686036615193f64,
-0.18530129948901888f64,
-0.13481121588273168f64,
-0.08387403883598425f64,
-0.03265870831261842f64,
0.01866493263860049f64,
0.06992667575073949f64,
0.12095651196677523f64,
0.17158520582816664f64,
0.22164487650375803f64,
0.27096948917422264f64,
0.3193954526617916f64,
0.3667622037793221f64,
0.4129126057501165f64,
0.45769369192491827f64,
0.5009568251498397f64,
0.5425586539739279f64,
0.5823611657718075f64,
0.6202322976540701f64,
0.6560465739389847f64,
0.6896851061524982f64,
0.7210364429905162f64,
0.74999651719626f64,
0.7764693361546208f64,
0.8003671412600866f64,
0.8216105672846699f64,
0.8401292798496192f64,
0.8558618160574906f64,
0.8687559563506456f64,
0.878768990124465f64,
0.8858677688499899f64,
0.890028599828638f64,
0.8912378305412708f64,
0.8894913705444111f64,
0.8847950102060982f64,
0.8771643675832451f64,
0.8666247290537114f64,
0.8532110493163024f64,
0.8369677920228425f64,
0.817948876655532f64,
0.7962173066684487f64,
0.7718451694875492f64,
0.744913370897455f64,
0.7155111038150272f64,
0.6837359545346517f64,
0.6496933183791711f64,
0.6134960278413863f64,
0.5752641932161296f64,
0.5351245651285532f64,
0.4932102689209169f64,
0.4496602734261621f64,
0.40461904567073553f64,
0.3582359665255207f64,
0.3106648526020552f64,
0.2620634515874261f64,
0.2125929508598263f64,
0.16241741970080778f64,
0.11170325150753453f64,
0.060618632566357f64,
0.009332978454776191f64,
-0.04198362789650973f64,
-0.09316099897160006f64,
-0.14402941539788164f64,
-0.19442017294323902f64,
-0.24416616769516397f64,
-0.293102427287181f64,
-0.3410666222042821f64,
-0.38789972981595866f64,
-0.43344641951536017f64,
-0.47755566362968366f64,
-0.5200811358399928f64,
-0.5608818220916074f64,
-0.5998224190139229f64,
-0.6367737854628714f64,
-0.6716134206247059f64,
-0.7042256765065692f64,
-0.734502501653491f64,
-0.7623434411483867f64,
-0.7876561678384842f64,
-0.8103567479485361f64,
-0.8303698535713896f64,
-0.8476291876491279f64,
-0.8620774308504265f64,
-0.8736667196743377f64,
-0.8823586464502892f64,
-0.8881243124607274f64,
-0.8909446466769726f64,
-0.8908102463912914f64,
-0.8877216428301095f64,
-0.8816890355407985f64,
-0.872732398636962f64,
-0.8608814276757917f64,
-0.8461754865354258f64,
-0.8286633418017364f64,
-0.8084030034004005f64,
-0.7854617245969014f64,
-0.7599155770153876f64,
-0.7318492912707449f64,
-0.701355885110099f64,
-0.6685365040448875f64,
-0.6335000494923618f64,
-0.5963627006718046f64,
-0.5572475427460313f64,
-0.5162843543308203f64,
-0.4736090231458445f64,
-0.4293629882269246f64,
-0.3836930274354585f64,
-0.3367506199867112f64,
-0.2886914152233884f64,
-0.23967480763449678f64,
-0.1898633392256145f64,
-0.13942222141510857f64,
-0.0885187307640756f64,
-0.037321677749916154f64,
0.013999147701246982f64,
0.06527354396281115f64,
0.11633146877610141f64,
0.1670036036784477f64,
0.21712189519010594f64,
0.26652012256250046f64,
0.3150344821272922f64,
0.36250405211950093f64,
0.4087714301492163f64,
0.4536831980247199f64,
0.49709034673362623f64,
0.5388489935985566f64,
0.5788205947677103f64,
0.6168726623705381f64,
0.6528788707630283f64,
0.6867199596126297f64,
0.7182836276529669f64,
0.7474651701555507f64,
0.7741679039109187f64,
0.7983031672286354f64,
0.8197909574090028f64,
0.8385600369883455f64,
0.8545481462295813f64,
0.8677022687354335f64,
0.8779787376937166f64,
0.8853435014905481f64,
0.8897721768329925f64,
0.89125004874906f64,
0.8897721768329925f64,
0.8853435014905481f64,
0.8779787376937166f64,
0.8677022687354335f64,
0.8545481462295813f64,
0.8385600369883455f64,
0.8197909574090028f64,
0.7983031672286354f64,
0.7741679039109187f64,
0.7474651701555507f64,
0.7182836276529669f64,
0.6867199596126297f64,
0.6528788707630283f64,
0.6168726623705381f64,
0.5788205947677103f64,
0.5388489935985566f64,
0.49709034673362623f64,
0.4536831980247199f64,
0.4087714301492163f64,
0.36250405211950093f64,
0.3150344821272922f64,
0.26652012256250046f64,
0.21712189519010594f64,
0.1670036036784477f64,
0.11633146877610141f64,
0.06527354396281115f64,
0.013999147701246982f64,
-0.037321677749916154f64,
-0.0885187307640756f64,
-0.13942222141510857f64,
-0.1898633392256145f64,
-0.23967480763449678f64,
-0.2886914152233884f64,
-0.3367506199867112f64,
-0.3836930274354585f64,
-0.4293629882269246f64,
-0.4736090231458445f64,
-0.5162843543308203f64,
-0.5572475427460313f64,
-0.5963627006718046f64,
-0.6335000494923618f64,
-0.6685365040448875f64,
-0.701355885110099f64,
-0.7318492912707449f64,
-0.7599155770153876f64,
-0.7854617245969014f64,
-0.8084030034004005f64,
-0.8286633418017364f64,
-0.8461754865354258f64,
-0.8608814276757917f64,
-0.872732398636962f64,
-0.8816890355407985f64,
-0.8877216428301095f64,
-0.8908102463912914f64,
-0.8909446466769726f64,
-0.8881243124607274f64,
-0.8823586464502892f64,
-0.8736667196743377f64,
-0.8620774308504265f64,
-0.8476291876491279f64,
-0.8303698535713896f64,
-0.8103567479485361f64,
-0.7876561678384842f64,
-0.7623434411483867f64,
-0.734502501653491f64,
-0.7042256765065692f64,
-0.6716134206247059f64,
-0.6367737854628714f64,
-0.5998224190139229f64,
-0.5608818220916074f64,
-0.5200811358399928f64,
-0.47755566362968366f64,
-0.43344641951536017f64,
-0.38789972981595866f64,
-0.3410666222042821f64,
-0.293102427287181f64,
-0.24416616769516397f64,
-0.19442017294323902f64,
-0.14402941539788164f64,
-0.09316099897160006f64,
-0.04198362789650973f64,
0.009332978454776191f64,
0.060618632566357f64,
0.11170325150753453f64,
0.16241741970080778f64,
0.2125929508598263f64,
0.2620634515874261f64,
0.3106648526020552f64,
0.3582359665255207f64,
0.40461904567073553f64,
0.4496602734261621f64,
0.4932102689209169f64,
0.5351245651285532f64,
0.5752641932161296f64,
0.6134960278413863f64,
0.6496933183791711f64,
0.6837359545346517f64,
0.7155111038150272f64,
0.744913370897455f64,
0.7718451694875492f64,
0.7962173066684487f64,
0.817948876655532f64,
0.8369677920228425f64,
0.8532110493163024f64,
0.8666247290537114f64,
0.8771643675832451f64,
0.8847950102060982f64,
0.8894913705444111f64,
0.8912378305412708f64,
0.890028599828638f64,
0.8858677688499899f64,
0.878768990124465f64,
0.8687559563506456f64,
0.8558618160574906f64,
0.8401292798496192f64,
0.8216105672846699f64,
0.8003671412600866f64,
0.7764693361546208f64,
0.74999651719626f64,
0.7210364429905162f64,
0.6896851061524982f64,
0.6560465739389847f64,
0.6202322976540701f64,
0.5823611657718075f64,
0.5425586539739279f64,
0.5009568251498397f64,
0.45769369192491827f64,
0.4129126057501165f64,
0.3667622037793221f64,
0.3193954526617916f64,
0.27096948917422264f64,
0.22164487650375803f64,
0.17158520582816664f64,
0.12095651196677523f64,
0.06992667575073949f64,
0.01866493263860049f64,
-0.03265870831261842f64,
-0.08387403883598425f64,
-0.13481121588273168f64,
-0.18530129948901888f64,
-0.23517686036615193f64,
-0.2842724878858542f64,
-0.3324253744293345f64,
-0.37947580677173115f64,
-0.4252677637118402f64,
-0.46964936761457776f64,
-0.5124734421987264f64,
-0.5535979640793974f64,
-0.5928865674331347f64,
-0.6302089424177345f64,
-0.6654413132760278f64,
-0.698466810194379f64,
-0.7291760005291107f64,
-0.7574668888065044f64,
-0.7832458198077237f64,
-0.8064271598329593f64,
-0.8269340935410667f64,
-0.8446986239495671f64,
-0.8596618380478592f64,
-0.8717741192877907f64,
-0.8809952007062997f64,
-0.8872946430291981f64,
-0.8906514628126744f64,
-0.8910545574244328f64,
-0.8885025987984095f64,
-0.8830040865574144f64,
-0.8745771355225608f64,
-0.8632497944491215f64,
-0.8490595679227452f64,
-0.8320535757273839f64,
-0.8122882341094383f64,
-0.7898289901645444f64,
-0.7647503749602165f64,
-0.737135578554706f64,
-0.7070761843837895f64,
-0.6746719036475554f64,
-0.6400300972066209f64,
-0.6032657224594896f64,
-0.5645007489934832f64,
-0.5238636273583162f64,
-0.48148923594345266f64,
-0.43751800445450456f64,
-0.39209580766794644f64,
-0.3453732748367621f64,
-0.2975053912706255f64,
-0.2486508343028684f64,
-0.19897168111594676f64,
-0.14863265174378384f64,
-0.09780071065195123f64,
-0.046644422625627596f64,
0.004666553140567428f64,
0.055962054446992475f64,
0.10707196640635971f64,
0.15782678670185332f64,
0.20805818960018616f64,
0.25759960905560586f64,
0.30628672345400837f64,
0.35395807980398786f64,
0.40045558512128065f64,
0.44562502437453f64,
0.4893165917117118f64,
0.5313854748092028f64,
0.5716920142397082f64,
0.6101026596798277f64,
0.6464899699100558f64,
0.6807332502864921f64,
0.7127189777219823f64,
0.7423411194219732f64,
0.7695013453750829f64,
0.7941096127021693f64,
0.8160843250242575f64,
0.8353525980757529f64,
0.8518505784402963f64,
0.8655234966734064f64,
0.8763259860383358f64,
0.8842222949966401f64,
0.8891861809628939f64,
0.8912011759179032f64,
0.8902606395313476f64,
0.8863677060391384f64,
0.8795352311207755f64,
0.8697858450219901f64,
0.8571520056773875f64,
0.8416754674840211f64,
0.823407653159891f64,
0.8024091225175172f64,
0.7787495193412983f64,
0.752507305774298f64,
0.7237694967050324f64,
0.6926313941542572f64,
0.6591962685391126f64,
0.6235749868146248f64,
0.5858856937378512f64,
0.5462534400093819f64,
0.5048095979242723f64,
0.4616915957588295f64,
0.4170424662281511f64,
0.3710102886983778f64,
0.32374768452158964f64,
0.2754114186159861f64,
0.2261617885554974f64,
0.17616211990467953f64,
0.12557823499228893f64,
0.07457788184287496f64,
0.023330206270519342f64,
-0.02799483911056229f64,
-0.07922704935360213f64,
-0.13019650504603614f64,
-0.18073418654005866f64,
-0.2306724852580571f64,
-0.27984580464250586f64,
-0.32809101833875853f64,
-0.375248200631383f64,
-0.4211609053380349f64,
-0.46567685640381107f64,
-0.5086485056889962f64,
-0.5499332454596334f64,
-0.5893942317884836f64,
-0.6269005704842747f64,
-0.6623278483181271f64,
-0.6955586642499793f64,
-0.7264826825512306f64,
-0.7549974296443794f64,
-0.7810083472256659f64,
-0.8044291641235698f64,
-0.8251822150346657f64,
-0.8431985998915512f64,
-0.8584186619666295f64,
-0.8707919347494668f64,
-0.8802773013147204f64,
-0.8868433130579937f64,
-0.8904682959411214f64,
-0.8911400848789572f64,
-0.8888565549657984f64,
-0.8836253027395313f64,
-0.875463539936346f64,
-0.864398465349234f64,
-0.850466733601563f64,
-0.8337145613923618f64,
-0.8141974087604645f64,
-0.7919801384524394f64,
-0.7671363784508769f64,
-0.7397484688517476f64,
-0.7099073024964747f64,
-0.6777118468681508f64,
-0.6432688253556823f64,
-0.6066925047632196f64,
-0.568104164083731f64,
-0.5276317757631479f64,
-0.48540958071922374f64,
-0.44157755711510865f64,
-0.3962811281848155f64,
-0.34967047163886616f64,
-0.3019002009284367f64,
-0.25312870121232495f64,
-0.20351771765647064f64,
-0.1532318242075301f64,
-0.10243773963885304f64,
-0.05130394241132398f64,
0.0000000000000039314861728447415f64,
0.05130394241132398f64,
0.10243773963885304f64,
0.1532318242075301f64,
0.20351771765647064f64,
0.25312870121232495f64,
0.3019002009284367f64,
0.34967047163886616f64,
0.3962811281848155f64,
0.44157755711510865f64,
0.48540958071922374f64,
0.5276317757631479f64,
0.568104164083731f64,
0.6066925047632196f64,
0.6432688253556823f64,
0.6777118468681508f64,
0.7099073024964747f64,
0.7397484688517476f64,
0.7671363784508769f64,
0.7919801384524394f64,
0.8141974087604645f64,
0.8337145613923618f64,
0.850466733601563f64,
0.864398465349234f64,
0.875463539936346f64,
0.8836253027395313f64,
0.8888565549657984f64,
0.8911400848789572f64,
0.8904682959411214f64,
0.8868433130579937f64,
0.8802773013147204f64,
0.8707919347494668f64,
0.8584186619666295f64,
0.8431985998915512f64,
0.8251822150346657f64,
0.8044291641235698f64,
0.7810083472256659f64,
0.7549974296443794f64,
0.7264826825512306f64,
0.6955586642499793f64,
0.6623278483181271f64,
0.6269005704842747f64,
0.5893942317884836f64,
0.5499332454596334f64,
0.5086485056889962f64,
0.46567685640381107f64,
0.4211609053380349f64,
0.375248200631383f64,
0.32809101833875853f64,
0.27984580464250586f64,
0.2306724852580571f64,
0.18073418654005866f64,
0.13019650504603614f64,
0.07922704935360213f64,
0.02799483911056229f64,
-0.023330206270519342f64,
-0.07457788184287496f64,
-0.12557823499228893f64,
-0.17616211990467953f64,
-0.2261617885554974f64,
-0.2754114186159861f64,
-0.32374768452158964f64,
-0.3710102886983778f64,
-0.4170424662281511f64,
-0.4616915957588295f64,
-0.5048095979242723f64,
-0.5462534400093819f64,
-0.5858856937378512f64,
-0.6235749868146248f64,
-0.6591962685391126f64,
-0.6926313941542572f64,
-0.7237694967050324f64,
-0.752507305774298f64,
-0.7787495193412983f64,
-0.8024091225175172f64,
-0.823407653159891f64,
-0.8416754674840211f64,
-0.8571520056773875f64,
-0.8697858450219901f64,
-0.8795352311207755f64,
-0.8863677060391384f64,
-0.8902606395313476f64,
-0.8912011759179032f64,
-0.8891861809628939f64,
-0.8842222949966401f64,
-0.8763259860383358f64,
-0.8655234966734064f64,
-0.8518505784402963f64,
-0.8353525980757529f64,
-0.8160843250242575f64,
-0.7941096127021693f64,
-0.7695013453750829f64,
-0.7423411194219732f64,
-0.7127189777219823f64,
-0.6807332502864921f64,
-0.6464899699100558f64,
-0.6101026596798277f64,
-0.5716920142397082f64,
-0.5313854748092028f64,
-0.4893165917117118f64,
-0.44562502437453f64,
-0.40045558512128065f64,
-0.35395807980398786f64,
-0.30628672345400837f64,
-0.25759960905560586f64,
-0.20805818960018616f64,
-0.15782678670185332f64,
-0.10707196640635971f64,
-0.055962054446992475f64,
-0.004666553140567428f64,
0.046644422625627596f64,
0.09780071065195123f64,
0.14863265174378384f64,
0.19897168111594676f64,
0.2486508343028684f64,
0.2975053912706255f64,
0.3453732748367621f64,
0.39209580766794644f64,
0.43751800445450456f64,
0.48148923594345266f64,
0.5238636273583162f64,
0.5645007489934832f64,
0.6032657224594896f64,
0.6400300972066209f64,
0.6746719036475554f64,
0.7070761843837895f64,
0.737135578554706f64,
0.7647503749602165f64,
0.7898289901645444f64,
0.8122882341094383f64,
0.8320535757273839f64,
0.8490595679227452f64,
0.8632497944491215f64,
0.8745771355225608f64,
0.8830040865574144f64,
0.8885025987984095f64,
0.8910545574244328f64,
0.8906514628126744f64,
0.8872946430291981f64,
0.8809952007062997f64,
0.8717741192877907f64,
0.8596618380478592f64,
0.8446986239495671f64,
0.8269340935410667f64,
0.8064271598329593f64,
0.7832458198077237f64,
0.7574668888065044f64,
0.7291760005291107f64,
0.698466810194379f64,
0.6654413132760278f64,
0.6302089424177345f64,
0.5928865674331347f64,
0.5535979640793974f64,
0.5124734421987264f64,
0.46964936761457776f64,
0.4252677637118402f64,
0.37947580677173115f64,
0.3324253744293345f64,
0.2842724878858542f64,
0.23517686036615193f64,
0.18530129948901888f64,
0.13481121588273168f64,
0.08387403883598425f64,
0.03265870831261842f64,
-0.01866493263860049f64,
-0.06992667575073949f64,
-0.12095651196677523f64,
-0.17158520582816664f64,
-0.22164487650375803f64,
-0.27096948917422264f64,
-0.3193954526617916f64,
-0.3667622037793221f64,
-0.4129126057501165f64,
-0.45769369192491827f64,
-0.5009568251498397f64,
-0.5425586539739279f64,
-0.5823611657718075f64,
-0.6202322976540701f64,
-0.6560465739389847f64,
-0.6896851061524982f64,
-0.7210364429905162f64,
-0.74999651719626f64,
-0.7764693361546208f64,
-0.8003671412600866f64,
-0.8216105672846699f64,
-0.8401292798496192f64,
-0.8558618160574906f64,
-0.8687559563506456f64,
-0.878768990124465f64,
-0.8858677688499899f64,
-0.890028599828638f64,
-0.8912378305412708f64,
-0.8894913705444111f64,
-0.8847950102060982f64,
-0.8771643675832451f64,
-0.8666247290537114f64,
-0.8532110493163024f64,
-0.8369677920228425f64,
-0.817948876655532f64,
-0.7962173066684487f64,
-0.7718451694875492f64,
-0.744913370897455f64,
-0.7155111038150272f64,
-0.6837359545346517f64,
-0.6496933183791711f64,
-0.6134960278413863f64,
-0.5752641932161296f64,
-0.5351245651285532f64,
-0.4932102689209169f64,
-0.4496602734261621f64,
-0.40461904567073553f64,
-0.3582359665255207f64,
-0.3106648526020552f64,
-0.2620634515874261f64,
-0.2125929508598263f64,
-0.16241741970080778f64,
-0.11170325150753453f64,
-0.060618632566357f64,
-0.009332978454776191f64,
0.04198362789650973f64,
0.09316099897160006f64,
0.14402941539788164f64,
0.19442017294323902f64,
0.24416616769516397f64,
0.293102427287181f64,
0.3410666222042821f64,
0.38789972981595866f64,
0.43344641951536017f64,
0.47755566362968366f64,
0.5200811358399928f64,
0.5608818220916074f64,
0.5998224190139229f64,
0.6367737854628714f64,
0.6716134206247059f64,
0.7042256765065692f64,
0.734502501653491f64,
0.7623434411483867f64,
0.7876561678384842f64,
0.8103567479485361f64,
0.8303698535713896f64,
0.8476291876491279f64,
0.8620774308504265f64,
0.8736667196743377f64,
0.8823586464502892f64,
0.8881243124607274f64,
0.8909446466769726f64,
0.8908102463912914f64,
0.8877216428301095f64,
0.8816890355407985f64,
0.872732398636962f64,
0.8608814276757917f64,
0.8461754865354258f64,
0.8286633418017364f64,
0.8084030034004005f64,
0.7854617245969014f64,
0.7599155770153876f64,
0.7318492912707449f64,
0.701355885110099f64,
0.6685365040448875f64,
0.6335000494923618f64,
0.5963627006718046f64,
0.5572475427460313f64,
0.5162843543308203f64,
0.4736090231458445f64,
0.4293629882269246f64,
0.3836930274354585f64,
0.3367506199867112f64,
0.2886914152233884f64,
0.23967480763449678f64,
0.1898633392256145f64,
0.13942222141510857f64,
0.0885187307640756f64,
0.037321677749916154f64,
-0.013999147701246982f64,
-0.06527354396281115f64,
-0.11633146877610141f64,
-0.1670036036784477f64,
-0.21712189519010594f64,
-0.26652012256250046f64,
-0.3150344821272922f64,
-0.36250405211950093f64,
-0.4087714301492163f64,
-0.4536831980247199f64,
-0.49709034673362623f64,
-0.5388489935985566f64,
-0.5788205947677103f64,
-0.6168726623705381f64,
-0.6528788707630283f64,
-0.6867199596126297f64,
-0.7182836276529669f64,
-0.7474651701555507f64,
-0.7741679039109187f64,
-0.7983031672286354f64,
-0.8197909574090028f64,
-0.8385600369883455f64,
-0.8545481462295813f64,
-0.8677022687354335f64,
-0.8779787376937166f64,
-0.8853435014905481f64,
-0.8897721768329925f64,
-0.89125004874906f64,
-0.8897721768329925f64,
-0.8853435014905481f64,
-0.8779787376937166f64,
-0.8677022687354335f64,
-0.8545481462295813f64,
-0.8385600369883455f64,
-0.8197909574090028f64,
-0.7983031672286354f64,
-0.7741679039109187f64,
-0.7474651701555507f64,
-0.7182836276529669f64,
-0.6867199596126297f64,
-0.6528788707630283f64,
-0.6168726623705381f64,
-0.5788205947677103f64,
-0.5388489935985566f64,
-0.49709034673362623f64,
-0.4536831980247199f64,
-0.4087714301492163f64,
-0.36250405211950093f64,
-0.3150344821272922f64,
-0.26652012256250046f64,
-0.21712189519010594f64,
-0.1670036036784477f64,
-0.11633146877610141f64,
-0.06527354396281115f64,
-0.013999147701246982f64,
0.037321677749916154f64,
0.0885187307640756f64,
0.13942222141510857f64,
0.1898633392256145f64,
0.23967480763449678f64,
0.2886914152233884f64,
0.3367506199867112f64,
0.3836930274354585f64,
0.4293629882269246f64,
0.4736090231458445f64,
0.5162843543308203f64,
0.5572475427460313f64,
0.5963627006718046f64,
0.6335000494923618f64,
0.6685365040448875f64,
0.701355885110099f64,
0.7318492912707449f64,
0.7599155770153876f64,
0.7854617245969014f64,
0.8084030034004005f64,
0.8286633418017364f64,
0.8461754865354258f64,
0.8608814276757917f64,
0.872732398636962f64,
0.8816890355407985f64,
0.8877216428301095f64,
0.8908102463912914f64,
0.8909446466769726f64,
0.8881243124607274f64,
0.8823586464502892f64,
0.8736667196743377f64,
0.8620774308504265f64,
0.8476291876491279f64,
0.8303698535713896f64,
0.8103567479485361f64,
0.7876561678384842f64,
0.7623434411483867f64,
0.734502501653491f64,
0.7042256765065692f64,
0.6716134206247059f64,
0.6367737854628714f64,
0.5998224190139229f64,
0.5608818220916074f64,
0.5200811358399928f64,
0.47755566362968366f64,
0.43344641951536017f64,
0.38789972981595866f64,
0.3410666222042821f64,
0.293102427287181f64,
0.24416616769516397f64,
0.19442017294323902f64,
0.14402941539788164f64,
0.09316099897160006f64,
0.04198362789650973f64,
-0.009332978454776191f64,
-0.060618632566357f64,
-0.11170325150753453f64,
-0.16241741970080778f64,
-0.2125929508598263f64,
-0.2620634515874261f64,
-0.3106648526020552f64,
-0.3582359665255207f64,
-0.40461904567073553f64,
-0.4496602734261621f64,
-0.4932102689209169f64,
-0.5351245651285532f64,
-0.5752641932161296f64,
-0.6134960278413863f64,
-0.6496933183791711f64,
-0.6837359545346517f64,
-0.7155111038150272f64,
-0.744913370897455f64,
-0.7718451694875492f64,
-0.7962173066684487f64,
-0.817948876655532f64,
-0.8369677920228425f64,
-0.8532110493163024f64,
-0.8666247290537114f64,
-0.8771643675832451f64,
-0.8847950102060982f64,
-0.8894913705444111f64,
-0.8912378305412708f64,
-0.890028599828638f64,
-0.8858677688499899f64,
-0.878768990124465f64,
-0.8687559563506456f64,
-0.8558618160574906f64,
-0.8401292798496192f64,
-0.8216105672846699f64,
-0.8003671412600866f64,
-0.7764693361546208f64,
-0.74999651719626f64,
-0.7210364429905162f64,
-0.6896851061524982f64,
-0.6560465739389847f64,
-0.6202322976540701f64,
-0.5823611657718075f64,
-0.5425586539739279f64,
-0.5009568251498397f64,
-0.45769369192491827f64,
-0.4129126057501165f64,
-0.3667622037793221f64,
-0.3193954526617916f64,
-0.27096948917422264f64,
-0.22164487650375803f64,
-0.17158520582816664f64,
-0.12095651196677523f64,
-0.06992667575073949f64,
-0.01866493263860049f64,
0.03265870831261842f64,
0.08387403883598425f64,
0.13481121588273168f64,
0.18530129948901888f64,
0.23517686036615193f64,
0.2842724878858542f64,
0.3324253744293345f64,
0.37947580677173115f64,
0.4252677637118402f64,
0.46964936761457776f64,
0.5124734421987264f64,
0.5535979640793974f64,
0.5928865674331347f64,
0.6302089424177345f64,
0.6654413132760278f64,
0.698466810194379f64,
0.7291760005291107f64,
0.7574668888065044f64,
0.7832458198077237f64,
0.8064271598329593f64,
0.8269340935410667f64,
0.8446986239495671f64,
0.8596618380478592f64,
0.8717741192877907f64,
0.8809952007062997f64,
0.8872946430291981f64,
0.8906514628126744f64,
0.8910545574244328f64,
0.8885025987984095f64,
0.8830040865574144f64,
0.8745771355225608f64,
0.8632497944491215f64,
0.8490595679227452f64,
0.8320535757273839f64,
0.8122882341094383f64,
0.7898289901645444f64,
0.7647503749602165f64,
0.737135578554706f64,
0.7070761843837895f64,
0.6746719036475554f64,
0.6400300972066209f64,
0.6032657224594896f64,
0.5645007489934832f64,
0.5238636273583162f64,
0.48148923594345266f64,
0.43751800445450456f64,
0.39209580766794644f64,
0.3453732748367621f64,
0.2975053912706255f64,
0.2486508343028684f64,
0.19897168111594676f64,
0.14863265174378384f64,
0.09780071065195123f64,
0.046644422625627596f64,
-0.004666553140567428f64,
-0.055962054446992475f64,
-0.10707196640635971f64,
-0.15782678670185332f64,
-0.20805818960018616f64,
-0.25759960905560586f64,
-0.30628672345400837f64,
-0.35395807980398786f64,
-0.40045558512128065f64,
-0.44562502437453f64,
-0.4893165917117118f64,
-0.5313854748092028f64,
-0.5716920142397082f64,
-0.6101026596798277f64,
-0.6464899699100558f64,
-0.6807332502864921f64,
-0.7127189777219823f64,
-0.7423411194219732f64,
-0.7695013453750829f64,
-0.7941096127021693f64,
-0.8160843250242575f64,
-0.8353525980757529f64,
-0.8518505784402963f64,
-0.8655234966734064f64,
-0.8763259860383358f64,
-0.8842222949966401f64,
-0.8891861809628939f64,
-0.8912011759179032f64,
-0.8902606395313476f64,
-0.8863677060391384f64,
-0.8795352311207755f64,
-0.8697858450219901f64,
-0.8571520056773875f64,
-0.8416754674840211f64,
-0.823407653159891f64,
-0.8024091225175172f64,
-0.7787495193412983f64,
-0.752507305774298f64,
-0.7237694967050324f64,
-0.6926313941542572f64,
-0.6591962685391126f64,
-0.6235749868146248f64,
-0.5858856937378512f64,
-0.5462534400093819f64,
-0.5048095979242723f64,
-0.4616915957588295f64,
-0.4170424662281511f64,
-0.3710102886983778f64,
-0.32374768452158964f64,
-0.2754114186159861f64,
-0.2261617885554974f64,
-0.17616211990467953f64,
-0.12557823499228893f64,
-0.07457788184287496f64,
-0.023330206270519342f64,
0.02799483911056229f64,
0.07922704935360213f64,
0.13019650504603614f64,
0.18073418654005866f64,
0.2306724852580571f64,
0.27984580464250586f64,
0.32809101833875853f64,
0.375248200631383f64,
0.4211609053380349f64,
0.46567685640381107f64,
0.5086485056889962f64,
0.5499332454596334f64,
0.5893942317884836f64,
0.6269005704842747f64,
0.6623278483181271f64,
0.6955586642499793f64,
0.7264826825512306f64,
0.7549974296443794f64,
0.7810083472256659f64,
0.8044291641235698f64,
0.8251822150346657f64,
0.8431985998915512f64,
0.8584186619666295f64,
0.8707919347494668f64,
0.8802773013147204f64,
0.8868433130579937f64,
0.8904682959411214f64,
0.8911400848789572f64,
0.8888565549657984f64,
0.8836253027395313f64,
0.875463539936346f64,
0.864398465349234f64,
0.850466733601563f64,
0.8337145613923618f64,
0.8141974087604645f64,
0.7919801384524394f64,
0.7671363784508769f64,
0.7397484688517476f64,
0.7099073024964747f64,
0.6777118468681508f64,
0.6432688253556823f64,
0.6066925047632196f64,
0.568104164083731f64,
0.5276317757631479f64,
0.48540958071922374f64,
0.44157755711510865f64,
0.3962811281848155f64,
0.34967047163886616f64,
0.3019002009284367f64,
0.25312870121232495f64,
0.20351771765647064f64,
0.1532318242075301f64,
0.10243773963885304f64,
0.05130394241132398f64,
0.000000000000013100908554726359f64,
-0.05130394241132398f64,
-0.10243773963885304f64,
-0.1532318242075301f64,
-0.20351771765647064f64,
-0.25312870121232495f64,
-0.3019002009284367f64,
-0.34967047163886616f64,
-0.3962811281848155f64,
-0.44157755711510865f64,
-0.48540958071922374f64,
-0.5276317757631479f64,
-0.568104164083731f64,
-0.6066925047632196f64,
-0.6432688253556823f64,
-0.6777118468681508f64,
-0.7099073024964747f64,
-0.7397484688517476f64,
-0.7671363784508769f64,
-0.7919801384524394f64,
-0.8141974087604645f64,
-0.8337145613923618f64,
-0.850466733601563f64,
-0.864398465349234f64,
-0.875463539936346f64,
-0.8836253027395313f64,
-0.8888565549657984f64,
-0.8911400848789572f64,
-0.8904682959411214f64,
-0.8868433130579937f64,
-0.8802773013147204f64,
-0.8707919347494668f64,
-0.8584186619666295f64,
-0.8431985998915512f64,
-0.8251822150346657f64,
-0.8044291641235698f64,
-0.7810083472256659f64,
-0.7549974296443794f64,
-0.7264826825512306f64,
-0.6955586642499793f64,
-0.6623278483181271f64,
-0.6269005704842747f64,
-0.5893942317884836f64,
-0.5499332454596334f64,
-0.5086485056889962f64,
-0.46567685640381107f64,
-0.4211609053380349f64,
-0.375248200631383f64,
-0.32809101833875853f64,
-0.27984580464250586f64,
-0.2306724852580571f64,
-0.18073418654005866f64,
-0.13019650504603614f64,
-0.07922704935360213f64,
-0.02799483911056229f64,
0.023330206270519342f64,
0.07457788184287496f64,
0.12557823499228893f64,
0.17616211990467953f64,
0.2261617885554974f64,
0.2754114186159861f64,
0.32374768452158964f64,
0.3710102886983778f64,
0.4170424662281511f64,
0.4616915957588295f64,
0.5048095979242723f64,
0.5462534400093819f64,
0.5858856937378512f64,
0.6235749868146248f64,
0.6591962685391126f64,
0.6926313941542572f64,
0.7237694967050324f64,
0.752507305774298f64,
0.7787495193412983f64,
0.8024091225175172f64,
0.823407653159891f64,
0.8416754674840211f64,
0.8571520056773875f64,
0.8697858450219901f64,
0.8795352311207755f64,
0.8863677060391384f64,
0.8902606395313476f64,
0.8912011759179032f64,
0.8891861809628939f64,
0.8842222949966401f64,
0.8763259860383358f64,
0.8655234966734064f64,
0.8518505784402963f64,
0.8353525980757529f64,
0.8160843250242575f64,
0.7941096127021693f64,
0.7695013453750829f64,
0.7423411194219732f64,
0.7127189777219823f64,
0.6807332502864921f64,
0.6464899699100558f64,
0.6101026596798277f64,
0.5716920142397082f64,
0.5313854748092028f64,
0.4893165917117118f64,
0.44562502437453f64,
0.40045558512128065f64,
0.35395807980398786f64,
0.30628672345400837f64,
0.25759960905560586f64,
0.20805818960018616f64,
0.15782678670185332f64,
0.10707196640635971f64,
0.055962054446992475f64,
0.004666553140567428f64,
-0.046644422625627596f64,
-0.09780071065195123f64,
-0.14863265174378384f64,
-0.19897168111594676f64,
-0.2486508343028684f64,
-0.2975053912706255f64,
-0.3453732748367621f64,
-0.39209580766794644f64,
-0.43751800445450456f64,
-0.48148923594345266f64,
-0.5238636273583162f64,
-0.5645007489934832f64,
-0.6032657224594896f64,
-0.6400300972066209f64,
-0.6746719036475554f64,
-0.7070761843837895f64,
-0.737135578554706f64,
-0.7647503749602165f64,
-0.7898289901645444f64,
-0.8122882341094383f64,
-0.8320535757273839f64,
-0.8490595679227452f64,
-0.8632497944491215f64,
-0.8745771355225608f64,
-0.8830040865574144f64,
-0.8885025987984095f64,
-0.8910545574244328f64,
-0.8906514628126744f64,
-0.8872946430291981f64,
-0.8809952007062997f64,
-0.8717741192877907f64,
-0.8596618380478592f64,
-0.8446986239495671f64,
-0.8269340935410667f64,
-0.8064271598329593f64,
-0.7832458198077237f64,
-0.7574668888065044f64,
-0.7291760005291107f64,
-0.698466810194379f64,
-0.6654413132760278f64,
-0.6302089424177345f64,
-0.5928865674331347f64,
-0.5535979640793974f64,
-0.5124734421987264f64,
-0.46964936761457776f64,
-0.4252677637118402f64,
-0.37947580677173115f64,
-0.3324253744293345f64,
-0.2842724878858542f64,
-0.23517686036615193f64,
-0.18530129948901888f64,
-0.13481121588273168f64,
-0.08387403883598425f64,
-0.03265870831261842f64,
0.01866493263860049f64,
0.06992667575073949f64,
0.12095651196677523f64,
0.17158520582816664f64,
0.22164487650375803f64,
0.27096948917422264f64,
0.3193954526617916f64,
0.3667622037793221f64,
0.4129126057501165f64,
0.45769369192491827f64,
0.5009568251498397f64,
0.5425586539739279f64,
0.5823611657718075f64,
0.6202322976540701f64,
0.6560465739389847f64,
0.6896851061524982f64,
0.7210364429905162f64,
0.74999651719626f64,
0.7764693361546208f64,
0.8003671412600866f64,
0.8216105672846699f64,
0.8401292798496192f64,
0.8558618160574906f64,
0.8687559563506456f64,
0.878768990124465f64,
0.8858677688499899f64,
0.890028599828638f64,
0.8912378305412708f64,
0.8894913705444111f64,
0.8847950102060982f64,
0.8771643675832451f64,
0.8666247290537114f64,
0.8532110493163024f64,
0.8369677920228425f64,
0.817948876655532f64,
0.7962173066684487f64,
0.7718451694875492f64,
0.744913370897455f64,
0.7155111038150272f64,
0.6837359545346517f64,
0.6496933183791711f64,
0.6134960278413863f64,
0.5752641932161296f64,
0.5351245651285532f64,
0.4932102689209169f64,
0.4496602734261621f64,
0.40461904567073553f64,
0.3582359665255207f64,
0.3106648526020552f64,
0.2620634515874261f64,
0.2125929508598263f64,
0.16241741970080778f64,
0.11170325150753453f64,
0.060618632566357f64,
0.009332978454776191f64,
-0.04198362789650973f64,
-0.09316099897160006f64,
-0.14402941539788164f64,
-0.19442017294323902f64,
-0.24416616769516397f64,
-0.293102427287181f64,
-0.3410666222042821f64,
-0.38789972981595866f64,
-0.43344641951536017f64,
-0.47755566362968366f64,
-0.5200811358399928f64,
-0.5608818220916074f64,
-0.5998224190139229f64,
-0.6367737854628714f64,
-0.6716134206247059f64,
-0.7042256765065692f64,
-0.734502501653491f64,
-0.7623434411483867f64,
-0.7876561678384842f64,
-0.8103567479485361f64,
-0.8303698535713896f64,
-0.8476291876491279f64,
-0.8620774308504265f64,
-0.8736667196743377f64,
-0.8823586464502892f64,
-0.8881243124607274f64,
-0.8909446466769726f64,
-0.8908102463912914f64,
-0.8877216428301095f64,
-0.8816890355407985f64,
-0.872732398636962f64,
-0.8608814276757917f64,
-0.8461754865354258f64,
-0.8286633418017364f64,
-0.8084030034004005f64,
-0.7854617245969014f64,
-0.7599155770153876f64,
-0.7318492912707449f64,
-0.701355885110099f64,
-0.6685365040448875f64,
-0.6335000494923618f64,
-0.5963627006718046f64,
-0.5572475427460313f64,
-0.5162843543308203f64,
-0.4736090231458445f64,
-0.4293629882269246f64,
-0.3836930274354585f64,
-0.3367506199867112f64,
-0.2886914152233884f64,
-0.23967480763449678f64,
-0.1898633392256145f64,
-0.13942222141510857f64,
-0.0885187307640756f64,
-0.037321677749916154f64,
0.013999147701246982f64,
0.06527354396281115f64,
0.11633146877610141f64,
0.1670036036784477f64,
0.21712189519010594f64,
0.26652012256250046f64,
0.3150344821272922f64,
0.36250405211950093f64,
0.4087714301492163f64,
0.4536831980247199f64,
0.49709034673362623f64,
0.5388489935985566f64,
0.5788205947677103f64,
0.6168726623705381f64,
0.6528788707630283f64,
0.6867199596126297f64,
0.7182836276529669f64,
0.7474651701555507f64,
0.7741679039109187f64,
0.7983031672286354f64,
0.8197909574090028f64,
0.8385600369883455f64,
0.8545481462295813f64,
0.8677022687354335f64,
0.8779787376937166f64,
0.8853435014905481f64,
0.8897721768329925f64,
0.89125004874906f64,
0.8897721768329925f64,
0.8853435014905481f64,
0.8779787376937166f64,
0.8677022687354335f64,
0.8545481462295813f64,
0.8385600369883455f64,
0.8197909574090028f64,
0.7983031672286354f64,
0.7741679039109187f64,
0.7474651701555507f64,
0.7182836276529669f64,
0.6867199596126297f64,
0.6528788707630283f64,
0.6168726623705381f64,
0.5788205947677103f64,
0.5388489935985566f64,
0.49709034673362623f64,
0.4536831980247199f64,
0.4087714301492163f64,
0.36250405211950093f64,
0.3150344821272922f64,
0.26652012256250046f64,
0.21712189519010594f64,
0.1670036036784477f64,
0.11633146877610141f64,
0.06527354396281115f64,
0.013999147701246982f64,
-0.037321677749916154f64,
-0.0885187307640756f64,
-0.13942222141510857f64,
-0.1898633392256145f64,
-0.23967480763449678f64,
-0.2886914152233884f64,
-0.3367506199867112f64,
-0.3836930274354585f64,
-0.4293629882269246f64,
-0.4736090231458445f64,
-0.5162843543308203f64,
-0.5572475427460313f64,
-0.5963627006718046f64,
-0.6335000494923618f64,
-0.6685365040448875f64,
-0.701355885110099f64,
-0.7318492912707449f64,
-0.7599155770153876f64,
-0.7854617245969014f64,
-0.8084030034004005f64,
-0.8286633418017364f64,
-0.8461754865354258f64,
-0.8608814276757917f64,
-0.872732398636962f64,
-0.8816890355407985f64,
-0.8877216428301095f64,
-0.8908102463912914f64,
-0.8909446466769726f64,
-0.8881243124607274f64,
-0.8823586464502892f64,
-0.8736667196743377f64,
-0.8620774308504265f64,
-0.8476291876491279f64,
-0.8303698535713896f64,
-0.8103567479485361f64,
-0.7876561678384842f64,
-0.7623434411483867f64,
-0.734502501653491f64,
-0.7042256765065692f64,
-0.6716134206247059f64,
-0.6367737854628714f64,
-0.5998224190139229f64,
-0.5608818220916074f64,
-0.5200811358399928f64,
-0.47755566362968366f64,
-0.43344641951536017f64,
-0.38789972981595866f64,
-0.3410666222042821f64,
-0.293102427287181f64,
-0.24416616769516397f64,
-0.19442017294323902f64,
-0.14402941539788164f64,
-0.09316099897160006f64,
-0.04198362789650973f64,
0.009332978454776191f64,
0.060618632566357f64,
0.11170325150753453f64,
0.16241741970080778f64,
0.2125929508598263f64,
0.2620634515874261f64,
0.3106648526020552f64,
0.3582359665255207f64,
0.40461904567073553f64,
0.4496602734261621f64,
0.4932102689209169f64,
0.5351245651285532f64,
0.5752641932161296f64,
0.6134960278413863f64,
0.6496933183791711f64,
0.6837359545346517f64,
0.7155111038150272f64,
0.744913370897455f64,
0.7718451694875492f64,
0.7962173066684487f64,
0.817948876655532f64,
0.8369677920228425f64,
0.8532110493163024f64,
0.8666247290537114f64,
0.8771643675832451f64,
0.8847950102060982f64,
0.8894913705444111f64,
0.8912378305412708f64,
0.890028599828638f64,
0.8858677688499899f64,
0.878768990124465f64,
0.8687559563506456f64,
0.8558618160574906f64,
0.8401292798496192f64,
0.8216105672846699f64,
0.8003671412600866f64,
0.7764693361546208f64,
0.74999651719626f64,
0.7210364429905162f64,
0.6896851061524982f64,
0.6560465739389847f64,
0.6202322976540701f64,
0.5823611657718075f64,
0.5425586539739279f64,
0.5009568251498397f64,
0.45769369192491827f64,
0.4129126057501165f64,
0.3667622037793221f64,
0.3193954526617916f64,
0.27096948917422264f64,
0.22164487650375803f64,
0.17158520582816664f64,
0.12095651196677523f64,
0.06992667575073949f64,
0.01866493263860049f64,
-0.03265870831261842f64,
-0.08387403883598425f64,
-0.13481121588273168f64,
-0.18530129948901888f64,
-0.23517686036615193f64,
-0.2842724878858542f64,
-0.3324253744293345f64,
-0.37947580677173115f64,
-0.4252677637118402f64,
-0.46964936761457776f64,
-0.5124734421987264f64,
-0.5535979640793974f64,
-0.5928865674331347f64,
-0.6302089424177345f64,
-0.6654413132760278f64,
-0.698466810194379f64,
-0.7291760005291107f64,
-0.7574668888065044f64,
-0.7832458198077237f64,
-0.8064271598329593f64,
-0.8269340935410667f64,
-0.8446986239495671f64,
-0.8596618380478592f64,
-0.8717741192877907f64,
-0.8809952007062997f64,
-0.8872946430291981f64,
-0.8906514628126744f64,
-0.8910545574244328f64,
-0.8885025987984095f64,
-0.8830040865574144f64,
-0.8745771355225608f64,
-0.8632497944491215f64,
-0.8490595679227452f64,
-0.8320535757273839f64,
-0.8122882341094383f64,
-0.7898289901645444f64,
-0.7647503749602165f64,
-0.737135578554706f64,
-0.7070761843837895f64,
-0.6746719036475554f64,
-0.6400300972066209f64,
-0.6032657224594896f64,
-0.5645007489934832f64,
-0.5238636273583162f64,
-0.48148923594345266f64,
-0.43751800445450456f64,
-0.39209580766794644f64,
-0.3453732748367621f64,
-0.2975053912706255f64,
-0.2486508343028684f64,
-0.19897168111594676f64,
-0.14863265174378384f64,
-0.09780071065195123f64,
-0.046644422625627596f64,
0.004666553140567428f64,
0.055962054446992475f64,
0.10707196640635971f64,
0.15782678670185332f64,
0.20805818960018616f64,
0.25759960905560586f64,
0.30628672345400837f64,
0.35395807980398786f64,
0.40045558512128065f64,
0.44562502437453f64,
0.4893165917117118f64,
0.5313854748092028f64,
0.5716920142397082f64,
0.6101026596798277f64,
0.6464899699100558f64,
0.6807332502864921f64,
0.7127189777219823f64,
0.7423411194219732f64,
0.7695013453750829f64,
0.7941096127021693f64,
0.8160843250242575f64,
0.8353525980757529f64,
0.8518505784402963f64,
0.8655234966734064f64,
0.8763259860383358f64,
0.8842222949966401f64,
0.8891861809628939f64,
0.8912011759179032f64,
0.8902606395313476f64,
0.8863677060391384f64,
0.8795352311207755f64,
0.8697858450219901f64,
0.8571520056773875f64,
0.8416754674840211f64,
0.823407653159891f64,
0.8024091225175172f64,
0.7787495193412983f64,
0.752507305774298f64,
0.7237694967050324f64,
0.6926313941542572f64,
0.6591962685391126f64,
0.6235749868146248f64,
0.5858856937378512f64,
0.5462534400093819f64,
0.5048095979242723f64,
0.4616915957588295f64,
0.4170424662281511f64,
0.3710102886983778f64,
0.32374768452158964f64,
0.2754114186159861f64,
0.2261617885554974f64,
0.17616211990467953f64,
0.12557823499228893f64,
0.07457788184287496f64,
0.023330206270519342f64,
-0.02799483911056229f64,
-0.07922704935360213f64,
-0.13019650504603614f64,
-0.18073418654005866f64,
-0.2306724852580571f64,
-0.27984580464250586f64,
-0.32809101833875853f64,
-0.375248200631383f64,
-0.4211609053380349f64,
-0.46567685640381107f64,
-0.5086485056889962f64,
-0.5499332454596334f64,
-0.5893942317884836f64,
-0.6269005704842747f64,
-0.6623278483181271f64,
-0.6955586642499793f64,
-0.7264826825512306f64,
-0.7549974296443794f64,
-0.7810083472256659f64,
-0.8044291641235698f64,
-0.8251822150346657f64,
-0.8431985998915512f64,
-0.8584186619666295f64,
-0.8707919347494668f64,
-0.8802773013147204f64,
-0.8868433130579937f64,
-0.8904682959411214f64,
-0.8911400848789572f64,
-0.8888565549657984f64,
-0.8836253027395313f64,
-0.875463539936346f64,
-0.864398465349234f64,
-0.850466733601563f64,
-0.8337145613923618f64,
-0.8141974087604645f64,
-0.7919801384524394f64,
-0.7671363784508769f64,
-0.7397484688517476f64,
-0.7099073024964747f64,
-0.6777118468681508f64,
-0.6432688253556823f64,
-0.6066925047632196f64,
-0.568104164083731f64,
-0.5276317757631479f64,
-0.48540958071922374f64,
-0.44157755711510865f64,
-0.3962811281848155f64,
-0.34967047163886616f64,
-0.3019002009284367f64,
-0.25312870121232495f64,
-0.20351771765647064f64,
-0.1532318242075301f64,
-0.10243773963885304f64,
-0.05130394241132398f64,
0.000000000000007862972345689483f64,
0.05130394241132398f64,
0.10243773963885304f64,
0.1532318242075301f64,
0.20351771765647064f64,
0.25312870121232495f64,
0.3019002009284367f64,
0.34967047163886616f64,
0.3962811281848155f64,
0.44157755711510865f64,
0.48540958071922374f64,
0.5276317757631479f64,
0.568104164083731f64,
0.6066925047632196f64,
0.6432688253556823f64,
0.6777118468681508f64,
0.7099073024964747f64,
0.7397484688517476f64,
0.7671363784508769f64,
0.7919801384524394f64,
0.8141974087604645f64,
0.8337145613923618f64,
0.850466733601563f64,
0.864398465349234f64,
0.875463539936346f64,
0.8836253027395313f64,
0.8888565549657984f64,
0.8911400848789572f64,
0.8904682959411214f64,
0.8868433130579937f64,
0.8802773013147204f64,
0.8707919347494668f64,
0.8584186619666295f64,
0.8431985998915512f64,
0.8251822150346657f64,
0.8044291641235698f64,
0.7810083472256659f64,
0.7549974296443794f64,
0.7264826825512306f64,
0.6955586642499793f64,
0.6623278483181271f64,
0.6269005704842747f64,
0.5893942317884836f64,
0.5499332454596334f64,
0.5086485056889962f64,
0.46567685640381107f64,
0.4211609053380349f64,
0.375248200631383f64,
0.32809101833875853f64,
0.27984580464250586f64,
0.2306724852580571f64,
0.18073418654005866f64,
0.13019650504603614f64,
0.07922704935360213f64,
0.02799483911056229f64,
-0.023330206270519342f64,
-0.07457788184287496f64,
-0.12557823499228893f64,
-0.17616211990467953f64,
-0.2261617885554974f64,
-0.2754114186159861f64,
-0.32374768452158964f64,
-0.3710102886983778f64,
-0.4170424662281511f64,
-0.4616915957588295f64,
-0.5048095979242723f64,
-0.5462534400093819f64,
-0.5858856937378512f64,
-0.6235749868146248f64,
-0.6591962685391126f64,
-0.6926313941542572f64,
-0.7237694967050324f64,
-0.752507305774298f64,
-0.7787495193412983f64,
-0.8024091225175172f64,
-0.823407653159891f64,
-0.8416754674840211f64,
-0.8571520056773875f64,
-0.8697858450219901f64,
-0.8795352311207755f64,
-0.8863677060391384f64,
-0.8902606395313476f64,
-0.8912011759179032f64,
-0.8891861809628939f64,
-0.8842222949966401f64,
-0.8763259860383358f64,
-0.8655234966734064f64,
-0.8518505784402963f64,
-0.8353525980757529f64,
-0.8160843250242575f64,
-0.7941096127021693f64,
-0.7695013453750829f64,
-0.7423411194219732f64,
-0.7127189777219823f64,
-0.6807332502864921f64,
-0.6464899699100558f64,
-0.6101026596798277f64,
-0.5716920142397082f64,
-0.5313854748092028f64,
-0.4893165917117118f64,
-0.44562502437453f64,
-0.40045558512128065f64,
-0.35395807980398786f64,
-0.30628672345400837f64,
-0.25759960905560586f64,
-0.20805818960018616f64,
-0.15782678670185332f64,
-0.10707196640635971f64,
-0.055962054446992475f64,
-0.004666553140567428f64,
0.046644422625627596f64,
0.09780071065195123f64,
0.14863265174378384f64,
0.19897168111594676f64,
0.2486508343028684f64,
0.2975053912706255f64,
0.3453732748367621f64,
0.39209580766794644f64,
0.43751800445450456f64,
0.48148923594345266f64,
0.5238636273583162f64,
0.5645007489934832f64,
0.6032657224594896f64,
0.6400300972066209f64,
0.6746719036475554f64,
0.7070761843837895f64,
0.737135578554706f64,
0.7647503749602165f64,
0.7898289901645444f64,
0.8122882341094383f64,
0.8320535757273839f64,
0.8490595679227452f64,
0.8632497944491215f64,
0.8745771355225608f64,
0.8830040865574144f64,
0.8885025987984095f64,
0.8910545574244328f64,
0.8906514628126744f64,
0.8872946430291981f64,
0.8809952007062997f64,
0.8717741192877907f64,
0.8596618380478592f64,
0.8446986239495671f64,
0.8269340935410667f64,
0.8064271598329593f64,
0.7832458198077237f64,
0.7574668888065044f64,
0.7291760005291107f64,
0.698466810194379f64,
0.6654413132760278f64,
0.6302089424177345f64,
0.5928865674331347f64,
0.5535979640793974f64,
0.5124734421987264f64,
0.46964936761457776f64,
0.4252677637118402f64,
0.37947580677173115f64,
0.3324253744293345f64,
0.2842724878858542f64,
0.23517686036615193f64,
0.18530129948901888f64,
0.13481121588273168f64,
0.08387403883598425f64,
0.03265870831261842f64,
-0.01866493263860049f64,
-0.06992667575073949f64,
-0.12095651196677523f64,
-0.17158520582816664f64,
-0.22164487650375803f64,
-0.27096948917422264f64,
-0.3193954526617916f64,
-0.3667622037793221f64,
-0.4129126057501165f64,
-0.45769369192491827f64,
-0.5009568251498397f64,
-0.5425586539739279f64,
-0.5823611657718075f64,
-0.6202322976540701f64,
-0.6560465739389847f64,
-0.6896851061524982f64,
-0.7210364429905162f64,
-0.74999651719626f64,
-0.7764693361546208f64,
-0.8003671412600866f64,
-0.8216105672846699f64,
-0.8401292798496192f64,
-0.8558618160574906f64,
-0.8687559563506456f64,
-0.878768990124465f64,
-0.8858677688499899f64,
-0.890028599828638f64,
-0.8912378305412708f64,
-0.8894913705444111f64,
-0.8847950102060982f64,
-0.8771643675832451f64,
-0.8666247290537114f64,
-0.8532110493163024f64,
-0.8369677920228425f64,
-0.817948876655532f64,
-0.7962173066684487f64,
-0.7718451694875492f64,
-0.744913370897455f64,
-0.7155111038150272f64,
-0.6837359545346517f64,
-0.6496933183791711f64,
-0.6134960278413863f64,
-0.5752641932161296f64,
-0.5351245651285532f64,
-0.4932102689209169f64,
-0.4496602734261621f64,
-0.40461904567073553f64,
-0.3582359665255207f64,
-0.3106648526020552f64,
-0.2620634515874261f64,
-0.2125929508598263f64,
-0.16241741970080778f64,
-0.11170325150753453f64,
-0.060618632566357f64,
-0.009332978454776191f64,
0.04198362789650973f64,
0.09316099897160006f64,
0.14402941539788164f64,
0.19442017294323902f64,
0.24416616769516397f64,
0.293102427287181f64,
0.3410666222042821f64,
0.38789972981595866f64,
0.43344641951536017f64,
0.47755566362968366f64,
0.5200811358399928f64,
0.5608818220916074f64,
0.5998224190139229f64,
0.6367737854628714f64,
0.6716134206247059f64,
0.7042256765065692f64,
0.734502501653491f64,
0.7623434411483867f64,
0.7876561678384842f64,
0.8103567479485361f64,
0.8303698535713896f64,
0.8476291876491279f64,
0.8620774308504265f64,
0.8736667196743377f64,
0.8823586464502892f64,
0.8881243124607274f64,
0.8909446466769726f64,
0.8908102463912914f64,
0.8877216428301095f64,
0.8816890355407985f64,
0.872732398636962f64,
0.8608814276757917f64,
0.8461754865354258f64,
0.8286633418017364f64,
0.8084030034004005f64,
0.7854617245969014f64,
0.7599155770153876f64,
0.7318492912707449f64,
0.701355885110099f64,
0.6685365040448875f64,
0.6335000494923618f64,
0.5963627006718046f64,
0.5572475427460313f64,
0.5162843543308203f64,
0.4736090231458445f64,
0.4293629882269246f64,
0.3836930274354585f64,
0.3367506199867112f64,
0.2886914152233884f64,
0.23967480763449678f64,
0.1898633392256145f64,
0.13942222141510857f64,
0.0885187307640756f64,
0.037321677749916154f64,
-0.013999147701246982f64,
-0.06527354396281115f64,
-0.11633146877610141f64,
-0.1670036036784477f64,
-0.21712189519010594f64,
-0.26652012256250046f64,
-0.3150344821272922f64,
-0.36250405211950093f64,
-0.4087714301492163f64,
-0.4536831980247199f64,
-0.49709034673362623f64,
-0.5388489935985566f64,
-0.5788205947677103f64,
-0.6168726623705381f64,
-0.6528788707630283f64,
-0.6867199596126297f64,
-0.7182836276529669f64,
-0.7474651701555507f64,
-0.7741679039109187f64,
-0.7983031672286354f64,
-0.8197909574090028f64,
-0.8385600369883455f64,
-0.8545481462295813f64,
-0.8677022687354335f64,
-0.8779787376937166f64,
-0.8853435014905481f64,
-0.8897721768329925f64,
-0.89125004874906f64,
-0.8897721768329925f64,
-0.8853435014905481f64,
-0.8779787376937166f64,
-0.8677022687354335f64,
-0.8545481462295813f64,
-0.8385600369883455f64,
-0.8197909574090028f64,
-0.7983031672286354f64,
-0.7741679039109187f64,
-0.7474651701555507f64,
-0.7182836276529669f64,
-0.6867199596126297f64,
-0.6528788707630283f64,
-0.6168726623705381f64,
-0.5788205947677103f64,
-0.5388489935985566f64,
-0.49709034673362623f64,
-0.4536831980247199f64,
-0.4087714301492163f64,
-0.36250405211950093f64,
-0.3150344821272922f64,
-0.26652012256250046f64,
-0.21712189519010594f64,
-0.1670036036784477f64,
-0.11633146877610141f64,
-0.06527354396281115f64,
-0.013999147701246982f64,
0.037321677749916154f64,
0.0885187307640756f64,
0.13942222141510857f64,
0.1898633392256145f64,
0.23967480763449678f64,
0.2886914152233884f64,
0.3367506199867112f64,
0.3836930274354585f64,
0.4293629882269246f64,
0.4736090231458445f64,
0.5162843543308203f64,
0.5572475427460313f64,
0.5963627006718046f64,
0.6335000494923618f64,
0.6685365040448875f64,
0.701355885110099f64,
0.7318492912707449f64,
0.7599155770153876f64,
0.7854617245969014f64,
0.8084030034004005f64,
0.8286633418017364f64,
0.8461754865354258f64,
0.8608814276757917f64,
0.872732398636962f64,
0.8816890355407985f64,
0.8877216428301095f64,
0.8908102463912914f64,
0.8909446466769726f64,
0.8881243124607274f64,
0.8823586464502892f64,
0.8736667196743377f64,
0.8620774308504265f64,
0.8476291876491279f64,
0.8303698535713896f64,
0.8103567479485361f64,
0.7876561678384842f64,
0.7623434411483867f64,
0.734502501653491f64,
0.7042256765065692f64,
0.6716134206247059f64,
0.6367737854628714f64,
0.5998224190139229f64,
0.5608818220916074f64,
0.5200811358399928f64,
0.47755566362968366f64,
0.43344641951536017f64,
0.38789972981595866f64,
0.3410666222042821f64,
0.293102427287181f64,
0.24416616769516397f64,
0.19442017294323902f64,
0.14402941539788164f64,
0.09316099897160006f64,
0.04198362789650973f64,
-0.009332978454776191f64,
-0.060618632566357f64,
-0.11170325150753453f64,
-0.16241741970080778f64,
-0.2125929508598263f64,
-0.2620634515874261f64,
-0.3106648526020552f64,
-0.3582359665255207f64,
-0.40461904567073553f64,
-0.4496602734261621f64,
-0.4932102689209169f64,
-0.5351245651285532f64,
-0.5752641932161296f64,
-0.6134960278413863f64,
-0.6496933183791711f64,
-0.6837359545346517f64,
-0.7155111038150272f64,
-0.744913370897455f64,
-0.7718451694875492f64,
-0.7962173066684487f64,
-0.817948876655532f64,
-0.8369677920228425f64,
-0.8532110493163024f64,
-0.8666247290537114f64,
-0.8771643675832451f64,
-0.8847950102060982f64,
-0.8894913705444111f64,
-0.8912378305412708f64,
-0.890028599828638f64,
-0.8858677688499899f64,
-0.878768990124465f64,
-0.8687559563506456f64,
-0.8558618160574906f64,
-0.8401292798496192f64,
-0.8216105672846699f64,
-0.8003671412600866f64,
-0.7764693361546208f64,
-0.74999651719626f64,
-0.7210364429905162f64,
-0.6896851061524982f64,
-0.6560465739389847f64,
-0.6202322976540701f64,
-0.5823611657718075f64,
-0.5425586539739279f64,
-0.5009568251498397f64,
-0.45769369192491827f64,
-0.4129126057501165f64,
-0.3667622037793221f64,
-0.3193954526617916f64,
-0.27096948917422264f64,
-0.22164487650375803f64,
-0.17158520582816664f64,
-0.12095651196677523f64,
-0.06992667575073949f64,
-0.01866493263860049f64,
0.03265870831261842f64,
0.08387403883598425f64,
0.13481121588273168f64,
0.18530129948901888f64,
0.23517686036615193f64,
0.2842724878858542f64,
0.3324253744293345f64,
0.37947580677173115f64,
0.4252677637118402f64,
0.46964936761457776f64,
0.5124734421987264f64,
0.5535979640793974f64,
0.5928865674331347f64,
0.6302089424177345f64,
0.6654413132760278f64,
0.698466810194379f64,
0.7291760005291107f64,
0.7574668888065044f64,
0.7832458198077237f64,
0.8064271598329593f64,
0.8269340935410667f64,
0.8446986239495671f64,
0.8596618380478592f64,
0.8717741192877907f64,
0.8809952007062997f64,
0.8872946430291981f64,
0.8906514628126744f64,
0.8910545574244328f64,
0.8885025987984095f64,
0.8830040865574144f64,
0.8745771355225608f64,
0.8632497944491215f64,
0.8490595679227452f64,
0.8320535757273839f64,
0.8122882341094383f64,
0.7898289901645444f64,
0.7647503749602165f64,
0.737135578554706f64,
0.7070761843837895f64,
0.6746719036475554f64,
0.6400300972066209f64,
0.6032657224594896f64,
0.5645007489934832f64,
0.5238636273583162f64,
0.48148923594345266f64,
0.43751800445450456f64,
0.39209580766794644f64,
0.3453732748367621f64,
0.2975053912706255f64,
0.2486508343028684f64,
0.19897168111594676f64,
0.14863265174378384f64,
0.09780071065195123f64,
0.046644422625627596f64,
-0.004666553140567428f64,
-0.055962054446992475f64,
-0.10707196640635971f64,
-0.15782678670185332f64,
-0.20805818960018616f64,
-0.25759960905560586f64,
-0.30628672345400837f64,
-0.35395807980398786f64,
-0.40045558512128065f64,
-0.44562502437453f64,
-0.4893165917117118f64,
-0.5313854748092028f64,
-0.5716920142397082f64,
-0.6101026596798277f64,
-0.6464899699100558f64,
-0.6807332502864921f64,
-0.7127189777219823f64,
-0.7423411194219732f64,
-0.7695013453750829f64,
-0.7941096127021693f64,
-0.8160843250242575f64,
-0.8353525980757529f64,
-0.8518505784402963f64,
-0.8655234966734064f64,
-0.8763259860383358f64,
-0.8842222949966401f64,
-0.8891861809628939f64,
-0.8912011759179032f64,
-0.8902606395313476f64,
-0.8863677060391384f64,
-0.8795352311207755f64,
-0.8697858450219901f64,
-0.8571520056773875f64,
-0.8416754674840211f64,
-0.823407653159891f64,
-0.8024091225175172f64,
-0.7787495193412983f64,
-0.752507305774298f64,
-0.7237694967050324f64,
-0.6926313941542572f64,
-0.6591962685391126f64,
-0.6235749868146248f64,
-0.5858856937378512f64,
-0.5462534400093819f64,
-0.5048095979242723f64,
-0.4616915957588295f64,
-0.4170424662281511f64,
-0.3710102886983778f64,
-0.32374768452158964f64,
-0.2754114186159861f64,
-0.2261617885554974f64,
-0.17616211990467953f64,
-0.12557823499228893f64,
-0.07457788184287496f64,
-0.023330206270519342f64,
0.02799483911056229f64,
0.07922704935360213f64,
0.13019650504603614f64,
0.18073418654005866f64,
0.2306724852580571f64,
0.27984580464250586f64,
0.32809101833875853f64,
0.375248200631383f64,
0.4211609053380349f64,
0.46567685640381107f64,
0.5086485056889962f64,
0.5499332454596334f64,
0.5893942317884836f64,
0.6269005704842747f64,
0.6623278483181271f64,
0.6955586642499793f64,
0.7264826825512306f64,
0.7549974296443794f64,
0.7810083472256659f64,
0.8044291641235698f64,
0.8251822150346657f64,
0.8431985998915512f64,
0.8584186619666295f64,
0.8707919347494668f64,
0.8802773013147204f64,
0.8868433130579937f64,
0.8904682959411214f64,
0.8911400848789572f64,
0.8888565549657984f64,
0.8836253027395313f64,
0.875463539936346f64,
0.864398465349234f64,
0.850466733601563f64,
0.8337145613923618f64,
0.8141974087604645f64,
0.7919801384524394f64,
0.7671363784508769f64,
0.7397484688517476f64,
0.7099073024964747f64,
0.6777118468681508f64,
0.6432688253556823f64,
0.6066925047632196f64,
0.568104164083731f64,
0.5276317757631479f64,
0.48540958071922374f64,
0.44157755711510865f64,
0.3962811281848155f64,
0.34967047163886616f64,
0.3019002009284367f64,
0.25312870121232495f64,
0.20351771765647064f64,
0.1532318242075301f64,
0.10243773963885304f64,
0.05130394241132398f64,
];
fn decode_with_symphonia(data: &'static [u8]) -> (Vec<f32>, u32, usize) {
use std::io::Cursor;
use symphonia::core::audio::SampleBuffer;
use symphonia::core::codecs::DecoderOptions;
use symphonia::core::errors::Error;
use symphonia::core::formats::FormatOptions;
use symphonia::core::io::MediaSourceStream;
use symphonia::core::meta::MetadataOptions;
use symphonia::default::get_probe;
let mss = MediaSourceStream::new(Box::new(Cursor::new(data)), Default::default());
let probed = get_probe()
.format(
&Default::default(),
mss,
&FormatOptions::default(),
&MetadataOptions::default(),
)
.expect("Failed to probe format");
let mut format = probed.format;
let track = format
.tracks()
.iter()
.find(|t| t.codec_params.codec != symphonia::core::codecs::CODEC_TYPE_NULL)
.expect("no supported track found");
let dec_opts: DecoderOptions = Default::default();
let mut decoder = symphonia::default::get_codecs()
.make(&track.codec_params, &dec_opts)
.expect("unsupported codec");
let track_id = track.id;
let mut sample_buf = None;
let mut symphonia_decoded_samples = Vec::<f32>::new();
let mut sample_rate = None;
let mut num_channels = None;
loop {
let Ok(packet) = format.next_packet() else {
break;
};
while !format.metadata().is_latest() {
format.metadata().pop();
}
if packet.track_id() != track_id {
continue;
}
match decoder.decode(&packet) {
Ok(decoded) => {
if sample_buf.is_none() {
let spec = *decoded.spec();
sample_rate = Some(spec.rate);
num_channels = Some(spec.channels.count());
let duration = decoded.capacity();
sample_buf = Some(SampleBuffer::<f32>::new(duration as u64, spec));
}
if let Some(buf) = &mut sample_buf {
buf.copy_interleaved_ref(decoded);
for e in buf.samples().iter() {
symphonia_decoded_samples.push(*e);
}
}
}
Err(Error::IoError(_)) => {
continue;
}
Err(Error::DecodeError(_)) => {
continue;
}
Err(err) => {
panic!("{}", err);
}
}
}
(
symphonia_decoded_samples,
sample_rate.unwrap(),
num_channels.unwrap(),
)
}
#[test]
fn wav_specs() {
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_16.wav");
let mut input = &wav[..];
let mut reader = PcmReader::new(&mut input).unwrap();
{
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 16);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmLe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_24.wav");
let mut input = &wav[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 24);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmLe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32.wav");
let mut input = &wav[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 32);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmLe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32FP.wav");
let mut input = &wav[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 32);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatLe); assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_64FP.wav");
let mut input = &wav[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 64);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatLe); assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let wav = include_bytes!("./resources/MLKDream.wav"); let mut input = &wav[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 16);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmLe); assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 22050);
assert_eq!(spec.num_samples, 21_772_800);
}
}
#[test]
fn aiff_specs() {
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_16.aif");
let mut input = &data[..];
let mut reader = PcmReader::new(&mut input).unwrap();
{
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 16);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmBe); assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_24.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 24);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmBe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 32);
assert_eq!(spec.audio_format, AudioFormat::LinearPcmBe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32FP.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 32);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatBe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_64FP.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.bit_depth, 64);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatBe);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_samples, 240000);
}
}
#[test]
fn wav_compare_with_symphonia() {
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_16.wav");
let mut input = &data[..];
let mut reader = PcmReader::new(&mut input).unwrap();
{
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_24.wav");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32.wav");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32FP.wav");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_64FP.wav");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f64 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(
sample as f32,
symphonia_buf[samp * num_channels + ch],
epsilon = 0.0000001f32
);
}
}
}
{
let data = include_bytes!("./resources/MLKDream.wav"); let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Tank_Low17.wav");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
}
#[test]
fn aiff_compare_with_symphonia() {
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_16.aif");
let mut input = &data[..];
let mut reader = PcmReader::new(&mut input).unwrap();
{
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_24.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
{
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32.aif");
let mut input = &data[..];
reader.reload(&mut input).unwrap();
let spec = reader.get_pcm_specs();
let (symphonia_buf, sample_rate, num_channels) = decode_with_symphonia(data);
assert_eq!(spec.sample_rate, sample_rate);
assert_eq!(spec.num_channels as usize, num_channels);
let num_total_samples = spec.num_channels as usize * spec.num_samples as usize;
assert_eq!(symphonia_buf.len(), num_total_samples);
for samp in 0..spec.num_samples as usize {
for ch in 0..num_channels {
let sample: f32 = reader.read_sample(ch as u16, samp as u32).unwrap();
assert_relative_eq!(sample, symphonia_buf[samp * num_channels + ch]);
}
}
}
}
#[test]
fn aiff_32bit_float() {
let aiff = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32FP.aif");
let mut input = &aiff[..];
let reader = PcmReader::new(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240000);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatBe);
assert_eq!(spec.bit_depth, 32);
for i in 0..SINEWAVE.len() as u32 {
let sample: f32 = reader.read_sample(0, i).unwrap();
assert_relative_eq!(sample, SINEWAVE[i as usize] as f32);
}
}
#[test]
fn aiff_64bit_float() {
let aiff = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_64FP.aif");
let mut input = &aiff[..];
let reader = PcmReader::new(&mut input).unwrap();
let spec = reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240000);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.audio_format, AudioFormat::IeeeFloatBe);
assert_eq!(spec.bit_depth, 64);
for i in 0..SINEWAVE.len() as u32 {
let sample: f64 = reader.read_sample(0, i).unwrap();
assert_relative_eq!(sample, SINEWAVE[i as usize], epsilon = 0.0000001f64);
}
}
#[test]
fn wav_player_32bit() {
let wav = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_32.wav");
let mut input = &wav[..];
let reader = PcmReader::new(&mut input).unwrap();
let mut player = PcmPlayer::new(reader);
let spec = player.reader.get_pcm_specs();
player.set_position(0).unwrap();
player.set_loop_playing(false);
let mut buffer: [f32; 2] = [0f32, 0f32];
let b = buffer.as_mut_slice();
for i in 0..10 {
if player.get_next_frame(b).is_ok() {
assert_relative_eq!(b[0], SINEWAVE[i as usize] as f32);
}
}
player.set_position(0).unwrap();
for i in 0..10 {
if player.get_next_frame(b).is_ok() {
assert_relative_eq!(b[0], SINEWAVE[i as usize] as f32);
}
}
player.set_position(0).unwrap();
for _ in 0..spec.num_samples {
player.get_next_frame(b).unwrap();
}
for _ in 0..10 {
let e = player.get_next_frame(b);
match e {
Ok(_) => unreachable!(),
Err(_) => continue,
}
}
player.set_loop_playing(true);
player.set_position(0).unwrap();
for _ in 0..spec.num_samples {
player.get_next_frame(b).unwrap();
}
for i in 0..10 {
if player.get_next_frame(b).is_ok() {
assert_relative_eq!(b[0], SINEWAVE[i as usize] as f32);
}
}
}
#[test]
fn ima_adpcm_4bit() {
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_4bit_IMAADPCM.wav");
let mut input = &data[..];
let mut player = ImaAdpcmPlayer::new(&mut input).unwrap();
let spec = player.reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240838);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.audio_format, AudioFormat::ImaAdpcmLe);
assert_eq!(spec.bit_depth, 4);
let mut buffer: [I1F15; 2] = [I1F15::ZERO, I1F15::ZERO];
let buf = buffer.as_mut_slice();
for i in 0..10 {
player.get_next_frame(buf).unwrap();
let s = buf[0].to_num::<f32>();
assert_relative_eq!(s, SINEWAVE[i as usize] as f32, epsilon = 0.3f32);
}
}
#[test]
fn ima_adpcm_4bit_play_to_end() {
let data = include_bytes!("./resources/Sine440Hz_1ch_48000Hz_4bit_IMAADPCM.wav");
let mut input = &data[..];
let mut player = ImaAdpcmPlayer::new(&mut input).unwrap();
let spec = player.reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240838);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 1);
assert_eq!(spec.audio_format, AudioFormat::ImaAdpcmLe);
assert_eq!(spec.bit_depth, 4);
let mut buffer: [I1F15; 2] = [I1F15::ZERO, I1F15::ZERO];
let buf = buffer.as_mut_slice();
for _ in 0..spec.num_samples {
player.get_next_frame(buf).unwrap();
}
let e = player.get_next_frame(buf);
assert!(e.is_err());
player.rewind();
for _ in 0..spec.num_samples {
player.get_next_frame(buf).unwrap();
}
let e = player.get_next_frame(buf);
assert!(e.is_err());
}
#[test]
fn ima_adpcm_4bit_2ch() {
let data = include_bytes!("./resources/Sine440Hz_2ch_48000Hz_4bit_IMAADPCM.wav");
let mut input = &data[..];
let mut player = ImaAdpcmPlayer::new(&mut input).unwrap();
let spec = player.reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240838);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 2);
assert_eq!(spec.audio_format, AudioFormat::ImaAdpcmLe);
assert_eq!(spec.bit_depth, 4);
let mut buffer: [I1F15; 2] = [I1F15::ZERO, I1F15::ZERO];
let buf = buffer.as_mut_slice();
for i in 0..SINEWAVE.len() as u32 {
player.get_next_frame(buf).unwrap();
let l = buf[0].to_num::<f32>();
let r = buf[1].to_num::<f32>();
assert_relative_eq!(l, SINEWAVE[i as usize] as f32, epsilon = 0.3f32);
assert_relative_eq!(r, SINEWAVE[i as usize] as f32, epsilon = 0.3f32);
}
}
#[test]
fn ima_adpcm_4bit_2ch_play_to_end() {
let data = include_bytes!("./resources/Sine440Hz_2ch_48000Hz_4bit_IMAADPCM.wav");
let mut input = &data[..];
let mut player = ImaAdpcmPlayer::new(&mut input).unwrap();
let spec = player.reader.get_pcm_specs();
assert_eq!(spec.num_samples, 240838);
assert_eq!(spec.sample_rate, 48000);
assert_eq!(spec.num_channels, 2);
assert_eq!(spec.audio_format, AudioFormat::ImaAdpcmLe);
assert_eq!(spec.bit_depth, 4);
let mut buffer: [I1F15; 2] = [I1F15::ZERO, I1F15::ZERO];
let buf = buffer.as_mut_slice();
for _ in 0..spec.num_samples {
player.get_next_frame(buf).unwrap();
}
let e = player.get_next_frame(buf);
assert!(e.is_err());
player.rewind();
for _ in 0..spec.num_samples {
player.get_next_frame(buf).unwrap();
}
let e = player.get_next_frame(buf);
assert!(e.is_err());
}