/[svn]/linuxsampler/trunk/src/drivers/audio/AudioChannel.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/drivers/audio/AudioChannel.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1912 by senoner, Wed Nov 14 23:42:15 2007 UTC revision 1913 by senoner, Sun Jun 7 16:24:55 2009 UTC
# Line 133  namespace LinuxSampler { Line 133  namespace LinuxSampler {
133      void AudioChannel::CopyTo(AudioChannel* pDst, const uint Samples, const float fLevel) {      void AudioChannel::CopyTo(AudioChannel* pDst, const uint Samples, const float fLevel) {
134          if (fLevel == 1.0f) CopyTo(pDst, Samples);          if (fLevel == 1.0f) CopyTo(pDst, Samples);
135          else {          else {
136                    #ifndef HAVE_GCC_VECTOR_EXTENSIONS
137              float* pSrcBuf = Buffer();              float* pSrcBuf = Buffer();
138              float* pDstBuf = pDst->Buffer();              float* pDstBuf = pDst->Buffer();
139              for (int i = 0; i < Samples; i++)              for (int i = 0; i < Samples; i++)
140                  pDstBuf[i] = pSrcBuf[i] * fLevel;                  pDstBuf[i] = pSrcBuf[i] * fLevel;
141                    #else
142                    const v4sf vcoeff = { fLevel, fLevel, fLevel, fLevel };
143            const v4sf* src = static_cast<v4sf*>((void*)Buffer());
144            v4sf* dst       = static_cast<v4sf*>((void*)pDst->Buffer());
145            const int cells = Samples / 4;
146            for (int i = 0; i < cells; ++i)
147                dst[i] = src[i] * vcoeff;
148                    #endif
149          }          }
150      }      }
151    
# Line 148  namespace LinuxSampler { Line 157  namespace LinuxSampler {
157       * @param Samples - amount of sample points to be mixed over       * @param Samples - amount of sample points to be mixed over
158       */       */
159      void AudioChannel::MixTo(AudioChannel* pDst, const uint Samples) {      void AudioChannel::MixTo(AudioChannel* pDst, const uint Samples) {
160          //TODO: there's probably a more efficient way to do this ...                  #ifndef HAVE_GCC_VECTOR_EXTENSIONS
161          float* pSrcBuf = Buffer();          float* pSrcBuf = Buffer();
162          float* pDstBuf = pDst->Buffer();          float* pDstBuf = pDst->Buffer();
163          for (int i = 0; i < Samples; i++)          for (int i = 0; i < Samples; i++)
164              pDstBuf[i] += pSrcBuf[i];              pDstBuf[i] += pSrcBuf[i];
165                    #else
166                    const v4sf* src = static_cast<v4sf*>((void*)Buffer());
167            v4sf* dst       = static_cast<v4sf*>((void*)pDst->Buffer());
168            const int cells = Samples / 4;
169            for (int i = 0; i < cells; ++i)
170                dst[i] += src[i];
171                    #endif
172      }      }
173    
174      /**      /**
# Line 167  namespace LinuxSampler { Line 183  namespace LinuxSampler {
183      void AudioChannel::MixTo(AudioChannel* pDst, const uint Samples, const float fLevel) {      void AudioChannel::MixTo(AudioChannel* pDst, const uint Samples, const float fLevel) {
184          if (fLevel == 1.0f) MixTo(pDst, Samples);          if (fLevel == 1.0f) MixTo(pDst, Samples);
185          else {          else {
186                        #ifndef HAVE_GCC_VECTOR_EXTENSIONS
187              float* pSrcBuf = Buffer();              float* pSrcBuf = Buffer();
188              float* pDstBuf = pDst->Buffer();              float* pDstBuf = pDst->Buffer();
189              for (int i = 0; i < Samples; i++)              for (int i = 0; i < Samples; i++)
190                  pDstBuf[i] += pSrcBuf[i] * fLevel;                  pDstBuf[i] += pSrcBuf[i] * fLevel;
191                        #else
192                            const v4sf vcoeff = { fLevel, fLevel, fLevel, fLevel };
193                const v4sf* src = static_cast<v4sf*>((void*)Buffer());
194                v4sf* dst       = static_cast<v4sf*>((void*)pDst->Buffer());
195                const int cells = Samples / 4;
196                for (int i = 0; i < cells; ++i)
197                    dst[i] += src[i] * vcoeff;
198                            #endif
199          }          }
200      }      }
201    

Legend:
Removed from v.1912  
changed lines
  Added in v.1913

  ViewVC Help
Powered by ViewVC