Skip to content

Commit 7fc596a

Browse files
committed
removed logic from osx driver
1 parent e3e91b7 commit 7fc596a

23 files changed

+634
-3281
lines changed

src/framework/audio/driver/audio_driver.cmake

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,8 @@ include(GetPlatformInfo)
2323
if (OS_IS_WIN)
2424

2525
set(AUDIO_DRIVER_SRC
26-
#${CMAKE_CURRENT_LIST_DIR}/platform/win/winmmdriver.cpp
27-
#${CMAKE_CURRENT_LIST_DIR}/platform/win/winmmdriver.h
28-
#${CMAKE_CURRENT_LIST_DIR}/platform/win/wincoreaudiodriver.cpp
29-
#${CMAKE_CURRENT_LIST_DIR}/platform/win/wincoreaudiodriver.h
30-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudioclient.cpp
31-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudioclient.h
32-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapitypes.h
33-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver.cpp
34-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver.h
35-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/audiodeviceslistener.cpp
36-
# ${CMAKE_CURRENT_LIST_DIR}/platform/win/audiodeviceslistener.h
37-
${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver2.cpp
38-
${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver2.h
26+
${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver.cpp
27+
${CMAKE_CURRENT_LIST_DIR}/platform/win/wasapiaudiodriver.h
3928
)
4029

4130
if (MUSE_MODULE_AUDIO_ASIO)

src/framework/audio/driver/platform/osx/osxaudiodriver.h

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,22 @@ class OSXAudioDriver : public IAudioDriver
4444
void init() override;
4545

4646
std::string name() const override;
47+
48+
AudioDeviceID defaultDevice() const override;
49+
4750
bool open(const Spec& spec, Spec* activeSpec) override;
4851
void close() override;
4952
bool isOpened() const override;
5053

5154
const Spec& activeSpec() const override;
5255
async::Channel<Spec> activeSpecChanged() const override;
5356

54-
void resume() override;
55-
void suspend() override;
56-
57-
AudioDeviceID outputDevice() const override;
58-
bool selectOutputDevice(const AudioDeviceID& deviceId) override;
59-
bool resetToDefaultOutputDevice() override;
60-
async::Notification outputDeviceChanged() const override;
61-
6257
AudioDeviceList availableOutputDevices() const override;
6358
async::Notification availableOutputDevicesChanged() const override;
6459
void updateDeviceMap();
6560

66-
bool setOutputDeviceBufferSize(unsigned int bufferSize) override;
67-
async::Notification outputDeviceBufferSizeChanged() const override;
68-
69-
std::vector<unsigned int> availableOutputDeviceBufferSizes() const override;
70-
71-
bool setOutputDeviceSampleRate(unsigned int sampleRate) override;
72-
async::Notification outputDeviceSampleRateChanged() const override;
73-
74-
std::vector<unsigned int> availableOutputDeviceSampleRates() const override;
61+
std::vector<samples_t> availableOutputDeviceBufferSizes() const override;
62+
std::vector<sample_rate_t> availableOutputDeviceSampleRates() const override;
7563

7664
private:
7765
static void OnFillBuffer(void* context, OpaqueAudioQueue* queue, AudioQueueBuffer* buffer);
@@ -89,12 +77,7 @@ class OSXAudioDriver : public IAudioDriver
8977
async::Channel<Spec> m_activeSpecChanged;
9078
std::map<unsigned int, std::string> m_outputDevices = {}, m_inputDevices = {};
9179
mutable std::mutex m_devicesMutex;
92-
async::Notification m_outputDeviceChanged;
9380
async::Notification m_availableOutputDevicesChanged;
94-
AudioDeviceID m_deviceId;
95-
96-
async::Notification m_bufferSizeChanged;
97-
async::Notification m_sampleRateChanged;
9881
};
9982
}
10083
#endif // MUSE_AUDIO_OSXAUDIODRIVER_H

src/framework/audio/driver/platform/osx/osxaudiodriver.mm

Lines changed: 26 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
Spec format;
3939
AudioQueueRef audioQueue;
4040
Callback callback;
41-
void* mUserData;
4241
};
4342

4443
OSXAudioDriver::OSXAudioDriver()
@@ -49,8 +48,6 @@
4948

5049
initDeviceMapListener();
5150
updateDeviceMap();
52-
53-
m_deviceId = DEFAULT_DEVICE_ID;
5451
}
5552

5653
OSXAudioDriver::~OSXAudioDriver()
@@ -64,7 +61,12 @@
6461

6562
std::string OSXAudioDriver::name() const
6663
{
67-
return "MUAUDIO(OSX)";
64+
return "OSX";
65+
}
66+
67+
muse::audio::AudioDeviceID OSXAudioDriver::defaultDevice() const
68+
{
69+
return DEFAULT_DEVICE_ID;
6870
}
6971

7072
bool OSXAudioDriver::open(const Spec& spec, Spec* activeSpec)
@@ -77,9 +79,11 @@
7779
return 0;
7880
}
7981

80-
*activeSpec = spec;
81-
activeSpec->format = Format::AudioF32;
82-
m_data->format = *activeSpec;
82+
if (activeSpec) {
83+
*activeSpec = spec;
84+
}
85+
86+
m_data->format = spec;
8387
m_activeSpecChanged.send(m_data->format);
8488

8589
AudioStreamBasicDescription audioFormat;
@@ -88,29 +92,20 @@
8892
audioFormat.mFramesPerPacket = 1;
8993
audioFormat.mChannelsPerFrame = spec.output.audioChannelCount;
9094
audioFormat.mReserved = 0;
91-
switch (activeSpec->format) {
92-
case Format::AudioF32:
93-
audioFormat.mBitsPerChannel = 32;
94-
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat;
95-
break;
96-
case Format::AudioS16:
97-
audioFormat.mBitsPerChannel = 16;
98-
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
99-
break;
100-
}
95+
audioFormat.mBitsPerChannel = 32;
96+
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsFloat;
10197
audioFormat.mBytesPerPacket = audioFormat.mBitsPerChannel * spec.output.audioChannelCount / 8;
10298
audioFormat.mBytesPerFrame = audioFormat.mBytesPerPacket * audioFormat.mFramesPerPacket;
10399

104100
m_data->callback = spec.callback;
105-
m_data->mUserData = spec.userdata;
106101

107102
OSStatus result = AudioQueueNewOutput(&audioFormat, OnFillBuffer, m_data.get(), NULL, NULL, 0, &m_data->audioQueue);
108103
if (result != noErr) {
109104
logError("Failed to create Audio Queue Output, err: ", result);
110105
return false;
111106
}
112107

113-
audioQueueSetDeviceName(outputDevice());
108+
audioQueueSetDeviceName(m_data->format.deviceId);
114109

115110
AudioValueRange bufferSizeRange = { 0, 0 };
116111
UInt32 bufferSizeRangeSize = sizeof(AudioValueRange);
@@ -164,7 +159,9 @@
164159
return false;
165160
}
166161

167-
LOGI() << "Connected to " << outputDevice() << " with bufferSize " << bufferSizeOut << ", sampleRate " << spec.output.sampleRate;
162+
LOGI() << "Connected to " << m_data->format.deviceId
163+
<< " with bufferSize " << bufferSizeOut
164+
<< ", sampleRate " << spec.output.sampleRate;
168165

169166
return true;
170167
}
@@ -216,11 +213,6 @@
216213
return m_availableOutputDevicesChanged;
217214
}
218215

219-
muse::audio::AudioDeviceID OSXAudioDriver::outputDevice() const
220-
{
221-
return m_deviceId;
222-
}
223-
224216
void OSXAudioDriver::updateDeviceMap()
225217
{
226218
std::lock_guard lock(m_devicesMutex);
@@ -306,34 +298,7 @@
306298
m_availableOutputDevicesChanged.notify();
307299
}
308300

309-
bool OSXAudioDriver::setOutputDeviceBufferSize(unsigned int bufferSize)
310-
{
311-
if (m_data->format.output.samplesPerChannel == bufferSize) {
312-
return true;
313-
}
314-
315-
bool reopen = isOpened();
316-
close();
317-
m_data->format.output.samplesPerChannel = bufferSize;
318-
319-
bool ok = true;
320-
if (reopen) {
321-
ok = open(m_data->format, &m_data->format);
322-
}
323-
324-
if (ok) {
325-
m_bufferSizeChanged.notify();
326-
}
327-
328-
return ok;
329-
}
330-
331-
async::Notification OSXAudioDriver::outputDeviceBufferSizeChanged() const
332-
{
333-
return m_bufferSizeChanged;
334-
}
335-
336-
std::vector<unsigned int> OSXAudioDriver::availableOutputDeviceBufferSizes() const
301+
std::vector<samples_t> OSXAudioDriver::availableOutputDeviceBufferSizes() const
337302
{
338303
OSXAudioDeviceID osxDeviceId = this->osxDeviceId();
339304
AudioObjectPropertyAddress bufferFrameSizePropertyAddress = {
@@ -346,15 +311,15 @@
346311
UInt32 dataSize = sizeof(AudioValueRange);
347312
OSStatus rangeResult = AudioObjectGetPropertyData(osxDeviceId, &bufferFrameSizePropertyAddress, 0, NULL, &dataSize, &range);
348313
if (rangeResult != noErr) {
349-
logError("Failed to get device " + outputDevice() + " bufferFrameSize, err: ", rangeResult);
314+
logError("Failed to get device " + m_data->format.deviceId + " bufferFrameSize, err: ", rangeResult);
350315
return {};
351316
}
352317

353-
unsigned int minimum = std::max(static_cast<samples_t>(range.mMinimum), MINIMUM_BUFFER_SIZE);
354-
unsigned int maximum = std::min(static_cast<samples_t>(range.mMaximum), MAXIMUM_BUFFER_SIZE);
318+
samples_t minimum = std::max(static_cast<samples_t>(range.mMinimum), MINIMUM_BUFFER_SIZE);
319+
samples_t maximum = std::min(static_cast<samples_t>(range.mMaximum), MAXIMUM_BUFFER_SIZE);
355320

356-
std::vector<unsigned int> result;
357-
for (unsigned int bufferSize = maximum; bufferSize >= minimum;) {
321+
std::vector<samples_t> result;
322+
for (samples_t bufferSize = maximum; bufferSize >= minimum;) {
358323
result.push_back(bufferSize);
359324
bufferSize /= 2;
360325
}
@@ -364,34 +329,7 @@
364329
return result;
365330
}
366331

367-
bool OSXAudioDriver::setOutputDeviceSampleRate(unsigned int sampleRate)
368-
{
369-
if (m_data->format.output.sampleRate == sampleRate) {
370-
return true;
371-
}
372-
373-
bool reopen = isOpened();
374-
close();
375-
m_data->format.output.sampleRate = sampleRate;
376-
377-
bool ok = true;
378-
if (reopen) {
379-
ok = open(m_data->format, &m_data->format);
380-
}
381-
382-
if (ok) {
383-
m_sampleRateChanged.notify();
384-
}
385-
386-
return ok;
387-
}
388-
389-
async::Notification OSXAudioDriver::outputDeviceSampleRateChanged() const
390-
{
391-
return m_sampleRateChanged;
392-
}
393-
394-
std::vector<unsigned int> OSXAudioDriver::availableOutputDeviceSampleRates() const
332+
std::vector<sample_rate_t> OSXAudioDriver::availableOutputDeviceSampleRates() const
395333
{
396334
return {
397335
44100,
@@ -463,54 +401,14 @@
463401

464402
UInt32 OSXAudioDriver::osxDeviceId() const
465403
{
466-
AudioDeviceID deviceId = outputDevice();
404+
AudioDeviceID deviceId = m_data->format.deviceId;
467405
if (deviceId == DEFAULT_DEVICE_ID) {
468406
deviceId = defaultDeviceId();
469407
}
470408

471409
return QString::fromStdString(deviceId).toInt();
472410
}
473411

474-
bool OSXAudioDriver::selectOutputDevice(const AudioDeviceID& deviceId /*, unsigned int bufferSize*/)
475-
{
476-
if (m_deviceId == deviceId) {
477-
return true;
478-
}
479-
480-
bool reopen = isOpened();
481-
close();
482-
m_deviceId = deviceId;
483-
484-
bool ok = true;
485-
if (reopen) {
486-
ok = open(m_data->format, &m_data->format);
487-
}
488-
489-
if (ok) {
490-
m_outputDeviceChanged.notify();
491-
}
492-
493-
return ok;
494-
}
495-
496-
bool OSXAudioDriver::resetToDefaultOutputDevice()
497-
{
498-
return selectOutputDevice(DEFAULT_DEVICE_ID);
499-
}
500-
501-
async::Notification OSXAudioDriver::outputDeviceChanged() const
502-
{
503-
return m_outputDeviceChanged;
504-
}
505-
506-
void OSXAudioDriver::resume()
507-
{
508-
}
509-
510-
void OSXAudioDriver::suspend()
511-
{
512-
}
513-
514412
void OSXAudioDriver::logError(const std::string message, OSStatus error)
515413
{
516414
if (error == noErr) {
@@ -561,6 +459,6 @@ static OSStatus onDeviceListChanged(AudioObjectID inObjectID, UInt32 inNumberAdd
561459
void OSXAudioDriver::OnFillBuffer(void* context, AudioQueueRef, AudioQueueBufferRef buffer)
562460
{
563461
Data* pData = (Data*)context;
564-
pData->callback(pData->mUserData, (uint8_t*)buffer->mAudioData, buffer->mAudioDataByteSize);
462+
pData->callback((uint8_t*)buffer->mAudioData, buffer->mAudioDataByteSize);
565463
AudioQueueEnqueueBuffer(pData->audioQueue, buffer, 0, NULL);
566464
}

0 commit comments

Comments
 (0)