📄 sdl_umsaudio.c
字号:
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 + -