1 #include "CoreAudioRenderer.h"
2 #include <iostream>
3 using namespace std;
4 #include <unistd.h>
5
6 extern "C" {
7 #include "cmus/op.h"
8 #include "cmus/mixer.h"
9 }
10
11 const char* program_name = "CoreAudioRenderer";
12
CoreAudioRenderer()13 CoreAudioRenderer::CoreAudioRenderer()
14 {
15 op_pcm_ops.init();
16 op_mixer_ops.init();
17 }
18
~CoreAudioRenderer()19 CoreAudioRenderer::~CoreAudioRenderer()
20 {
21 Close();
22 op_pcm_ops.exit();
23 op_mixer_ops.exit();
24 }
25
Open()26 ErrorCode CoreAudioRenderer::Open()
27 {
28 int maxVol = 0;
29 op_mixer_ops.open(&maxVol);
30 return ErrorCode::Ok;
31 }
32
Close()33 void CoreAudioRenderer::Close()
34 {
35 op_mixer_ops.close();
36 }
37
Setup(int32_t & channels,int32_t & sampleRate,int32_t & bitsPerSample)38 ErrorCode CoreAudioRenderer::Setup(int32_t& channels, int32_t& sampleRate, int32_t& bitsPerSample)
39 {
40 op_pcm_ops.drop();
41 op_pcm_ops.close();
42
43 const sample_format_t sf = sf_bits(bitsPerSample) | sf_rate(sampleRate) | sf_channels(channels) | sf_signed(1);
44 op_pcm_ops.open(sf, nullptr);
45
46 return ErrorCode::Ok;
47 }
48
Write(const char * buf,uint32_t len)49 ErrorCode CoreAudioRenderer::Write(const char* buf, uint32_t len)
50 {
51 op_pcm_ops.write(buf, static_cast<int>(len));
52 op_pcm_wait(len);
53 return ErrorCode::Ok;
54 }
55
VolumeLevel() const56 int CoreAudioRenderer::VolumeLevel() const
57 {
58 int l, r;
59 op_mixer_ops.get_volume(&l, &r);
60 return (l + r) / 2;
61 }
62
SetVolumeLevel(int avg)63 void CoreAudioRenderer::SetVolumeLevel(int avg)
64 {
65 op_mixer_ops.set_volume(avg, avg);
66 }
67
Options() const68 std::vector<const BaseOption*> CoreAudioRenderer::Options() const
69 {
70 return {};
71 }
72