summaryrefslogtreecommitdiff
path: root/orkaudio/audiofile
diff options
context:
space:
mode:
authorHenri Herscher <henri@oreka.org>2005-12-06 17:27:50 +0000
committerHenri Herscher <henri@oreka.org>2005-12-06 17:27:50 +0000
commit57834e7e773ec0719b01ada6552674caa81adc61 (patch)
tree28a99e0122bb08dbdadd305ee182d0d7cb5b4fe2 /orkaudio/audiofile
parentdf29199359505bcd1dfe84d4b06224ebcf4f3b8d (diff)
Sample rate can now be different than 8KHz
git-svn-id: https://oreka.svn.sourceforge.net/svnroot/oreka/trunk@94 09dcff7a-b715-0410-9601-b79a96267cd0
Diffstat (limited to 'orkaudio/audiofile')
-rw-r--r--orkaudio/audiofile/AudioFile.cpp5
-rw-r--r--orkaudio/audiofile/AudioFile.h2
-rw-r--r--orkaudio/audiofile/LibSndFileFile.cpp9
-rw-r--r--orkaudio/audiofile/PcmFile.cpp8
4 files changed, 21 insertions, 3 deletions
diff --git a/orkaudio/audiofile/AudioFile.cpp b/orkaudio/audiofile/AudioFile.cpp
index 377963b..848f55b 100644
--- a/orkaudio/audiofile/AudioFile.cpp
+++ b/orkaudio/audiofile/AudioFile.cpp
@@ -56,3 +56,8 @@ void AudioFile::Delete()
{
ACE_OS::unlink((PCSTR)m_filename);
}
+
+int AudioFile::GetSampleRate()
+{
+ return m_sampleRate;
+} \ No newline at end of file
diff --git a/orkaudio/audiofile/AudioFile.h b/orkaudio/audiofile/AudioFile.h
index cd7d6f6..bc9cbcf 100644
--- a/orkaudio/audiofile/AudioFile.h
+++ b/orkaudio/audiofile/AudioFile.h
@@ -55,12 +55,14 @@ public:
void MoveOrig();
void Delete();
virtual CStdString GetExtension() = 0;
+ virtual int GetSampleRate();
static void RecursiveMkdir(CStdString& path);
protected:
CStdString m_filename;
fileOpenModeEnum m_mode;
int m_numChunksWritten;
+ int m_sampleRate;
};
typedef boost::shared_ptr<AudioFile> AudioFileRef;
diff --git a/orkaudio/audiofile/LibSndFileFile.cpp b/orkaudio/audiofile/LibSndFileFile.cpp
index cc5bf82..fbbf3cb 100644
--- a/orkaudio/audiofile/LibSndFileFile.cpp
+++ b/orkaudio/audiofile/LibSndFileFile.cpp
@@ -27,6 +27,7 @@ LibSndFileFile::LibSndFileFile(int fileFormat)
m_pFile = NULL;
m_numChunksWritten = 0;
m_mode = READ;
+ m_sampleRate = 0;
}
LibSndFileFile::~LibSndFileFile()
@@ -42,7 +43,11 @@ void LibSndFileFile::Open(CStdString& filename, fileOpenModeEnum mode, bool ster
}
m_mode = mode;
stereo ? m_fileInfo.channels = 2 : m_fileInfo.channels = 1;
- m_fileInfo.samplerate = sampleRate;
+ if(m_sampleRate == 0)
+ {
+ m_sampleRate = sampleRate;
+ m_fileInfo.samplerate = sampleRate;
+ }
if( (mode==WRITE) && !sf_format_check(&m_fileInfo))
{
@@ -98,7 +103,7 @@ int LibSndFileFile::ReadChunkMono(AudioChunkRef& chunk)
chunk.reset(new AudioChunk());
short temp[8000];
numRead = sf_read_short(m_pFile, temp, 8000);
- chunk->SetBuffer(temp, sizeof(short)*numRead, AudioChunk::PcmAudio);
+ chunk->SetBuffer(temp, sizeof(short)*numRead, AudioChunk::PcmAudio, 0, 0, m_sampleRate);
}
else
{
diff --git a/orkaudio/audiofile/PcmFile.cpp b/orkaudio/audiofile/PcmFile.cpp
index 93f4743..0acfb3f 100644
--- a/orkaudio/audiofile/PcmFile.cpp
+++ b/orkaudio/audiofile/PcmFile.cpp
@@ -18,6 +18,7 @@ PcmFile::PcmFile()
m_stream = NULL;
m_mode = READ;
m_numChunksWritten = 0;
+ m_sampleRate = 0;
}
PcmFile::~PcmFile()
@@ -61,7 +62,7 @@ int PcmFile::ReadChunkMono(AudioChunkRef& chunkRef)
chunkRef.reset(new AudioChunk());
short temp[PCM_FILE_DEFAULT_CHUNK_NUM_SAMPLES];
numRead = ACE_OS::fread(temp, sizeof(short), PCM_FILE_DEFAULT_CHUNK_NUM_SAMPLES, m_stream);
- chunkRef->SetBuffer(temp, sizeof(short)*numRead, AudioChunk::PcmAudio);
+ chunkRef->SetBuffer(temp, sizeof(short)*numRead, AudioChunk::PcmAudio, 0, 0, m_sampleRate);
}
else
{
@@ -73,6 +74,11 @@ int PcmFile::ReadChunkMono(AudioChunkRef& chunkRef)
void PcmFile::Open(CStdString& filename, fileOpenModeEnum mode, bool stereo, int sampleRate)
{
+ if(m_sampleRate == 0)
+ {
+ m_sampleRate = sampleRate;
+ }
+
if(!m_filename.Equals(filename))
{
m_filename = filename + ".pcm";