[SDL] SDL_Mixer and speed/pitch shift

James Haley haleyjd at hotmail.com
Sun Aug 5 22:27:19 PDT 2007


Hi,

You're correct that SDL_mixer itself doesn't have support for pitch-shifting 
sounds. However, since it does give you direct access to the sound stream 
buffer via the mixing callback functions (such as the post-mix callback), 
you can implement it yourself.

My Eternity Engine Doom port has a rudimentary pitch shifting ability. 
Looking at it might give you an idea on what would be involved.
Link to the file:
http://eternity.mancubus.net/svn/trunk/eternity/source/sdl/i_sound.c

EE just does all its own digital sound mixing and then pipes it through 
SDL_mixer, which we use mainly for playing music. I should probably note 
that our sound engine crashes on some x86 Mac machines due apparently to 
some mysterious bug in SDL_mixer or its interaction with some particular 
sound driver (it sends us a bad buffer seemingly at random). As of the 
latest release, this is still a problem for one of my users, so watch out 
for that when accessing the stream buffer directly.

Yours,
James Haley

>From: Sylvain Beucler <beuc at beuc.net>
>Reply-To: "A list for developers using the SDL library. (includes  
>SDL-announce)" <sdl at lists.libsdl.org>
>To: sdl at lists.libsdl.org
>Subject: Re: [SDL] SDL_Mixer and speed/pitch shift
>Date: Mon, 6 Aug 2007 00:21:36 +0200
>MIME-Version: 1.0
>Received: from diego.dreamhost.com ([66.33.216.104]) by 
>bay0-mc11-f9.bay0.hotmail.com with Microsoft SMTPSVC(6.0.3790.2668); Sun, 5 
>Aug 2007 15:21:45 -0700
>Received: from diego.dreamhost.com (localhost [127.0.0.1])by 
>diego.dreamhost.com (Postfix) with ESMTP id 4B7FF4800A;Sun,  5 Aug 2007 
>15:21:41 -0700 (PDT)
>Received: from smtp3-g19.free.fr (smtp3-g19.free.fr [212.27.42.29])by 
>diego.dreamhost.com (Postfix) with ESMTP id 9EA8448006for 
><sdl at lists.libsdl.org>; Sun,  5 Aug 2007 15:21:38 -0700 (PDT)
>Received: from smtp3-g19.free.fr (localhost.localdomain [127.0.0.1])by 
>smtp3-g19.free.fr (Postfix) with ESMTP id 11A0638F1for 
><sdl at lists.libsdl.org>; Mon,  6 Aug 2007 00:21:37 +0200 (CEST)
>Received: from localhost.localdomain (unknown [82.238.35.175])by 
>smtp3-g19.free.fr (Postfix) with ESMTP id EC72238DFfor 
><sdl at lists.libsdl.org>; Mon,  6 Aug 2007 00:21:36 +0200 (CEST)
>Received: from me by localhost.localdomain with local (Exim 
>4.63)(envelope-from <beuc at beuc.net>) id 1IHoTg-0006Zz-BDfor 
>sdl at lists.libsdl.org; Mon, 06 Aug 2007 00:21:36 +0200
>X-Message-Delivery: Vj0zLjQuMDt1cz0wO2k9MDtsPTA7YT0w
>X-Message-Info: 
>KYGz7ipbXiQwgYXFWQLpmdesWxUDBbFeBb6euDEH2q4rALn62YNWFanUZM/SkKpxFki9KJ2QxxqrlU/kf20YGSUnl4vVVtPD
>X-Original-To: sdl at lists.libsdl.org
>References: <20070801150315.GA7104 at perso.beuc.net>
>X-Operating-System: GNU/Linux
>User-Agent: Mutt/1.5.13 (2006-08-11)
>X-BeenThere: sdl at lists.libsdl.org
>X-Mailman-Version: 2.1.9
>Precedence: list
>List-Id: "A list for developers using the SDL library. 
>(includesSDL-announce)" <sdl-libsdl.org>
>List-Unsubscribe: 
><http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org>,<mailto:sdl-request at lists.libsdl.org?subject=unsubscribe>
>List-Archive: <http://lists.libsdl.org/private.cgi/sdl-libsdl.org>
>List-Post: <mailto:sdl at lists.libsdl.org>
>List-Help: <mailto:sdl-request at lists.libsdl.org?subject=help>
>List-Subscribe: 
><http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org>,<mailto:sdl-request at lists.libsdl.org?subject=subscribe>
>Errors-To: sdl-bounces at lists.libsdl.org
>Return-Path: sdl-bounces at lists.libsdl.org
>X-OriginalArrivalTime: 05 Aug 2007 22:21:45.0469 (UTC) 
>FILETIME=[01E9B2D0:01C7D7AF]
>
>Nobody using pitch shift here? :/
>
>Cheers,
>
>--
>Sylvain
>
>On Wed, Aug 01, 2007 at 05:03:15PM +0200, Sylvain Beucler wrote:
> > Hi,
> >
> > I'd like to use SDL_Mixer to play multiple sounds at once, and with
> > different speeds for each sound.
> >
> > This allow, for example, to play a normal voice and an acute voice
> > from the same sound file, by playing it with a greater frequency for
> > the acute voice.
> >
> > This feature (which is often refered to as "pitch shift") seems to be
> > missing from SDL_Mixer.
> > (I don't think I can implement it with an SDL_Mixer Effect either,
> > because the callback can only modify a fixed-length sample.)
> >
> >
> > Is there a way to implement pitch shift with SDL_Mixer? Or an
> > alternate SDL library that would do that (but I also need midi/BGM
> > support in the mixer)?
> >
> >
> > For example, DirectX provides it through
> > DirectSoundBuffer::SetFrequency(frequency), and Allegro provides it
> > with play_sample(sample, t vol, pan, freq, loop).
> >
> >
> > Thanks!
>_______________________________________________
>SDL mailing list
>SDL at lists.libsdl.org
>http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org

_________________________________________________________________
More photos, more messages, more storage—get 2GB with Windows Live Hotmail. 
http://imagine-windowslive.com/hotmail/?locale=en-us&ocid=TXT_TAGHM_migration_HM_mini_2G_0507




More information about the SDL mailing list