------------------------------------------------------------------------------ -- -- -- WAVEFILES -- -- -- -- Internal auxiliary routines -- -- -- -- The MIT License (MIT) -- -- -- -- Copyright (c) 2015 -- 2020 Gustavo A. Hoffmann -- -- -- -- Permission is hereby granted, free of charge, to any person obtaining -- -- a copy of this software and associated documentation files (the -- -- "Software"), to deal in the Software without restriction, including -- -- without limitation the rights to use, copy, modify, merge, publish, -- -- distribute, sublicense, and / or sell copies of the Software, and to -- -- permit persons to whom the Software is furnished to do so, subject to -- -- the following conditions: -- -- -- -- The above copyright notice and this permission notice shall be -- -- included in all copies or substantial portions of the Software. -- -- -- -- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -- -- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -- -- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -- -- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -- -- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -- -- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -- -- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -- ------------------------------------------------------------------------------ with Audio.RIFF; package body Audio.Wavefiles.Internals is use Ada.Streams.Stream_IO; ---------------- -- Skip_Bytes -- ---------------- procedure Skip_Bytes (F : in out Ada.Streams.Stream_IO.File_Type; Bytes : Unsigned_32) is begin Set_Index (F, Ada.Streams.Stream_IO.Index (F) + Ada.Streams.Stream_IO.Count (Bytes)); end Skip_Bytes; ---------------------------------------- -- Set_File_Index_To_Chunk_Data_Start -- ---------------------------------------- procedure Set_File_Index_To_Chunk_Data_Start (File : Ada.Streams.Stream_IO.File_Type; Chunk_Start_Index : Ada.Streams.Stream_IO.Positive_Count; Position_In_Chunk : Ada.Streams.Stream_IO.Count := 0) is Chunk_Data_Index : Ada.Streams.Stream_IO.Positive_Count; Chunk_Header_Size : constant Ada.Streams.Stream_IO.Positive_Count := Audio.RIFF.RIFF_Chunk_Header'Size / 8; begin -- Calculate file index corresponding to a position after the -- RIFF chunk header Chunk_Data_Index := Chunk_Start_Index + Chunk_Header_Size + Position_In_Chunk; Ada.Streams.Stream_IO.Set_Index (File, Chunk_Data_Index); end Set_File_Index_To_Chunk_Data_Start; --------------------- -- Number_Of_Bytes -- --------------------- function Number_Of_Bytes (Position : Sample_Count; Channels_In_Total : Interfaces.Unsigned_16; Bits_Per_Sample : Wav_Bit_Depth) return Ada.Streams.Stream_IO.Count is (Ada.Streams.Stream_IO.Count (Long_Integer (Position) * (Long_Integer (To_Positive (Bits_Per_Sample)) / 8) * Long_Integer (Channels_In_Total))); ----------------------- -- Number_Of_Samples -- ----------------------- function Number_Of_Samples (Chunk_Size : Long_Integer; Channels_In_Total : Interfaces.Unsigned_16; Bits_Per_Sample : Wav_Bit_Depth) return Sample_Count is (Sample_Count (Chunk_Size) / (Sample_Count (To_Positive (Bits_Per_Sample)) / 8) / Sample_Count (Channels_In_Total)); end Audio.Wavefiles.Internals;