src/audio/SDL_audio_c.h
author Ryan C. Gordon
Fri, 06 Jan 2017 01:02:58 -0500
changeset 10764 f9bf759e9dd1
parent 10758 e0fd49c1a5b7
child 10790 92726dd20acd
permissions -rw-r--r--
audio: Fixed SDL_AudioStreamGet() function parameters.

There was a draft of this where it did audio conversion into the final buffer,
if there was enough room available past what you asked for, but that interface
got removed, so the parameters didn't make sense (and we were using the
wrong one in any case, too!).
slouken@0
     1
/*
slouken@5535
     2
  Simple DirectMedia Layer
slouken@10737
     3
  Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
slouken@0
     4
slouken@5535
     5
  This software is provided 'as-is', without any express or implied
slouken@5535
     6
  warranty.  In no event will the authors be held liable for any damages
slouken@5535
     7
  arising from the use of this software.
slouken@0
     8
slouken@5535
     9
  Permission is granted to anyone to use this software for any purpose,
slouken@5535
    10
  including commercial applications, and to alter it and redistribute it
slouken@5535
    11
  freely, subject to the following restrictions:
slouken@0
    12
slouken@5535
    13
  1. The origin of this software must not be misrepresented; you must not
slouken@5535
    14
     claim that you wrote the original software. If you use this software
slouken@5535
    15
     in a product, an acknowledgment in the product documentation would be
slouken@5535
    16
     appreciated but is not required.
slouken@5535
    17
  2. Altered source versions must be plainly marked as such, and must not be
slouken@5535
    18
     misrepresented as being the original software.
slouken@5535
    19
  3. This notice may not be removed or altered from any source distribution.
slouken@0
    20
*/
icculus@10758
    21
icculus@10758
    22
#ifndef SDL_audio_c_h_
icculus@10758
    23
#define SDL_audio_c_h_
icculus@10758
    24
icculus@8093
    25
#include "../SDL_internal.h"
slouken@0
    26
icculus@10575
    27
#ifndef DEBUG_CONVERT
icculus@10575
    28
#define DEBUG_CONVERT 0
icculus@10575
    29
#endif
icculus@10575
    30
icculus@10575
    31
#if DEBUG_CONVERT
icculus@10575
    32
#define LOG_DEBUG_CONVERT(from, to) fprintf(stderr, "Converting %s to %s.\n", from, to);
icculus@10575
    33
#else
icculus@10575
    34
#define LOG_DEBUG_CONVERT(from, to)
icculus@10575
    35
#endif
icculus@10575
    36
slouken@0
    37
/* Functions and variables exported from SDL_audio.c for SDL_sysaudio.c */
slouken@0
    38
slouken@0
    39
/* Functions to get a list of "close" audio formats */
icculus@1982
    40
extern SDL_AudioFormat SDL_FirstAudioFormat(SDL_AudioFormat format);
icculus@1982
    41
extern SDL_AudioFormat SDL_NextAudioFormat(void);
slouken@0
    42
slouken@0
    43
/* Function to calculate the size and silence for a SDL_AudioSpec */
slouken@1895
    44
extern void SDL_CalculateAudioSpec(SDL_AudioSpec * spec);
slouken@0
    45
icculus@10575
    46
void SDLCALL SDL_Convert_S8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    47
void SDLCALL SDL_Convert_U8_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    48
void SDLCALL SDL_Convert_S16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    49
void SDLCALL SDL_Convert_U16_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    50
void SDLCALL SDL_Convert_S32_to_F32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    51
void SDLCALL SDL_Convert_F32_to_S8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    52
void SDLCALL SDL_Convert_F32_to_U8(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    53
void SDLCALL SDL_Convert_F32_to_S16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    54
void SDLCALL SDL_Convert_F32_to_U16(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    55
void SDLCALL SDL_Convert_F32_to_S32(SDL_AudioCVT *cvt, SDL_AudioFormat format);
icculus@10575
    56
void SDL_Upsample_Arbitrary(SDL_AudioCVT *cvt, const int channels);
icculus@10756
    57
void SDL_Upsample_Multiple(SDL_AudioCVT *cvt, const int channels);
icculus@10575
    58
void SDL_Downsample_Arbitrary(SDL_AudioCVT *cvt, const int channels);
icculus@10756
    59
void SDL_Downsample_Multiple(SDL_AudioCVT *cvt, const int channels);
icculus@3021
    60
icculus@10757
    61
icculus@10757
    62
/* SDL_AudioStream is a new audio conversion interface. It
icculus@10757
    63
    might eventually become a public API.
icculus@10757
    64
   The benefits vs SDL_AudioCVT:
icculus@10757
    65
    - it can handle resampling data in chunks without generating
icculus@10757
    66
      artifacts, when it doesn't have the complete buffer available.
icculus@10757
    67
    - it can handle incoming data in any variable size.
icculus@10757
    68
    - You push data as you have it, and pull it when you need it
icculus@10757
    69
icculus@10757
    70
    (Note that currently this converts as data is put into the stream, so
icculus@10757
    71
    you need to push more than a handful of bytes if you want decent
icculus@10757
    72
    resampling. This can be changed later.)
icculus@10757
    73
 */
icculus@10757
    74
icculus@10757
    75
/* this is opaque to the outside world. */
icculus@10757
    76
typedef struct SDL_AudioStream SDL_AudioStream;
icculus@10757
    77
icculus@10757
    78
/* create a new stream */
icculus@10757
    79
SDL_AudioStream *SDL_NewAudioStream(const SDL_AudioFormat src_format,
icculus@10757
    80
                                    const Uint8 src_channels,
icculus@10757
    81
                                    const int src_rate,
icculus@10757
    82
                                    const SDL_AudioFormat dst_format,
icculus@10757
    83
                                    const Uint8 dst_channels,
icculus@10757
    84
                                    const int dst_rate);
icculus@10757
    85
icculus@10757
    86
/* add data to be converted/resampled to the stream */
icculus@10757
    87
int SDL_AudioStreamPut(SDL_AudioStream *stream, const void *buf, const Uint32 len);
icculus@10757
    88
icculus@10757
    89
/* get converted/resampled data from the stream */
icculus@10764
    90
int SDL_AudioStreamGet(SDL_AudioStream *stream, void *buf, const Uint32 len);
icculus@10757
    91
icculus@10757
    92
/* clear any pending data in the stream without converting it. */
icculus@10757
    93
void SDL_AudioStreamClear(SDL_AudioStream *stream);
icculus@10757
    94
icculus@10757
    95
/* number of converted/resampled bytes available */
icculus@10757
    96
int SDL_AudioStreamAvailable(SDL_AudioStream *stream);
icculus@10757
    97
icculus@10757
    98
/* dispose of a stream */
icculus@10757
    99
void SDL_FreeAudioStream(SDL_AudioStream *stream);
icculus@10757
   100
icculus@10758
   101
#endif
icculus@10758
   102
slouken@1895
   103
/* vi: set ts=4 sw=4 expandtab: */