Skip to content

Commit 0f9095b

Browse files
RinnegatamanteGhabry
authored andcommitted
[NX] Fixed audio code.
1 parent 627e1ff commit 0f9095b

File tree

1 file changed

+21
-17
lines changed

1 file changed

+21
-17
lines changed

src/audio_switch.cpp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,25 @@ namespace {
3737
void switch_audio_thread(void*) {
3838
uint8_t *buffer1 = (uint8_t*)memalign(0x1000, ALIGN_TO(buf_size, 0x1000));
3939
uint8_t *buffer2 = (uint8_t*)memalign(0x1000, ALIGN_TO(buf_size, 0x1000));
40-
uint8_t idx = 0;
40+
uint32_t released_count;
4141

42-
AudioOutBuffer source_buffers[2], released_buffer;
42+
AudioOutBuffer source_buffers[2], *released_buffer;
4343

4444
// Init audio buffers
45-
source_buffers[0].next = NULL;
4645
source_buffers[0].buffer = buffer1;
47-
source_buffers[0].buffer_size = buf_size;
48-
source_buffers[0].data_size = buf_size;
49-
source_buffers[0].data_offset = 0;
50-
source_buffers[1].next = NULL;
5146
source_buffers[1].buffer = buffer2;
52-
source_buffers[1].buffer_size = buf_size;
53-
source_buffers[1].data_size = buf_size;
54-
source_buffers[1].data_offset = 0;
55-
47+
48+
for (int i = 0; i < 2; i++){
49+
source_buffers[i].next = NULL;
50+
source_buffers[i].buffer_size = buf_size;
51+
source_buffers[i].data_size = buf_size;
52+
source_buffers[i].data_offset = 0;
53+
instance->LockMutex();
54+
instance->Decode((uint8_t*)source_buffers[i].buffer, buf_size);
55+
instance->UnlockMutex();
56+
audoutAppendAudioOutBuffer(&source_buffers[i]);
57+
}
58+
5659
for(;;) {
5760
// A pretty bad way to close thread
5861
if (instance->termStream) {
@@ -62,15 +65,12 @@ void switch_audio_thread(void*) {
6265
return;
6366
}
6467

68+
audoutWaitPlayFinish(&released_buffer, &released_count, U64_MAX);
6569
instance->LockMutex();
66-
instance->Decode((uint8_t*)source_buffers[idx].buffer, buf_size);
70+
instance->Decode((uint8_t*)released_buffer->buffer, buf_size);
6771
instance->UnlockMutex();
72+
audoutAppendAudioOutBuffer(released_buffer);
6873

69-
if (R_FAILED(audoutPlayBuffer(&source_buffers[idx], &released_buffer))){
70-
Output::Error("An error occurred during audio playback.");
71-
}
72-
73-
idx = (idx + 1) % 2;
7474
}
7575
}
7676

@@ -101,6 +101,10 @@ NxAudio::~NxAudio() {
101101

102102
// Deleting thread
103103
threadClose(&audio_thread);
104+
105+
// Terminating audio API
106+
audoutStopAudioOut();
107+
audoutExit();
104108
}
105109

106110
void NxAudio::LockMutex() const {

0 commit comments

Comments
 (0)