Mercurial > SDL_sound_CoreAudio
view decoders/timidity/CHANGES @ 474:c66080364dff
Most decoders now report total sample play time, now. Technically, this
breaks binary compatibility with the 1.0 branch, since it extends the
Sound_Sample struct, but most (all?) programs are just passing pointers
allocated by SDL_sound around, and might be okay.
Source-level compatibility is not broken...yet! :)
--ryan.
-------- Original Message --------
Subject: SDL_sound patch: Finding total length of time of sound file.
Date: Sun, 26 Jan 2003 09:31:17 -0800 (PST)
Hi Ryan,
I am working with Eric Wing and helping him modify
SDL_sound. AS part of our efforts in improving and
enhancing SDL_sound, we like to submit this patch. We
modified the codecs to find the total time of a sound
file. Below is the explanation of the patch. The
patch is appended as an attachment to this email.
* MOTIVATION:
We needed the ability to get the total play time of a
sample (And we noticed that we're not the only ones).
Since SDL_sound blocks direct access to the specific
decoders, there is no way for a user to know this
information short of decoding the whole thing.
Because of this, we believe this will be a useful
addition, even though the accuracy may not be perfect
(subject to each decoder) or the information may not
always be available.
* CONTRIBUTORS:
Wesley Leong (modified the majority of the codecs and
verified the results)
Eric Wing (showed everyone how to do modify codec,
modified mikmod)
Wang Lam (modified a handful of codecs, researched
into specs and int overflow)
Ahilan Anantha (modified a few codecs and helped with
integer math)
* GENERAL ISSUES:
We chose the value to be milliseconds as an Sint32.
Milliseconds because that's what Sound_Seek takes as a
parameter and -1 to allow for instances/codecs where
the value could not be determined. We are
not sure if this is the final convention you want, so
we are willing to work with you on this.
We also expect the total_time field to be set on open
and never again modified by SDL_sound. Users may
access it directly much like the sample buffer and
buffer_size. We thought about recomputing the time
on DecodeAll, but since users may seek or decode small
chunks first, not all the data may be there. So this
is better done by the user. This may be good
information to document.
Currently, all the main codecs are implemented except
for QuickTime.
author | Ryan C. Gordon <icculus@icculus.org> |
---|---|
date | Sat, 08 May 2004 08:19:50 +0000 |
parents | cbc2a4ffeeec |
children |
line wrap: on
line source
This version of TiMidity should contain all the fixes from the September 25 2003 SDL_mixer CVS snapshot. In addition, I've made some changes of my own, e.g.: * All file access is done through SDL_RWops. This means the MIDI stream no longer has to be a file. (The config file and instruments still have to be though.) * Replacing of TiMidity's endian-handling with SDL's. * Removal of much unused or unnecessary code, such as + The "hooks" for putting a user interface onto TiMidity. + The antialias filter. It wasn't active, and even at 4 kHz I couldn't hear any difference when activating it. + Removed all traces of LOOKUP_HACK and LOOKUP_INTERPOLATION. According to the code comments they weren't very good anyway. ("degrades sound quality noticeably"). I also removed the disclaimer about the "8-bit uLaw to 16-bit PCM and the 13-bit-PCM to 8-bit uLaw tables" disclaimer, since I believe those were the tables I removed. + Removed LOOKUP_SINE since it was already commented out. I think we can count on our target audience having math co-processors nowadays. + Removed USE_LDEXP since it wasn't being used and "it doesn't make much of a difference either way". + Removed decompress hack from open_file() since it didn't look very portable. + Removed heaps of unnecessary constants. + Removed unused functions. + Assume that LINEAR_INTERPOLATION is always used, so remove all code dealing with it not being so. It's not that I think the difference in audio quality is that great, but since it wouldn't compile without code changes I assume no one's used it for quite some time... + Assume PRECALC_LOOPS is always defined. Judging by the comments it may not make much of a difference either way, so why maintain two versions of the same code? * Moving several static globals into the MidiSong struct. This includes sample rate, formate, etc. which are now all per-song. * Moved some typedefs (e.g. MidiSong) to timidity.h for easy inclusion into the MIDI decoder. * Added free_pathlist(). * Replaced TiMidity's own 8, 16 and 32-bit types with SDL's. * Made TiMidity look for its configuration file in both /etc and /usr/local/lib/timidity. (Windows version remains unchanged.) * Timidity_PlaySome() now takes three arguments. A MidiSong, a decode buffer and decode buffer size in bytes. (MidiSong is a new argument, and buffer size used to be in samples.) In addition, it will return the number of bytes decoded. * Added Timidity_Exit(). * Removed Timidity_Stop() and Timidity_Active(). Stopping playback should be handled by SDL_sound, and Timidity_PlaySome() will return 0 when the MIDI stream is finished. * Modified the ToneBank stuff to allow some data to be shared between MidiSongs. * The following files have been removed: controls.c, controls.h, filter.c, filter.h, sdl_a.c, sdl_c.c * config.h has been renamed as options.h to avoid confusion with the automatically generated config.h for SDL_sound. * Added support for loading DLS format instruments: Timidity_LoadDLS(), Timidity_FreeDLS(), Timidity_LoadDLSSong() * Added Timidity_Init_NoConfig()