aboutsummaryrefslogtreecommitdiffstats
path: root/Samples/CommonSrc/Platform/OSX_WavPlayer.h
blob: c6f2571398877759c316f9b37dd7839fb13acab9 (plain)
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
/************************************************************************************

Filename    :   WavPlayer_OSX.h
Content     :   An Apple OSX audio handler.
Created     :   March 5, 2013
Authors     :   Robotic Arm Software - Peter Hoff, Dan Goodman, Bryan Croteau

Copyright   :   Copyright 2012 Oculus VR, Inc. All Rights reserved.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

************************************************************************************/

#ifndef OVR_WavPlayer_h
#define OVR_WavPlayer_h

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/stat.h>
#include <AudioToolbox/AudioQueue.h>

#define AUDIO_BUFFERS 4

namespace OVR { namespace OvrPlatform { namespace OSX {

typedef struct AQCallbackStruct
{
    AudioQueueRef				Queue;
    UInt32						FrameCount;
    AudioQueueBufferRef			Buffers[AUDIO_BUFFERS];
    AudioStreamBasicDescription DataFormat;
    UInt32						PlayPtr;
    UInt32						SampleLen;
    unsigned char*				PCMBuffer;
} AQCallbackStruct;

class WavPlayer
{
public:
    WavPlayer(const char* fileName);
    int PlayAudio();
private:
    bool isDataChunk(unsigned char* buffer, int index);
    int getWord(unsigned char* buffer, int index);
    short getHalf(unsigned char* buffer, int index);
    void *LoadPCM(const char *filename, unsigned long *len);
    int PlayBuffer(void *pcm, unsigned long len);
    static void aqBufferCallback(void *in, AudioQueueRef inQ, AudioQueueBufferRef outQB);

    short		AudioFormat;
    short		NumChannels;
    int			SampleRate;
    int			ByteRate;
    short		BlockAlign;
    short		BitsPerSample;
    const char* FileName;
};

}}}

#endif