diff --git a/include/AudioSndio.h b/include/AudioSndio.h index 11e1f91e4..22a15abc5 100644 --- a/include/AudioSndio.h +++ b/include/AudioSndio.h @@ -72,6 +72,8 @@ private: struct sio_hdl *m_hdl; struct sio_par m_par; + + bool m_convertEndian; } ; diff --git a/src/core/audio/AudioSndio.cpp b/src/core/audio/AudioSndio.cpp index ca889d88c..3145eb218 100644 --- a/src/core/audio/AudioSndio.cpp +++ b/src/core/audio/AudioSndio.cpp @@ -27,9 +27,9 @@ #ifdef LMMS_HAVE_SNDIO -#include -#include -#include +#include +#include +#include #include "endian_handling.h" #include "LcdSpinBox.h" @@ -52,9 +52,10 @@ AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : AudioDevice( tLimit( ConfigManager::inst()->value( "audiosndio", "channels" ).toInt(), - DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ) + DEFAULT_CHANNELS, SURROUND_CHANNELS ), _mixer ), + m_convertEndian ( false ) { - _success_ful = FALSE; + _success_ful = false; QString dev = ConfigManager::inst()->value( "audiosndio", "device" ); @@ -64,7 +65,7 @@ AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : } else { - m_hdl = sio_open( dev.toAscii().data(), SIO_PLAY, 0 ); + m_hdl = sio_open( dev.toLatin1().constData(), SIO_PLAY, 0 ); } if( m_hdl == NULL ) @@ -82,6 +83,11 @@ AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : m_par.round = mixer()->framesPerPeriod(); m_par.appbufsz = m_par.round * 2; + if ( (isLittleEndian() && (m_par.le == 0)) || + (!isLittleEndian() && (m_par.le == 1))) { + m_convertEndian = true; + } + struct sio_par reqpar = m_par; if (!sio_setpar(m_hdl, &m_par)) @@ -98,7 +104,7 @@ AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : if (reqpar.pchan != m_par.pchan || reqpar.bits != m_par.bits || reqpar.le != m_par.le || - (abs(reqpar.rate - m_par.rate) * 100)/reqpar.rate > 2) + (::abs(static_cast(reqpar.rate) - static_cast(m_par.rate)) * 100)/reqpar.rate > 2) { printf( "sndio: returned params not as requested\n" ); return; @@ -110,7 +116,7 @@ AudioSndio::AudioSndio(bool & _success_ful, Mixer * _mixer) : return; } - _success_ful = TRUE; + _success_ful = true; } @@ -160,7 +166,7 @@ void AudioSndio::run( void ) int_sample_t * outbuf = new int_sample_t[mixer()->framesPerPeriod() * channels()]; - while( TRUE ) + while( true ) { const fpp_t frames = getNextBuffer( temp ); if( !frames ) @@ -169,7 +175,7 @@ void AudioSndio::run( void ) } uint bytes = convertToS16( temp, frames, - mixer()->masterGain(), outbuf, FALSE ); + mixer()->masterGain(), outbuf, m_convertEndian ); if( sio_write( m_hdl, outbuf, bytes ) != bytes ) { break; diff --git a/src/core/midi/MidiSndio.cpp b/src/core/midi/MidiSndio.cpp index 6827fbf81..4a1ed0614 100644 --- a/src/core/midi/MidiSndio.cpp +++ b/src/core/midi/MidiSndio.cpp @@ -27,8 +27,8 @@ #ifdef LMMS_HAVE_SNDIO -#include -#include +#include +#include #ifdef LMMS_HAVE_STDLIB_H #include @@ -42,7 +42,7 @@ MidiSndio::MidiSndio( void ) : MidiClientRaw(), - m_quit( FALSE ) + m_quit( false ) { QString dev = probeDevice(); @@ -52,7 +52,7 @@ MidiSndio::MidiSndio( void ) : } else { - m_hdl = mio_open( dev.toAscii().data(), MIO_IN | MIO_OUT, 0 ); + m_hdl = mio_open( dev.toLatin1().constData(), MIO_IN | MIO_OUT, 0 ); } if( m_hdl == NULL ) @@ -69,7 +69,7 @@ MidiSndio::~MidiSndio() { if( isRunning() ) { - m_quit = TRUE; + m_quit = true; wait( 1000 ); terminate(); } @@ -97,7 +97,7 @@ void MidiSndio::run( void ) char buf[0x100], *p; size_t n; int ret; - while( m_quit == FALSE && m_hdl ) + while( m_quit == false && m_hdl ) { nfds = mio_pollfd( m_hdl, &pfd, POLLIN ); ret = poll( &pfd, nfds, 100 );