File: SoundSamples.cpp

package info (click to toggle)
transcend 0.3.dfsg2-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, buster, jessie, jessie-kfreebsd, stretch
  • size: 5,796 kB
  • ctags: 3,074
  • sloc: cpp: 26,886; ansic: 693; sh: 210; makefile: 99; perl: 67
file content (114 lines) | stat: -rw-r--r-- 2,867 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*
 * Modification History
 *
 * 2004-July-17   Jason Rohrer
 * Created.
 *
 * 2004-August-12   Jason Rohrer
 * Added a constructor that can specify all sound data.
 */



#include "SoundSamples.h"


#include <string.h>



SoundSamples::SoundSamples( unsigned long inSampleCount,
                            float *inLeftChannel, float *inRightChannel )
    : mSampleCount( inSampleCount ),
      mLeftChannel( inLeftChannel ),
      mRightChannel( inRightChannel ) {

    }



SoundSamples::SoundSamples( unsigned long inSampleCount )
    : mSampleCount( inSampleCount ),
      mLeftChannel( new float[ inSampleCount ] ),
      mRightChannel( new float[ inSampleCount ] ) {

    // zero out the channels;
    for( unsigned long i=0; i<mSampleCount; i++ ) {
        mLeftChannel[ i ] = 0;
        mRightChannel[ i ] = 0;
        }
    }



SoundSamples::SoundSamples( SoundSamples *inSamplesToCopy ) {
    mSampleCount = inSamplesToCopy->mSampleCount;

    mLeftChannel = new float[ mSampleCount ];
    mRightChannel = new float[ mSampleCount ];

    
    memcpy( (void *)( mLeftChannel ),
            (void *)( inSamplesToCopy->mLeftChannel ),
            mSampleCount * sizeof( float ) );

    memcpy( (void *)( mRightChannel ),
            (void *)( inSamplesToCopy->mRightChannel ),
            mSampleCount * sizeof( float ) );
    }



SoundSamples::SoundSamples( SoundSamples *inSamplesToCopy,
                            unsigned long inNumToCopy ) {
    mSampleCount = inSamplesToCopy->mSampleCount;

    if( inNumToCopy < mSampleCount ) {
        mSampleCount = inNumToCopy;
        }
    
    mLeftChannel = new float[ mSampleCount ];
    mRightChannel = new float[ mSampleCount ];

    
    memcpy( (void *)( mLeftChannel ),
            (void *)( inSamplesToCopy->mLeftChannel ),
            mSampleCount * sizeof( float ) );

    memcpy( (void *)( mRightChannel ),
            (void *)( inSamplesToCopy->mRightChannel ),
            mSampleCount * sizeof( float ) );
    }



SoundSamples::~SoundSamples() {
    delete [] mRightChannel;
    delete [] mLeftChannel;
    }



void SoundSamples::trim( unsigned long inNumSamplesToDrop ) {

    unsigned long newSampleCount = mSampleCount - inNumSamplesToDrop;

    float *newLeftChannel = new float[ newSampleCount ];
    float *newRightChannel = new float[ newSampleCount ];

    // copy samples, skipping inNumSamplesToDrop
    memcpy( (void *)( newLeftChannel ),
            (void *)( &( mLeftChannel[ inNumSamplesToDrop ] ) ),
            newSampleCount * sizeof( float ) );
    memcpy( (void *)( newRightChannel ),
            (void *)( &( mRightChannel[ inNumSamplesToDrop ] ) ),
            newSampleCount * sizeof( float ) );

    delete [] mLeftChannel;
    delete [] mRightChannel;

    mSampleCount = newSampleCount;

    mLeftChannel = newLeftChannel;
    mRightChannel = newRightChannel;
    }