@@ -37,22 +37,25 @@ namespace {
37
37
void switch_audio_thread (void *) {
38
38
uint8_t *buffer1 = (uint8_t *)memalign (0x1000 , ALIGN_TO (buf_size, 0x1000 ));
39
39
uint8_t *buffer2 = (uint8_t *)memalign (0x1000 , ALIGN_TO (buf_size, 0x1000 ));
40
- uint8_t idx = 0 ;
40
+ uint32_t released_count ;
41
41
42
- AudioOutBuffer source_buffers[2 ], released_buffer;
42
+ AudioOutBuffer source_buffers[2 ], * released_buffer;
43
43
44
44
// Init audio buffers
45
- source_buffers[0 ].next = NULL ;
46
45
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 ;
51
46
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
+
56
59
for (;;) {
57
60
// A pretty bad way to close thread
58
61
if (instance->termStream ) {
@@ -62,15 +65,12 @@ void switch_audio_thread(void*) {
62
65
return ;
63
66
}
64
67
68
+ audoutWaitPlayFinish (&released_buffer, &released_count, U64_MAX);
65
69
instance->LockMutex ();
66
- instance->Decode ((uint8_t *)source_buffers[idx]. buffer , buf_size);
70
+ instance->Decode ((uint8_t *)released_buffer-> buffer , buf_size);
67
71
instance->UnlockMutex ();
72
+ audoutAppendAudioOutBuffer (released_buffer);
68
73
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 ;
74
74
}
75
75
}
76
76
@@ -101,6 +101,10 @@ NxAudio::~NxAudio() {
101
101
102
102
// Deleting thread
103
103
threadClose (&audio_thread);
104
+
105
+ // Terminating audio API
106
+ audoutStopAudioOut ();
107
+ audoutExit ();
104
108
}
105
109
106
110
void NxAudio::LockMutex () const {
0 commit comments