📄 sdlconvertaudio.html
字号:
<HTML><HEAD><TITLE>SDL_ConvertAudio</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="SDL Library Documentation"HREF="index.html"><LINKREL="UP"TITLE="Audio"HREF="audio.html"><LINKREL="PREVIOUS"TITLE="SDL_BuildAudioCVT"HREF="sdlbuildaudiocvt.html"><LINKREL="NEXT"TITLE="SDL_MixAudio"HREF="sdlmixaudio.html"></HEAD><BODYCLASS="REFENTRY"BGCOLOR="#FFF8DC"TEXT="#000000"LINK="#0000ee"VLINK="#551a8b"ALINK="#ff0000"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">SDL Library Documentation</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="sdlbuildaudiocvt.html"ACCESSKEY="P">Prev</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom"></TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="sdlmixaudio.html"ACCESSKEY="N">Next</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><H1><ANAME="SDLCONVERTAUDIO"></A>SDL_ConvertAudio</H1><DIVCLASS="REFNAMEDIV"><ANAME="AEN7048"></A><H2>Name</H2>SDL_ConvertAudio -- Convert audio data to a desired audio format.</DIV><DIVCLASS="REFSYNOPSISDIV"><ANAME="AEN7051"></A><H2>Synopsis</H2><DIVCLASS="FUNCSYNOPSIS"><ANAME="AEN7052"></A><P></P><PRECLASS="FUNCSYNOPSISINFO">#include "SDL.h"</PRE><P><CODE><CODECLASS="FUNCDEF">int <BCLASS="FSFUNC">SDL_ConvertAudio</B></CODE>(SDL_AudioCVT *cvt);</CODE></P><P></P></DIV></DIV><DIVCLASS="REFSECT1"><ANAME="AEN7058"></A><H2>Description</H2><P><TTCLASS="FUNCTION">SDL_ConvertAudio</TT> takes one parameter, <TTCLASS="PARAMETER"><I>cvt</I></TT>, which was previously initilized. Initilizing a <AHREF="sdlaudiocvt.html"><SPANCLASS="STRUCTNAME">SDL_AudioCVT</SPAN></A> is a two step process. First of all, the structure must be passed to <AHREF="sdlbuildaudiocvt.html"><TTCLASS="FUNCTION">SDL_BuildAudioCVT</TT></A> along with source and destination format parameters. Secondly, the <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>buf</I></TT> and <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>len</I></TT> fields must be setup. <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>buf</I></TT> should point to the audio data and <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>len</I></TT> should be set to the length of the audio data in bytes. Remember, the length of the buffer pointed to by <TTCLASS="STRUCTFIELD"><I>buf</I></TT> show be <TTCLASS="STRUCTFIELD"><I>len</I></TT>*<TTCLASS="STRUCTFIELD"><I>len_mult</I></TT> bytes in length.</P><P>Once the <SPANCLASS="STRUCTNAME">SDL_AudioCVT</SPAN>structure is initilized then we can pass it to <TTCLASS="FUNCTION">SDL_ConvertAudio</TT>, which will convert the audio data pointer to by <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>buf</I></TT>. If <TTCLASS="FUNCTION">SDL_ConvertAudio</TT> returned <SPANCLASS="RETURNVALUE">0</SPAN> then the conversion was completed successfully, otherwise <SPANCLASS="RETURNVALUE">-1</SPAN> is returned.</P><P>If the conversion completed successfully then the converted audio data can be read from <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>buf</I></TT>. The amount of valid, converted, audio data in the buffer is equal to <SPANCLASS="STRUCTNAME">cvt</SPAN>-><TTCLASS="STRUCTFIELD"><I>len</I></TT>*<TTCLASS="STRUCTFIELD"><I>cvt</I></TT>-><SPANCLASS="STRUCTNAME">len_ratio</SPAN>.</P></DIV><DIVCLASS="REFSECT1"><ANAME="AEN7093"></A><H2>Examples</H2><PRECLASS="PROGRAMLISTING">/* Converting some WAV data to hardware format */void my_audio_callback(void *userdata, Uint8 *stream, int len);SDL_AudioSpec *desired, *obtained;SDL_AudioSpec wav_spec;SDL_AudioCVT wav_cvt;Uint32 wav_len;Uint8 *wav_buf;int ret;/* Allocated audio specs */desired = malloc(sizeof(SDL_AudioSpec));obtained = malloc(sizeof(SDL_AudioSpec));/* Set desired format */desired->freq=22050;desired->format=AUDIO_S16LSB;desired->samples=8192;desired->callback=my_audio_callback;desired->userdata=NULL;/* Open the audio device */if ( SDL_OpenAudio(desired, obtained) < 0 ){ fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError()); exit(-1);} free(desired);/* Load the test.wav */if( SDL_LoadWAV("test.wav", &wav_spec, &wav_buf, &wav_len) == NULL ){ fprintf(stderr, "Could not open test.wav: %s\n", SDL_GetError()); SDL_CloseAudio(); free(obtained); exit(-1);} /* Build AudioCVT */ret = SDL_BuildAudioCVT(&wav_cvt, wav_spec.format, wav_spec.channels, wav_spec.freq, obtained->format, obtained->channels, obtained->freq);/* Check that the convert was built */if(ret==-1){ fprintf(stderr, "Couldn't build converter!\n"); SDL_CloseAudio(); free(obtained); SDL_FreeWAV(wav_buf);}/* Setup for conversion */wav_cvt.buf = malloc(wav_len * wav_cvt.len_mult);wav_cvt.len = wav_len;memcpy(wav_cvt.buf, wav_buf, wav_len);/* We can delete to original WAV data now */SDL_FreeWAV(wav_buf);/* And now we're ready to convert */SDL_ConvertAudio(&wav_cvt);/* do whatever */.... </PRE></DIV><DIVCLASS="REFSECT1"><ANAME="AEN7096"></A><H2>See Also</H2><P><AHREF="sdlbuildaudiocvt.html"><TTCLASS="FUNCTION">SDL_BuildAudioCVT</TT></A>,<AHREF="sdlaudiocvt.html"><TTCLASS="FUNCTION">SDL_AudioCVT</TT></A></P></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="sdlbuildaudiocvt.html"ACCESSKEY="P">Prev</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">Home</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="sdlmixaudio.html"ACCESSKEY="N">Next</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">SDL_BuildAudioCVT</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="audio.html"ACCESSKEY="U">Up</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">SDL_MixAudio</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -