annotate audioio/ClipMixer.cpp @ 306:64382d824bfe tonioni

Remove obsolete project files
author Chris Cannam
date Tue, 07 Jan 2014 13:04:29 +0000
parents 9716c75499ef
children 6eb15c3aee0a
rev   line source
Chris@305 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@305 2
Chris@305 3 /*
Chris@305 4 Sonic Visualiser
Chris@305 5 An audio file viewer and annotation editor.
Chris@305 6 Centre for Digital Music, Queen Mary, University of London.
Chris@305 7 This file copyright 2006 Chris Cannam, 2006-2014 QMUL.
Chris@305 8
Chris@305 9 This program is free software; you can redistribute it and/or
Chris@305 10 modify it under the terms of the GNU General Public License as
Chris@305 11 published by the Free Software Foundation; either version 2 of the
Chris@305 12 License, or (at your option) any later version. See the file
Chris@305 13 COPYING included with this distribution for more information.
Chris@305 14 */
Chris@305 15
Chris@305 16 #include "ClipMixer.h"
Chris@305 17
Chris@305 18 #include <sndfile.h>
Chris@305 19
Chris@305 20 #include "base/Debug.h"
Chris@305 21
Chris@305 22 ClipMixer::ClipMixer(int channels, int sampleRate, int blockSize) :
Chris@305 23 m_channels(channels),
Chris@305 24 m_sampleRate(sampleRate),
Chris@305 25 m_blockSize(blockSize),
Chris@305 26 m_clipData(0)
Chris@305 27 {
Chris@305 28 }
Chris@305 29
Chris@305 30 ClipMixer::~ClipMixer()
Chris@305 31 {
Chris@305 32 delete[] m_clipData;
Chris@305 33 }
Chris@305 34
Chris@305 35 bool
Chris@305 36 ClipMixer::loadClipData(QString path, float f0)
Chris@305 37 {
Chris@305 38 if (m_clipData) {
Chris@305 39 cerr << "ClipPlayer::loadClipData: Already have clip loaded" << endl;
Chris@305 40 return false;
Chris@305 41 }
Chris@305 42
Chris@305 43 SF_INFO info;
Chris@305 44 SNDFILE *file;
Chris@305 45 int sampleCount = 0;
Chris@305 46 float *tmpFrames;
Chris@305 47 size_t i;
Chris@305 48
Chris@305 49 info.format = 0;
Chris@305 50 file = sf_open(path.toLocal8Bit().data(), SFM_READ, &info);
Chris@305 51 if (!file) {
Chris@305 52 cerr << "ClipPlayer::loadClipData: Failed to open file "
Chris@305 53 << path << ": " << sf_strerror(file) << endl;
Chris@305 54 return false;
Chris@305 55 }
Chris@305 56
Chris@305 57 tmpFrames = (float *)malloc(info.frames * info.channels * sizeof(float));
Chris@305 58 if (!tmpFrames) {
Chris@305 59 cerr << "ClipPlayer::loadClipData: malloc(" << info.frames * info.channels * sizeof(float) << ") failed" << endl;
Chris@305 60 return false;
Chris@305 61 }
Chris@305 62
Chris@305 63 sf_readf_float(file, tmpFrames, info.frames);
Chris@305 64 sf_close(file);
Chris@305 65
Chris@305 66 m_clipData = (float *)malloc(info.frames * sizeof(float));
Chris@305 67 if (!m_clipData) {
Chris@305 68 cerr << "ClipPlayer::loadClipData: malloc(" << info.frames * sizeof(float) << ") failed" << endl;
Chris@305 69 free(tmpFrames);
Chris@305 70 return false;
Chris@305 71 }
Chris@305 72
Chris@305 73 for (i = 0; i < info.frames; ++i) {
Chris@305 74 int j;
Chris@305 75 m_clipData[i] = 0.0f;
Chris@305 76 for (j = 0; j < info.channels; ++j) {
Chris@305 77 m_clipData[i] += tmpFrames[i * info.channels + j];
Chris@305 78 }
Chris@305 79 }
Chris@305 80
Chris@305 81 free(tmpFrames);
Chris@305 82
Chris@305 83 m_clipLength = info.frames;
Chris@305 84 m_clipF0 = f0;
Chris@305 85 m_clipRate = info.samplerate;
Chris@305 86 }