📄 sdl_umsaudio.c
字号:
rc = UADSetByteOrder(this, "MSB"); /* irrelevant */
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_S16LSB:
success = 1;
bitsPerSample = 16;
rc = UADSetSampleRate(this, spec->freq << 16, &outRate );
rc = UADSetByteOrder(this, "LSB");
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_S16MSB:
success = 1;
bitsPerSample = 16;
rc = UADSetSampleRate(this, spec->freq << 16, &outRate );
rc = UADSetByteOrder(this, "MSB");
rc = UADSetNumberFormat(this, "SIGNED");
break;
case AUDIO_U16LSB:
success = 1;
bitsPerSample = 16;
rc = UADSetSampleRate(this, spec->freq << 16, &outRate );
rc = UADSetByteOrder(this, "LSB");
rc = UADSetNumberFormat(this, "UNSIGNED");
break;
case AUDIO_U16MSB:
success = 1;
bitsPerSample = 16;
rc = UADSetSampleRate(this, spec->freq << 16, &outRate );
rc = UADSetByteOrder(this, "MSB");
rc = UADSetNumberFormat(this, "UNSIGNED");
break;
default:
break;
}
if ( ! success ) {
test_format = SDL_NextAudioFormat();
}
}
while ( ! success && test_format );
if ( success == 0 ) {
SDL_SetError("Couldn't find any hardware audio formats");
return -1;
}
spec->format = test_format;
for ( frag_spec = 0; (0x01<<frag_spec) < spec->size; ++frag_spec );
if ( (0x01<<frag_spec) != spec->size ) {
SDL_SetError("Fragment size must be a power of two");
return -1;
}
if ( frag_spec > 2048 ) frag_spec = 2048;
this->hidden->bytesPerSample = (bitsPerSample / 8) * spec->channels;
samplesPerSec = this->hidden->bytesPerSample * outRate;
this->hidden->playbuf._length = 0;
this->hidden->playbuf._maximum = spec->size;
this->hidden->playbuf._buffer = (unsigned char*)malloc(spec->size);
this->hidden->fillbuf._length = 0;
this->hidden->fillbuf._maximum = spec->size;
this->hidden->fillbuf._buffer = (unsigned char*)malloc(spec->size);
rc = UADSetBitsPerSample(this, bitsPerSample );
rc = UADSetDMABufferSize(this, frag_spec, &outBufSize );
rc = UADSetChannels(this, spec->channels); /* functions reduces to mono or stereo */
lgain = 100; /*maximum left input gain*/
rgain = 100; /*maimum right input gain*/
rc = UADEnableOutput(this, "LINE_OUT",&lgain,&rgain);
rc = UADInitialize(this);
rc = UADStart(this);
rc = UADSetVolume(this, 100);
rc = UADSetBalance(this, 0);
/* We're ready to rock and roll. :-) */
return 0;
}
static UMSAudioDevice_ReturnCode UADGetBitsPerSample(_THIS, long* bits)
{
return UMSAudioDevice_get_bits_per_sample( this->hidden->umsdev,
this->hidden->ev,
bits );
}
static UMSAudioDevice_ReturnCode UADSetBitsPerSample(_THIS, long bits)
{
return UMSAudioDevice_set_bits_per_sample( this->hidden->umsdev,
this->hidden->ev,
bits );
}
static UMSAudioDevice_ReturnCode UADSetSampleRate(_THIS, long rate, long* set_rate)
{
/* from the mac code: sample rate = spec->freq << 16; */
return UMSAudioDevice_set_sample_rate( this->hidden->umsdev,
this->hidden->ev,
rate,
set_rate );
}
static UMSAudioDevice_ReturnCode UADSetByteOrder(_THIS, string byte_order)
{
return UMSAudioDevice_set_byte_order( this->hidden->umsdev,
this->hidden->ev,
byte_order );
}
static UMSAudioDevice_ReturnCode UADSetAudioFormatType(_THIS, string fmt)
{
/* possible PCM, A_LAW or MU_LAW */
return UMSAudioDevice_set_audio_format_type( this->hidden->umsdev,
this->hidden->ev,
fmt );
}
static UMSAudioDevice_ReturnCode UADSetNumberFormat(_THIS, string fmt)
{
/* possible SIGNED, UNSIGNED, or TWOS_COMPLEMENT */
return UMSAudioDevice_set_number_format( this->hidden->umsdev,
this->hidden->ev,
fmt );
}
static UMSAudioDevice_ReturnCode UADInitialize(_THIS)
{
return UMSAudioDevice_initialize( this->hidden->umsdev,
this->hidden->ev );
}
static UMSAudioDevice_ReturnCode UADStart(_THIS)
{
return UMSAudioDevice_start( this->hidden->umsdev,
this->hidden->ev );
}
static UMSAudioDevice_ReturnCode UADSetTimeFormat(_THIS, UMSAudioTypes_TimeFormat fmt )
{
/*
* Switches the time format to the new format, immediately.
* possible UMSAudioTypes_Msecs, UMSAudioTypes_Bytes or UMSAudioTypes_Samples
*/
return UMSAudioDevice_set_time_format( this->hidden->umsdev,
this->hidden->ev,
fmt );
}
static UMSAudioDevice_ReturnCode UADWriteBuffSize(_THIS, long* buff_size )
{
/*
* returns write buffer size in the current time format
*/
return UMSAudioDevice_write_buff_size( this->hidden->umsdev,
this->hidden->ev,
buff_size );
}
static UMSAudioDevice_ReturnCode UADWriteBuffRemain(_THIS, long* buff_size )
{
/*
* returns amount of available space in the write buffer
* in the current time format
*/
return UMSAudioDevice_write_buff_remain( this->hidden->umsdev,
this->hidden->ev,
buff_size );
}
static UMSAudioDevice_ReturnCode UADWriteBuffUsed(_THIS, long* buff_size )
{
/*
* returns amount of filled space in the write buffer
* in the current time format
*/
return UMSAudioDevice_write_buff_used( this->hidden->umsdev,
this->hidden->ev,
buff_size );
}
static UMSAudioDevice_ReturnCode UADSetDMABufferSize(_THIS, long bytes, long* bytes_ret )
{
/*
* Request a new DMA buffer size, maximum requested size 2048.
* Takes effect with next initialize() call.
* Devices may or may not support DMA.
*/
return UMSAudioDevice_set_DMA_buffer_size( this->hidden->umsdev,
this->hidden->ev,
bytes,
bytes_ret );
}
static UMSAudioDevice_ReturnCode UADSetVolume(_THIS, long volume )
{
/*
* Set the volume.
* Takes effect immediately.
*/
return UMSAudioDevice_set_volume( this->hidden->umsdev,
this->hidden->ev,
volume );
}
static UMSAudioDevice_ReturnCode UADSetBalance(_THIS, long balance )
{
/*
* Set the balance.
* Takes effect immediately.
*/
return UMSAudioDevice_set_balance( this->hidden->umsdev,
this->hidden->ev,
balance );
}
static UMSAudioDevice_ReturnCode UADSetChannels(_THIS, long channels )
{
/*
* Set mono or stereo.
* Takes effect with next initialize() call.
*/
if ( channels != 1 ) channels = 2;
return UMSAudioDevice_set_number_of_channels( this->hidden->umsdev,
this->hidden->ev,
channels );
}
static UMSAudioDevice_ReturnCode UADOpen(_THIS, string device, string mode, long flags)
{
return UMSAudioDevice_open( this->hidden->umsdev,
this->hidden->ev,
device,
mode,
flags );
}
static UMSAudioDevice_ReturnCode UADWrite(_THIS, UMSAudioTypes_Buffer* buff,
long samples,
long* samples_written)
{
return UMSAudioDevice_write( this->hidden->umsdev,
this->hidden->ev,
buff,
samples,
samples_written );
}
static UMSAudioDevice_ReturnCode UADPlayRemainingData(_THIS, boolean block )
{
return UMSAudioDevice_play_remaining_data( this->hidden->umsdev,
this->hidden->ev,
block);
}
static UMSAudioDevice_ReturnCode UADStop(_THIS)
{
return UMSAudioDevice_stop( this->hidden->umsdev,
this->hidden->ev );
}
static UMSAudioDevice_ReturnCode UADClose(_THIS)
{
return UMSAudioDevice_close( this->hidden->umsdev,
this->hidden->ev );
}
static UMSAudioDevice_ReturnCode UADEnableOutput(_THIS, string output, long* left_gain, long* right_gain)
{
return UMSAudioDevice_enable_output( this->hidden->umsdev,
this->hidden->ev,
output,
left_gain,
right_gain );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -